From 304838e4206fe2a79ed6e36f561b60aedec6558e Mon Sep 17 00:00:00 2001 From: TanveerAhmed Date: Mon, 20 Nov 2023 17:41:16 +0500 Subject: [PATCH 01/17] style footer and header --- .DS_Store | Bin 0 -> 8196 bytes tutorindigo/.DS_Store | Bin 0 -> 6148 bytes tutorindigo/plugin.py | 9 +- tutorindigo/templates/.DS_Store | Bin 0 -> 6148 bytes tutorindigo/templates/indigo/.DS_Store | Bin 0 -> 6148 bytes tutorindigo/templates/indigo/lms/.DS_Store | Bin 0 -> 6148 bytes .../templates/indigo/lms/static/.DS_Store | Bin 0 -> 6148 bytes .../indigo/lms/static/images/logo.png | Bin 1681 -> 2244 bytes .../indigo/lms/static/images/profile.svg | 27 ++ .../indigo/lms/static/sass/.DS_Store | Bin 0 -> 6148 bytes .../lms/static/sass/courseware/_discover.scss | 17 + .../lms/static/sass/dashbord/_dashbord.scss | 15 + .../indigo/lms/static/sass/extra/_footer.scss | 99 +++++ .../indigo/lms/static/sass/extra/_header.scss | 124 ++++++ .../indigo/lms/static/sass/partials/.DS_Store | Bin 0 -> 6148 bytes .../lms/static/sass/partials/lms/.DS_Store | Bin 0 -> 6148 bytes .../sass/partials/lms/theme/_extras.scss | 19 + .../sass/partials/lms/theme/_variables.scss | 9 +- .../templates/indigo/lms/static/templates | 1 - .../templates/indigo/lms/templates/.DS_Store | Bin 0 -> 6148 bytes .../indigo/lms/templates/course.html | 49 +++ .../lms/templates/courseware/courses.html | 80 ++++ .../indigo/lms/templates/dashboard.html | 403 ++++++++++++++++++ .../indigo/lms/templates/footer.html | 92 ++-- .../indigo/lms/templates/header/brand.html | 37 ++ .../indigo/lms/templates/header/header.html | 110 +++++ .../header/navbar-authenticated.html | 59 +++ .../templates/header/navbar-logo-header.html | 61 +++ .../header/navbar-not-authenticated.html | 73 ++++ .../lms/templates/header/user_dropdown.html | 48 +++ .../lms/templates/static_templates/blog.html | 16 + .../templates/static_templates/donate.html | 16 + .../lms/templates/static_templates/help.html | 16 + .../templates/static_templates/privacy.html | 17 + 34 files changed, 1336 insertions(+), 61 deletions(-) create mode 100644 .DS_Store create mode 100644 tutorindigo/.DS_Store create mode 100644 tutorindigo/templates/.DS_Store create mode 100644 tutorindigo/templates/indigo/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/static/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/static/images/profile.svg create mode 100644 tutorindigo/templates/indigo/lms/static/sass/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/static/sass/courseware/_discover.scss create mode 100644 tutorindigo/templates/indigo/lms/static/sass/dashbord/_dashbord.scss create mode 100644 tutorindigo/templates/indigo/lms/static/sass/extra/_footer.scss create mode 100644 tutorindigo/templates/indigo/lms/static/sass/extra/_header.scss create mode 100644 tutorindigo/templates/indigo/lms/static/sass/partials/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/static/sass/partials/lms/.DS_Store delete mode 120000 tutorindigo/templates/indigo/lms/static/templates create mode 100644 tutorindigo/templates/indigo/lms/templates/.DS_Store create mode 100644 tutorindigo/templates/indigo/lms/templates/course.html create mode 100644 tutorindigo/templates/indigo/lms/templates/courseware/courses.html create mode 100644 tutorindigo/templates/indigo/lms/templates/dashboard.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/brand.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/header.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/navbar-authenticated.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/navbar-logo-header.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/navbar-not-authenticated.html create mode 100644 tutorindigo/templates/indigo/lms/templates/header/user_dropdown.html create mode 100644 tutorindigo/templates/indigo/lms/templates/static_templates/blog.html create mode 100644 tutorindigo/templates/indigo/lms/templates/static_templates/donate.html create mode 100644 tutorindigo/templates/indigo/lms/templates/static_templates/help.html create mode 100644 tutorindigo/templates/indigo/lms/templates/static_templates/privacy.html diff --git a/.DS_Store b/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..e0736f608a5522a56c5c6c83c0747ab8b320053f GIT binary patch literal 8196 zcmeHMU60a06uq;HZV}z^;3mA7H1QP?#q}e;uq>z~t|r@!KBz&y7OLG2fg&10(r5h- z{smwCCH@zm^xT=*4HS9MMAztCGWSfU_spH1Lfc!2NL0q1YeYFBa?lvF8Mq%9@8`B; zYi48m1*`&A0jq#j;BQa>_iQ$2#eHAzwcaXV75Fa|;Om2n z##lBOYgCsGI8_1wQy5l;KI#C)aSfIY#u^nBbL#3r7^*NOhR}5EcR3tbHW+KvbP}3Q z!ekbvLJ=xEc&-X3QPya^Rlq8+tN_>U8ER9XniMY7@11%e+pR#h5WzpH9kjwXW#|!| zr(Jr0(MNQjYV?pE0}FISN#3UfFN4@RxHT|6_yR@rmZHUM;?fdpPvxr9J#aia0MDl| z!TOM3ZPI|=p$+j);uYRaw2_PRNvtzSaK9$F=V%|9cBo2wYL!D8C0DuDOK>uXX(L+~ zpAh{%GDS36%%qh3IH#n8$S&f>SZRS*oQP)y=i|3jEFZ;?8mt0!;Ct9EV4fa6SJdbs z$;Fuj>+_2AG z9rv59Cw_O*$X?u)Vbt`)?obi@P8T81pZZ}(PAYO7c1DWp=^akmNjI{&>2$kvEAN(W zZ_o1X^v?BS-n~(}Ih&=Ot;<*M?l)csN1=R=qk{=^i=Yd7`^59n|AcmLykQu~kk2vC zn3+?3PVQyU9bNt|x%*eI2i}n(YjpJgCiUOy~aiA*4fhT_$qVFP62WMj7(xLYK%&J zX)sER<3#hgpOiNHIR8B(Srk*N*Vkm4XGJ*}oQc*}`^wdh*YUdEyXaUgqB1V$#VDS= z;kTDc<;gl9C$F+}G49>mSF(&Vna(sJo1_SN`#O^owHT?noD`ZHnF`PM{Bdu4x!fJ@ z^@HJ~-BmwWKE6Nb2M>l1S1aGUb?5Gr7vm54iBz943z)!ut?h=zHLxzeo_|e?kI_u# zO7d4(GuI4p-Hf0KhhiwIR>H3d{*C zh88P>sDTMX1sbZbR}5k3C=YC0Xt6SA=p^jrL)e~$y`c!*JK7I)IEm1pOPvBvfw}@) z=C#M?|Fd7;|LY|8<`i%W{8tKy_Ca(o!j$aU+L#=lwE_G+oQ>lugPMZG9>+SvNAWgX a8|nhi07HwFL6pGUkARlJB~F3As=#-*KcENz literal 0 HcmV?d00001 diff --git a/tutorindigo/plugin.py b/tutorindigo/plugin.py index ec754aab6..7c324fa1a 100644 --- a/tutorindigo/plugin.py +++ b/tutorindigo/plugin.py @@ -25,8 +25,13 @@ # To remove all links, run: # tutor config save --set INDIGO_FOOTER_NAV_LINKS=[] --set INDIGO_FOOTER_LEGAL_LINKS=[] "FOOTER_NAV_LINKS": [ - {"title": "About", "url": "/about"}, - {"title": "Contact", "url": "/contact"}, + {"title": "About Us", "url": "/about"}, + {"title": "Blog", "url": "/blog"}, + {"title": "Donate", "url": "/donate"}, + {"title": "Terms of Sevice", "url": "/tos"}, + {"title": "Privacy Policy", "url": "/privacy"}, + {"title": "Help", "url": "/help"}, + {"title": "Contact Us", "url": "/contact"}, ], "FOOTER_LEGAL_LINKS": [ {"title": "Terms of service", "url": "/tos"}, diff --git a/tutorindigo/templates/.DS_Store b/tutorindigo/templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..9204272a209e99e80be1ce0135d9ed36246e2dc6 GIT binary patch literal 6148 zcmeHK%}T>S5Z-NTn^J@v6nb3nTC`g04_;!d2d_r-pi&!CYA|L?o0>x@`apVHtb{=W89qt+l<+aF$)y2PzCdi;5_Pr6pW_`$kjatOrAyZ z-jAfe5KWH%$N=tLnT0H70oeTh;YV={y7{3*y?!p%Psc;E*KhtX3dc#a`OXW)(n`5v zRjitI>pjTSOM1yJ$LJ}RFY2ushwoF# zs=+zD!XUS%XKxfoG9G|`o->anBnF59VqjSqFz1_9Tb2dUI*0*c;MW+y^Fe?jItDY1 z>gWKYS^&TjxRt;de;YAJ7<3F~8es;6>r_CU%1w*GbvpQkiE|8Q8g)A3rupFJ$=q}( zTsiI-aO;ME#Es6h%u8%vkaVh@C*XMGs2K8dfR zGrNlk0gswsW|G-&cXnpm{o3s8Fvhq$>h3UBW{g>&h&daY1%mUabCNTb0wBjVWXBJs z4g$umi7JK<=JTU*lyFUnnIH}b>crIU9 zSuI*ct7P4Ik23X=b~1|H_V5Nrmr{oQwBPoxf?nDxub;{&X$Mhnr~-m+4_t1qgQzQ0 zSB|1?tYSSqVcC}5Dp$tiM*W~F>W7U_gX3x*wFbZY#0G6ru)QgZ9AO?tmWn{pdWmah!U!LBX7$63Il>s~-1Sq0o zFw>}x4ro*f0EpK}CD2!we?Wl-K*wOF5iB5FhXU$QZb}SpY6q^vVcs$RnMNJXxOy_I zW1h@Sg~Cng!G&^X+|fuaF+dE=GLYB9GUorYpX>kGAQ}+^#K6B|fESux(}gXW+&Z^8 v%(Vja9ux)rGL7FM&{3%vd@&VQK$U=9UjzL(ffvM&Yz(d@NX0jdDtpc9s6uo+`CPCjB2CQ?Qe{Ei5&k79Kl z#3~rcwgIbvRp7TNKzp|gDP-WI7xyn63VZ0wZ)`mELT=DcJ7%xH1f4iavwHniOiY%h z%G1uYGwWP>x2o@De%4Eye)pW7PLzs+kG>zAMq$5Io!?hU=0{1`WkS>rG3DYcO4_R5 zRK28~GS|}sPQ|ITs*8icMq{fc8`~ShnjGw`)oXISu{j)8oQ0*8-Q(6>e4nUCo;3(O zpV;OMe!vrU3Tt}sx=E~(8;ldDf~tgY4;_eEp%BtfCmbpCjQ&}nF^qqr)0mZgQ46K8 z_Gc6@d%~IhGc&dmwF+1Teo6s4A0#@VYcSWyM+Y{11wbrem<{_>6p14Zx(0KNID#fL z6;V@#xnc-S$G9|kuEAWRrh_n-4`IG6%ne2G*YW+5(?PfzZEF><3KSKX)Q?rF|A*h- z|BEF1WEHRq{3``S>A*W^;*v~l9a$XJT8VyzPDXjTMy6n6$}xAS6fdH);h3ZjqH8eM Sh!HgVBfv7)#wzfm3cLdt0H$96 literal 0 HcmV?d00001 diff --git a/tutorindigo/templates/indigo/lms/static/.DS_Store b/tutorindigo/templates/indigo/lms/static/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..edf114388acef0f68375d58e7ae3e6c3f383e63a GIT binary patch literal 6148 zcmeHKPfx-y6o175Lt?@~6D}rAyb?uF6XRtf9=tlE2Q|0};^JHh8*(5dJL`w>>L>B* z=zDE7BI;3z=}TUJ?fbL!{j#WdUP^&A9n3m$Z#GZp*zQ>;IXdwO4Z z@_S(rC)MgR%gkBXT;9&xMf=>n7DG4jl0n??`lmEH5+d~9`ksFrbcU_c;+}{SFNivQ znGm!)7;<(JL~Su_h(XkjWv;6ncEK*RO6Ae0UfZnj`bKqJ;iK(ZwZb>*TjO!TURqh( zIc(j8w~@G)6#~PZOv-}BH+aC#ME!SeKMF2`6ZXK5y97%&X{1p~A{a8yD^W2#VY9oWb#0HTFvDcGkU2g>0Z9gV3% z^q?@6il|bVzG5(yj&`o&9F3_$l@3f_KA3(p(>D|*-;U4cG8~wr(6ojD!@wj1b81+k z^MC*Q`~PH;85sr)1OJKvW;NYr1546p>r`=c)^gMfR1%6y70MKB^l>aZbQG6SrJ#>f X2hq`(Dntv4`4Nybn8q;hs|>sX$8xI^ literal 0 HcmV?d00001 diff --git a/tutorindigo/templates/indigo/lms/static/images/logo.png b/tutorindigo/templates/indigo/lms/static/images/logo.png index dc473a8375cfe5b8821350e11f043204393a3b42..f6e37b5d430941b32f3ccd0c167a59a46ef52f53 100644 GIT binary patch literal 2244 zcmXw4dpy(YA2&sED3{3fyRZ8;xB0OxruuHfD7Fy^#gyA2HrH~>X%dc9lS^(Za|k6- z<|LQs;!>0qVT%Y!$&@2HshqD)zt`(|KF|B}`Mf{3=lSEwV9==pzQc{X8&JG^% zxd?AFxplA%<^`XF4@9g7m5dNQG&=z+8`;i2u~Jg%Mr#}4;$ip!CX_Q=Jsn{u1d2#V zF&Q}sfn#K(2wo7_2Z2LmKuiIKDd3ug0gkO%{`2Y#!59LEA#j9*6j1;%EFo}BQglTm zUq4| zAsATLkwLgI_#OsfCWyhoDrjO$f{Oy;9muC3b{pI z>=?M2ZSd?QK!p5}86Fb`a7EA*x3*vaPoX=cPdCeg-|0-82W^iOqs?7uwN?o%$zt>= zF~{a1h#t_#n#YbY_#ni@DlxK30w5NrZGN@(L|^UL%jm#6eZqNm0Av0;0>LM7*=$aL z9+oX>=O8$o>$N3)S#5|Ch{+&9!Yp@Xh|fh>U5ZAOAh=A15|+tsXJ$}#W`kR z+6;9;b#9$}cw|^aikFMKpI^iCy)~@k1Gm2Szl=B%GM}();ptFF@0E;5zAsr3iOEW( z3c+<3Yz_aiV`M)L^W8MSs|a3LArzgU%3EBnP)z5E0_i=v?000RzhB>g%w@&hlPkol zt$9yxa6C+Pmj+@ouF~HxcQ4U8(dEsJk_%60*oL^EwywXt|Mx@#*E*q=YqHrc{(IJ@ zUTVtC2@S^9&3s}Hx7`j|T{m%vVYh%R!(YXDU)>XbnN((H6q$UeQ*E7x_O!r~{za^? zmwZJgxZ+hregD4R5Cc1hm%K-3MB#p(;@EnpDbs^GR9SkV*VBFVn#`V$UM75F$AV|2 zx{0G2`%0Ary-R}1ngYQat*X`>!BIdB2>2uE`Gj#og<8$6+rI^*T?%COSvZ+)y;~X4 zXN0wOt$rI`S#{GhRNdG-cI0{D4t!&`Tz&v^`daE%;skd%e2AX;?u|k7D+PwzUT0U# z_!B{W3RLgaFkK+S=q?RBB|Q_HP3PqanO^qj3rPTX(ah|1kk2WPr~TI(6vV#T3Psob zbbLE|_xg4o_L+qabQ@YV4_G2T^;}IcPxb$^*wjc6Jd`T*2x$`5Iv4(03|OB!AWl7* zJMC4cmE-rYv}TYa9CTD(#DqS38)ZXi%9jRJO7aqhY?_a%Sjgg^Rb%u;J%J z`5zEl@V~X2DL3`?vK&eSkGz%*$g zD?F}I-=JF`QhT1yR-99jIG2T(kr_;tM86Ef4TGvGIfgSv2FgV?Ii+)`U2>R|H2i@X z`#%BNLBOf^Cc{&9yW48moSxv~rlKiJ%J}vK&(t&4)cM`_S(ZX>9N>(4l@6 zdDl*9bIce;;tE}C+x%&Hhr3lZ-(^Y@o$@``rr%I zg{u79L}N5{+H#i-HI44PQY;E@5Er~AtB)M)x<=Ei@?X?9_fM`iWrvDbud4F5=(*?% zRLPTUeZ+5FN~G!#G<3RgH;w0i{K2r>u>sy5`tk&g)2Y2*aqh5+vOvE&(r4@+^|2ns z-<1??R}E5H#@}Wwx0Wny?J*1!+|3gbUll#b`6mBPJ2}+`XA$HSQ60Ly0h=-Stt8p$ zEk32L z_fL>X_L7dycD8i)hRD`iID3-(i+`t&w$UWot>Kf-a=W5l=G%Xai zvKCg5kIzO`KOe=eUfUQuE{h90J)4MLO>KAt&VJnq|1a}0lX`}Kj8wv(n3Rhn&EYzk GdGcS7vC#7X literal 1681 zcmV;C25$L@P)1C!e^)mpmco@LLaP({!dhzAO zXAc1IaJaOyc#$D}N+;`sI1WDduU#hr=Zz zrQ%q5F4@Jf<;uh15`z^(EeQRNxffE;vl2oyjZ~4!_<>Q&e5zuo^dOvk;Z3 zV9F@#I3EsmM0Tr}4YF5wnQzr388@$1p09(+Z3UNFl}&jv*9Gr);*k z8>IA-D=9GLqSSkyHZXfn(0{#;?X3pgkXvlpw=5n z?7T?a%WWuXTOJdr3RhBsa{^hT43*2!Z}*3fSs-k!jM?@4xes>hz!NII zOSA$=&N98n>p#Cd#_Dtflsl;>t(yw-Oo3_uYQB}4$VhbrwggB`q@{q_Ksn&9Ztk89 z!|=ht2E2Fkav?NjkU~C-a06v;1>xn%IP$_8FGsu!{ z!rp9>$|%=n#gR%a(3B~8O8eL|bF~3;0|`+^+8S_4*=QkD8Xe`b8BOP6>z>vI_S6gp zTdP)?%mo49IUxLf-xBY8{`oO$P{X?15Uxxg1Bdvs7E@WP9nc*jd^o)ssr=RR=}TT@8RCXTotVTA;G^>w>{GHzC*$@JI(Y$Us^I>=u*LQ;@DTKyJe& z>g##{Xbsf$0?-nu>j|J0(5}}}x>-Z90yuiz+W~f;KD_#0(-!QFy;!QHnYMJj0@T>) z9EV#1KrK+W6o49_xWq*vlVG3+1~rVjB?9EO>pav|yM47q;f|S(%TQ~elAypzRIwFM zY1HGSHdh;Hv9PXJpxWhj^?8ZdA*&MQc7WZg_Y+j#OHdnVX?fU6a7{TTv8&WZt#(4Q z=3Om;S^;E(v;ryx=;1A?j@WietcP&fPTx9kdhoc|ff}i!uvE`ENcH+8RehyPcT#{V zo0I^J{Z6S@;$VHTJp&pbx#wD-MR$KlRgzNg7f@^uQWNcjZmBs1x+k)V0PvT72x(C) zH#EiMT;1ILF$}}^;4rE%qhgnMl!ymf5ZF4yqa5np$Se@%*GlrHvNke}l2R$58hQ6$ zUpT;9zmZv}L#3pamdQ;jEXdrgiNuy=euZU=f@>nNwwtw1|GAcpYp}u+5$!MxtnFZ} ziETn=Pga;Kk~nsRr|t#8l-B7H6wG0R>&cR2nc&UnY~A)waK?4RdQ(uo~souDPSsgL&`>CKLL|yFCKTh%ej$A9b;>giZ!fI zb7|9($^8A|zKU_6C5daYLT&V0!&=dT$hDKGA=8r7-9}=Y!nusC37OPCCbt!vp=}#8 z*ED8sIb|I(YosYy%LS}4Mahy`DJ4mgxlJDE$n0tcsHU}UbF=08sGC)jC6a2r&4k-0 z)pmiejab9DB6_yPjLdVj)}FEAxd1%}Y$lzw^o?Ch9ZI%+vlZJc`LiQkk+~#NYadl8 zO=$J8s5jTu{#ZhIr(HTFdJhP%+mqRgwVGL>;>;$`3Qw)N>5)E*HN95l$qE~qM^|}V z2~um{Wmw`!d@0M^?lcg{ip|n^_y+*KZ)8e4y5(&n@c`vt0QhesliJZW^GuB_|8x_T bHz)HaUU*Z|_Aqjq00000NkvXXu0mjfM92*} diff --git a/tutorindigo/templates/indigo/lms/static/images/profile.svg b/tutorindigo/templates/indigo/lms/static/images/profile.svg new file mode 100644 index 000000000..c4e2dcc41 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/static/images/profile.svg @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/tutorindigo/templates/indigo/lms/static/sass/.DS_Store b/tutorindigo/templates/indigo/lms/static/sass/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..28d706365e7c9801776c904ca1af840718fafa44 GIT binary patch literal 6148 zcmeHK%}N6?5T4YkDI)Zs&||=B!D>|yJ*-s^UR}|HO5L?Z7uQYcZmm!Xd)Aln=#%(5 zI+LWLR6S~u8JK*N$;@u@CFBPHM5EVQ0Vo52L?tYgu=ql#opekJ&QnAb<{QC5tS`e@ zhhwqqm`ny}?xvv)_mDvsKF%L4i6_+US0kqT5;_oITm}(h4C#mYruZGyt)JqSr=uGXq*t-diFmgM5n z^44MVCcaJdgBd9ZT+v469gg4;jWHhX{B9EKT zh#6o8{+I#U9~3H~=Ptg?nNMn~r|v z;yj1BMVk)7JwAl{vv4mIVg8QaS0)^UXOT;0fEoDAz?7|)>HOdS{{8&gP1{N8>-VemY`hWU!|1X_rAO?tm)ntIz`d;6K+;nYS$`Wg>1$qaHf_{a< luMn8XQVhOWid&#kz;59L(9u{Z1PciL2uK=eAO`-Fflp{sQtki% literal 0 HcmV?d00001 diff --git a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/.DS_Store b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..4f2a2c882164ae97832161148bed92305e1acf2c GIT binary patch literal 6148 zcmeHK%}T>S5Z>*NO({YT3Oz1(En3?uh?f}a!K)EHsMN*;8%(p(rshxzIqM7gB)*Q$ z>~5q|y@^PffthbJJCkI-4Z9h}7drZoey0ufGuKrISaq(y!iQ6i$*>>x~zRrSe+E zs#rDa#vRJkO$Nzy;ta-Dcy%siM599t+J>ZVt^R<1qN_`5TJ;*!Azst zI>4wF0I&pZB{0SxN6ZlhZG)Lcm;vEB6;P*g(_(O)4t`WP%{7iv?I*K6{kKzWX67UNg0NMsKjo<;H9|1)J8Dij18TbIMMOIS) literal 0 HcmV?d00001 diff --git a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss index 4ed1ca8c1..70cabf89c 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_extras.scss @@ -212,3 +212,22 @@ nav.wrapper-preview-menu { } } } +.container, .main-container, .find-courses { + max-width: 1090px; + padding-left: 15px !important; + padding-right: 15px !important; + margin: 0 auto; +} +.window-wrap { + position: relative; + overflow: hidden; + width: 100%; +} + +@import '../../../extra/footer'; +@import '../../../extra/header'; +@import '../../../dashbord/dashbord'; +@import '../../../courseware/discover'; + + + diff --git a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss index 15ef4d6e8..d5171a785 100644 --- a/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss +++ b/tutorindigo/templates/indigo/lms/static/sass/partials/lms/theme/_variables.scss @@ -1,9 +1,12 @@ -$primary: {{ INDIGO_PRIMARY_COLOR }}; +$primary: #4B0082; // Theme fonts -$font-family-title: Plex; +$font-family-title: 'Inter', sans-serif;; $serif: Crimson; $f-sans-serif: Crimson, 'Open Sans','Helvetica Neue', Helvetica, Arial, sans-serif; - +@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700;800&display=swap'); // Initialize the Open edX Bootstrap theme @import 'edx-bootstrap/sass/open-edx/theme'; + +$drak: #111827; +$light-drak: #374151; diff --git a/tutorindigo/templates/indigo/lms/static/templates b/tutorindigo/templates/indigo/lms/static/templates deleted file mode 120000 index 564a409d4..000000000 --- a/tutorindigo/templates/indigo/lms/static/templates +++ /dev/null @@ -1 +0,0 @@ -../templates \ No newline at end of file diff --git a/tutorindigo/templates/indigo/lms/templates/.DS_Store b/tutorindigo/templates/indigo/lms/templates/.DS_Store new file mode 100644 index 0000000000000000000000000000000000000000..7f7c5193ebb8138123b70cd4d6dd0eb5af684e3f GIT binary patch literal 6148 zcmeHKO^?$s5FPK9-INL`LLlu0$r9IUDU{_yTtZn6TnT~$pprC!jY#9FNw>SID&-76 zhAY2>zXNY`dwcDY$r0}cg^!m-8DuxGd4-cWcU$vk{w1st^ zQbY+yHGRd$U-`!Ka$?8*98dDBta`mKVq>#)VQbsl_B!6{@IcMODynAXAez49)-$E@ z_@o}i&$Dzs^shWpMHOX5I@JMLlEUTHi>yf0e4u7UQtH^yba-vAJ@j`Li@pBcuI%62 zTXyB*{;ghD-tOO7F5BMK>o*=e9lp=Uh5Dc~B!OK`%O#5^!1*=uPs&jq<3F-PqvJ4~ z7P%_k!OnwSri=X$e#_I!+<>O@CHC$1I_E2Gm#t&KG4KZr@ctm7jDf}4px!!A=qmuQ1+x~^ z`D1}&q{YBuZ4f;WVM2i>RM;zqFyXLE>law84VrKg_VOX@lZCyZ2>o=7FSR>~z@RG~ z1CD_v1DmGl^ZEby=lB0+kZU;x90O;H0nyqI_XkMHo~>)i@mVXOZ=fvfR~ytJDC}{p gD|{61K((Mxas?PztPR2faUTMj23I%+{wV|B0Bcs#KmY&$ literal 0 HcmV?d00001 diff --git a/tutorindigo/templates/indigo/lms/templates/course.html b/tutorindigo/templates/indigo/lms/templates/course.html new file mode 100644 index 000000000..bdc9c54ea --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/course.html @@ -0,0 +1,49 @@ +<%def name="online_help_token()"><% return "course" %> +<%namespace name='static' file='static_content.html'/> +<%! +from django.utils.translation import gettext as _ +from django.urls import reverse +%> +<%page args="course" expression_filter="h"/> +
+ +
+
+ ${course.display_name_with_default} ${course.display_number_with_default} + +
+
+ +
+
    +
  • ${course.display_org_with_default}
  • +
  • ${course.display_number_with_default}
  • + % if course.advertised_start is not None: +
  • ${_("Starts")}:
  • + % else: +
  • ${_("Starts")}:
  • + % endif +
