From 543276d766e00e4a21330ff7c51d39a7ac49199a Mon Sep 17 00:00:00 2001 From: Patrick Jentsch Date: Tue, 30 Apr 2024 16:00:06 +0200 Subject: [PATCH] A lot of generalization for better scaling and overview --- app/__init__.py | 6 +- app/models/user.py | 3 +- app/static/css/helpers.scss | 2 +- app/static/css/materialize/sidenav_fixed.css | 12 - app/static/css/spacing.css | 482 ------------------ .../nopaque_icons/nopaqueIcons-Regular.otf | Bin 5812 -> 0 bytes .../nopaque_icons/nopaqueIcons-Regular.woff | Bin 4428 -> 0 bytes .../nopaque_icons/nopaqueIcons-Regular.woff2 | Bin 3968 -> 0 bytes app/static/images/nopaque-logo+wordmark.png | Bin 0 -> 4936 bytes app/static/images/nopaque-wordmark.png | Bin 0 -> 3761 bytes app/static/js/app.js | 16 +- .../materialize => materialize/css}/fixes.css | 0 app/static/materialize/css/sidenav-fixed.css | 26 + .../css/sticky-footer.css} | 2 +- .../css/nopaque-icons.css} | 6 +- .../font}/NopaqueIcons-Regular.otf | Bin .../font}/NopaqueIcons-Regular.woff | Bin .../font}/NopaqueIcons-Regular.woff2 | Bin app/templates/_base/navbar.html.j2 | 52 +- app/templates/_base/roadmap.html.j2 | 36 -- app/templates/_base/sidenav.html.j2 | 91 ++-- app/templates/_base/styles.html.j2 | 13 +- docker-compose/docker-compose.traefik.yml | 7 +- 23 files changed, 138 insertions(+), 616 deletions(-) delete mode 100644 app/static/css/materialize/sidenav_fixed.css delete mode 100644 app/static/css/spacing.css delete mode 100644 app/static/fonts/nopaque_icons/nopaqueIcons-Regular.otf delete mode 100644 app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff delete mode 100644 app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff2 create mode 100644 app/static/images/nopaque-logo+wordmark.png create mode 100644 app/static/images/nopaque-wordmark.png rename app/static/{css/materialize => materialize/css}/fixes.css (100%) create mode 100644 app/static/materialize/css/sidenav-fixed.css rename app/static/{css/materialize/sticky_footer.css => materialize/css/sticky-footer.css} (100%) rename app/static/{css/nopaque_icons.css => nopaque-icons/css/nopaque-icons.css} (72%) rename app/static/{fonts/nopaque_icons => nopaque-icons/font}/NopaqueIcons-Regular.otf (100%) rename app/static/{fonts/nopaque_icons => nopaque-icons/font}/NopaqueIcons-Regular.woff (100%) rename app/static/{fonts/nopaque_icons => nopaque-icons/font}/NopaqueIcons-Regular.woff2 (100%) delete mode 100644 app/templates/_base/roadmap.html.j2 diff --git a/app/__init__.py b/app/__init__.py index 925e3b95..b70fbf35 100644 --- a/app/__init__.py +++ b/app/__init__.py @@ -1,4 +1,4 @@ -from apifairy import APIFairy +# from apifairy import APIFairy from config import Config from docker import DockerClient from flask import Flask @@ -14,7 +14,7 @@ from flask_sqlalchemy import SQLAlchemy from flask_hashids import Hashids -apifairy = APIFairy() +# apifairy = APIFairy() assets = Environment() db = SQLAlchemy() docker_client = DockerClient() @@ -45,7 +45,7 @@ def create_app(config: Config = Config) -> Flask: registry=app.config['NOPAQUE_DOCKER_REGISTRY'] ) - apifairy.init_app(app) + # apifairy.init_app(app) assets.init_app(app) db.init_app(app) hashids.init_app(app) diff --git a/app/models/user.py b/app/models/user.py index 341e49aa..95010d61 100644 --- a/app/models/user.py +++ b/app/models/user.py @@ -146,7 +146,8 @@ class User(HashidMixin, UserMixin, db.Model): @password.setter def password(self, password): - self.password_hash = generate_password_hash(password) + #pbkdf2:sha256 + self.password_hash = generate_password_hash(password, method='pbkdf2') @property def path(self) -> Path: diff --git a/app/static/css/helpers.scss b/app/static/css/helpers.scss index b7595c26..fce90a27 100644 --- a/app/static/css/helpers.scss +++ b/app/static/css/helpers.scss @@ -1,7 +1,7 @@ /* * Spacing */ -$spacing-shortcuts: ("margin": "mg", "padding": "pd"); +$spacing-shortcuts: ("margin": "m", "padding": "p"); $spacing-directions: ("top": "t", "right": "r", "bottom": "b", "left": "l"); $spacing-values: ("0": 0, "1": 0.25rem, "2": 0.5rem, "3": 0.75rem, "4": 1rem, "5": 1.5rem, "6": 3rem, "auto": auto); diff --git a/app/static/css/materialize/sidenav_fixed.css b/app/static/css/materialize/sidenav_fixed.css deleted file mode 100644 index 7cf789da..00000000 --- a/app/static/css/materialize/sidenav_fixed.css +++ /dev/null @@ -1,12 +0,0 @@ -/* - * The sidenav-fixed class is used which causes the sidenav to be fixed and open - * on large screens and hides to the regular functionality on smaller screens. - * In order to prevent the sidenav to overlap the content, the content (in our - * case header, main and footer) gets an offset equal to the width of the - * sidenav. - */ -@media only screen and (min-width : 993px) { - header, main, footer {padding-left: 300px;} - .modal:not(.bottom-sheet) {left: 300px;} - .navbar-fixed > nav {width: calc(100% - 300px)} -} diff --git a/app/static/css/spacing.css b/app/static/css/spacing.css deleted file mode 100644 index b88aafe2..00000000 --- a/app/static/css/spacing.css +++ /dev/null @@ -1,482 +0,0 @@ -/************************** - Utility Spacing Classes -**************************/ -.m-0 { - margin: 0 !important; -} - -.mt-0 { - margin-top: 0 !important; -} - -.mr-0 { - margin-right: 0 !important; -} - -.mb-0 { - margin-bottom: 0 !important; -} - -.ml-0 { - margin-left: 0 !important; -} - -.mx-0 { - margin-left: 0 !important; - margin-right: 0 !important; -} - -.my-0 { - margin-top: 0 !important; - margin-bottom: 0 !important; -} - -.m-1 { - margin: 0.25rem !important; -} - -.mt-1 { - margin-top: 0.25rem !important; -} - -.mr-1 { - margin-right: 0.25rem !important; -} - -.mb-1 { - margin-bottom: 0.25rem !important; -} - -.ml-1 { - margin-left: 0.25rem !important; -} - -.mx-1 { - margin-left: 0.25rem !important; - margin-right: 0.25rem !important; -} - -.my-1 { - margin-top: 0.25rem !important; - margin-bottom: 0.25rem !important; -} - -.m-2 { - margin: 0.5rem !important; -} - -.mt-2 { - margin-top: 0.5rem !important; -} - -.mr-2 { - margin-right: 0.5rem !important; -} - -.mb-2 { - margin-bottom: 0.5rem !important; -} - -.ml-2 { - margin-left: 0.5rem !important; -} - -.mx-2 { - margin-left: 0.5rem !important; - margin-right: 0.5rem !important; -} - -.my-2 { - margin-top: 0.5rem !important; - margin-bottom: 0.5rem !important; -} - -.m-3 { - margin: 0.75rem !important; -} - -.mt-3 { - margin-top: 0.75rem !important; -} - -.mr-3 { - margin-right: 0.75rem !important; -} - -.mb-3 { - margin-bottom: 0.75rem !important; -} - -.ml-3 { - margin-left: 0.75rem !important; -} - -.mx-3 { - margin-left: 0.75rem !important; - margin-right: 0.75rem !important; -} - -.my-3 { - margin-top: 0.75rem !important; - margin-bottom: 0.75rem !important; -} - -.m-4 { - margin: 1rem !important; -} - -.mt-4 { - margin-top: 1rem !important; -} - -.mr-4 { - margin-right: 1rem !important; -} - -.mb-4 { - margin-bottom: 1rem !important; -} - -.ml-4 { - margin-left: 1rem !important; -} - -.mx-4 { - margin-left: 1rem !important; - margin-right: 1rem !important; -} - -.my-4 { - margin-top: 1rem !important; - margin-bottom: 1rem !important; -} - -.m-5 { - margin: 1.5rem !important; -} - -.mt-5 { - margin-top: 1.5rem !important; -} - -.mr-5 { - margin-right: 1.5rem !important; -} - -.mb-5 { - margin-bottom: 1.5rem !important; -} - -.ml-5 { - margin-left: 1.5rem !important; -} - -.mx-5 { - margin-left: 1.5rem !important; - margin-right: 1.5rem !important; -} - -.my-5 { - margin-top: 1.5rem !important; - margin-bottom: 1.5rem !important; -} - -.m-6 { - margin: 3rem !important; -} - -.mt-6 { - margin-top: 3rem !important; -} - -.mr-6 { - margin-right: 3rem !important; -} - -.mb-6 { - margin-bottom: 3rem !important; -} - -.ml-6 { - margin-left: 3rem !important; -} - -.mx-6 { - margin-left: 3rem !important; - margin-right: 3rem !important; -} - -.my-6 { - margin-top: 3rem !important; - margin-bottom: 3rem !important; -} - -.m-auto { - margin: auto !important; -} - -.mt-auto { - margin-top: auto !important; -} - -.mr-auto { - margin-right: auto !important; -} - -.mb-auto { - margin-bottom: auto !important; -} - -.ml-auto { - margin-left: auto !important; -} - -.mx-auto { - margin-left: auto !important; - margin-right: auto !important; -} - -.my-auto { - margin-top: auto !important; - margin-bottom: auto !important; -} - -.p-0 { - padding: 0 !important; -} - -.pt-0 { - padding-top: 0 !important; -} - -.pr-0 { - padding-right: 0 !important; -} - -.pb-0 { - padding-bottom: 0 !important; -} - -.pl-0 { - padding-left: 0 !important; -} - -.px-0 { - padding-left: 0 !important; - padding-right: 0 !important; -} - -.py-0 { - padding-top: 0 !important; - padding-bottom: 0 !important; -} - -.p-1 { - padding: 0.25rem !important; -} - -.pt-1 { - padding-top: 0.25rem !important; -} - -.pr-1 { - padding-right: 0.25rem !important; -} - -.pb-1 { - padding-bottom: 0.25rem !important; -} - -.pl-1 { - padding-left: 0.25rem !important; -} - -.px-1 { - padding-left: 0.25rem !important; - padding-right: 0.25rem !important; -} - -.py-1 { - padding-top: 0.25rem !important; - padding-bottom: 0.25rem !important; -} - -.p-2 { - padding: 0.5rem !important; -} - -.pt-2 { - padding-top: 0.5rem !important; -} - -.pr-2 { - padding-right: 0.5rem !important; -} - -.pb-2 { - padding-bottom: 0.5rem !important; -} - -.pl-2 { - padding-left: 0.5rem !important; -} - -.px-2 { - padding-left: 0.5rem !important; - padding-right: 0.5rem !important; -} - -.py-2 { - padding-top: 0.5rem !important; - padding-bottom: 0.5rem !important; -} - -.p-3 { - padding: 0.75rem !important; -} - -.pt-3 { - padding-top: 0.75rem !important; -} - -.pr-3 { - padding-right: 0.75rem !important; -} - -.pb-3 { - padding-bottom: 0.75rem !important; -} - -.pl-3 { - padding-left: 0.75rem !important; -} - -.px-3 { - padding-left: 0.75rem !important; - padding-right: 0.75rem !important; -} - -.py-3 { - padding-top: 0.75rem !important; - padding-bottom: 0.75rem !important; -} - -.p-4 { - padding: 1rem !important; -} - -.pt-4 { - padding-top: 1rem !important; -} - -.pr-4 { - padding-right: 1rem !important; -} - -.pb-4 { - padding-bottom: 1rem !important; -} - -.pl-4 { - padding-left: 1rem !important; -} - -.px-4 { - padding-left: 1rem !important; - padding-right: 1rem !important; -} - -.py-4 { - padding-top: 1rem !important; - padding-bottom: 1rem !important; -} - -.p-5 { - padding: 1.5rem !important; -} - -.pt-5 { - padding-top: 1.5rem !important; -} - -.pr-5 { - padding-right: 1.5rem !important; -} - -.pb-5 { - padding-bottom: 1.5rem !important; -} - -.pl-5 { - padding-left: 1.5rem !important; -} - -.px-5 { - padding-left: 1.5rem !important; - padding-right: 1.5rem !important; -} - -.py-5 { - padding-top: 1.5rem !important; - padding-bottom: 1.5rem !important; -} - -.p-6 { - padding: 3rem !important; -} - -.pt-6 { - padding-top: 3rem !important; -} - -.pr-6 { - padding-right: 3rem !important; -} - -.pb-6 { - padding-bottom: 3rem !important; -} - -.pl-6 { - padding-left: 3rem !important; -} - -.px-6 { - padding-left: 3rem !important; - padding-right: 3rem !important; -} - -.py-6 { - padding-top: 3rem !important; - padding-bottom: 3rem !important; -} - -.p-auto { - padding: auto !important; -} - -.pt-auto { - padding-top: auto !important; -} - -.pr-auto { - padding-right: auto !important; -} - -.pb-auto { - padding-bottom: auto !important; -} - -.pl-auto { - padding-left: auto !important; -} - -.px-auto { - padding-left: auto !important; - padding-right: auto !important; -} - -.py-auto { - padding-top: auto !important; - padding-bottom: auto !important; -} diff --git a/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.otf b/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.otf deleted file mode 100644 index 37d2b481db591242a65a7b44e87dc49514f39f57..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5812 zcmd6rd013emcVZ!{)6e|yFVd_-}wAPJiBLTs$Y^kB_xgy=kk#y-1X)#616ArV3$9Z&`=TD2xd zs6l-{yaJc6njW!Hz3Co8;!vo+nwq7}5toR-mbwr1l#S`yG}Yd5nINBo9Jvt`%*T?K z!KDxC6E{hgo4n-5m}5F*zsY#1bRI;B1;j6ULKJtu*e>fY0&QAisB1(X zjmD$%u=gVAC>SRW-5ilcNGX~$B8w3#iXM?AC|a~^M3$mwM6MB;LTRFtBQlMifs;S% za}?5uV@KrCC|sQJf<9+k?xqbJ^E7Rmh#3(xH7VOP3HnT3dah=EN_uu$u0C&Lc(y)A zYsgQZwkcJgZH!Ofke{i|of$r3#*BHw63%<9dD=+(V@l14G9f+JxJjR_8ScDMp9c;L zgj)E_8PCnj((2Onc^TtceO6X}_9mS+4~9W6 zAU(=K+fXjrgf^g!C=Yg~4RQpU0eL1!DbT7x31F9rbSNDxHE2F)(_yF5pr(gD8&Npa z1W#IIK>5%%4g95oCL0-1Jk&RUHWONN!Dl%57ScSl1}#B}XcTD`a6+!qF_qk?@`cc9H*w zxc{dW)c$NuH4uRwBFTca%Z6F#Af~*L*$9_T`1(m8KPjA6e<_8vM2JNJ&_+YN;Sl3G z^jq}W&=BY~Xe!KZKGd~P4+9M~)HC$?&?$fK(NKT*M1$3DpdxsOXQ&Hi{tq4zl8TW? zBntV5M^I>)=o^E4p(5WuiG6ZuC_QJ~;aXbeI@A`~s?L>8b61Paqh7Ck9CEUA$EUh0q% zYCWx^yXe2uLkwa>jF^!yQift^hG7DjQA{B71T&fmVzvb&j1mQ&e`4Bb(dZqcNzk9z zMD_&R$#$`CvH!}RWV_i@?Az>V_8s{C#7(AV9Qjv9JE>V%iX?$(duBL{@8<@dk zE@5dI4maUo5>!XR1IR~V+|j*_m3-r2JQc4ZdwxwB%X13WE0f<$Kc!~ZVCB&Z_$*#1 z!a-Q!%f(Mi2GVf=_g}qdKCj_xzgh9|Y|qxO)?zUU*)_dpo^Au70|;x?%p{a@=Edln z`D(lk*HGpf>&{x`v9`8j$J(+oiY>*aQuVvBl+)vJcvXTbBTL9_$9B2vs%rUlzoTp> zlf6P!UhZ^O@Fa!2Mv-6=#R(p2tvf9>{FUoeIsMu;r)N8_eT8y?VYw3K*{LJjo%H7S`#LUAab2kD2B zgn}0ILdoMlNY8bjJa;a+J3c-+IX=F7{W+d=O7DHzbN)?!*FJkgmGT2JxjiO^Ox_%4 zv2U&4qF(vtCkgjdu$YpR0vv%QVR!+43NILklQA=dBqazdhL98rrs|sKKc2hexh6wM zw$9^w5&tvi^|-wbzUBi;mOOU1x4wGU&P%y+ug&XpdEdD$cX{kpW_Mzz+)?eQu2xpt zA*s)FdfbjGt4Hzj9jnLWG}#og&7NhsJ9ZXT7gj0Cu25dP*=)|c(bJ6x-=gDaZt&*T`sqSmt|_a zU6d@-Q{%4jRC`Zsm%Ht5htu8up4{oOyREKGO>&3F;qfXxc1Y?snq5wZ+vZltGFRx{ zv$-t}i(Qerz1&;oDRnDMU6jY-w5pfT7OTx-=S^C{b(y);Ty9EhkPF5(i*B{tX05ci ztsMrr*={nM9VWAKv%zY!o1Iqht7%{Dv%vvkq|td($o58s-tV~ne$4lB4W6$DoA2TDmd&=V%7OG`#QSREjg5)!69TkMf&h+ zZo=&TZy((1fAHYeoC#sG=S<-5WF3>YWxL*_3&0lgEAA#SF;$!Q>YKI%uDxB_DKavdezQeUOHn#G<2&UC|C`EE3{Jku;lNH3c!K&2+NM)083J$i^#VNlYy9=s zB0NbbBm+YhjwIlO;Rzq>K5(H=iKmbt97Lu-3W5YB)PnGo%NGtD>sB}UC!9zUs6iz@ z!A*_2aqr#@AxBM}8WlAaz9fG>bK%JKBcBYRq!KiQo+&}Lw<^0Jbyjwb!z-|nL>>1Y zcO1Wo(Gi?S7M*ZFHSI3kUnDC*V+WkkTubA@7Tyq@>7s~q4lSbsQ0i=2CLN2`6EQ6-fnQ6Dslgyde=x5_Eg0fg1{QEJo!9-{ zyHY3|t|im`{Zh0Xp}H_d3;sK`6keM`*7{wMS8N=Ppk?y0n$A>gvQyIsmol>ZVF-_( z&*4}SMq+6kc7(f5Pz+0+4>gsu{r0eU7i;9Yii+I-8)F<*W7xDOul7Yf% z?#RBDCLTXv4jUUY)r7r5cjPp0R+I7c=A4|(d>mmJU4CvBPrhNY4;b3jIL^0+!{e8N z0b5t#YuNJL>ms~zk7Qt3NNw@!m9=$OuE=-SR_-gVA+@+x-gKqt#+tM7??=`x(qWdc z^2kUMjM+_#>Lbs^E6yhTzVJ#@0Q-}NB;k|3_1Gn<1Rj1Z`M!`Oao-pI9TGEO@M*YW z91c!`NVu0sYsi>oQH0rU++ip&1mMNT;ZCXWIu+i8W5{&!%0Yf`dl;9L{$}^d=KYP; zJl^v;nMzg}GpWk0#tmu~#+pPX;j0(0vI8seLOgj~C6*E?kn%5BSqiGB@e{JsJwFb@ zx7+s?XRE5VRjaDJ4yTtt{UTLSVkzFC%xKF3I07KE+A`F#qG*%ZZZq?1uTtKf?z%dq zpcWum;wtr&smV4{L(M&~{L?R#nELA%n02X-V*0c8FUxSqj(3T8@3Xhe7Z#LE4ES}~ zONkMx!D+PYRF9va8QCyIYumBvYMZs1?|PduH|(*!uBxWvVkmc+tF%NZjN+eM@U4_+-Fp zcQ<6fYV!Jc0jpEz_nc4Xi}pG8x|LV(IU8RakhrCX&&1F`+1HiObm@SIL6iPrT5LE!H`b>();;68i6)#6x zO(vVksaSSsM`=-cp-BN`HravEs+WPK$J>FUy7siROkn9@-Ekhj0W7sxU2dRVSE;Ma zTkch)ZMWDh4uB*O(&g~DoQjSn%47EmzqCBc%}o|prQ7LJw7=(cyB%)3;`sJz?@mvR zM*%2yJ6uk;>N4$e!^s2a$c6`VE82>af_X3f*d(MTkR@+E8vPGnZKufMbi@YPG0z0MMob0MPvXhMWQb=>CFc zUf9FN-ah}C zc?zKGZEt8fxGw;&n@5wC0A0hrtt}ND0oXK`7Utyg?ZMk%#SF*H*d$t&`gs01LxrxLCw zyhlm_&`a}IWF!x-i|iCmAPEZ>4#U|G=BOKfFi*V^bj;C#FLE?zGCTh!xUfpYkI>GS-2W_sW!wzw5x@yS~!`mvOendX-W6iu9SV$R7} zx@R%v7!0D}zm0k|kqs!hE)vejPzBO9D_Om z)h43izGR5Wk#d3}5kx`bUXsOOz%L17AW9CS7=ma3)Fe*8Z+&rH5l@t~fZw9J;(Gs- z(|qguUV_V#2D3}VC3rk8#mTb%AFnoc;xtZ|-_**>-o@WAZ3hkkeg!}`H+QJ@Tpt;~lo2*|)qn`EfK#<{fWpfjyNkXhU>9fj&F(cl z@#l(ezwsgbImyaz-zF?(KWx8Ud~TKE?3(&0LmaLpweq^M$}NQ@adGmJ;@2um>V5`o zHWdDtef%lh?Xx!Er46?lXp-5$sQ1qv8a=9V^b_9~K8aJghyM|TA6foKB)tC{#&_6; diff --git a/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff b/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff deleted file mode 100644 index 7dbe2a8be067ffa6183c661007ccf67317da9771..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4428 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 diff --git a/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff2 b/app/static/fonts/nopaque_icons/nopaqueIcons-Regular.woff2 deleted file mode 100644 index 47d012757fc2d1e4175aec08a2fdc25e47644134..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3968 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 aP;Me#!Se`CZr{tDNR^1Vxa1%s0000(?3@w+ diff --git a/app/static/images/nopaque-logo+wordmark.png b/app/static/images/nopaque-logo+wordmark.png new file mode 100644 index 0000000000000000000000000000000000000000..64d19252b0f06e02810ab5e890a8ba05275ff249 GIT binary patch literal 4936 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 b!$JNZ>6}&$esLVT00000NkvXXu0mjf>Th)r literal 0 HcmV?d00001 diff --git a/app/static/js/app.js b/app/static/js/app.js index 57dd7ca1..e69fc3ed 100644 --- a/app/static/js/app.js +++ b/app/static/js/app.js @@ -150,14 +150,14 @@ nopaque.App = class App { M.CharacterCounter.init(document.querySelectorAll('input[data-length]:not(.no-autoinit), textarea[data-length]:not(.no-autoinit)')); // Header navigation "more" Dropdown. - M.Dropdown.init( - document.querySelector('#nav-more-dropdown-trigger'), - { - alignment: 'right', - constrainWidth: false, - coverTrigger: false - } - ); + // M.Dropdown.init( + // document.querySelector('#nav-more-dropdown-trigger'), + // { + // alignment: 'right', + // constrainWidth: false, + // coverTrigger: false + // } + // ); // Manual modal M.Modal.init( diff --git a/app/static/css/materialize/fixes.css b/app/static/materialize/css/fixes.css similarity index 100% rename from app/static/css/materialize/fixes.css rename to app/static/materialize/css/fixes.css diff --git a/app/static/materialize/css/sidenav-fixed.css b/app/static/materialize/css/sidenav-fixed.css new file mode 100644 index 00000000..116ad4b9 --- /dev/null +++ b/app/static/materialize/css/sidenav-fixed.css @@ -0,0 +1,26 @@ +/* + * Fixed HTML Structure: https://materializecss.com/sidenav.html#variations + * The sidenav-fixed class is used which causes the sidenav to be fixed and open + * on large screens and hides to the regular functionality on smaller screens. + * In order to prevent the sidenav to overlap the content, the content (header, main and footer) + * gets an offset equal to the width of the sidenav. + */ +header, main, footer { + padding-left: 300px; +} + +@media only screen and (max-width : 992px) { + header, main, footer { + padding-left: 0; + } +} + +.navbar-fixed > nav { + width: calc(100% - 300px); +} + +@media only screen and (max-width : 992px) { + .navbar-fixed > nav { + width: 100%; + } +} diff --git a/app/static/css/materialize/sticky_footer.css b/app/static/materialize/css/sticky-footer.css similarity index 100% rename from app/static/css/materialize/sticky_footer.css rename to app/static/materialize/css/sticky-footer.css index 3a992ccc..cbe032f3 100644 --- a/app/static/css/materialize/sticky_footer.css +++ b/app/static/materialize/css/sticky-footer.css @@ -9,8 +9,8 @@ */ body { display: flex; - flex-direction: column; min-height: 100vh; + flex-direction: column; } main { diff --git a/app/static/css/nopaque_icons.css b/app/static/nopaque-icons/css/nopaque-icons.css similarity index 72% rename from app/static/css/nopaque_icons.css rename to app/static/nopaque-icons/css/nopaque-icons.css index 94ef391c..37407c13 100644 --- a/app/static/css/nopaque_icons.css +++ b/app/static/nopaque-icons/css/nopaque-icons.css @@ -2,9 +2,13 @@ font-family: 'Nopaque Icons'; font-style: normal; font-weight: 400; + /* For IE6-8 */ + /* src: url("../font/NopaqueIcons-Regular.eot"); */ src: local('nopaque Icons'), local('NopaqueIcons-Regular'), - url(../fonts/nopaque_icons/NopaqueIcons-Regular.otf) format('opentype'); + url("../font/NopaqueIcons-Regular.woff2") format('woff2'), + url("../font/NopaqueIcons-Regular.woff") format('woff'), + url("../font/nopaque_icons/NopaqueIcons-Regular.otf") format('opentype'); } .nopaque-icons { diff --git a/app/static/fonts/nopaque_icons/NopaqueIcons-Regular.otf b/app/static/nopaque-icons/font/NopaqueIcons-Regular.otf similarity index 100% rename from app/static/fonts/nopaque_icons/NopaqueIcons-Regular.otf rename to app/static/nopaque-icons/font/NopaqueIcons-Regular.otf diff --git a/app/static/fonts/nopaque_icons/NopaqueIcons-Regular.woff b/app/static/nopaque-icons/font/NopaqueIcons-Regular.woff similarity index 100% rename from app/static/fonts/nopaque_icons/NopaqueIcons-Regular.woff rename to app/static/nopaque-icons/font/NopaqueIcons-Regular.woff diff --git a/app/static/fonts/nopaque_icons/NopaqueIcons-Regular.woff2 b/app/static/nopaque-icons/font/NopaqueIcons-Regular.woff2 similarity index 100% rename from app/static/fonts/nopaque_icons/NopaqueIcons-Regular.woff2 rename to app/static/nopaque-icons/font/NopaqueIcons-Regular.woff2 diff --git a/app/templates/_base/navbar.html.j2 b/app/templates/_base/navbar.html.j2 index 7dc49dd8..cadfe423 100644 --- a/app/templates/_base/navbar.html.j2 +++ b/app/templates/_base/navbar.html.j2 @@ -1,36 +1,48 @@ + +{# {% if current_user.is_authenticated %} +{% endif %} #} diff --git a/app/templates/_base/roadmap.html.j2 b/app/templates/_base/roadmap.html.j2 deleted file mode 100644 index eaf428ac..00000000 --- a/app/templates/_base/roadmap.html.j2 +++ /dev/null @@ -1,36 +0,0 @@ - diff --git a/app/templates/_base/sidenav.html.j2 b/app/templates/_base/sidenav.html.j2 index 59d79047..efcfedce 100644 --- a/app/templates/_base/sidenav.html.j2 +++ b/app/templates/_base/sidenav.html.j2 @@ -1,29 +1,41 @@ diff --git a/app/templates/_base/styles.html.j2 b/app/templates/_base/styles.html.j2 index 1328ea8b..b5936f0a 100644 --- a/app/templates/_base/styles.html.j2 +++ b/app/templates/_base/styles.html.j2 @@ -1,11 +1,10 @@ {% if current_user.is_authenticated %} - + {% endif %} - - - - - + + + + {%- assets filters='pyscss', output='gen/app.%(version)s.css', @@ -13,5 +12,5 @@ 'css/helpers.scss', 'css/style.css' %} - + {%- endassets %} diff --git a/docker-compose/docker-compose.traefik.yml b/docker-compose/docker-compose.traefik.yml index 5c428aba..d3e4fbb9 100644 --- a/docker-compose/docker-compose.traefik.yml +++ b/docker-compose/docker-compose.traefik.yml @@ -6,6 +6,7 @@ networks: services: nopaque: environment: + - NOPAQUE_PROXY_FIX_ENABLED=True - NOPAQUE_PROXY_FIX_X_FOR=1 - NOPAQUE_PROXY_FIX_X_HOST=1 - NOPAQUE_PROXY_FIX_X_PORT=1 @@ -15,16 +16,14 @@ services: - "traefik.docker.network=traefik" - "traefik.enable=true" ### ### - - "traefik.http.middlewares.http-nopaque-headers.headers.customrequestheaders.X-Forwarded-Proto=http" - "traefik.http.routers.http-nopaque.entrypoints=http" - - "traefik.http.routers.http-nopaque.middlewares=http-nopaque-headers, redirect-to-https@file" + - "traefik.http.routers.http-nopaque.middlewares=redirect-to-https@file" # Replace with your domain - "traefik.http.routers.http-nopaque.rule=Host(``)" ### ### ### ### - - "traefik.http.middlewares.https-nopaque-headers.headers.customrequestheaders.X-Forwarded-Proto=https" - "traefik.http.routers.https-nopaque.entrypoints=https" - - "traefik.http.routers.https-nopaque.middlewares=hsts-header@file, https-nopaque-headers" + - "traefik.http.routers.https-nopaque.middlewares=hsts-header@file" # Replace with your domain - "traefik.http.routers.https-nopaque.rule=Host(``)" - "traefik.http.routers.https-nopaque.tls.certresolver="