From 51f78bd5f3b972597557e902ae73e9956f47ccd8 Mon Sep 17 00:00:00 2001 From: Florian Hartwich Date: Sat, 9 Sep 2017 06:00:25 +0200 Subject: [PATCH] Add lazy loading indicator --- package.json | 2 +- static/package.json | 1 - static/src/app/app.component.html | 1 + static/src/app/app.component.ts | 14 +++++++-- .../war-submit/war-submit.component.html | 2 +- .../war-submit/war-submit.component.ts | 2 +- static/src/app/style/load-indicator.css | 28 ++++++++++++++++++ static/src/assets/loading.png | Bin 7974 -> 5369 bytes 8 files changed, 44 insertions(+), 6 deletions(-) create mode 100644 static/src/app/style/load-indicator.css diff --git a/package.json b/package.json index ce2e20b..ddc3151 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "opt-cc", - "version": "1.4.1", + "version": "1.4.2", "license": "MIT", "private": true, "scripts": { diff --git a/static/package.json b/static/package.json index ec92565..67bf713 100644 --- a/static/package.json +++ b/static/package.json @@ -41,7 +41,6 @@ "devDependencies": { "@types/jasmine": "2.5.38", "@types/node": "~6.0.60", - "@types/systemjs": "^0.20.4", "codelyzer": "~2.0.0-beta.1", "jasmine-core": "^2.5.2", "jasmine-spec-reporter": "^3.2.0", diff --git a/static/src/app/app.component.html b/static/src/app/app.component.html index e7dff4e..e4e67bf 100644 --- a/static/src/app/app.component.html +++ b/static/src/app/app.component.html @@ -87,6 +87,7 @@
+
diff --git a/static/src/app/app.component.ts b/static/src/app/app.component.ts index f785986..8cf0b2e 100644 --- a/static/src/app/app.component.ts +++ b/static/src/app/app.component.ts @@ -1,5 +1,5 @@ import {Component} from '@angular/core'; -import {Router} from '@angular/router'; +import {NavigationEnd, NavigationStart, Router} from '@angular/router'; import {LoginService} from './services/login-service/login-service'; import {PromotionService} from "./services/promotion-service/promotion.service"; import {AwardingService} from "./services/awarding-service/awarding.service"; @@ -8,16 +8,26 @@ import {RouteConfig} from "./app.config"; @Component({ selector: 'app-root', templateUrl: 'app.component.html', - styleUrls: ['app.component.css'] + styleUrls: ['app.component.css', 'style/load-indicator.css'] }) export class AppComponent { config = RouteConfig; + loading: boolean = false; + constructor(private loginService: LoginService, private promotionService: PromotionService, private awardingService: AwardingService, private router: Router) { + router.events.subscribe(event => { + if (event instanceof NavigationStart) { + this.loading = true; + } + if (event instanceof NavigationEnd) { + this.loading = false; + } + }); } diff --git a/static/src/app/statistic/war-submit/war-submit.component.html b/static/src/app/statistic/war-submit/war-submit.component.html index 44fe2c2..0c1ca3f 100644 --- a/static/src/app/statistic/war-submit/war-submit.component.html +++ b/static/src/app/statistic/war-submit/war-submit.component.html @@ -79,7 +79,7 @@ Bestätigen - + {{error}} diff --git a/static/src/app/statistic/war-submit/war-submit.component.ts b/static/src/app/statistic/war-submit/war-submit.component.ts index 22fc580..690c540 100644 --- a/static/src/app/statistic/war-submit/war-submit.component.ts +++ b/static/src/app/statistic/war-submit/war-submit.component.ts @@ -8,7 +8,7 @@ import {War} from "../../models/model-interfaces"; @Component({ selector: 'war-submit', templateUrl: './war-submit.component.html', - styleUrls: ['./war-submit.component.css'] + styleUrls: ['./war-submit.component.css', '../../style/load-indicator.css'] }) export class WarSubmitComponent { diff --git a/static/src/app/style/load-indicator.css b/static/src/app/style/load-indicator.css new file mode 100644 index 0000000..c35686d --- /dev/null +++ b/static/src/app/style/load-indicator.css @@ -0,0 +1,28 @@ +.load-indicator { + position:absolute; + top:50%; + left:50%; + transform:translate(-50%, -50%); + width:50%; +} + +.load-arrow { + background: url(../../assets/loading.png) no-repeat; + display: block; + width: 80px; + height: 80px; +} + +/* Loading Animation */ +.glyphicon-refresh-animate { + animation: spin 1.5s linear infinite; +} + +@keyframes spin { + 0% { + transform: rotate(0deg); + } + 100% { + transform: rotate(360deg); + } +} diff --git a/static/src/assets/loading.png b/static/src/assets/loading.png index 0e00d49a95b34e04bf30cfeee1779562886c756e..adcf3c67a26197c29f850133091ff72c30a668a1 100644 GIT binary patch literal 5369 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

lN)Z53N=;i!DQjy@7Lz6*YU}WI z`||`~DS-c+-X#^C69QPietqsaDP{2#uqqs~d8HP5RcajrT9LkfMp}1bm1E@Sllr^2 zBnRvMyi^P};>D#)dk^p0wWk&2wY9*i*nD28g*Y!ALZQ;naJ8AJDJ&GPhULHvAS+B`54MID+TBbBdau7=?7sTYj zp0|*2T4fk|EknqwM6g41ohbzjV2KbMCo(^zYqF_ zUnm=3MfDj@Tbq`)W|4U&lUBuI>2%64<_dY!Gn9=Ot*8OD?x*I$2~GdeoD+$x;e z3JX*EFS7pf{APwRB}aGne5zKf@3D~=F6~;8$#Z54znNiZIllCzuT+KL-bO7QR($*i zQ&^uoooW~%@FeL`0`!hA}N(6@s0?!95oM_(ii*Q2-{1Xj$w)dNw~-UU_-C zTrN-U-aY(=W*BiYC1(B%fP0%2)*Z)rE|GATnbfS|sUQ2`bF;`i;-R~{x;ox>;e{8; zH#);;mMQ7)J5jHxG_-yU!28+$rCpT^w{+Mx!H$m_DbID?&j&%U{?%7s59(CU?Bk=& zY~CsD_EJhAnM{1NUQ=m=BEP5gLdw*9TRnT$$i=&^dtbF$y=ldYi)r4xGwRtqo6nm| zo7Zx;*ZlcsINP`H%mcVAPD=*>+OT1OIZAo;Y9q}ebF)q)+|O65)tdkyq`Wt}h7p-5 z2_f9=+jm|7V0E1HB(Cdh1%Sc9AxWkmaCWC2ry1A#ec!(!0(rHQ-c68a+q_eHo0*e&XW*PHVA^fo|m1X8R8%>PGp`)xVQSge?tWFPL~?SN%5*y-gR-5 zr}guE5CjLzflQ9moo=^6)Qij=$N6fdQoZNWOIOnAm|;X^O2fnZC)4RvCo}&;vu$hj zi2v)>tq&-3(x1bfsLi}>9fxt7@B5ztfVQ^GX`RD9X2~uoT@Y?Zmv|SpADZ_s@Ef)OeU@#898?FJKy=f zVTVvV6Whq!HtCn^2e9Fr-~5`WR{bcO7moAldD}l(x7XEIf0#QvJ64v)M@Rd>*x2}fb7cNcQNw7Z7W46sf0!S8EWdPQU z*E;#3l=8y^1N~_tvgJ^n0>(v-7qJzyngsPv>%dX=bj6Jp1%!)OnJb zvMSSNVhs=Pn+yVpWHNC}xm>vmfE!Z|qsVKvY}veRXlO4-$U!v)#yJ6^ip-G)#+!+MHSu+5{!R5;@T-njlSuGTvsN3Pn;rK5q!+7gk zyBz>WW-t@0i->Lq@H1v!69j>i&lifRRO*yu7)mM3pFhtT92~kp=e7?UWkxm;h;bsZWU+%u^I`RY6`lD(C+f4wbrW(~5hjbqRtXj2#JTKdJ*Iku?z=Y&Yl>6G8bp+_#$mO2UKZ0ReVbLORI2xcOOIDvu^}@&yiXL1rTs#PWwSZy zZ9VUZ<2XlyAo!h9>iKj!`R_#H$zrj1+^(zi^z@uLIy$<%TCKiE2<}x1=SeBg0RK+zD&j#>teX?qJt244)TLUaf}l!VANx{{Gdj zl=3eUiNr^M)=zqe*J0&F)ne>kmGCK}7A6x#oxFc!`SJ@_UUu1g$3iwQPAx{($OK)( zxO>Hli>XFDUJ z?%etKjJmy8bNriHtzj@T5fN^??dF%yKKrbdK@fbVSv9|&kaJawY4qYk>DdpZl;>~R zvUyuB*Ov&zd9Bo91Tpi2Qp!)wwuS)!XPnW#Y;<(|K_XnjTtAFxHg$Ij z+xPwZ`};3TgmT*%WlAIjI0$M%YgA`w+L~j~kX13kWqW(uCFA20n*m%ti>bSjHgBei zOePaox3{nKEYxAP`Jk#N2Q&Kfsas2r4@-Kh+ zj0AvGD!FuWvV0RWtyT)>D5d7l#OB#uQjX&s@_qjW0N(@f{g6y^CWpli8HZXmqu_-# zklUVYZjVSNowNrL|2>2Qz&D=B`p*rf-M3oxv3Ku&X(brv5YbzRXn~Y+A%Mk1^iHKz zFMziYQM)d96^ZCorPPZ6o@3@eNGXp1c!`MqC!J0nDi$ZJN-11^xyOTpL#I>@>%R2= Xh~_Ub<$0}V00000NkvXXu0mjf%GQMx literal 7974 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%0A)EJBlwaMso{Egs(O&S&|`h z$$g#mu~r46=vfolCz)64z-LEL9$gRar5dFiHTS7?brwaIsI8)fuD{J{1FKtdO8dvw zj33{ZkS4pQmj%Z9Nlu?WmY=2BK=i;frrhICQ0zh@t;2cA?mO}B+DK33xIo9Dcj*y- z_6>l~4-lItxwb8rXBQ_T&+ZQ0+X_)7O?k1TqT~PBk}4$%|DO+~W$ozj{bFqG0vSV{ z`2@ zuJoW_snM-)nvimY6j_MVWLC6+p! zc5&ywFm7({!rq^vM>jqot^bumca~p}9AR=kU-X~4_?F0om3o7-FrtJwgS<)} z3_OW>Gd?ftgP()72kx}Y&)WxP>`yFDJj|)j9s*TX<=WTf#J!kyv55#v7O@oHa{?gK z|9dTief{`99m{ZopK}#iWO=>$r$4DOVm~V4K==ymf--~oY`C5e3yY;{a4lnr@F^hU z+R>`Hammi}k0}qjm>Efof;9U_4jPrMQrH~s{TTt29}&ijn04Q zE(@1T@^AhG|NVNsp08p#H*(Swk9S~IjO9x?qUZ<+I1+=Ehl2+Xt=s>hjYBT0=0&hp zW{H0Jp(dI}%l_w`x|Z`<4UBECt}akPlbil?U)E7nsp${pJg8qc_@kBz;g098#uA_q zc8dLRpi_y7-`+@!yMb$Xht&7ke`j#W#e|^xWFoZH0WCh{UrN+cKh;XnYKoG2F^87+ zbIQ10x#YKR6}{*4Q12J?Sl=p=^+)5>!X>ZZRXR>CiKc}}>eQ`-w}}mSpROyE+slrV zmun<&^6o-|&7mI|`urCz8ofLqajKL)P zV#vuZ#pk1bWE@>}bZTtNdDa=!sTaUca?aJWH)OX_r^mKSeau#4ar{2Bw7(l8 z5iff;+%F!3=5<}ITz$y=`glj-YC5^)#gdx5TAYL95(&>%lXW^?^v8c?;3nt%Z1rpx zS&s)}FUEJ~?O)S%%iW2(vY%fgh|DN{ELch_)y&K+Oep8+?y&qAt&jvCp~CXcW%qYD z&(X9De~O0IYzS9PixdXVJrSj&{Jq=0*R+Rm>%D4jZf5`FeYsaQ3=VP8V4i2_tyr8e z7WiCST6*5&B8jQ$3@_$~2twprWqz&vex|?*R+*CiM94$S9U-Sjot+sS!1YQ4R#XBX zzC?n8cG$mYQXEPiG!e{WeNS3ZT(LQqRT%a!<{hEzwfy9Cj+ErWg=yqu&ff1iTmfo} zkjmPWIaR_MWLmD-5T9Oa0`@F6eT{eqRZ{FD9b5NkA`xg01N6 zHA{VrdHm)}H}|ZUYp%zftyJ>eoP@6o5SCPaF9Xcf*x~lyzchCK6EXh?^6(Pze#G@w zolj>|rO+{di?<5kAjkO|_mSOpx3yZhwGhTeQD5BB;#%uHZ%|TFL6HSMcmF}{qTz~L zMjErxeM<+06LC>{Hfbz=-)Qf<0KRp0zS7awxh)#+B>25Kw>TGFP_W`EDSs@AxCDMn z6`o69ozxXxz?Qc~`J%z^k&?E$ZSp^anQ^bp*ae1*HYj|5iYM>HKIw8pySAdYGuvkc zLY&~JOm7P)W~;dZXaoN7GV-1DhskwRNYkXr2`XkgD( zcuDSksKDI-BW^49$-}Uoh5IBVSIq19`@s13@1_qbOxtAh4aZ4**%0T^X_|RQrFlo1 zPBmdPoFC>|yt|Cy=E)b&QP2~r5keK87KNNt#x}GO`4fQvaW6FADkvKaX>K-1tlqex Z;P{bJz7z;8A>3#Kx|)U>wQ3G;{tp6jUW@<$