+
+
+
+<%static:require_module_async module_name="js/dateutil_factory" class_name="DateUtilFactory"> + DateUtilFactory.transform(iterationKey=".localized_datetime"); + diff --git a/tutorindigo/templates/indigo/lms/templates/courseware/courses.html b/tutorindigo/templates/indigo/lms/templates/courseware/courses.html new file mode 100644 index 000000000..a3ecb7c58 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/courseware/courses.html @@ -0,0 +1,80 @@ +<%page expression_filter="h"/> +<%! + import json + from django.utils.translation import gettext as _ + from openedx.core.djangolib.js_utils import js_escaped_string, dump_js_escaped_json +%> +<%inherit file="../main.html" /> +<% + course_discovery_enabled = settings.FEATURES.get('ENABLE_COURSE_DISCOVERY') +%> + +<%namespace name='static' file='../static_content.html'/> + +% if course_discovery_enabled: +<%block name="header_extras"> + % for template_name in ["course_card", "filter_bar", "filter", "facet", "facet_option"]: + + % endfor + <%static:require_module module_name="js/discovery/discovery_factory" class_name="DiscoveryFactory"> + DiscoveryFactory( + ${course_discovery_meanings | n, dump_js_escaped_json}, + getParameterByName('search_query'), + "${user_language | n, js_escaped_string}", + "${user_timezone | n, js_escaped_string}" + ); + + +% endif + +<%block name="pagetitle">${_("Courses")} + +
+
+
+ % if course_discovery_enabled: + + + + % endif + +
+
    + %for course in courses: +
  • + <%include file="../course.html" args="course=course" /> +
  • + %endfor +
