Skip to content

Commit b980793

Browse files
committed
Replace "Loading" template with progress bar
1 parent 57b7e4a commit b980793

File tree

9 files changed

+108
-3
lines changed

9 files changed

+108
-3
lines changed

app/components/progress-bar.hbs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
<div local-class="progress-bar" style={{this.progress.style}}></div>

app/components/progress-bar.js

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
import { inject as service } from '@ember/service';
2+
import Component from '@glimmer/component';
3+
4+
export default class extends Component {
5+
@service progress;
6+
}
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
.progress-bar {
2+
position: fixed;
3+
left: 0;
4+
top: 0;
5+
height: 3px;
6+
box-shadow: 0 0 10px rgba(0, 13, 41, 0.6);
7+
background: var(--yellow) !important;
8+
}

app/controllers/application.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,4 +4,5 @@ import { inject as service } from '@ember/service';
44
export default Controller.extend({
55
design: service(),
66
flashMessages: service(),
7+
progress: service(),
78
});

app/routes/application.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { inject as service } from '@ember/service';
44
export default Route.extend({
55
flashMessages: service(),
66
googleCharts: service(),
7+
progress: service(),
78
session: service(),
89

910
beforeModel() {
@@ -15,6 +16,10 @@ export default Route.extend({
1516
},
1617

1718
actions: {
19+
loading(transition) {
20+
this.progress.handle(transition);
21+
return true;
22+
},
1823
didTransition() {
1924
this.flashMessages.step();
2025
},

app/services/progress.js

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,84 @@
1+
import Service, { inject as service } from '@ember/service';
2+
import { htmlSafe } from '@ember/string';
3+
import { tracked } from '@glimmer/tracking';
4+
5+
import { rawTimeout, task } from 'ember-concurrency';
6+
import { buildWaiter } from 'ember-test-waiters';
7+
8+
const SPEED = 200;
9+
10+
let waiter = buildWaiter('progress-bar');
11+
12+
export default class ProgressService extends Service {
13+
@service router;
14+
15+
count = 0;
16+
progress = 0;
17+
18+
@tracked _style = '';
19+
20+
get style() {
21+
return htmlSafe(this._style);
22+
}
23+
24+
handle(thenable) {
25+
this.counterTask.perform(thenable);
26+
}
27+
28+
increaseCounter() {
29+
this.count += 1;
30+
this.updateTask.perform();
31+
}
32+
33+
decreaseCounter() {
34+
this.count -= 1;
35+
}
36+
37+
@task(function* (promise) {
38+
try {
39+
this.increaseCounter();
40+
yield promise;
41+
} finally {
42+
this.decreaseCounter();
43+
}
44+
})
45+
counterTask;
46+
47+
@(task(function* () {
48+
let token = waiter.beginAsync();
49+
50+
this.progress = 0;
51+
this._style = `width: 0%`;
52+
53+
while (this.count !== 0) {
54+
yield rawTimeout(SPEED);
55+
56+
let currentAmount;
57+
if (this.progress >= 0 && this.progress < 0.2) {
58+
currentAmount = 0.1;
59+
} else if (this.progress >= 0.2 && this.progress < 0.5) {
60+
currentAmount = 0.04;
61+
} else if (this.progress >= 0.5 && this.progress < 0.8) {
62+
currentAmount = 0.02;
63+
} else if (this.progress >= 0.8 && this.progress < 0.99) {
64+
currentAmount = 0.005;
65+
} else {
66+
currentAmount = 0;
67+
}
68+
69+
this.progress += currentAmount;
70+
if (this.progress > 0.998) {
71+
this.progress = 0.998;
72+
}
73+
74+
this._style = `transition: width ${SPEED}ms linear; width: ${this.progress * 100}%`;
75+
}
76+
77+
this._style = `transition: width ${SPEED}ms linear; width: 100%`;
78+
yield rawTimeout(SPEED);
79+
this._style = `transition: opacity ${SPEED * 2}ms linear; width: 100%; opacity: 0`;
80+
81+
waiter.endAsync(token);
82+
}).drop())
83+
updateTask;
84+
}

app/styles/application.module.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
--violet: #2e2359;
33
--dark-grey: #2a3439;
44
--dark-green: #3b6837;
5+
--yellow: #ffc833;
56

67
--header-bg-color: var(--dark-green);
78
--footer-bg-color: var(--dark-green);

app/templates/application.hbs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
{{page-title "crates.io: Rust Package Registry" separator=' - ' prepend=true}}
44

5+
<ProgressBar/>
6+
57
<Header/>
68

79
<main local-class="main">

app/templates/loading.hbs

Lines changed: 0 additions & 3 deletions
This file was deleted.

0 commit comments

Comments
 (0)