From dd10b12197308a141ece4a4280e6d591303c48a3 Mon Sep 17 00:00:00 2001 From: Teddy Middleton-Smith Date: Sun, 2 Feb 2025 02:02:33 +0000 Subject: [PATCH] Fix(UI): Reskin with milder colour theme and improved spacing in layout.. --- .../__pycache__/__init__.cpython-38.pyc | Bin 449 -> 422 bytes lib/__pycache__/__init__.cpython-38.pyc | Bin 418 -> 391 bytes .../argument_validation.cpython-38.pyc | Bin 18391 -> 18728 bytes lib/__pycache__/data_types.cpython-38.pyc | Bin 538 -> 511 bytes models/__pycache__/__init__.cpython-38.pyc | Bin 429 -> 402 bytes .../model_view_base.cpython-38.pyc | Bin 4705 -> 15760 bytes .../model_view_contact.cpython-38.pyc | Bin 1547 -> 1439 bytes .../model_view_home.cpython-38.pyc | Bin 1205 -> 1005 bytes models/model_view_services.py | 6 +- static/css/components/button.css | 10 +- static/css/components/overlay.css | 14 +- static/css/components/table.css | 17 ++- static/css/layouts/footer.css | 4 +- static/css/layouts/header.css | 17 ++- static/css/main.css | 36 +++-- static/css/pages/core/admin_home.css | 2 +- static/css/pages/core/contact.css | 10 +- static/css/pages/core/home.css | 9 ++ static/css/pages/core/services.css | 11 +- static/css/pages/store/product_categories.css | 2 +- static/css/pages/store/products.css | 2 +- static/css/sections/store.css | 12 +- static/css/themes/light.css | 39 ++--- static/dist/css/core_admin_home.bundle.css | 2 +- static/dist/css/core_contact.bundle.css | 10 +- static/dist/css/core_home.bundle.css | 9 ++ static/dist/css/core_services.bundle.css | 11 +- static/dist/css/main.bundle.css | 137 ++++++++++-------- static/dist/css/store_home.bundle.css | 12 +- .../css/store_product_categories.bundle.css | 14 +- .../css/store_product_permutations.bundle.css | 12 +- static/dist/css/store_stock_items.bundle.css | 12 +- static/dist/js/core_admin_home.bundle.js | 10 +- static/dist/js/core_contact.bundle.js | 10 +- static/dist/js/core_home.bundle.js | 10 +- static/dist/js/core_services.bundle.js | 10 +- .../legal_accessibility_statement.bundle.js | 10 +- static/dist/js/legal_license.bundle.js | 10 +- static/dist/js/legal_privacy_policy.bundle.js | 10 +- .../js/legal_retention_schedule.bundle.js | 10 +- static/dist/js/main.bundle.js | 122 +++------------- templates/layouts/layout.html | 8 +- templates/pages/core/_home.html | 4 +- templates/pages/core/_services.html | 6 +- 44 files changed, 320 insertions(+), 310 deletions(-) diff --git a/business_objects/__pycache__/__init__.cpython-38.pyc b/business_objects/__pycache__/__init__.cpython-38.pyc index 29012b58edfa1a6334f0e3b166d67cda4319138a..7bd0251471f432d5511dff7b217298112f0c647f 100644 GIT binary patch delta 124 zcmX@eyo{MIl$V!_0SI>e>rVg1u#wM%F(p7hBR@A)za%v!rBdG|Ke;qFHLs*tKcFZ- zy(lp^H#09?KRh)_KP5FcKfWNbsHE66C_q1{v^X;_wYWGwKPf9U8K^uyJ~J<~BtBlR Wpz;=nO>TZlX-=vgBhaSLAnO2hs4B7m delta 125 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 literal 18391 zcmeHPeQX_9m7ke6?`!yX{ zj;g5MXS3sZ^?uc-`Z1=UKA;BF7SxLBgKAK1Ma@%3)HbypwI1~$wL|Sht)z~sUFtg2 z%IZ$FTfGalin?Ci@T@i7tB$Fvx)D8n>ceV}dN*qQ>aO~Ly6FX5-K_Ru#VzW1*uF&# zp*^Vfs^YXIzZu1U?%ATcRlNsux29g(uilGm+tl6afI5iUcFs05@He7xn>vJRJ5=ek zHFVF?quxEbUTfA>b-qy@JGWRpzM!jz-e0}#(2?73Kk~j0Ru3IKbi3!>RaA9KaInO(;rx)kyjb`=X+U$&~HD~4<-eta|A-h%h*aF+N z*^ySE7LJ?B^J4hJ7g)mYJ^1y%&zEQ~=bKjGDksRVWc-_(wyCSkio0BBIzeH@e#XX# zta5{V;I6p-1ja~9Wzfzp7Xnw0H8UJ(TS4Kp70+@5M`bw+<8xog`Y&Ln^eE|D$;sU3 zgRH-rHXmaP+pQqK-NGK-z*fZ|4|eiMZzb>l8q`c*lG@Kf?PqD!n%N-J%&j=9mi}Wi zA7obSGv<;rpybPp9< z_61F5)&&+77V*Y)FR8k7Pfwn072_xLilwhZ|JuwwM)M~FQ_3bj)~KJ*GZ*R; zC+4R_xcrGzdVX5h=H_M^(-RNR_=~mK>gnd9nwh7Z9-26H{K2u)lOL}?F;QDsn3$cx z-%#ErvF%VUhZmlfySpB1`eP`plIxW0id}FjcAxFq1>1EB&VW6Ddf2i{&S0{Q@dbMu zdUE(@#&@=4g{d5=hd;z{zC01~pBo|1DTjhi)+Q4Lx$_x)YtsP}0<9pTxfRz4I!2%t zj(7ssT@m~o=26r$dK^L{qOP)SQCGR;oXRg3Wd$dm|7n$7E;jlgdgxPy^Ojy^Pf+yV z1Z9T;9e^@cBot)ycLUddBaJ@BdJz=F>tL7RK7SRjgC1Gu_huak>_Mz#Q^=DmL7Z<1 zTwL9owpzSGHd+DWPs$ntxEJ(t4fK5?UggVJB})kCTIGwf%5$l!*vmP2ULw|fBcMp= zvI4+l7oAH&=f|mZ@&JPJs3r^OeipG5jA-)0*k$lQC?!3tiO^6$hH`p4JGQYHU_oKj zTTrwzv-QT12PvGKX#gG)k`|K}Av1!vlk;|QURL;DLfJ}`A( zBnHCT?8|}Sc{LUZTq!y2E4j8PK#Vvp2Vrs{97z#jf8546^IXbUdWv8X{jh^=qYfQW zhXqIq_!w`KDlKDMsOKO91-y3`@NYxCNgJvyy8>Q-<&!&YfoHrX6^h~hBIIifQsH%Q zzhY0|`CkGJa(^KxLe2IBS^Zp)^FIsO>xt+A?ooe+3X_}-a=3Cb zb%ipXsi@n;3NL_02Ffl;<9VU6x)F_drv{_UPQNER-2tTPm7V_t20}*U^C#hc9iOI* z3&q)9%h7nR*zX@w*8&g3YZ>|ET8_R&);fcyg5Kp4_RlpPeI`I1Yof*xO*Npxi=3bd6x)Gm~K9!hT#(yu8VXw@#VwY24dna0fA;#?KV zw~CJG=DF%xvD%n#R$({{<9h94_w}K?kvt-b!In1OP%8@P43+f_thaUf9yZ_2q6=#T zW<=9hc~t<%KG_X6d}A{r!bC9&1?qoEn7CSpvr8DGK_Djlo7e{;T5zkN2Vka$ zTG53mPY2fZjaHO4v?5$u!Fx-zq78#Sr{KnlLrSe^`Vocd=s(N;P+R6;mggW$Swy9h zbDxvBmY8ulXiUV(puN5i{YS$NQ6a3u-aLB06&jO_n~B-SotYRHTz2CQ%4k(a4DF9_ zlYa*{`8UuFFwCK?xJw#|(0+|?F{sLLDg&tup)z>Nuqgwk(-pW72$wQc${;DjqtgYr zrDuuw?iF=^t)gxG`=QNz&r$%I4F)^-~7}vnKy)v#5 zQ2V|tj_XUQyB!EDRTApo`MdW` zoH=;gzLtHkWsi@0(JY0S2X)wDJc z0qp2}qs~C*zGLfM9x-X!NXiF@L0v9S+8gge+B-4vw|u8`d+<(eh7#%2v{9C(i{`kE z4UU$<$ig*x4n!Hgp)3pwVr1kwpdY=A(@Tf~V;GZ9j?p2GB6i==Z!i*X$b=+S&v^%7 zLEyCUAc%nUP8g+6j?r%lJ@!cuK<2Gso-5%9*#F@?SLVfI^qS0zFt*H5;#wD%O7I@& z&U+uX8pF25e`19n6)PM%17R8qzyn7QjJApfJJ4w zD}x(ckDOQZ3d9>2hiibCX0sbINwf^N+C=IRHAojP@!uh4(ceMG!AL?ReFJ*_1EKv- z-yl(UG*{>lOu{B3v;v*KM+MM%t%7Nw^O`(?1k-vDx|c-gdLYJdLQ{keWAsbn6t~%w z^Dc?dVIH0C6rtn1OVK=xH8CxLVG6bYF~$fGmquHq7>L(%?ntWEj~RAT%;l4RrPz(R zSLT&2^t~4(?k9WfMTJ471bc|P7%@cjS93+Xo){67v;DWR{5s%2#YQzxgULhMFk7J|mBR!ToXy!{xLI(S5w_iCoyWN@&Qa{fZW^hofNY%Hbe4{_ z^0vXjTyb_<%Ql^AoE+QR=>kCW*o{_cu67=o5L(S3dq#Z7%S7wT3PsClo@+UNbKGgD zaYw7mRN0q#Qaa=c$m+ISuaIf!}LX8gRkRwj8S$@nJ0 zhK9R`s32V{GbVDa7<@?f8`p}N159}-$KziX1`Q2tXm}k_})f4mLSN}E| ze?hOFC?%;5<`pBaD!bzN-^Yu6126XVv=@N=>Kol|t0%-#Xa_fM=6CoGx zx8v*&i3Ut!5Fkj7iGZL8AV~HnfxrXUB2G$=+BZO8&iXvM21p-pkg5QWIkNWre=^z( z*DBbx8PURs3jBDE{-un@`B+HvZ5fX!1H5P4CDvg?wUmS$)yHIt_KBhDlQYAU^quvI zfU(xQz-K1?fv}i2DHhFwD3Oxvg6D+a#36lFP7J>(b5~_9efS=D-B}*l2PI_SxgDo_ zDc5i?z~g?V3jJ0nwS>|op%fner&1a;i2?0va$K=hQVm`UN@|;=5WI$XZAqfFFD;jw z9%QPFcr7yow+CgEJ6?40tTJjRo|WSx(E=$16B~^~gg6@4qpsU-qS5K}vPksZy+XBt zm>X!mjJt9qyHlPmVj793yXrhuQ9B{Y?+Rgkb_NLq*ADA?5BOh_0$N^ec6R=gla0kj zBE6Ah_Z?fS^59a^57`msDGXPm+yulXdiF=z3uxSsJ~}+|#DI4-I(S{Zxp9An3j*ss1VaWDrj=IpvkcgOe=(#hEp9$P$IGt)4ma7+BanG z7iI2qSHv{XT90=LO#6*cdP^wLoa>1an%cM(VgV^#3DdqEW7@ZYPX^Oo2B!6Ff@#P# z0seeqqjAlw!cz!wt%N=7+7#EWOW@kq1=o0XmBh912?N(kf@`}+g|icKc(s;l8`89h z?xPgb2^NpB_ymhd7BR%=$Jwl*7}HO%I)!4WlnN~b4`b)FL54=J961?$p}~RhJc>?m zXbsS;A$-NQjsMr1VueF|c&At~+KCl)Y-);DPxM3FB(#YI^aAz*3#bAM$b$t`2`!)= zSU|8QU;!PL>?dg}xJF%$P(|z?4{tT^Bds?+&8q6k$xmv!nUa(Nzql%t)|3DZvRRFmdl`NhHhYuLK_2*JF-j?ptjO_@%`5jwB5{gU{Yw*gzVKK z6&Q5dI=$ox{nkxL6UcZk2gc$B`J*`njpO5OLE$nv}zaq z1Zs-?)#p7Bnq^^ns@@9%S2~ra5o8kI+eX(}^u4mB%jm*qYW0QYxyc!Pn z+2eGyQGJfJEQ>sgG?Q$Y7dEuZxcrZZwVy-98Z>qp&gZ*Mc@aer+l4cfb5g~_KQu+ZA6X|&gPetbl(7SKA>T>~}F^c>Ayt;6F!bP687{Fj8s2woA7 zfj2~{oNtb=!hCGDhQwxYYyFBfz4U$|1#tJ9p_mc=fJn(*};~*@@GdMNPcz{ z+OzoR2)3$&TpUE+zzLEqIVETm`;`0NJ#JaoYaH_Cxc3ADjC0sWuB@rxP|oAYMr*&;o} z6x+X9GF`5xPbqet$?Yd4Ah{e4Y=vd9ZPaAAFY4LU&s@yOYCFSS!Xc6^$k$*zE}kQq z&r2BnzsxZEQsG>)x!@l;aNsia_EMfrw8rp>Tw2^lI9QGl*5&S{MP|5*mNPkLOom-( zb#b+Bpl_A@EAeA~vm$3^sfs`5;EKH$oF>YhhX|xGC8tWL@P|8(!^S@~O1cE6sR*a3 z6go{FoTd`LLkpcIX{R_%C2^Wyly*5yB{)r`&}mAJiJYb$I8DiZ<1{fiTtYvcAVV{9 znzCTNWPju|<)NmN{l;mcGu7MCk8eSRWinvC5|gB04h-<$N)e28ILL%f&tWjAjKN3Y z?lOWpxVj&}S&rSPJnP~{<>2%rXo*AisUR0p`V=UIBVtMyQYj(O45eE_C`62VN&o$d z?AL^Qc%?^e{X!O@4>%uBg6)?X5NEj8)<1ybCBbC>r?@B6_XqTuQ1u@I+#gbdc^^y; zUVk5?h(HEh#(Wq+-W8zEuh#rwJVz5$9z`D=Ek}=nqN7Ks;QhPPD2C56T}#J*yh-IMJ(BO!FXqFy8FGKJ0tXHE$kAsB4BNqnX6}H>uJB8@$D6%Z zHx4_^=qh%a5$GtZ9kTAaHMj@3iaVoq+d=#|XnoCdVahm9JsxsH#(yh*7Ej_?g!c!R z7k7z!&*(3iy4oeJS=ssbWan@28LR7}IoO+H4j2-9TXz+!XP%l>1AxZeNM@yOJW*@b zM)2)={n`}0`R;FOe%5^Q$4U-9*QCFMzxW0afAKLe4`qGxS#it77=P)eCVZbi-h^+sCsE%fzM*H|(pDhw06SYHyD3-iKzRgL zOZFaV??8!k1@34lGcux~SQ3@2d^ajZbS*nNno>=fnmX=kXXj0vRCGU!k!a2QXmU&8 zezSTGV>-6Evz4EmRP$4lldT+>4J@Q_C=q_RDptTCng_Ow+Fv_3j^MeH{AC?-vhgAyKCMD{s$Mu+R6X` diff --git a/lib/__pycache__/data_types.cpython-38.pyc b/lib/__pycache__/data_types.cpython-38.pyc index 08437f7e0446290a6a4ef747421daabd8e5a2b06..2fe4c47a40ff0cc7ccb7365eb05f978fad05d40f 100644 GIT binary patch delta 84 zcmbQm@}HSEl$V!_0SI>e>rU_3$m`5#>8hWRpPQ;*lA4lIsqd1XT$-DjS5mAWP?Vou ml$e{FnU}5~o|>eelA4X#GKvXs3Jc*e%l$V!_0SI>e>rQ{Okyo41#!WvXKQ~psBsC?aQr{&%ximL5ucTN%peR4R pC^0uTGcR2~JT*x_B{ercz96xvq}VkmKtDG>B{ip5e{w&g902g79yR~~ delta 140 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 literal 4705 zcmb7ITX);W5e7(#A|X;Y%a-lL37v~&CYEF?b}ovYm?9yGHAN~UC|g@KD2QE2kZ@rZ zpj5H)OP$lVoc1T!k2$A*qJN=p-Pb6p28je34kg@p(>5Jsuv@16?xoEcw=PDOOm8FPR3%Y5!po41h9b)%7c&RU@pF|E*v4g)R)Ih~$boaVM1N?jHO z{$j&(qC*Wk4X$m@Y$tRAKUeT+uFgVcar-c5F#FIC+~D9W*EkC!=7qV61DzSww2^Ez zx8tzW+*UxD8*1y!iaMOhSFc$iyCBrG5({nav?F-aswSn>imaT6U32>Z&z-i1VDwu{%ymu}KQrs>0LBwpsax!D&V2hU9~1GyT2V|| ztuW%29eE5aLi4K78sAh3u6@WnR2o}%t?*ckhb+YJhn6(XOMZ;dih;lH9F!b8f{v*o zsD?XW8Jyn5D*+Er;SLXDioz74f`7!C;1wj!5^Rjd9xF6Xl9DHYkCAc7lfcJGO7awN z@D<55;1fiXJOeySCM2H(K1DK;PXnJJS;=P~D=bT|%qwJ4KF@*dDw&e}8t{2CE%|le zH^_|SH-W!JW+i_c_$_ip@^^s0OXeic0l!VIO8y@3_sKQMKLGwAnV0+y@C9;R^1HzE z8p>Me>&9OTd@O+mhc0{(#()dT$0)Ir_mHboSpOKv8p9BAb z+?IS5_?P58$sYrMLf)7BE8t&~4yKlTqg^XuLIv8cO~BhUM6|T ze*^p(`AG5#@GbJOMY;NOr%$?L!yWJz)Zc#|wkz61O@xi9$(;Jf63B@fvn_9^|An%^t0)K@C`jQ*Zl-z(&E+M+i6enBZ^@ViR)Ap;zU zDe0yrhM$REOR^FBLsSf0*J_81iYo=fsGElV!Z3@qN~N&f&`TtPI{F{lmJjhHW=AUe zi|saIj!ZmPIR^yMi%66=11c8W}&fZ$`=-jMZM7|uazrhW7ljL z1w-G`t424qEUjusVrHZ)4Old~$>pBqZjD6Jd}g&~ZtL}}GK^TO{-iF8$&topZA*t? zUB_lVxYLDUE9IhI1xHFRhm4ag z?ZC9>FKcbrYo%t={GK=!T*3{pb<_B6Oy;24b*fs0=2H1$qpmI4JY;L%>4Ry;6aMWU@2?2?l z9?8NcX}OJojb>oXUK|cg1hoTd4EJRREO~XPW$4AtYOPY+DC-TP`PRwc3nxLPTG$zW z;5f)O1CNP`z5oqOCZKirZZryZ8NNA#Qd}O{5vL}_!}TFk0|ls9!Q3}In4WlOm@?q?BAN=2SjL1|ATRMFF7UaI&?#;s}YKN=K%crNOOKpos zp&QX9J6P%*i&V2-0dH#<-CF~#1E`}qEs%T52BY+B@xlF-heAWejk2-XT+QGHu5T&w|L8e>II6N=&a2`({kP5 zlu=u~P<U%ATwXV3K>_a!~a3eoQRh z%oglJOYJi;7CDj2C{7BBB1MUJuU^`%mZXLqM``~;o`zd~O9e=z9I5BZxq2R>>JLz8 zpT}Ou-Y9>85;}^XD`xz;@<{ncsVgs(DDg^xma!-)f5)Sg{7ussv}!aC8)l;W_hHp* zdbuaLh08NCO-$#exiHi_F)e-|t&jRPR)9Gxin!D2L~Nwi=8hlT-Cy{l>Aln-*YXI= zw~!wWW1TFWST2kXGT&x*Y3p8YfwmUz-bm(2=Sf-P*T$qnmVnf3(~z9D&;%sYkIJ%Ii2)->5I)To@(J)z@Qhpo%+A2Ak*5 zasy5P$FYnOY(~jwyw`#?9!+5DOK{So6o1ic_hVFf39ju=su0<#vI{4M2Dmr|c0O4Z zsSZT2329l9#6;wl9KShnHbLvC&nwnI*w=P@#XML*qFVU@i%VVY~G}H88<8YB@O!GTPN<9fj z=jzRU$}}zC51`J0b6jYed3uxpo8fn^)jRm}agae@ zZ0^|-b0tZ&``jxE!ww691)NI)*<=)ZElzh*#@dffBRuW%<0(diObGU{9$?KTa6 HndE-~Fg*~m diff --git a/models/__pycache__/model_view_contact.cpython-38.pyc b/models/__pycache__/model_view_contact.cpython-38.pyc index 09301898e396e7b10f089ff530f9691d3c3bac4e..d1c47f6f77f23b8d5373baf8b029bf81093d7235 100644 GIT binary patch delta 740 zcmX|<&1(}u6u@U@lQ!9}m|E0Bw5aqDgs$L0gd)V6wijct6=4y^?am}kyB}p{Vhsd( zXfcO^Q1;+O@a)m6;K@J0`+)z52l34|I?KF$J8#~5zxUpryPqBZrRUiQ*0(?B!=KiL z-@VytPpf4tF>V+OgTZq+I{S2`>C#P2EGkXWMov-hfu;*^(BBdL7 zrlMFCGkn``V_km|N&YNnJc%!w%L^uxd|mv&57u~&1)d;!j=RCD!x}%aHIHDSv@fW)Rt62Hz#5_s< zag^=8VO&e18fe$iO+Yd!Y~o^gNR1F|Tf!K7?MCswdViux^j14&dUCClB~Dl$K#_;^ zSPg{fv$mqWSeTy#KqoB9)F>8<@L9&X?8N_pmjt@D4kH{V{4s`WB}K(^4ac12FMM;b AmH+?% delta 869 zcmYjPL2uJA6tH5j?quG~4ltlT6h;qQjMyD$5Ez+v|{5nIkUvy#K$17Kxak)^P><@i#Pn3myM8>pJ zIVN2yDx!L1cdCV76At*bV`7qy1EBTnJ$sRzv&UW?FeI9bgViVQwhE+j199j{_jMes z$#59BYl%PT1+iA{rcCyw*XxDxzPl5uffp@q>46B7#rFMn+ueNr=Is`L7woxSzwh=E z5k$((mW?L8ovj;7BkM}>CGc?|2Xz;Wpr0&FPHAcimRg#fnUrWln<*KyQ!6DYO<8K3 znNYp4anX2%=zJ#(4*6;lYtPp!oX4=@x!Fx*uT{#KH_V-(7x6Gw+Kc^BAWcY=TWZh` zq{Qrb`SKEk8-Ap6Cie157{j^r$uJ1`U? z5@ynADzAg*U*!w_h~P#+xB-qPW28HwWl)j=Rn7zff^?&0$eR$8+Z?J7HRQu8T9%xG zNzS3Ug$99&BiTf+c+H}y1z4`YP)M1uY5H+Kn=_lVo;@^|sGaSajS>Dq>43@YzDz(9 z{XtIS9x{@Mkk>B>`#}`_BV8mZ(iNGIHO49|t;!q&nbp7~KjaqJzw> z|IwwNvQW?u=r2Sw8h!A+-#g6A`#o>D?`+{BpSOXk_n+tB5G@LI__1g|;iH(d#ple% z`c9RoNFQ#Om^sY!;T-fKH7I_}b+dDTLDy;l$CR(|tle-2am3t&Q95&vR|ps1gv1+UujNV8h65%087Ya4E8_2{*`%X;hviB1I zUQWI&|9m>2aBM>F8WG6F9JxeLjybtP3+!6g=nQkptt-d1>)hrIlQ*uBh1}*C4VvW* zelx!~*z-=bP}&oG>MQScEDn{t6y9MHm3QPJcFH#0eF6VReO+}K3qoJ(K!hPG2#${H)zK$ztRu% Hey8;h$y<`g diff --git a/models/model_view_services.py b/models/model_view_services.py index 4a9557a8..ef64beb2 100644 --- a/models/model_view_services.py +++ b/models/model_view_services.py @@ -14,9 +14,13 @@ Data model for services view from models.model_view_base import Model_View_Base # from routes import bp_home # external +from typing import ClassVar class Model_View_Services(Model_View_Base): - # Attributes + FLAG_FAQ: ClassVar[str] = 'faq' + FLAG_SERVICES: ClassVar[str] = 'services' + FLAG_TECHNOLOGIES: ClassVar[str] = 'technologies' + @property def title(self): return 'Services' diff --git a/static/css/components/button.css b/static/css/components/button.css index 3243556c..de10fbba 100644 --- a/static/css/components/button.css +++ b/static/css/components/button.css @@ -6,15 +6,15 @@ button, .button-submit, input[type="submit"] { border-radius: 2vh; padding: 1vh 2vh 1vh 2vh; margin: 0.5vh; - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + color: var(--primary-colour); + border-color: var(--border-colour); } button.navContactUs { - border: 4px solid var(--c_purple_dark); + border: 4px solid var(--border-colour); background-color: var(--c_purple_pastel); - color: var(--c_purple_dark) !important; + /* color: var(--c_purple_dark) !important; */ border-radius: 2vh; width: 180px !important; } diff --git a/static/css/components/overlay.css b/static/css/components/overlay.css index 6ad963a6..7603f28c 100644 --- a/static/css/components/overlay.css +++ b/static/css/components/overlay.css @@ -10,7 +10,7 @@ right: 0; width: 100px; /* height: 50%; */ - background: var(--c_purple_pastel); + background: var(--background-colour); justify-content: right; align-items: right; align-self: right; @@ -33,7 +33,7 @@ max-height: 80%; } .hamburger { - border: 2px solid var(--c_purple_dark); + border: 2px solid var(--border-colour); border-radius: 4px; } .hamburger:first-child { @@ -52,14 +52,14 @@ justify-content: center; text-align: center; width: 100%; - color: var(--c_purple_dark); + /* color: var(--text-colour); */ font-weight: bold; font-size: 18px; /* height: 18px; */ } .hamburger > :hover { - background-color: var(--c_purple_light); - color: var(--c_purple_dark); + color: var(--background-colour); + background-color: var(--primary-colour); } .hamburger > * > * { width: 100%; @@ -73,10 +73,6 @@ padding-bottom: 4.5px; } -#overlayHamburger .row *:hover { - text-decoration: underline; -} - /* Confirm overlay */ #overlayConfirm { position: absolute; diff --git a/static/css/components/table.css b/static/css/components/table.css index a93db554..c589db94 100644 --- a/static/css/components/table.css +++ b/static/css/components/table.css @@ -9,7 +9,7 @@ thead, tbody { } th { - background-color: var(--c_purple_pastel); + background-color: transparent; } td { font-size: min(12px, calc(1vh * 3)); @@ -19,7 +19,7 @@ th, td { min-width: fit-content; } tr:not(:last-child) > td { - border-bottom: 1px dashed var(--c_purple_dark); + border-bottom: 1px dashed var(--border-colour); } td > table > tbody > tr > td { border: none !important; @@ -28,17 +28,18 @@ th.collapsed, td.collapsed { display: table-cell !important; } td.dirty { - background-color: var(--c_purple_dark); + background-color: var(--primary-colour); } td:not(.dirty) { /* color: var(--c_purple_dark); */ - background-color: var(--c_purple_pastel); + background-color: transparent; } tr { min-height: 1px; - border-bottom: 1px solid var(--c_purple_dark); - border-top: 1px solid var(--c_purple_dark); + border-bottom: 1px solid; + border-top: 1px solid; + border-color: var(--border-colour); background-color: transparent; } @@ -54,11 +55,11 @@ table button { } table button.active { - background-color: var(--c_purple_pastel); + background-color: var(--background-colour); } tr.delete, tr.delete > td { - background-color: red; + background-color: var(--c-red); } table div { diff --git a/static/css/layouts/footer.css b/static/css/layouts/footer.css index 8493cada..88fc749c 100644 --- a/static/css/layouts/footer.css +++ b/static/css/layouts/footer.css @@ -8,9 +8,11 @@ margin: 0; height: 8vh !important; overflow-y: auto; - background-color: var(--c_purple_pastel); + background-color: var(--accent-colour); + /* border-top-left-radius: 2.5vh; border-top-right-radius: 2.5vh; + */ position: absolute; /* top: 2.5vh; */ bottom: 0; diff --git a/static/css/layouts/header.css b/static/css/layouts/header.css index eb486b3b..32151af3 100644 --- a/static/css/layouts/header.css +++ b/static/css/layouts/header.css @@ -17,7 +17,7 @@ .topnav a, .topnav label, .topnav p, .topnav h1 { float: left; display: flex; - color: white; + /* color: white; */ text-align: center; text-decoration: none; width: 100%; @@ -26,8 +26,8 @@ justify-content: center; } .topnav a:hover { - background-color: var(--c_purple_light); - color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ } .topnav > .container { @@ -43,9 +43,11 @@ padding: 1vh; margin: 1vh; border-radius: 1vh; - /* background-color: var(--c_purple_light); */ - color: var(--c_purple_dark); - border: 2px solid white; + /* + background-color: var(--c_purple_light); + color: var(--c_purple_dark); + */ + border: 2px solid var(--border-colour); font-weight: bold; text-align: center; } @@ -58,7 +60,6 @@ .company-name { font-size: min(28px, calc(1vh * 7)); - color: white; } @media screen and (max-width: 450px) { .company-name { @@ -100,5 +101,5 @@ form.filter button.save, form.filter button.button-cancel { } form.filter button.save, form.filter button.button-cancel { margin-top: 0; - margin-bottom: 0; + margin-bottom: 1px; } \ No newline at end of file diff --git a/static/css/main.css b/static/css/main.css index b56c8995..829fedf0 100644 --- a/static/css/main.css +++ b/static/css/main.css @@ -1,14 +1,31 @@ :root { /* Declare global variables */ + /* --c_purple: #5B29FF; --c_purple_pastel: #D1D1FF; + --c_purple_lighter: #E8E1FF; --c_purple_light: #C6BDFF; --c_purple_dark: #4700B3; + */ + /* purple theme + - light https://coolors.co/palette/a172fd-a77afe-ac82fe-b691fe-c1a0fe-cbaffe-d6bffe-e0cefe-ebddfe-f5ecfe + - dark https://coolors.co/palette/310055-3c0663-4a0a77-5a108f-6818a5-8b2fc9-ab51e3-bd68ee-d283ff-dc97ff + */ + --c_purple_darker: #310055; + --c_purple_dark: #4A0A77; + --c_purple: #6818A5; + --c_purple_light: #CBAFFE; + --c_purple_lighter: #F5ECFE; + --c_blue: #0044FF; --c_blue_pastel: #B8E0FF; --c_blue_light: #73E8FF; --c_blue_dark: #003ADB; + /* --c_red: */ + --c-red: #FF0000; + --c_red_pastel: #FAE0E2; + --c_red_lighter: #FAE0E2; } html { @@ -16,14 +33,14 @@ html { } body { - background-color: var(--background-color); - color: var(--text-color); + background-color: var(--background-colour); + color: var(--text-colour); font-family: var(--font-family-base); font-family: Arial; padding: 0; margin: 0; border: 0; - background: linear-gradient(to bottom right, var(--c_purple), #dc2430); /* var(--c_purple_pastel); */ + background: linear-gradient(to bottom right, var(--c_purple_lighter), var(--c_red_lighter)); /* var(--c_purple); */ height: 100vh; max-height: 100%; } @@ -53,7 +70,8 @@ script, link { overflow-y: auto; overflow-x: hidden; position: absolute; - width: 98vw; + width: 98vw; + color: var(--text-colour); } .page-body > * { @@ -70,7 +88,7 @@ script, link { align-self: center; padding-top: 0.5vh; padding-bottom: 0.5vh; - color: var(--c_purple_dark); + /* color: var(--c_purple_dark); */ } #pageBody > .card { height: fit-content; @@ -160,7 +178,7 @@ img.header-logo { /* Add a card effect for articles */ .card { - background-color: var(--c_purple_pastel); + background-color: white; padding: 1vh; margin: 1vh; display: flex !important; @@ -250,7 +268,7 @@ img.header-logo { } .container-input > input, .container-input > textarea { - border: 2px solid var(--c_purple); + border: 2px solid var(--border-colour); padding: 1vh; } @@ -270,10 +288,10 @@ li { :not(input,textarea,select,button).dirty { - background-color: var(--c_purple_dark); + background-color: var(--accent-colour); } input.dirty, textarea.dirty, select.dirty { - border-color: var(--c_purple_dark); + border-color: var(--border-colour); } diff --git a/static/css/pages/core/admin_home.css b/static/css/pages/core/admin_home.css index 1a767856..6c3e5ccc 100644 --- a/static/css/pages/core/admin_home.css +++ b/static/css/pages/core/admin_home.css @@ -1,5 +1,5 @@ #pageBody > .card:first-of-type { - width: 80%; + width: min(80vw, 500px); } .container.row { diff --git a/static/css/pages/core/contact.css b/static/css/pages/core/contact.css index f97d13cb..eb9c030d 100644 --- a/static/css/pages/core/contact.css +++ b/static/css/pages/core/contact.css @@ -11,15 +11,19 @@ font-size: min(16px, calc(1vh * 4)); } +#pageBody > .card { + max-width: min(80vw, 1000px); +} + #email { /* min-width: 40vw; */ - width: 40vw; + width: min(40vw, 500px); } #name { - width: 50vw; + width: min(50vw, 625px); } #message { - width: 60vw; + width: min(60vw, 750px); } input, textarea { diff --git a/static/css/pages/core/home.css b/static/css/pages/core/home.css index 642e9327..81a874d3 100644 --- a/static/css/pages/core/home.css +++ b/static/css/pages/core/home.css @@ -12,6 +12,15 @@ margin-bottom: 35vh; } +.home-hero { + +} + +.home-hero-title { + font-size: 24px; + font-weight: normal; +} + .img-demo { max-width: 50%; min-width: 500px; diff --git a/static/css/pages/core/services.css b/static/css/pages/core/services.css index e65bae53..b899bf19 100644 --- a/static/css/pages/core/services.css +++ b/static/css/pages/core/services.css @@ -1,7 +1,16 @@ #pageBody > .card { padding-left: 5vw; padding-right: 5vw; - max-width: 80vw; + max-width: min(80vw, 1000px); +} + +#pageBody > .card.services { + max-width: min(80vw, 690px); +} +#pageBody > .card.technologies { +} +#pageBody > .card.faq { + max-width: min(80vw, 1250px); } #pageBody .card h1, diff --git a/static/css/pages/store/product_categories.css b/static/css/pages/store/product_categories.css index 7d80d358..06b3c1c1 100644 --- a/static/css/pages/store/product_categories.css +++ b/static/css/pages/store/product_categories.css @@ -52,7 +52,7 @@ } td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea { - border: 2px solid var(--c_purple); + border: 2px solid var(--border-colour); border-radius: 0.5vh; } diff --git a/static/css/pages/store/products.css b/static/css/pages/store/products.css index 9219df7c..f018cd70 100644 --- a/static/css/pages/store/products.css +++ b/static/css/pages/store/products.css @@ -46,7 +46,7 @@ } td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea { - border: 2px solid var(--c_purple); + border: 2px solid var(--border-colour); border-radius: 0.5vh; } diff --git a/static/css/sections/store.css b/static/css/sections/store.css index a8c1974b..963cccfb 100644 --- a/static/css/sections/store.css +++ b/static/css/sections/store.css @@ -14,15 +14,15 @@ } .buttonAddToBasket { - background-color: var(--c_blue_pastel); - color: var(--c_blue_dark); - border-color: var(--c_blue_dark); + background-color: var(--background-colour); + /* color: var(--c_blue_dark); */ + border-color: var(--border-colour); } #buttonCheckout, .buttonBuyNow { - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ + border-color: var(--border-colour); } .button-increment, .button-decrement { diff --git a/static/css/themes/light.css b/static/css/themes/light.css index e46bc225..f957477a 100644 --- a/static/css/themes/light.css +++ b/static/css/themes/light.css @@ -1,45 +1,48 @@ :root { - --background-color: #ffffff; - --text-color: #333333; - --primary-color: #007bff; - --secondary-color: #6c757d; - --success-color: #28a745; - --danger-color: #dc3545; - --warning-color: #ffc107; - --info-color: #17a2b8; - --light-color: #f8f9fa; - --dark-color: #343a40; - --border-color: #dee2e6; - --shadow-color: rgba(0, 0, 0, 0.1); + /* --background-colour: #ffffff; */ + --text-colour: var(--c_purple_darker); + --primary-colour: var(--c_purple_dark); + --secondary-colour: var(--c_purple); + --accent-colour: var(--c_purple_light); + --background-colour: var(--c_purple_lighter); + --success-colour: #28a745; + --danger-colour: #dc3545; + --warning-colour: #ffc107; + --info-colour: #17a2b8; + --light-colour: var(--c_purple_light); + --dark-colour: var(--c_purple_dark); + --border-colour: var(--c_purple_dark); + --shadow-colour: rgba(0, 0, 0, 0.1); - /* Header */ + /* Header * / --header-bg: #f8f9fa; --header-text: #333333; - /* Footer */ + /* Footer * / --footer-bg: #f8f9fa; --footer-text: #6c757d; - /* Navigation */ + /* Navigation * / --nav-bg: #ffffff; --nav-text: #333333; --nav-hover-bg: #f1f3f5; --nav-hover-text: #007bff; - /* Buttons */ + /* Buttons * / --Button-primary-bg: #007bff; --Button-primary-text: #ffffff; --Button-secondary-bg: #6c757d; --Button-secondary-text: #ffffff; - /* Forms */ + /* Forms * / --input-bg: #ffffff; --input-border: #ced4da; --input-text: #495057; --input-focus-border: #80bdff; - /* Cards */ + /* Cards * / --card-bg: #ffffff; --card-border: #dee2e6; --card-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + */ } \ No newline at end of file diff --git a/static/dist/css/core_admin_home.bundle.css b/static/dist/css/core_admin_home.bundle.css index 42c7bbca..8dd0ec06 100644 --- a/static/dist/css/core_admin_home.bundle.css +++ b/static/dist/css/core_admin_home.bundle.css @@ -1,5 +1,5 @@ #pageBody > .card:first-of-type { - width: 80%; + width: min(80vw, 500px); } .container.row { diff --git a/static/dist/css/core_contact.bundle.css b/static/dist/css/core_contact.bundle.css index b8d0d4ae..498dcbdd 100644 --- a/static/dist/css/core_contact.bundle.css +++ b/static/dist/css/core_contact.bundle.css @@ -11,15 +11,19 @@ font-size: min(16px, calc(1vh * 4)); } +#pageBody > .card { + max-width: min(80vw, 1000px); +} + #email { /* min-width: 40vw; */ - width: 40vw; + width: min(40vw, 500px); } #name { - width: 50vw; + width: min(50vw, 625px); } #message { - width: 60vw; + width: min(60vw, 750px); } input, textarea { diff --git a/static/dist/css/core_home.bundle.css b/static/dist/css/core_home.bundle.css index d0514284..88332580 100644 --- a/static/dist/css/core_home.bundle.css +++ b/static/dist/css/core_home.bundle.css @@ -12,6 +12,15 @@ margin-bottom: 35vh; } +.home-hero { + +} + +.home-hero-title { + font-size: 24px; + font-weight: normal; +} + .img-demo { max-width: 50%; min-width: 500px; diff --git a/static/dist/css/core_services.bundle.css b/static/dist/css/core_services.bundle.css index caa09437..5418e5f8 100644 --- a/static/dist/css/core_services.bundle.css +++ b/static/dist/css/core_services.bundle.css @@ -1,7 +1,16 @@ #pageBody > .card { padding-left: 5vw; padding-right: 5vw; - max-width: 80vw; + max-width: min(80vw, 1000px); +} + +#pageBody > .card.services { + max-width: min(80vw, 690px); +} +#pageBody > .card.technologies { +} +#pageBody > .card.faq { + max-width: min(80vw, 1250px); } #pageBody .card h1, diff --git a/static/dist/css/main.bundle.css b/static/dist/css/main.bundle.css index 4a91ab5c..9ccdf036 100644 --- a/static/dist/css/main.bundle.css +++ b/static/dist/css/main.bundle.css @@ -1,14 +1,31 @@ :root { /* Declare global variables */ + /* --c_purple: #5B29FF; --c_purple_pastel: #D1D1FF; + --c_purple_lighter: #E8E1FF; --c_purple_light: #C6BDFF; --c_purple_dark: #4700B3; + */ + /* purple theme + - light https://coolors.co/palette/a172fd-a77afe-ac82fe-b691fe-c1a0fe-cbaffe-d6bffe-e0cefe-ebddfe-f5ecfe + - dark https://coolors.co/palette/310055-3c0663-4a0a77-5a108f-6818a5-8b2fc9-ab51e3-bd68ee-d283ff-dc97ff + */ + --c_purple_darker: #310055; + --c_purple_dark: #4A0A77; + --c_purple: #6818A5; + --c_purple_light: #CBAFFE; + --c_purple_lighter: #F5ECFE; + --c_blue: #0044FF; --c_blue_pastel: #B8E0FF; --c_blue_light: #73E8FF; --c_blue_dark: #003ADB; + /* --c_red: */ + --c-red: #FF0000; + --c_red_pastel: #FAE0E2; + --c_red_lighter: #FAE0E2; } html { @@ -16,14 +33,14 @@ html { } body { - background-color: var(--background-color); - color: var(--text-color); + background-color: var(--background-colour); + color: var(--text-colour); font-family: var(--font-family-base); font-family: Arial; padding: 0; margin: 0; border: 0; - background: linear-gradient(to bottom right, var(--c_purple), #dc2430); /* var(--c_purple_pastel); */ + background: linear-gradient(to bottom right, var(--c_purple_lighter), var(--c_red_lighter)); /* var(--c_purple); */ height: 100vh; max-height: 100%; } @@ -53,7 +70,8 @@ script, link { overflow-y: auto; overflow-x: hidden; position: absolute; - width: 98vw; + width: 98vw; + color: var(--text-colour); } .page-body > * { @@ -70,7 +88,7 @@ script, link { align-self: center; padding-top: 0.5vh; padding-bottom: 0.5vh; - color: var(--c_purple_dark); + /* color: var(--c_purple_dark); */ } #pageBody > .card { height: fit-content; @@ -160,7 +178,7 @@ img.header-logo { /* Add a card effect for articles */ .card { - background-color: var(--c_purple_pastel); + background-color: white; padding: 1vh; margin: 1vh; display: flex !important; @@ -250,7 +268,7 @@ img.header-logo { } .container-input > input, .container-input > textarea { - border: 2px solid var(--c_purple); + border: 2px solid var(--border-colour); padding: 1vh; } @@ -270,10 +288,10 @@ li { :not(input,textarea,select,button).dirty { - background-color: var(--c_purple_dark); + background-color: var(--accent-colour); } input.dirty, textarea.dirty, select.dirty { - border-color: var(--c_purple_dark); + border-color: var(--border-colour); } @@ -288,15 +306,15 @@ button, .button-submit, input[type="submit"] { border-radius: 2vh; padding: 1vh 2vh 1vh 2vh; margin: 0.5vh; - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + color: var(--primary-colour); + border-color: var(--border-colour); } button.navContactUs { - border: 4px solid var(--c_purple_dark); + border: 4px solid var(--border-colour); background-color: var(--c_purple_pastel); - color: var(--c_purple_dark) !important; + /* color: var(--c_purple_dark) !important; */ border-radius: 2vh; width: 180px !important; } @@ -354,7 +372,7 @@ h5 { right: 0; width: 100px; /* height: 50%; */ - background: var(--c_purple_pastel); + background: var(--background-colour); justify-content: right; align-items: right; align-self: right; @@ -377,7 +395,7 @@ h5 { max-height: 80%; } .hamburger { - border: 2px solid var(--c_purple_dark); + border: 2px solid var(--border-colour); border-radius: 4px; } .hamburger:first-child { @@ -396,14 +414,14 @@ h5 { justify-content: center; text-align: center; width: 100%; - color: var(--c_purple_dark); + /* color: var(--text-colour); */ font-weight: bold; font-size: 18px; /* height: 18px; */ } .hamburger > :hover { - background-color: var(--c_purple_light); - color: var(--c_purple_dark); + color: var(--background-colour); + background-color: var(--primary-colour); } .hamburger > * > * { width: 100%; @@ -417,10 +435,6 @@ h5 { padding-bottom: 4.5px; } -#overlayHamburger .row *:hover { - text-decoration: underline; -} - /* Confirm overlay */ #overlayConfirm { position: absolute; @@ -439,7 +453,7 @@ thead, tbody { } th { - background-color: var(--c_purple_pastel); + background-color: transparent; } td { font-size: min(12px, calc(1vh * 3)); @@ -449,7 +463,7 @@ th, td { min-width: fit-content; } tr:not(:last-child) > td { - border-bottom: 1px dashed var(--c_purple_dark); + border-bottom: 1px dashed var(--border-colour); } td > table > tbody > tr > td { border: none !important; @@ -458,17 +472,18 @@ th.collapsed, td.collapsed { display: table-cell !important; } td.dirty { - background-color: var(--c_purple_dark); + background-color: var(--primary-colour); } td:not(.dirty) { /* color: var(--c_purple_dark); */ - background-color: var(--c_purple_pastel); + background-color: transparent; } tr { min-height: 1px; - border-bottom: 1px solid var(--c_purple_dark); - border-top: 1px solid var(--c_purple_dark); + border-bottom: 1px solid; + border-top: 1px solid; + border-color: var(--border-colour); background-color: transparent; } @@ -484,11 +499,11 @@ table button { } table button.active { - background-color: var(--c_purple_pastel); + background-color: var(--background-colour); } tr.delete, tr.delete > td { - background-color: red; + background-color: var(--c-red); } table div { @@ -513,7 +528,7 @@ table div { .topnav a, .topnav label, .topnav p, .topnav h1 { float: left; display: flex; - color: white; + /* color: white; */ text-align: center; text-decoration: none; width: 100%; @@ -522,8 +537,8 @@ table div { justify-content: center; } .topnav a:hover { - background-color: var(--c_purple_light); - color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ } .topnav > .container { @@ -539,9 +554,11 @@ table div { padding: 1vh; margin: 1vh; border-radius: 1vh; - /* background-color: var(--c_purple_light); */ - color: var(--c_purple_dark); - border: 2px solid white; + /* + background-color: var(--c_purple_light); + color: var(--c_purple_dark); + */ + border: 2px solid var(--border-colour); font-weight: bold; text-align: center; } @@ -554,7 +571,6 @@ table div { .company-name { font-size: min(28px, calc(1vh * 7)); - color: white; } @media screen and (max-width: 450px) { .company-name { @@ -596,7 +612,7 @@ form.filter button.save, form.filter button.button-cancel { } form.filter button.save, form.filter button.button-cancel { margin-top: 0; - margin-bottom: 0; + margin-bottom: 1px; } /* Footer */ @@ -608,9 +624,11 @@ form.filter button.save, form.filter button.button-cancel { margin: 0; height: 8vh !important; overflow-y: auto; - background-color: var(--c_purple_pastel); + background-color: var(--accent-colour); + /* border-top-left-radius: 2.5vh; border-top-right-radius: 2.5vh; + */ position: absolute; /* top: 2.5vh; */ bottom: 0; @@ -668,49 +686,52 @@ form.filter button.save, form.filter button.button-cancel { :root { - --background-color: #ffffff; - --text-color: #333333; - --primary-color: #007bff; - --secondary-color: #6c757d; - --success-color: #28a745; - --danger-color: #dc3545; - --warning-color: #ffc107; - --info-color: #17a2b8; - --light-color: #f8f9fa; - --dark-color: #343a40; - --border-color: #dee2e6; - --shadow-color: rgba(0, 0, 0, 0.1); + /* --background-colour: #ffffff; */ + --text-colour: var(--c_purple_darker); + --primary-colour: var(--c_purple_dark); + --secondary-colour: var(--c_purple); + --accent-colour: var(--c_purple_light); + --background-colour: var(--c_purple_lighter); + --success-colour: #28a745; + --danger-colour: #dc3545; + --warning-colour: #ffc107; + --info-colour: #17a2b8; + --light-colour: var(--c_purple_light); + --dark-colour: var(--c_purple_dark); + --border-colour: var(--c_purple_dark); + --shadow-colour: rgba(0, 0, 0, 0.1); - /* Header */ + /* Header * / --header-bg: #f8f9fa; --header-text: #333333; - /* Footer */ + /* Footer * / --footer-bg: #f8f9fa; --footer-text: #6c757d; - /* Navigation */ + /* Navigation * / --nav-bg: #ffffff; --nav-text: #333333; --nav-hover-bg: #f1f3f5; --nav-hover-text: #007bff; - /* Buttons */ + /* Buttons * / --Button-primary-bg: #007bff; --Button-primary-text: #ffffff; --Button-secondary-bg: #6c757d; --Button-secondary-text: #ffffff; - /* Forms */ + /* Forms * / --input-bg: #ffffff; --input-border: #ced4da; --input-text: #495057; --input-focus-border: #80bdff; - /* Cards */ + /* Cards * / --card-bg: #ffffff; --card-border: #dee2e6; --card-shadow: 0 0.125rem 0.25rem rgba(0, 0, 0, 0.075); + */ } /*# sourceMappingURL=main.bundle.css.map*/ \ No newline at end of file diff --git a/static/dist/css/store_home.bundle.css b/static/dist/css/store_home.bundle.css index 8c7baf61..549bbdfe 100644 --- a/static/dist/css/store_home.bundle.css +++ b/static/dist/css/store_home.bundle.css @@ -14,15 +14,15 @@ } .buttonAddToBasket { - background-color: var(--c_blue_pastel); - color: var(--c_blue_dark); - border-color: var(--c_blue_dark); + background-color: var(--background-colour); + /* color: var(--c_blue_dark); */ + border-color: var(--border-colour); } #buttonCheckout, .buttonBuyNow { - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ + border-color: var(--border-colour); } .button-increment, .button-decrement { diff --git a/static/dist/css/store_product_categories.bundle.css b/static/dist/css/store_product_categories.bundle.css index 4ace60b7..4ea06ef3 100644 --- a/static/dist/css/store_product_categories.bundle.css +++ b/static/dist/css/store_product_categories.bundle.css @@ -14,15 +14,15 @@ } .buttonAddToBasket { - background-color: var(--c_blue_pastel); - color: var(--c_blue_dark); - border-color: var(--c_blue_dark); + background-color: var(--background-colour); + /* color: var(--c_blue_dark); */ + border-color: var(--border-colour); } #buttonCheckout, .buttonBuyNow { - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ + border-color: var(--border-colour); } .button-increment, .button-decrement { @@ -109,7 +109,7 @@ } td > input, td > select, td > textarea, .container-input > input, .container-input > select, .container-input > textarea { - border: 2px solid var(--c_purple); + border: 2px solid var(--border-colour); border-radius: 0.5vh; } diff --git a/static/dist/css/store_product_permutations.bundle.css b/static/dist/css/store_product_permutations.bundle.css index c94b2239..e79e8182 100644 --- a/static/dist/css/store_product_permutations.bundle.css +++ b/static/dist/css/store_product_permutations.bundle.css @@ -14,15 +14,15 @@ } .buttonAddToBasket { - background-color: var(--c_blue_pastel); - color: var(--c_blue_dark); - border-color: var(--c_blue_dark); + background-color: var(--background-colour); + /* color: var(--c_blue_dark); */ + border-color: var(--border-colour); } #buttonCheckout, .buttonBuyNow { - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ + border-color: var(--border-colour); } .button-increment, .button-decrement { diff --git a/static/dist/css/store_stock_items.bundle.css b/static/dist/css/store_stock_items.bundle.css index 593ab181..967fb5ce 100644 --- a/static/dist/css/store_stock_items.bundle.css +++ b/static/dist/css/store_stock_items.bundle.css @@ -14,15 +14,15 @@ } .buttonAddToBasket { - background-color: var(--c_blue_pastel); - color: var(--c_blue_dark); - border-color: var(--c_blue_dark); + background-color: var(--background-colour); + /* color: var(--c_blue_dark); */ + border-color: var(--border-colour); } #buttonCheckout, .buttonBuyNow { - background-color: var(--c_purple_pastel); - color: var(--c_purple_dark); - border-color: var(--c_purple_dark); + background-color: var(--background-colour); + /* color: var(--c_purple_dark); */ + border-color: var(--border-colour); } .button-increment, .button-decrement { diff --git a/static/dist/js/core_admin_home.bundle.js b/static/dist/js/core_admin_home.bundle.js index b7f572da..6e543b60 100644 --- a/static/dist/js/core_admin_home.bundle.js +++ b/static/dist/js/core_admin_home.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 497: +/***/ 561: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 647: +/***/ 711: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 780: 0, -/******/ 564: 0 +/******/ 466: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(497))) +/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(561))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/core_contact.bundle.js b/static/dist/js/core_contact.bundle.js index f171a7ec..9d39c392 100644 --- a/static/dist/js/core_contact.bundle.js +++ b/static/dist/js/core_contact.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 206: +/***/ 278: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 647: +/***/ 711: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 775: 0, -/******/ 564: 0 +/******/ 466: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(206))) +/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(278))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/core_home.bundle.js b/static/dist/js/core_home.bundle.js index 81cafc5f..53bb722c 100644 --- a/static/dist/js/core_home.bundle.js +++ b/static/dist/js/core_home.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 469: +/***/ 805: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 647: +/***/ 711: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 664: 0, -/******/ 564: 0 +/******/ 466: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(469))) +/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(805))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/core_services.bundle.js b/static/dist/js/core_services.bundle.js index b26c5ab7..ea715ef1 100644 --- a/static/dist/js/core_services.bundle.js +++ b/static/dist/js/core_services.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 396: +/***/ 188: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 647: +/***/ 711: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 405: 0, -/******/ 564: 0 +/******/ 466: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [564], () => (__webpack_require__(647))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [564], () => (__webpack_require__(396))) +/******/ __webpack_require__.O(undefined, [466], () => (__webpack_require__(711))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [466], () => (__webpack_require__(188))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/legal_accessibility_statement.bundle.js b/static/dist/js/legal_accessibility_statement.bundle.js index 6a4f7c11..6412d1ae 100644 --- a/static/dist/js/legal_accessibility_statement.bundle.js +++ b/static/dist/js/legal_accessibility_statement.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 132: +/***/ 780: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 807: +/***/ 359: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 841: 0, -/******/ 830: 0 +/******/ 416: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(132))) +/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(780))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/legal_license.bundle.js b/static/dist/js/legal_license.bundle.js index 2c4f3a66..303e433f 100644 --- a/static/dist/js/legal_license.bundle.js +++ b/static/dist/js/legal_license.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 527: +/***/ 623: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 807: +/***/ 359: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 690: 0, -/******/ 830: 0 +/******/ 416: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(527))) +/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(623))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/legal_privacy_policy.bundle.js b/static/dist/js/legal_privacy_policy.bundle.js index 260c6aeb..fc95391f 100644 --- a/static/dist/js/legal_privacy_policy.bundle.js +++ b/static/dist/js/legal_privacy_policy.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 649: +/***/ 713: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 807: +/***/ 359: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 364: 0, -/******/ 830: 0 +/******/ 416: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(649))) +/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(713))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/legal_retention_schedule.bundle.js b/static/dist/js/legal_retention_schedule.bundle.js index 6faac6c5..1a032edc 100644 --- a/static/dist/js/legal_retention_schedule.bundle.js +++ b/static/dist/js/legal_retention_schedule.bundle.js @@ -2,7 +2,7 @@ /******/ "use strict"; /******/ var __webpack_modules__ = ({ -/***/ 954: +/***/ 930: /***/ (() => { // extracted by mini-css-extract-plugin @@ -10,7 +10,7 @@ /***/ }), -/***/ 807: +/***/ 359: /***/ (() => { // extracted by mini-css-extract-plugin @@ -94,7 +94,7 @@ /******/ // [resolve, reject, Promise] = chunk loading, 0 = chunk loaded /******/ var installedChunks = { /******/ 607: 0, -/******/ 830: 0 +/******/ 416: 0 /******/ }; /******/ /******/ // no chunk on demand loading @@ -144,8 +144,8 @@ /******/ // startup /******/ // Load entry module and return exports /******/ // This entry module depends on other loaded chunks and execution need to be delayed -/******/ __webpack_require__.O(undefined, [830], () => (__webpack_require__(807))) -/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [830], () => (__webpack_require__(954))) +/******/ __webpack_require__.O(undefined, [416], () => (__webpack_require__(359))) +/******/ var __webpack_exports__ = __webpack_require__.O(undefined, [416], () => (__webpack_require__(930))) /******/ __webpack_exports__ = __webpack_require__.O(__webpack_exports__); /******/ /******/ })() diff --git a/static/dist/js/main.bundle.js b/static/dist/js/main.bundle.js index b403cae4..19812ea3 100644 --- a/static/dist/js/main.bundle.js +++ b/static/dist/js/main.bundle.js @@ -167,8 +167,6 @@ function dom_createClass(e, r, t) { return r && dom_defineProperties(e.prototype function dom_toPropertyKey(t) { var i = dom_toPrimitive(t, "string"); return "symbol" == dom_typeof(i) ? i : i + ""; } function dom_toPrimitive(t, r) { if ("object" != dom_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != dom_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } - -// Module for DOM manipulation var DOM = /*#__PURE__*/function () { function DOM() { dom_classCallCheck(this, DOM); @@ -538,8 +536,6 @@ function api_createClass(e, r, t) { return r && api_defineProperties(e.prototype function api_toPropertyKey(t) { var i = api_toPrimitive(t, "string"); return "symbol" == api_typeof(i) ? i : i + ""; } function api_toPrimitive(t, r) { if ("object" != api_typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != api_typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); } - -// Module for API calls var api_API = /*#__PURE__*/function () { function API() { api_classCallCheck(this, API); @@ -896,7 +892,6 @@ var api_API = /*#__PURE__*/function () { const api = new API(); export default api; -Example of using the API document.addEventListener('DOMContentLoaded', () => { initializeApp(); setupEventListeners(); @@ -3270,7 +3265,7 @@ var StoreMixinPage = /*#__PURE__*/function () { ajaxData[flagForm] = convertForm2JSON(elForm); console.log('sending data to currency selector controller: '); console.log(ajaxData); ajaxJSONData('select currency', mapHashToController(hashStoreSelectCurrency), ajaxData, function() { window.location.reload() }, false); - let optionSelected = elSelector.options[elSelector.selectedIndex] + let optionSelected = elSelector.options[elSelector.selectedIndex] let textSelected = optionSelected.getAttribute(attrDataShort) }); @@ -3471,7 +3466,7 @@ var StoreMixinPage = /*#__PURE__*/function () { // goToPage(hashPageStoreBasket); let ajaxData = {}; ajaxData[keyBasket] = basket; - ajaxJSONData('checkout', mapHashToController(hashPageStoreBasket), ajaxData, null, false); + ajaxJSONData('checkout', mapHashToController(hashPageStoreBasket), ajaxData, null, false); */ this.router.navigateToHash(hashPageStoreBasket); }); @@ -4125,7 +4120,7 @@ var PageStoreManufacturingPurchaseOrders = /*#__PURE__*/function (_TableBasePage inputCostTotalLocalVatExcl.step = 0.01; DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatExcl, orderItem[flagCostTotalLocalVatExcl]); tdCostTotalLocalVatExcl.appendChild(inputCostTotalLocalVatExcl); - let tdCostTotalLocalVatIncl = document.createElement("td"); + let tdCostTotalLocalVatIncl = document.createElement("td"); tdCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl); let inputCostTotalLocalVatIncl = document.createElement("input"); inputCostTotalLocalVatIncl.classList.add(flagCostTotalLocalVatIncl); @@ -4133,13 +4128,13 @@ var PageStoreManufacturingPurchaseOrders = /*#__PURE__*/function (_TableBasePage inputCostTotalLocalVatIncl.step = 0.01; DOM.setElementAttributesValuesCurrentAndPrevious(inputCostTotalLocalVatIncl, orderItem[flagCostTotalLocalVatIncl]); tdCostTotalLocalVatIncl.appendChild(inputCostTotalLocalVatIncl); - let tdCostUnitLocalVatExcl = document.createElement("td"); + let tdCostUnitLocalVatExcl = document.createElement("td"); tdCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl); let divCostUnitLocalVatExcl = document.createElement("div"); divCostUnitLocalVatExcl.classList.add(flagCostUnitLocalVatExcl); DOM.setElementValuesCurrentAndPrevious(divCostUnitLocalVatExcl, orderItem[flagCostUnitLocalVatExcl]); tdCostUnitLocalVatExcl.appendChild(divCostUnitLocalVatExcl); - let tdCostUnitLocalVatIncl = document.createElement("td"); + let tdCostUnitLocalVatIncl = document.createElement("td"); tdCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl); let divCostUnitLocalVatIncl = document.createElement("div"); divCostUnitLocalVatIncl.classList.add(flagCostUnitLocalVatIncl); @@ -4253,10 +4248,10 @@ var PageStoreManufacturingPurchaseOrders = /*#__PURE__*/function (_TableBasePage let priceTotalLocalVatExcl = DOM.getElementValueCurrent(inputPriceTotalLocalVatExcl); let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input'); let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed); - let divPriceUnitLocalVatExcl = row.querySelector('td.' + flagPriceUnitLocalVatExcl + ' div'); + let divPriceUnitLocalVatExcl = row.querySelector('td.' + flagPriceUnitLocalVatExcl + ' div'); let priceUnitLocalVatExcl = quantityUsed == 0 ? 0 : priceTotalLocalVatExcl / quantityUsed; DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatExcl, priceUnitLocalVatExcl); - let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); + let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); let divPriceGrandTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatExcl + ' div'); let inputsPriceTotalLocalVatExcl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatExcl + ' input'); let priceGrandTotalLocalVatExcl = Array.from(inputsPriceTotalLocalVatExcl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0); @@ -4268,10 +4263,10 @@ var PageStoreManufacturingPurchaseOrders = /*#__PURE__*/function (_TableBasePage let priceTotalLocalVatIncl = DOM.getElementValueCurrent(inputPriceTotalLocalVatIncl); let inputQuantityUsed = row.querySelector('td.' + flagQuantityUsed + ' input'); let quantityUsed = DOM.getElementValueCurrent(inputQuantityUsed); - let divPriceUnitLocalVatIncl = row.querySelector('td.' + flagPriceUnitLocalVatIncl + ' div'); + let divPriceUnitLocalVatIncl = row.querySelector('td.' + flagPriceUnitLocalVatIncl + ' div'); let priceUnitLocalVatIncl = quantityUsed == 0 ? 0 : priceTotalLocalVatIncl / quantityUsed; DOM.setElementValuesCurrentAndPrevious(divPriceUnitLocalVatIncl, priceUnitLocalVatIncl); - let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); + let rowManufacturingPurchaseOrder = row.closest(idTableMain + ' > tbody > tr'); let divPriceGrandTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelector('td.' + flagPriceTotalLocalVatIncl + ' div'); let inputsPriceTotalLocalVatIncl = rowManufacturingPurchaseOrder.querySelectorAll('td.' + flagOrderItems + ' td.' + flagPriceTotalLocalVatIncl + ' input'); let priceGrandTotalLocalVatIncl = Array.from(inputsPriceTotalLocalVatIncl).reduce((acc, input) => acc + Number(DOM.getElementValueCurrent(input)), 0); @@ -4647,7 +4642,7 @@ var PageStoreProductPermutations = /*#__PURE__*/function (_TableBasePage) { DOM.setElementValuesCurrentAndPrevious(inputQuantityMax, rowJson[flagQuantityMax]); let inputQuantityStep = row.querySelector('td.' + flagCountUnitMeasurementPerQuantityStep + ' input'); DOM.setElementValuesCurrentAndPrevious(inputQuantityStep, rowJson[flagCountUnitMeasurementPerQuantityStep]); - row.querySelector('td.' + flagQuantityStock + ' input').value = rowJson[flagQuantityStock]; + row.querySelector('td.' + flagQuantityStock + ' input').value = rowJson[flagQuantityStock]; row.querySelector('td.' + flagQuantityMin + ' input').value = rowJson[flagQuantityMin]; row.querySelector('td.' + flagQuantityMax + ' input').value = rowJson[flagQuantityMax]; row.querySelector('td.' + flagCostLocal).innerHTML = rowJson[flagCostLocal]; @@ -6926,43 +6921,10 @@ function router_toPrimitive(t, r) { if ("object" != router_typeof(t) || !t) retu // import PageUserLogout from './pages/user/logout.js'; // import PageUserAccount from './pages/user/account.js'; -/* -import "./lib/common.js"; -import "./lib/constants.js"; -import "./lib/events.js"; -import "./lib/extras.js"; -// import "./DEPRECATED/init.js"; -import "./lib/local_storage.js"; -import "./lib/utils.js"; -import "./lib/validation.js"; -*/ - - -// Create a context for the pages -// const pagesContext = require.context('./pages', true, /\.js$/); - -/* -const pageModules = { - // Core - [hashPageHome]: () => import('./pages/core/home.js'), - [hashPageContact]: () => import('./pages/core/contact.js'), - [hashPageServices]: () => import('./pages/core/services.js'), - [hashPageAdminHome]: () => import('./pages/core/admin_home.js'), - // Legal - [hashPageAccessibilityStatement]: () => import('./pages/legal/accessibility_statement.js'), - [hashPageLicense]: () => import('./pages/legal/license.js'), - // Store - [hashPageStoreProductCategories]: () => import('./pages/store/product_categories.js'), - [hashPageStoreProductPermutations]: () => import('./pages/store/product_permutations.js'), - // [hashPageStoreProducts]: () => import('./pages/store/products.js'), - // User - // Add other pages here... -}; -*/ var Router = /*#__PURE__*/function () { function Router() { var _this = this; @@ -7236,10 +7198,10 @@ var Router = /*#__PURE__*/function () { console.log("pages: ", pages); return pages; } - addRoute(path, handler) { + addRoute(path, handler) { this.routes[path] = handler; } - handlePopState(event) { + handlePopState(event) { /* let url = window.location.pathname; url = url.split('?')[0]; @@ -7250,11 +7212,11 @@ var Router = /*#__PURE__*/function () { let pageCurrent = Router.getPageCurrent(); pageCurrent.initialize(true); } - navigateToHash(hash, data = null) { + navigateToHash(hash, data = null) { const url = API.getUrlFromHash(hash); this.navigateToUrl(url, data); } - leavePageCurrent() { + leavePageCurrent() { const pageCurrent = Router.getPageCurrent(); if (pageCurrent) pageCurrent.leave(); } @@ -7272,7 +7234,7 @@ var Router = /*#__PURE__*/function () { } throw new Error('Page not found: ' + hashPageCurrent); } - static parameteriseUrl(url, parameters) { + static parameteriseUrl(url, parameters) { if (!Validation.isEmpty(parameters)) { url += '%3F'; // '?'; let firstParameter = true; @@ -7301,7 +7263,7 @@ var Router = /*#__PURE__*/function () { // Optionally, handle 404 or redirect to a default route } } - handleRouteHash(hash) { + handleRouteHash(hash) { if (this.routes[hash]) { this.routes[hash](); } else { @@ -7326,7 +7288,7 @@ var Router = /*#__PURE__*/function () { static getQueryParams() { return Object.fromEntries(new URLSearchParams(window.location.search)); } - static updateQueryParams(params) { + static updateQueryParams(params) { const searchParams = new URLSearchParams(window.location.search); for (const [key, value] of Object.entries(params)) { searchParams.set(key, value); @@ -7341,12 +7303,10 @@ var Router = /*#__PURE__*/function () { DOM.loadPageBody(response.data); } }]); -}(); // Create and export a singleton instance +}(); var router = new Router(); -// import this for navigation -// Usage example (you can put this in your main.js or app.js) /* router.addRoute('/', () => { console.log('Home page'); @@ -7358,7 +7318,6 @@ router.addRoute('/about', () => { // Load about page content }); -// Example of how to use the router in other parts of your application export function setupNavigationEvents() { document.querySelectorAll('a[data-nav]').forEach(link => { link.addEventListener('click', (e) => { @@ -7370,32 +7329,8 @@ export function setupNavigationEvents() { } */ ;// CONCATENATED MODULE: ./static/js/app.js -/* -// Bundle css imports -import '../css/lib/reset.css'; -import '../css/lib/typography.css'; -import '../css/lib/variables.css'; -import '../css/lib/utils.css'; - -import '../css/layouts/header.css'; -import '../css/layouts/footer.css'; -import '../css/layouts/table-main.css' - -import '../css/components/button.css'; -import '../css/components/card.css'; -import '../css/components/dialog.css'; -import '../css/components/form.css'; -import '../css/components/modal.css'; -import '../css/components/navigation.css'; -import '../css/components/overlay.css'; - -import '../css/sections/store.css'; -*/ - -// Main entry point for the application -// import API from './api.js'; function app_typeof(o) { "@babel/helpers - typeof"; return app_typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, app_typeof(o); } function app_classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); } function app_defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, app_toPropertyKey(o.key), o); } } @@ -7419,35 +7354,24 @@ var App = /*#__PURE__*/function () { }, { key: "setupEventListeners", value: function setupEventListeners() { - // Global event listeners // document.addEventListener('click', this.handleGlobalClick.bind(this)); - // Add more global event listeners as needed } }, { key: "handleGlobalClick", - value: function handleGlobalClick(event) { - // Handle global click events - } + value: function handleGlobalClick(event) {} }, { key: "start", value: function start() { - // Additional startup logic this.initPageCurrent(); } }, { key: "initPageCurrent", value: function initPageCurrent() { - /* - _pageCurrent = Router.getPageCurrent(); - _pageCurrent.initialize(); - */ this.router.loadPageCurrent(); } }]); -}(); // Application instance +}(); var app = new App(); - -// DOM ready handler function domReady(fn) { if (document.readyState !== 'loading') { fn(); @@ -7455,16 +7379,10 @@ function domReady(fn) { document.addEventListener('DOMContentLoaded', fn); } } - -// Initialize and start the app when DOM is ready domReady(function () { app.initialize(); }); - -// Expose app to window for debugging (optional) window.app = app; - -// Export app if using modules /* harmony default export */ const js_app = ((/* unused pure expression or super */ null && (app))); })(); diff --git a/templates/layouts/layout.html b/templates/layouts/layout.html index 57c2647b..a6f7e513 100644 --- a/templates/layouts/layout.html +++ b/templates/layouts/layout.html @@ -339,9 +339,11 @@ {% endif %} {% if model.user.is_logged_in %} -
- -
+ {# +
+ +
+ #} diff --git a/templates/pages/core/_home.html b/templates/pages/core/_home.html index 97b3da5e..9c2999c0 100644 --- a/templates/pages/core/_home.html +++ b/templates/pages/core/_home.html @@ -5,8 +5,8 @@ {% block page_body %} -
-

We make websites, web apps, and desktop software

+
+

We make websites, web apps, and desktop software

{% set block_id = 'button_get_in_touch' %} {% include 'components/common/buttons/_buttons_save_cancel.html' %}
diff --git a/templates/pages/core/_services.html b/templates/pages/core/_services.html index 373e2fa4..7283f623 100644 --- a/templates/pages/core/_services.html +++ b/templates/pages/core/_services.html @@ -7,7 +7,7 @@ {% block page_body %} -
+

Services

Website, Web App, & Desktop Software Development

@@ -25,7 +25,7 @@
-
+

Technologies

We are most experienced with these technologies, in case you have any requirements.

@@ -82,7 +82,7 @@
-
+

FAQs

Websites, Web apps, and Software - what's the difference?