+
+ + + % if course_discovery_enabled: + + % endif + +
+
+
diff --git a/tutorindigo/templates/indigo/lms/templates/dashboard.html b/tutorindigo/templates/indigo/lms/templates/dashboard.html new file mode 100644 index 000000000..d44cdefc6 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/dashboard.html @@ -0,0 +1,403 @@ +<%page expression_filter="h"/> +<%inherit file="main.html" /> +<%def name="online_help_token()"><% return "learnerdashboard" %> +<%namespace name='static' file='static_content.html'/> +<%! +import pytz +from datetime import datetime, timedelta +from django.urls import reverse +from django.utils.translation import gettext as _ +from django.template import RequestContext +from common.djangoapps.entitlements.models import CourseEntitlement +from common.djangoapps.third_party_auth import pipeline +from common.djangoapps.util.date_utils import strftime_localized +from opaque_keys.edx.keys import CourseKey +from openedx.core.djangoapps.content.course_overviews.models import CourseOverview +from openedx.core.djangoapps.site_configuration import helpers as configuration_helpers +from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_string +from openedx.core.djangolib.markup import HTML, Text + +from common.djangoapps.student.models import CourseEnrollment +%> + +<% + cert_name_short = settings.CERT_NAME_SHORT + cert_name_long = settings.CERT_NAME_LONG +%> + + +<%block name="pagetitle">${_("Dashboard")} +<%block name="bodyclass">view-dashboard is-authenticated + +<%block name="header_extras"> +% for template_name in ["donation"]: + +% endfor + + +<%block name="js_extra"> + + + <%static:js group='dashboard'/> + + <%static:webpack entry="UnenrollmentFactory"> + UnenrollmentFactory({ + urls: { + dashboard: "${reverse('dashboard') | n, js_escaped_string}", + signInUser: "${reverse('signin_user') | n, js_escaped_string}", + changeEmailSettings: "${reverse('change_email_settings') | n, js_escaped_string}", + browseCourses: "${marketing_link('COURSES') | n, js_escaped_string}" + }, + isEdx: false + }); + + <%static:webpack entry="EntitlementUnenrollmentFactory"> + ## Wait until the document is fully loaded before initializing the EntitlementUnenrollmentView + ## to ensure events are setup correctly. + $(document).ready(function() { + EntitlementUnenrollmentFactory({ + dashboardPath: "${reverse('dashboard') | n, js_escaped_string}", + signInPath: "${reverse('signin_user') | n, js_escaped_string}", + browseCourses: "${marketing_link('COURSES') | n, js_escaped_string}", + isEdx: false + }); + }); + + % if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): + <%static:require_module module_name="course_search/js/dashboard_search_factory" class_name="DashboardSearchFactory"> + DashboardSearchFactory(); + + % endif + % if redirect_message: + <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> + var banner = new MessageBannerView({urgency: 'low', type: 'warning'}); + $('#content').prepend(banner.$el); + banner.showMessage(${redirect_message | n, dump_js_escaped_json}) + + % endif + % if recovery_email_message: + <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> + var banner = new MessageBannerView({urgency: 'low', type: 'warning', hideCloseBtn: false, isRecoveryEmailMsg: true}); + $('#content').prepend(banner.$el); + banner.showMessage(${recovery_email_message | n, dump_js_escaped_json}) + + % endif + % if recovery_email_activation_message: + <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> + var banner = new MessageBannerView({urgency: 'low', type: 'warning', isRecoveryEmailMsg: true}); + $('#content').prepend(banner.$el); + banner.showMessage(${recovery_email_activation_message | n, dump_js_escaped_json}) + + % endif + % if enterprise_learner_portal_enabled_message: + <%static:require_module module_name="js/views/message_banner" class_name="MessageBannerView"> + var banner = new MessageBannerView({urgency: 'low', type: 'warning', isLearnerPortalEnabled: true}); + $('#content').prepend(banner.$el); + banner.showMessage(${enterprise_learner_portal_enabled_message | n, dump_js_escaped_json}) + + % endif + + +
+ + %if banner_account_activation_message: +
+ ${banner_account_activation_message | n, decode.utf8} +
+ %endif + + %if enrollment_message: +
+ ${enrollment_message | n, decode.utf8} +
+ %endif + + %if enterprise_message: +
+ ${ enterprise_message | n, decode.utf8 } +
+ %endif + + %if account_activation_messages: +
+ % for account_activation_message in account_activation_messages: + + % endfor +
+ %endif + +
+ +
+
+
+
+ % if display_dashboard_courses: + <%include file="learner_dashboard/_dashboard_navigation_courses.html"/> + % endif + + % if len(course_entitlements + course_enrollments) > 0: +
    + <% + share_settings = configuration_helpers.get_value( + 'SOCIAL_SHARING_SETTINGS', + getattr(settings, 'SOCIAL_SHARING_SETTINGS', {}) + ) + %> + % for dashboard_index, enrollment in enumerate(course_entitlements + course_enrollments): + <% + # Check if the course run is an entitlement and if it has an associated session + entitlement = enrollment if isinstance(enrollment, CourseEntitlement) else None + entitlement_session = entitlement.enrollment_course_run if entitlement else None + entitlement_days_until_expiration = entitlement.get_days_until_expiration() if entitlement else None + entitlement_expiration = datetime.now(tz=pytz.UTC) + timedelta(days=entitlement_days_until_expiration) if (entitlement and entitlement_days_until_expiration < settings.ENTITLEMENT_EXPIRED_ALERT_PERIOD) else None + entitlement_expiration_date = strftime_localized(entitlement_expiration, 'SHORT_DATE') if entitlement and entitlement_expiration else None + entitlement_expired_at = strftime_localized(entitlement.expired_at_datetime, 'SHORT_DATE') if entitlement and entitlement.expired_at_datetime else None + + is_fulfilled_entitlement = True if entitlement and entitlement_session else False + is_unfulfilled_entitlement = True if entitlement and not entitlement_session else False + + entitlement_available_sessions = [] + if entitlement: + # Grab the available, enrollable sessions for a given entitlement and scrape them for relevant attributes + entitlement_available_sessions = [{ + 'session_id': course['key'], + 'enrollment_end': course['enrollment_end'], + 'pacing_type': course['pacing_type'], + 'advertised_start': CourseOverview.get_from_id(CourseKey.from_string(course['key'])).advertised_start, + 'start': CourseOverview.get_from_id(CourseKey.from_string(course['key'])).start, + 'end': CourseOverview.get_from_id(CourseKey.from_string(course['key'])).end, + } for course in course_entitlement_available_sessions[str(entitlement.uuid)]] + if is_fulfilled_entitlement: + # If the user has a fulfilled entitlement, pass through the entitlements CourseEnrollment object + enrollment = entitlement_session + else: + # If the user has an unfulfilled entitlement, pass through a bare CourseEnrollment object to populate card with metadata + pseudo_session = unfulfilled_entitlement_pseudo_sessions[str(entitlement.uuid)] + if not pseudo_session: + continue + pseudo_key = pseudo_session['key'] + if not isinstance(pseudo_key, CourseKey): + pseudo_key = CourseKey.from_string(pseudo_session['key']) + enrollment = CourseEnrollment(user=user, course=CourseOverview.get_from_id(pseudo_key), mode=pseudo_session['type']) + # We only show email settings for entitlement cards if the entitlement has an associated enrollment + show_email_settings = is_fulfilled_entitlement and (entitlement_session.course_id in show_email_settings_for) + course_overview = enrollment.course_overview + else: + show_email_settings = (enrollment.course_id in show_email_settings_for) + course_overview = CourseOverview.get_from_id(enrollment.course_id) + + session_id = enrollment.course_id + show_courseware_link = show_courseware_links_for.get(session_id, False) + cert_status = cert_statuses.get(session_id) + can_refund_entitlement = entitlement and entitlement.is_entitlement_refundable() + partner_managed_enrollment = enrollment.mode == 'masters' + # checks if we can unenroll based on the value of partner_managed_enrollment + can_unenroll_partner_managed_enrollment = False if partner_managed_enrollment else (not cert_status) + # checks if we can unenroll based on the value of unfulfilled_entitlement + can_unenroll_unfulfilled_entitlement = cert_status.get('can_unenroll') if cert_status and not unfulfilled_entitlement else False + # compares the three different parameters by which we can unenroll + can_unenroll = (can_unenroll_partner_managed_enrollment or can_unenroll_unfulfilled_entitlement) and not disable_unenrollment + credit_status = credit_statuses.get(session_id) + course_mode_info = all_course_modes.get(session_id) + is_paid_course = True if entitlement else (session_id in enrolled_courses_either_paid) + is_course_voucher_refundable = (session_id in enrolled_courses_voucher_refundable) + course_requirements = courses_requirements_not_met.get(session_id) + related_programs = inverted_programs.get(str(entitlement.course_uuid if is_unfulfilled_entitlement else session_id)) + show_consent_link = (session_id in consent_required_courses) + resume_button_url = resume_button_urls[dashboard_index] + %> + <%include file='dashboard/_dashboard_course_listing.html' args='course_overview=course_overview, course_card_index=dashboard_index, enrollment=enrollment, enrollments_fbe_is_on=enrollments_fbe_is_on, is_unfulfilled_entitlement=is_unfulfilled_entitlement, is_fulfilled_entitlement=is_fulfilled_entitlement, entitlement=entitlement, entitlement_session=entitlement_session, entitlement_available_sessions=entitlement_available_sessions, entitlement_expiration_date=entitlement_expiration_date, entitlement_expired_at=entitlement_expired_at, show_courseware_link=show_courseware_link, cert_status=cert_status, can_refund_entitlement=can_refund_entitlement, can_unenroll=can_unenroll, credit_status=credit_status, show_email_settings=show_email_settings, course_mode_info=course_mode_info, is_paid_course=is_paid_course, is_course_voucher_refundable=is_course_voucher_refundable, course_requirements=course_requirements, dashboard_index=dashboard_index, share_settings=share_settings, user=user, related_programs=related_programs, display_course_modes_on_dashboard=display_course_modes_on_dashboard, show_consent_link=show_consent_link, enterprise_customer_name=enterprise_customer_name, resume_button_url=resume_button_url, partner_managed_enrollment=partner_managed_enrollment' /> + % endfor + % if show_load_all_courses_link: +
    + ${len(course_enrollments)} ${_("results successfully populated,")} + + ${_("Click to load all enrolled courses")} + + % endif +
