Skip to content

Commit 86d3657

Browse files
committed
Auto merge of #3222 - Turbo87:date-fns, r=locks
Replace Moment.js with date-fns see https://momentjs.com/docs/#/-project-status/ ### Before - cargo.js: 337.66 KB (46.46 KB gzipped) - vendor.js: 994.86 KB (267.9 KB gzipped) ### After - cargo.js: 333.25 KB (46.21 KB gzipped) - vendor.js: 928.56 KB (251.39 KB gzipped) r? `@locks`
2 parents c036210 + 4be3870 commit 86d3657

19 files changed

+112
-91
lines changed

app/components/crate-row.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
{{svg-jar "latest-updates" height="32" width="32"}}
3636
<span>
3737
<abbr title="The last time crate was updated">Updated:</abbr>
38-
<time title="Last updated: {{ @crate.updated_at }}" datetime="{{ moment-format @crate.updated_at 'YYYY-MM-DDTHH:mm:ssZ' }}" data-test-updated-at>
39-
{{ moment-from-now @crate.updated_at }}
38+
<time title="Last updated: {{ @crate.updated_at }}" datetime="{{date-format-iso @crate.updated_at}}" data-test-updated-at>
39+
{{date-format-distance-to-now @crate.updated_at addSuffix=true}}
4040
</time>
4141
</span>
4242
</div>

app/components/crate-row.module.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
padding-top: 5px;
88
display: flex;
99
flex-direction: column;
10-
width: 75%;
10+
width: 70%;
1111
}
1212

1313
.name {
@@ -51,7 +51,7 @@
5151
}
5252

5353
.stats {
54-
width: 25%;
54+
width: 30%;
5555
color: var(--main-color-light);
5656
}
5757

app/components/download-graph.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default class DownloadGraph extends Component {
3030
padding: 10,
3131
},
3232
scales: {
33-
xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM D', unit: 'day' } }],
33+
xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM d', unit: 'day' } }],
3434
yAxes: [{ stacked: true, ticks: { min: 0, precision: 0 } }],
3535
},
3636
tooltips: {

app/components/pending-owner-invite-row.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
</p>
2727
</div>
2828
<div local-class="date-column" data-test-date>
29-
{{moment-from-now @invite.created_at}}
29+
{{date-format-distance-to-now @invite.created_at addSuffix=true}}
3030
</div>
3131
<div>
3232
<button type="button" local-class="accept-button" data-test-accept-button {{on "click" (perform this.acceptInvitationTask)}}>Accept</button>
3333
<button type="button" local-class="decline-button" data-test-decline-button {{on "click" (perform this.declineInvitationTask)}}>Decline</button>
3434
</div>
3535
</div>
36-
{{/if}}
36+
{{/if}}

app/components/settings/api-tokens.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@
6262

6363
<div local-class="dates">
6464
<span title={{token.created_at}} local-class="created-at" data-test-created-at>
65-
Created {{moment-from-now token.created_at}}
65+
Created {{date-format-distance-to-now token.created_at addSuffix=true}}
6666
</span>
6767
<span title={{token.last_used_at}} local-class="last-used-at" data-test-last-used-at>
6868
{{#if token.last_used_at}}
69-
Last used {{moment-from-now token.last_used_at}}
69+
Last used {{date-format-distance-to-now token.last_used_at addSuffix=true}}
7070
{{else}}
7171
Never used
7272
{{/if}}

app/controllers/crate/version.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { computed } from '@ember/object';
33
import { alias, gt, readOnly } from '@ember/object/computed';
44
import { inject as service } from '@ember/service';
55

6+
import subDays from 'date-fns/subDays';
67
import { task } from 'ember-concurrency';
7-
import moment from 'moment';
88

99
import ajax from '../../utils/ajax';
1010

@@ -53,9 +53,11 @@ export default class CrateVersionController extends Controller {
5353

5454
let dates = {};
5555
let versions = [];
56+
57+
let now = new Date();
5658
for (let i = 0; i < 90; i++) {
57-
let now = moment().subtract(i, 'days');
58-
dates[now.toISOString().slice(0, 10)] = { date: now, cnt: {} };
59+
let date = subDays(now, i);
60+
dates[date.toISOString().slice(0, 10)] = { date, cnt: {} };
5961
}
6062

6163
downloads.forEach(d => {
@@ -95,7 +97,7 @@ export default class CrateVersionController extends Controller {
9597
}
9698
let data = [headers];
9799
for (let date in dates) {
98-
let row = [dates[date].date.toDate()];
100+
let row = [dates[date].date];
99101
for (let version of versions) {
100102
row.push(dates[date].cnt[version.id] || 0);
101103
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import formatDistanceToNow from 'date-fns/formatDistanceToNow';
4+
5+
export default helper(function ([date], options) {
6+
if (date) {
7+
return formatDistanceToNow(date, { ...options });
8+
}
9+
});

app/helpers/date-format-iso.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import formatISO from 'date-fns/formatISO';
4+
5+
export default helper(function ([date], options) {
6+
if (date) {
7+
return formatISO(date, { ...options });
8+
}
9+
});

app/helpers/date-format.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import format from 'date-fns/format';
4+
5+
export default helper(function ([date, pattern], options) {
6+
if (date) {
7+
return format(date, pattern, { ...options });
8+
}
9+
});

app/services/chartjs.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,57 @@
1+
import { assert } from '@ember/debug';
12
import Service from '@ember/service';
23

4+
import addDays from 'date-fns/addDays';
5+
import differenceInDays from 'date-fns/differenceInDays';
6+
import endOfDay from 'date-fns/endOfDay';
7+
import format from 'date-fns/format';
8+
import startOfDay from 'date-fns/startOfDay';
39
import { task } from 'ember-concurrency';
410

511
export default class ChartJsLoader extends Service {
612
@(task(function* () {
713
let Chart = yield import('chart.js').then(module => module.default);
14+
15+
Chart._adapters._date.override({
16+
_id: 'date-fns', // DEBUG
17+
18+
formats() {
19+
return { day: 'MMM d' };
20+
},
21+
22+
parse(value) {
23+
if (value === null || value === undefined) {
24+
return null;
25+
}
26+
assert('`value` must be a `Date`', value instanceof Date);
27+
return !isNaN(value) ? value.getTime() : null;
28+
},
29+
30+
format(time, fmt) {
31+
return format(time, fmt, this.options);
32+
},
33+
34+
add(time, amount, unit) {
35+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
36+
return addDays(time, amount);
37+
},
38+
39+
diff(max, min, unit) {
40+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
41+
return differenceInDays(max, min);
42+
},
43+
44+
startOf(time, unit) {
45+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
46+
return startOfDay(time);
47+
},
48+
49+
endOf(time, unit) {
50+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
51+
return endOfDay(time);
52+
},
53+
});
54+
855
Chart.platform.disableCSSInjection = true;
956
return Chart;
1057
}).drop())

0 commit comments

Comments
 (0)