Skip to content

Commit 67b7b9c

Browse files
committed
Added support for moment.calendar with moment-calendar
Fixed applying tz and locale Clarify dates in tests a bit Timezones are hard
1 parent a25bbbe commit 67b7b9c

4 files changed

Lines changed: 91 additions & 0 deletions

File tree

README.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ It's advisable to run `ember g ember-moment` between upgrades as dependencies ma
2323
{{moment-from-now date}}
2424
{{moment-to-now date}}
2525
{{moment-duration ms}}
26+
{{moment-calendar date}}
2627
```
2728

2829
### Advanced Usage
@@ -32,6 +33,7 @@ It's advisable to run `ember g ember-moment` between upgrades as dependencies ma
3233
{{moment-from-now date}}
3334
{{moment-to-now date}}
3435
{{moment-duration number units}}
36+
{{moment-calendar date referenceDate}}
3537
```
3638

3739
### Live Updating of Displayed Time

addon/helpers/moment-calendar.js

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
import moment from 'moment';
2+
3+
import BaseHelper from './-base';
4+
5+
export default BaseHelper.extend({
6+
compute(params, { locale, timeZone }) {
7+
if (!params || params && params.length > 2) {
8+
throw new TypeError('ember-moment: Invalid Number of arguments, at most 2');
9+
}
10+
11+
const [date, referenceTime] = params;
12+
13+
return this.morphMoment(moment(date), { locale, timeZone }).calendar(referenceTime);
14+
}
15+
});

app/helpers/moment-calendar.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
export { default, momentCalendar } from 'ember-moment/helpers/moment-calendar';
Lines changed: 73 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,73 @@
1+
import hbs from 'htmlbars-inline-precompile';
2+
import { test } from 'ember-qunit';
3+
import date from '../../helpers/date';
4+
import { runAppend, runDestroy } from '../../helpers/run-append';
5+
import moduleForHelper from '../../helpers/module-for-helper';
6+
import moment from 'moment';
7+
8+
moduleForHelper('moment-calendar', {
9+
needs: ['service:moment'],
10+
});
11+
12+
test('one arg (date)', function(assert) {
13+
assert.expect(1);
14+
15+
const view = this.createView({
16+
template: hbs`{{moment-calendar date}}`,
17+
context: {
18+
date: date(date(0)),
19+
}
20+
});
21+
22+
runAppend(view);
23+
assert.equal(view.$().text(), '12/31/1969');
24+
runDestroy(view);
25+
});
26+
27+
test('two args (date, referenceDate)', function(assert) {
28+
assert.expect(1);
29+
30+
const view = this.createView({
31+
template: hbs`{{moment-calendar date referenceDate timeZone='America/New_York'}}`,
32+
context: {
33+
date: moment('2013-01-01T02:30:26Z'),
34+
referenceDate: moment('2013-01-01T12:00:00Z'),
35+
}
36+
});
37+
38+
runAppend(view);
39+
assert.equal(view.$().text(), 'Yesterday at 9:30 PM');
40+
runDestroy(view);
41+
});
42+
43+
test('with es locale', function(assert) {
44+
assert.expect(1);
45+
46+
const view = this.createView({
47+
template: hbs`{{moment-calendar date referenceDate locale="es" timeZone='America/New_York'}}`,
48+
context: {
49+
date: moment('2013-01-01T08:30:26Z'),
50+
referenceDate: moment('2013-01-01T12:00:00Z'),
51+
}
52+
});
53+
54+
runAppend(view);
55+
assert.equal(view.$().text(), 'hoy a las 3:30');
56+
runDestroy(view);
57+
});
58+
59+
test('can inline timeZone (Sydney)', function(assert) {
60+
assert.expect(1);
61+
62+
const view = this.createView({
63+
template: hbs`{{moment-calendar date referenceDate timeZone='Australia/Sydney'}}`,
64+
context: {
65+
date: moment('2013-01-01T08:30:26Z'),
66+
referenceDate: moment('2013-01-01T12:00:00Z'),
67+
}
68+
});
69+
70+
runAppend(view);
71+
assert.equal(view.$().text(), 'Today at 7:30 PM', 'Australia is 11 hours ahead of UTC');
72+
runDestroy(view);
73+
});

0 commit comments

Comments
 (0)