+ % else: +
+ % if display_dashboard_courses: +

${_("You are not enrolled in any courses yet.")}

+ % if empty_dashboard_message: +

${empty_dashboard_message | n, decode.utf8}

+ %endif + % if settings.FEATURES.get('COURSES_ARE_BROWSABLE'): + + ${_("Explore courses")} + + %endif + % else: +

${_("Activate your account!")}

+

${ activate_account_message | n, decode.utf8 }

+ % endif +
+ % endif + + % if staff_access and len(errored_courses) > 0: +
+

${_("Course-loading errors")}

+ + % for course_dir, errors in errored_courses.items(): +

${course_dir}

+
    + % for (msg, err) in errors: +
  • ${msg} +
    • ${err}
    +
  • + % endfor +
+ % endfor +
+ % endif +
+
+ +
+
+ +%if show_account_activation_popup: + +%endif + + + + + +<%include file="dashboard/_dashboard_entitlement_unenrollment_modal.html"/> diff --git a/tutorindigo/templates/indigo/lms/templates/footer.html b/tutorindigo/templates/indigo/lms/templates/footer.html index 00d64658d..2032192ff 100644 --- a/tutorindigo/templates/indigo/lms/templates/footer.html +++ b/tutorindigo/templates/indigo/lms/templates/footer.html @@ -11,6 +11,7 @@ <%namespace name='static' file='static_content.html'/> % if uses_bootstrap: +profile icon + -
+
    %for course in courses:
  • @@ -87,13 +98,7 @@

    ${_('Refine Your Search')}

- % if course_discovery_enabled: - - % endif + diff --git a/tutorindigo/templates/indigo/lms/templates/dashboard.html b/tutorindigo/templates/indigo/lms/templates/dashboard.html index 6736dd711..0473289ee 100644 --- a/tutorindigo/templates/indigo/lms/templates/dashboard.html +++ b/tutorindigo/templates/indigo/lms/templates/dashboard.html @@ -153,33 +153,33 @@ %endif
-

Hi Jake, Good Afternoon !

-

Lets learn something today

+

Hello there!

+

Let's learn something today

% if settings.FEATURES.get('ENABLE_DASHBOARD_SEARCH'): - % endif
+ % endif
% if display_dashboard_courses: @@ -372,33 +372,29 @@

diff --git a/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_listing.html b/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_listing.html new file mode 100644 index 000000000..a72699053 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_listing.html @@ -0,0 +1,473 @@ +<%page args="course_overview, enrollment, entitlement, entitlement_session, course_card_index, enrollments_fbe_is_on, is_unfulfilled_entitlement, is_fulfilled_entitlement, entitlement_available_sessions, entitlement_expiration_date, entitlement_expired_at, show_courseware_link, cert_status, can_refund_entitlement, can_unenroll, credit_status, show_email_settings, course_mode_info, is_paid_course, is_course_voucher_refundable, course_requirements, dashboard_index, share_settings, related_programs, display_course_modes_on_dashboard, show_consent_link, enterprise_customer_name, resume_button_url, partner_managed_enrollment" expression_filter="h"/> + +<%! +import datetime + +from django.conf import settings +from django.utils.http import urlencode +from urllib.parse import quote_plus +from django.utils.translation import gettext as _ +from django.utils.translation import ngettext +from django.urls import reverse +from common.djangoapps.course_modes.models import CourseMode +from common.djangoapps.course_modes.helpers import enrollment_mode_display +from common.djangoapps.student.helpers import user_has_passing_grade_in_course +from lms.djangoapps.verify_student.services import IDVerificationService +from openedx.core.djangolib.js_utils import dump_js_escaped_json, js_escaped_string +from openedx.core.djangolib.markup import HTML, Text +from openedx.features.course_experience import course_home_url +from common.djangoapps.student.helpers import ( + VERIFY_STATUS_NEED_TO_VERIFY, + VERIFY_STATUS_SUBMITTED, + VERIFY_STATUS_RESUBMITTED, + VERIFY_STATUS_APPROVED, + VERIFY_STATUS_MISSED_DEADLINE, + VERIFY_STATUS_NEED_TO_REVERIFY, + DISABLE_UNENROLL_CERT_STATES, +) +from common.djangoapps.util.course import get_link_for_about_page, get_encoded_course_sharing_utm_params +from lms.djangoapps.experiments.utils import UPSELL_TRACKING_FLAG +%> + +<% + reverify_link = IDVerificationService.get_verify_location() + cert_name_short = course_overview.cert_name_short + if cert_name_short == "": + cert_name_short = settings.CERT_NAME_SHORT + + cert_name_long = course_overview.cert_name_long + if cert_name_long == "": + cert_name_long = settings.CERT_NAME_LONG + + is_course_expired = hasattr(show_courseware_link, 'error_code') and show_courseware_link.error_code == 'audit_expired' + + display_course_upgrade = ( + use_ecommerce_payment_flow + and course_mode_info + and course_mode_info['show_upsell'] + and not entitlement + and course_mode_info['verified_sku'] + ) +%> + +<% + is_non_certificate_enrollment = enrollment.mode == "audit" or enrollment.mode == "honor" + is_passing_course = user_has_passing_grade_in_course(enrollment) + course_ended_not_passing = course_overview.has_ended() and is_passing_course == False and is_non_certificate_enrollment == False +%> + +<%namespace name='static' file='../static_content.html'/> + +
  • + % if display_course_modes_on_dashboard: + <% + course_verified_certs = enrollment_mode_display( + enrollment.mode, + course_overview.id + ) + %> + <% + mode_class = course_verified_certs.get('display_mode', '') + if mode_class: + mode_class = ' ' + mode_class ; + %> + % else: + <% mode_class = '' %> + % endif +
    +
    + <% course_target = course_home_url(course_overview.id) %> +
    +

    ${_('Course details')}

    + +
    +

    + + % if show_courseware_link and not is_unfulfilled_entitlement: + % if not is_course_expired: + ${course_overview.display_name_with_default} + % else: + ${course_overview.display_name_with_default} + % endif + % else: + ${course_overview.display_name_with_default} + % endif + + ${course_overview.display_org_with_default} +

    +
    +
    + % if (show_courseware_link or is_unfulfilled_entitlement) and not is_course_expired: + % if course_overview.has_ended(): + % if not is_unfulfilled_entitlement: + ${_('View Archived Course')} ${course_overview.display_name_with_default} + % endif + + % else: + <%include file="_dashboard_course_resume.html" args="resume_button_url=resume_button_url, course_overview=course_overview, enrollment=enrollment, is_unfulfilled_entitlement=is_unfulfilled_entitlement, course_target=course_target, related_programs=related_programs"/> + % endif + % endif +
    +
    +
    + + + + <% + enrollment_date = course_overview.self_paced and enrollment and enrollment.created + if course_overview.start_date_is_still_default: + container_string = _("Coming Soon") + course_date = None + else: + format = 'shortDate' + dashboard_start_display = course_overview.dashboard_start_display + if course_overview.has_ended(): + container_string = _("Ended - {date}") + course_date = course_overview.end + elif course_overview.has_started(): + container_string = _("Started - {date}") + if enrollment_date and isinstance(dashboard_start_display, datetime.datetime): + course_date = max(enrollment_date, dashboard_start_display) + else: + course_date = enrollment_date or dashboard_start_display + elif course_overview.starts_within(days=5): + container_string = _("Starts - {date}") + course_date = dashboard_start_display + format = 'defaultFormat' + else: ## hasn't started yet + container_string = _("Starts - {date}") + course_date = dashboard_start_display + endif + endif + %> + + + % if not is_unfulfilled_entitlement and is_course_expired: + + ${show_courseware_link.user_message} + +  ${_('for {course_display_name}').format(course_display_name=course_overview.display_name_with_default)} + + + % elif is_unfulfilled_entitlement: + + + % if not entitlement_expired_at: + % if entitlement_expiration_date: + ${_('You must select a session by {expiration_date} to access the course.').format(expiration_date=entitlement_expiration_date)} + % else: + ${_('You must select a session to access the course.')} + % endif + % endif + + % else: + % if isinstance(course_date, str): + ${container_string.format(date=course_date)} + % elif course_date is not None: + + % endif + % endif + % if entitlement: + % if not entitlement_expired_at: + + % endif + % endif + + % if entitlement and not is_unfulfilled_entitlement and entitlement_expiration_date: +
    + + % if entitlement_expired_at: + ${_('You can no longer change sessions.')} + % else: + ${_('You can change sessions until {entitlement_expiration_date}.').format(entitlement_expiration_date=entitlement_expiration_date)} + % endif +
    + % endif +
    +
    + + +
    +
    +
    +
    +
    + + % if entitlement and not entitlement_expired_at: +
    + <%static:webpack entry="EntitlementFactory"> + EntitlementFactory({ + el: '${ '#course-card-' + str(course_card_index) + ' .course-entitlement-selection-container' | n, js_escaped_string }', + triggerOpenBtn: '${ '#course-card-' + str(course_card_index) + ' .change-session' | n, js_escaped_string }', + courseCardMessages: '${ '#course-card-' + str(course_card_index) + ' .messages-list > .message' | n, js_escaped_string }', + courseTitleLink: '${ '#course-card-' + str(course_card_index) + ' .course-title a' | n, js_escaped_string }', + courseImageLink: '${ '#course-card-' + str(course_card_index) + ' .wrapper-course-image > a' | n, js_escaped_string }', + dateDisplayField: '${ '#course-card-' + str(course_card_index) + ' .info-date-block' | n, js_escaped_string }', + policyMsg: '${ '#course-card-' + str(course_card_index) + ' .info-expires-at' | n, js_escaped_string }', + enterCourseBtn: '${ '#course-card-' + str(course_card_index) + ' .enter-course' | n, js_escaped_string }', + availableSessions: '${ entitlement_available_sessions | n, dump_js_escaped_json }', + entitlementUUID: '${ entitlement.course_uuid | n, js_escaped_string }', + currentSessionId: '${ entitlement_session.course_id if entitlement_session else "" | n, js_escaped_string }', + enrollUrl: '${ reverse('entitlements_api:v1:enrollments', args=[str(entitlement.uuid)]) | n, js_escaped_string }', + courseHomeUrl: '${ course_target | n, js_escaped_string }', + expiredAt: '${ entitlement.expired_at_datetime | n, js_escaped_string }', + daysUntilExpiration: '${ entitlement.get_days_until_expiration() | n, js_escaped_string }' + }); + + %endif + + % if related_programs: + + % endif + + % if cert_status: + <%include file='_dashboard_certificate_information.html' args='cert_status=cert_status, course_ended_not_passing=course_ended_not_passing, course_overview=course_overview, enrollment=enrollment, reverify_link=reverify_link'/> + % endif + + % if credit_status is not None: + <%include file="_dashboard_credit_info.html" args="credit_status=credit_status"/> + % endif + + % if show_consent_link: + <%include file="_dashboard_show_consent.html" args="course_overview=course_overview, course_target=course_target, enrollment=enrollment, enterprise_customer_name=enterprise_customer_name"/> + %endif + + % if display_course_upgrade: +
    +
    +
    + +
    + % if enrollment.course_id in enrollments_fbe_is_on: + ${Text(_("{start_bold}Get the most out of your course!{end_bold} Upgrade to get full access to the course material, unlock both graded and non-graded assignments, and earn a {link_start}verified certificate{link_end} to showcase on your resumé.")).format( + start_bold=HTML(''), + end_bold=HTML(''), + link_start=HTML('').format( + marketing_link('WHAT_IS_VERIFIED_CERT'), + enrollment.course_id + ), + link_end=HTML('') + )} + % else: + ${Text(_("{start_bold}Get the most out of your course!{end_bold} Upgrade to earn a {link_start}verified certificate{link_end} to showcase on your resumé.")).format( + start_bold=HTML(''), + end_bold=HTML(''), + link_start=HTML('').format( + marketing_link('WHAT_IS_VERIFIED_CERT'), + enrollment.course_id + ), + link_end=HTML('') + )} + % endif +
    +
    + +
    +
    + % endif + + % if course_requirements: + ## Multiple pre-requisite courses are not supported on frontend that's why we are pulling first element + <% prc_target = reverse('about_course', args=[str(course_requirements['courses'][0]['key'])]) %> +
    +

    + ${Text(_("You must successfully complete {link_start}{prc_display}{link_end} before you begin this course.")).format( + link_start=HTML('').format(prc_target), + link_end=HTML(''), + prc_display=course_requirements['courses'][0]['display'], + )} +

    +
    + % endif +
    +
    +
    +
    +
  • + +% if share_settings.get('DASHBOARD_FACEBOOK', False) and share_settings.get('DASHBOARD_TWITTER', False): + <%static:require_module_async module_name="js/course_sharing/course_sharing_events" class_name="CourseSharingEvents"> + CourseSharingEvents("${course_overview.id | n, js_escaped_string}"); + +%endif + +<%static:require_module_async module_name="js/dateutil_factory" class_name="DateUtilFactory"> + DateUtilFactory.transform(iterationKey=".localized-datetime"); + + +% if UPSELL_TRACKING_FLAG.is_enabled(): + <%static:require_module_async module_name="js/commerce/track_ecommerce_events" class_name="TrackECommerceEvents"> + if (window.loadedECommerceEvents === undefined) { + window.loadedECommerceEvents = true; + + TrackECommerceEvents.trackUpsellClick($(".track_course_dashboard_green_button"), 'course_dashboard_green', { + pageName: "course_dashboard", + linkType: "button", + linkCategory: "green_upgrade" + }); + } + + +%endif diff --git a/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_resume.html b/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_resume.html new file mode 100644 index 000000000..c2b6365c8 --- /dev/null +++ b/tutorindigo/templates/indigo/lms/templates/dashboard/_dashboard_course_resume.html @@ -0,0 +1,26 @@ +<%page args="resume_button_url, course_overview, enrollment, is_unfulfilled_entitlement, course_target, related_programs" expression_filter="h"/> + +<%! +import six +from django.utils.translation import gettext as _ +%> + +% if resume_button_url != '': + + ${_('Resume Course')} + +  ${course_overview.display_name_with_default} + + +% else: + + ${_('Start Course')} + +  ${course_overview.display_name_with_default} + + +% endif diff --git a/tutorindigo/templates/indigo/lms/templates/footer.html b/tutorindigo/templates/indigo/lms/templates/footer.html index 2032192ff..e325767d4 100644 --- a/tutorindigo/templates/indigo/lms/templates/footer.html +++ b/tutorindigo/templates/indigo/lms/templates/footer.html @@ -11,66 +11,68 @@ <%namespace name='static' file='static_content.html'/> % if uses_bootstrap: -profile icon -