playbook_ui 12.28.0.pre.alpha.PLAY814removemomentjs871 → 12.28.0.pre.alpha.PLAY837MapCustomButton868
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/app/pb_kits/playbook/index.js +1 -0
- data/app/pb_kits/playbook/pb_date/_date.tsx +8 -7
- data/app/pb_kits/playbook/pb_date_range_inline/_date_range_inline.tsx +31 -45
- data/app/pb_kits/playbook/pb_date_range_stacked/_date_range_stacked.tsx +3 -5
- data/app/pb_kits/playbook/pb_date_stacked/_date_stacked.tsx +21 -24
- data/app/pb_kits/playbook/pb_date_time/_date_time.tsx +1 -1
- data/app/pb_kits/playbook/pb_date_time/dateTime.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_time_stacked/_date_time_stacked.tsx +2 -2
- data/app/pb_kits/playbook/pb_date_time_stacked/date_time_stacked.test.js +1 -1
- data/app/pb_kits/playbook/pb_date_year_stacked/_date_year_stacked.tsx +8 -6
- data/app/pb_kits/playbook/pb_kit/dateTime.ts +67 -139
- data/app/pb_kits/playbook/pb_label_value/_label_value.tsx +31 -52
- data/app/pb_kits/playbook/pb_logistic/_logistic.jsx +120 -0
- data/app/pb_kits/playbook/pb_map/_map.scss +16 -1
- data/app/pb_kits/playbook/pb_map/_map.tsx +9 -26
- data/app/pb_kits/playbook/pb_map/_map_controls.tsx +47 -0
- data/app/pb_kits/playbook/pb_map/_map_custom_button.tsx +18 -0
- data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.jsx +83 -0
- data/app/pb_kits/playbook/pb_map/docs/_map_with_custom_button.md +1 -0
- data/app/pb_kits/playbook/pb_map/docs/example.yml +1 -0
- data/app/pb_kits/playbook/pb_map/docs/index.js +1 -0
- data/app/pb_kits/playbook/pb_message/_message.tsx +25 -25
- data/app/pb_kits/playbook/pb_time/_time.tsx +11 -9
- data/app/pb_kits/playbook/pb_time_range_inline/_time_range_inline.tsx +49 -46
- data/app/pb_kits/playbook/pb_time_stacked/_time_stacked.tsx +6 -4
- data/app/pb_kits/playbook/pb_timestamp/_timestamp.tsx +10 -10
- data/app/pb_kits/playbook/pb_weekday_stacked/_weekday_stacked.tsx +11 -8
- data/dist/playbook-rails.js +6 -6
- data/lib/playbook/version.rb +1 -1
- metadata +7 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a11d84418c9c01374cd74d38a154f76d034ff440cd3a8580ffdace764232279e
|
4
|
+
data.tar.gz: fbf756271614a013e06861498022157b2a6c585f7402a6d14c2c1a34052745cd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 366d06de731005646685950b3bd763a791716076d22bb077265dee3ed18727fb7d6eefdc5063e1cb02b4246fee19cf8d692260294fd2c91c422cff8fec7dc0d6
|
7
|
+
data.tar.gz: ca19bd5db001368a141c1fa553313170d5fdc6ec1badb596160027f9c105cb97f7e117f9c3915b8cd039d7e8c0014dac4ba816a93e6f3cdbb90cbdb7860f6cd2
|
@@ -60,6 +60,7 @@ export { default as List } from './pb_list/_list'
|
|
60
60
|
export { default as ListItem } from './pb_list/_list_item'
|
61
61
|
export { default as LoadingInline } from './pb_loading_inline/_loading_inline'
|
62
62
|
export { default as Map} from './pb_map/_map'
|
63
|
+
export { default as MapCustomButton } from './pb_map/_map_custom_button'
|
63
64
|
export { default as Message } from './pb_message/_message'
|
64
65
|
export { default as MultiLevelSelect} from './pb_multi_level_select/_multi_level_select'
|
65
66
|
export { default as MultipleUsers } from './pb_multiple_users/_multiple_users'
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from "react";
|
2
2
|
import classnames from "classnames";
|
3
3
|
|
4
|
+
import DateTime from "../pb_kit/dateTime";
|
4
5
|
import { buildAriaProps, buildCss, buildDataProps } from "../utilities/props";
|
5
6
|
import { globalProps } from "../utilities/globalProps";
|
6
|
-
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Body from "../pb_body/_body";
|
9
9
|
import Caption from "../pb_caption/_caption";
|
@@ -20,7 +20,7 @@ type PbDateProps = {
|
|
20
20
|
showIcon?: boolean;
|
21
21
|
size?: "sm" | "md" | "lg";
|
22
22
|
unstyled?: boolean;
|
23
|
-
value: Date;
|
23
|
+
value: string | Date;
|
24
24
|
};
|
25
25
|
|
26
26
|
const PbDate = (props: PbDateProps) => {
|
@@ -37,11 +37,12 @@ const PbDate = (props: PbDateProps) => {
|
|
37
37
|
value,
|
38
38
|
} = props;
|
39
39
|
|
40
|
-
const
|
41
|
-
const
|
42
|
-
const
|
43
|
-
const
|
44
|
-
const
|
40
|
+
const dateTimestamp = new DateTime({ value: value });
|
41
|
+
const weekday = dateTimestamp.toWeekday();
|
42
|
+
const month = dateTimestamp.toMonth();
|
43
|
+
const day = dateTimestamp.toDay();
|
44
|
+
const year = dateTimestamp.toYear();
|
45
|
+
const currentYear = new Date().getFullYear().toString();
|
45
46
|
|
46
47
|
const ariaProps = buildAriaProps(aria);
|
47
48
|
const dataProps = buildDataProps(data);
|
@@ -3,7 +3,7 @@ import classnames from "classnames";
|
|
3
3
|
|
4
4
|
import { globalProps } from "../utilities/globalProps";
|
5
5
|
import { buildCss, buildDataProps } from "../utilities/props";
|
6
|
-
import DateTime from
|
6
|
+
import DateTime from "../pb_kit/dateTime";
|
7
7
|
|
8
8
|
import Body from "../pb_body/_body";
|
9
9
|
import Caption from "../pb_caption/_caption";
|
@@ -21,16 +21,18 @@ type DateRangeInlineProps = {
|
|
21
21
|
endDate?: Date;
|
22
22
|
};
|
23
23
|
|
24
|
-
const dateTimestamp = (dateValue: Date, includeYear: boolean) => {
|
24
|
+
const dateTimestamp = (dateValue: Date | string, includeYear: boolean) => {
|
25
|
+
const date = new DateTime({ value: dateValue });
|
25
26
|
if (includeYear) {
|
26
|
-
return `${
|
27
|
+
return `${date.toMonth()} ${date.toDay()}, ${date.toYear()}`;
|
27
28
|
} else {
|
28
|
-
return `${
|
29
|
+
return `${date.toMonth()} ${date.toDay()}`;
|
29
30
|
}
|
30
31
|
};
|
31
32
|
|
32
|
-
const dateTimeIso = (dateValue: Date) => {
|
33
|
-
|
33
|
+
const dateTimeIso = (dateValue: Date | string) => {
|
34
|
+
const date = new DateTime({ value: dateValue });
|
35
|
+
return date.toIso();
|
34
36
|
};
|
35
37
|
|
36
38
|
const DateRangeInline = (props: DateRangeInlineProps) => {
|
@@ -50,17 +52,14 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
|
|
50
52
|
<>
|
51
53
|
{icon && (
|
52
54
|
<>
|
53
|
-
<Body color="light"
|
54
|
-
key={Math.random()}
|
55
|
-
tag="span"
|
56
|
-
>
|
55
|
+
<Body color="light" key={Math.random()} tag="span">
|
57
56
|
<Icon
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
57
|
+
className="pb_date_range_inline_icon"
|
58
|
+
dark={dark}
|
59
|
+
fixedWidth
|
60
|
+
icon="calendar-alt"
|
61
|
+
size={size}
|
62
|
+
tag="span"
|
64
63
|
/>
|
65
64
|
</Body>
|
66
65
|
</>
|
@@ -79,7 +78,7 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
|
|
79
78
|
|
80
79
|
const dateRangeClasses = buildCss("pb_date_range_inline_kit", align);
|
81
80
|
const dataProps = buildDataProps(data)
|
82
|
-
const renderTime = (date: Date) => {
|
81
|
+
const renderTime = (date: Date | string) => {
|
83
82
|
return (
|
84
83
|
<time dateTime={dateTimeIso(date)}>
|
85
84
|
{dateInCurrentYear() ? (
|
@@ -93,30 +92,24 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
|
|
93
92
|
|
94
93
|
return (
|
95
94
|
<div
|
96
|
-
|
97
|
-
|
95
|
+
{...dataProps}
|
96
|
+
className={classnames(dateRangeClasses, globalProps(props), className)}
|
98
97
|
>
|
99
98
|
<div className="pb_date_range_inline_wrapper">
|
100
99
|
{size == "xs" && (
|
101
100
|
<>
|
102
101
|
{iconContent()}
|
103
|
-
<Caption dark={dark}
|
104
|
-
tag="span"
|
105
|
-
>
|
102
|
+
<Caption dark={dark} tag="span">
|
106
103
|
{renderTime(startDate)}
|
107
104
|
</Caption>
|
108
|
-
<Caption dark={dark}
|
109
|
-
tag="span"
|
110
|
-
>
|
105
|
+
<Caption dark={dark} tag="span">
|
111
106
|
<Icon
|
112
|
-
|
113
|
-
|
114
|
-
|
107
|
+
className="pb_date_range_inline_arrow"
|
108
|
+
fixedWidth
|
109
|
+
icon="long-arrow-right"
|
115
110
|
/>
|
116
111
|
</Caption>
|
117
|
-
<Caption dark={dark}
|
118
|
-
tag="span"
|
119
|
-
>
|
112
|
+
<Caption dark={dark} tag="span">
|
120
113
|
{renderTime(endDate)}
|
121
114
|
</Caption>
|
122
115
|
</>
|
@@ -125,25 +118,18 @@ const DateRangeInline = (props: DateRangeInlineProps) => {
|
|
125
118
|
{size == "sm" && (
|
126
119
|
<>
|
127
120
|
{iconContent()}
|
128
|
-
<Body dark={dark}
|
129
|
-
tag="span"
|
130
|
-
>
|
121
|
+
<Body dark={dark} tag="span">
|
131
122
|
{renderTime(startDate)}
|
132
123
|
</Body>
|
133
|
-
<Body color="light"
|
134
|
-
dark={dark}
|
135
|
-
tag="span"
|
136
|
-
>
|
124
|
+
<Body color="light" dark={dark} tag="span">
|
137
125
|
<Icon
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
126
|
+
className="pb_date_range_inline_arrow"
|
127
|
+
dark={dark}
|
128
|
+
fixedWidth
|
129
|
+
icon="long-arrow-right"
|
142
130
|
/>
|
143
131
|
</Body>
|
144
|
-
<Body dark={dark}
|
145
|
-
tag="span"
|
146
|
-
>
|
132
|
+
<Body dark={dark} tag="span">
|
147
133
|
{renderTime(endDate)}
|
148
134
|
</Body>
|
149
135
|
</>
|
@@ -14,9 +14,9 @@ type DateRangeStackedProps = {
|
|
14
14
|
className?: string | string[],
|
15
15
|
data?: string,
|
16
16
|
dark?: boolean,
|
17
|
-
endDate:
|
17
|
+
endDate: string,
|
18
18
|
id?: string,
|
19
|
-
startDate:
|
19
|
+
startDate: string,
|
20
20
|
}
|
21
21
|
|
22
22
|
const DateRangeStacked = (props: DateRangeStackedProps) => {
|
@@ -29,9 +29,7 @@ const DateRangeStacked = (props: DateRangeStackedProps) => {
|
|
29
29
|
const dataProps = buildDataProps(data)
|
30
30
|
|
31
31
|
return (
|
32
|
-
<div {...dataProps}
|
33
|
-
className={css}
|
34
|
-
>
|
32
|
+
<div {...dataProps} className={css}>
|
35
33
|
<Flex vertical="center">
|
36
34
|
<FlexItem>
|
37
35
|
<DateYearStacked
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from "react";
|
2
2
|
|
3
3
|
import classnames from "classnames";
|
4
|
+
import DateTime from "../pb_kit/dateTime";
|
4
5
|
import { buildCss, buildDataProps } from "../utilities/props";
|
5
6
|
import { globalProps } from "../utilities/globalProps";
|
6
|
-
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Caption from "../pb_caption/_caption";
|
9
9
|
import Title from "../pb_title/_title";
|
@@ -14,7 +14,7 @@ type DateStackedProps = {
|
|
14
14
|
className?: string | string[];
|
15
15
|
dark?: boolean;
|
16
16
|
data?: string;
|
17
|
-
date: Date;
|
17
|
+
date: string | Date;
|
18
18
|
size?: "sm" | "md";
|
19
19
|
id?: string;
|
20
20
|
reverse?: boolean;
|
@@ -45,42 +45,39 @@ const DateStacked = (props: DateStackedProps) => {
|
|
45
45
|
className
|
46
46
|
);
|
47
47
|
|
48
|
-
const currentYear = new Date().getFullYear()
|
49
|
-
const
|
48
|
+
const currentYear = new Date().getFullYear().toString();
|
49
|
+
const dateTimestamp = new DateTime({ value: date });
|
50
|
+
const inputYear = dateTimestamp.toYear().toString();
|
50
51
|
const dataProps = buildDataProps(data)
|
51
52
|
|
52
53
|
return (
|
53
54
|
<>
|
54
55
|
{bold == false ? (
|
55
|
-
<div {...dataProps}
|
56
|
-
className={classes}
|
57
|
-
>
|
56
|
+
<div {...dataProps} className={classes}>
|
58
57
|
<div className="pb_date_stacked_day_month">
|
59
|
-
<Caption text={
|
58
|
+
<Caption text={dateTimestamp.toMonth().toUpperCase()} />
|
60
59
|
<Title
|
61
|
-
|
62
|
-
|
63
|
-
|
60
|
+
dark={dark}
|
61
|
+
size={sizes[size]}
|
62
|
+
text={dateTimestamp.toDay()}
|
64
63
|
/>
|
65
64
|
</div>
|
66
65
|
{currentYear != inputYear && <Caption size="xs">{inputYear}</Caption>}
|
67
66
|
</div>
|
68
67
|
) : (
|
69
|
-
<div {...dataProps}
|
70
|
-
className={classes}
|
71
|
-
>
|
68
|
+
<div {...dataProps} className={classes}>
|
72
69
|
<div className="pb_date_stacked_day_month">
|
73
|
-
<Title
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
70
|
+
<Title
|
71
|
+
bold
|
72
|
+
dark={dark}
|
73
|
+
size="4"
|
74
|
+
text={dateTimestamp.toMonth()}
|
78
75
|
/>
|
79
|
-
<Title
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
<Title
|
77
|
+
bold
|
78
|
+
dark={dark}
|
79
|
+
size="4"
|
80
|
+
text={dateTimestamp.toDay()}
|
84
81
|
/>
|
85
82
|
{currentYear != inputYear && <Title size="4">{inputYear}</Title>}
|
86
83
|
</div>
|
@@ -89,7 +89,7 @@ describe('DateTime Kit', () => {
|
|
89
89
|
const kit = screen.getByTestId(testId)
|
90
90
|
const text = kit.querySelector('.pb_time_kit_md.ml_sm')
|
91
91
|
|
92
|
-
expect(text.textContent).toEqual('2:00p
|
92
|
+
expect(text.textContent).toEqual('2:00p JST')
|
93
93
|
})
|
94
94
|
test('renders DatePicker size', () => {
|
95
95
|
render(
|
@@ -34,7 +34,7 @@ test('renders time in default timezone', () => {
|
|
34
34
|
test('renders time in timezone', () => {
|
35
35
|
props.timeZone = 'Asia/Tokyo'
|
36
36
|
const kit = renderKit(DateTimeStacked, props)
|
37
|
-
expect(kit).toHaveTextContent(`${monthDayYear}2:
|
37
|
+
expect(kit).toHaveTextContent(`${monthDayYear}2:00aJST`)
|
38
38
|
})
|
39
39
|
|
40
40
|
test('renders time in timezone', () => {
|
@@ -1,9 +1,9 @@
|
|
1
1
|
import React from 'react'
|
2
2
|
import classnames from 'classnames'
|
3
3
|
|
4
|
+
import DateTime from '../pb_kit/dateTime'
|
4
5
|
import { buildCss, buildDataProps } from '../utilities/props'
|
5
6
|
import { globalProps } from '../utilities/globalProps'
|
6
|
-
import DateTime from '../pb_kit/dateTime';
|
7
7
|
|
8
8
|
import Body from '../pb_body/_body'
|
9
9
|
import Title from '../pb_title/_title'
|
@@ -13,12 +13,13 @@ type DateYearStackedProps = {
|
|
13
13
|
className?: string | string[],
|
14
14
|
dark?: boolean,
|
15
15
|
data?: string,
|
16
|
-
date:
|
16
|
+
date: string,
|
17
17
|
id?: string,
|
18
18
|
}
|
19
19
|
|
20
20
|
const DateYearStacked = (props: DateYearStackedProps) => {
|
21
21
|
const { align = 'left', className, dark = false, date, data={} } = props
|
22
|
+
const dateTimestamp = new DateTime({ value: date })
|
22
23
|
const css = classnames(
|
23
24
|
buildCss('pb_date_year_stacked', align),
|
24
25
|
globalProps(props),
|
@@ -28,14 +29,15 @@ const DateYearStacked = (props: DateYearStackedProps) => {
|
|
28
29
|
|
29
30
|
return (
|
30
31
|
<div {...dataProps}
|
31
|
-
|
32
|
-
>
|
32
|
+
className={css}>
|
33
33
|
<Title
|
34
34
|
dark={dark}
|
35
35
|
size={4}
|
36
|
-
text={`${
|
36
|
+
text={`${dateTimestamp.toDay()} ${dateTimestamp
|
37
|
+
.toMonth()
|
38
|
+
.toUpperCase()}`}
|
37
39
|
/>
|
38
|
-
<Body color="light">{
|
40
|
+
<Body color="light">{dateTimestamp.toYear()}</Body>
|
39
41
|
</div>
|
40
42
|
)
|
41
43
|
}
|
@@ -1,162 +1,90 @@
|
|
1
|
+
|
2
|
+
import moment, { Moment } from 'moment'
|
3
|
+
import 'moment-strftime'
|
4
|
+
import 'moment-timezone'
|
5
|
+
|
6
|
+
type DateTimeType = {
|
7
|
+
value: string | Date,
|
8
|
+
zone?: string,
|
9
|
+
}
|
10
|
+
|
1
11
|
const ABBR_DAYS = ['SU', 'M', 'T', 'W', 'TH', 'F', 'S']
|
2
12
|
|
3
|
-
|
13
|
+
export default class DateTime {
|
14
|
+
value: Moment & any
|
15
|
+
constructor({ value, zone = 'America/New_York' }: DateTimeType) {
|
16
|
+
this.value = this.convertToTimestampZone(value, zone)
|
17
|
+
}
|
4
18
|
|
5
|
-
|
19
|
+
convertToTimestampZone(value: string | Date, zone: string) {
|
20
|
+
return moment(value).tz(zone)
|
21
|
+
}
|
6
22
|
|
7
|
-
|
8
|
-
|
9
|
-
if (timeZone) {
|
10
|
-
return date.toLocaleTimeString(undefined, {timeZone, hour: "2-digit", minute: "2-digit"}).slice(3, 5);
|
11
|
-
} else {
|
12
|
-
return date.toLocaleTimeString(undefined, {hour: "2-digit", minute: "2-digit"}).slice(3, 5);
|
23
|
+
convertToTimezone() {
|
24
|
+
return this.value.strftime('%Z')
|
13
25
|
}
|
14
|
-
}
|
15
26
|
|
16
|
-
|
17
|
-
|
18
|
-
if (timeZone) {
|
19
|
-
return date.toLocaleTimeString(undefined, {timeZone, hour: "numeric"}).split(' ')[0];
|
20
|
-
} else {
|
21
|
-
return date.toLocaleTimeString(undefined, {hour: "numeric"}).split(' ')[0];
|
27
|
+
toCustomFormat(format = '%-m/%-d') {
|
28
|
+
return this.value.strftime(format)
|
22
29
|
}
|
23
|
-
}
|
24
30
|
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
return date.getUTCDate()
|
29
|
-
} else {
|
30
|
-
const date = new Date(newDate)
|
31
|
-
return date.getUTCDate()
|
32
|
-
}
|
33
|
-
}
|
31
|
+
toYear() {
|
32
|
+
return this.value.strftime('%Y')
|
33
|
+
}
|
34
34
|
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
}
|
35
|
+
toMonth() {
|
36
|
+
return this.value.strftime('%b')
|
37
|
+
}
|
39
38
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
}
|
39
|
+
toMonthNum() {
|
40
|
+
return this.value.strftime('%-m')
|
41
|
+
}
|
44
42
|
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
return months[date.getUTCMonth()]
|
49
|
-
} else {
|
50
|
-
const date = new Date(newDate)
|
51
|
-
return months[date.getUTCMonth()]
|
52
|
-
}
|
53
|
-
}
|
43
|
+
toMonthFull() {
|
44
|
+
return this.value.strftime('%B')
|
45
|
+
}
|
54
46
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
}
|
47
|
+
toDay() {
|
48
|
+
return this.value.strftime('%e')
|
49
|
+
}
|
59
50
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
return date.getUTCFullYear()
|
64
|
-
} else {
|
65
|
-
const date = new Date(newDate)
|
66
|
-
return date.getUTCFullYear()
|
67
|
-
}
|
68
|
-
}
|
51
|
+
toDayAbbr() {
|
52
|
+
return ABBR_DAYS[this.value.day()]
|
53
|
+
}
|
69
54
|
|
70
|
-
|
71
|
-
|
72
|
-
if (timeZone) {
|
73
|
-
return date.toLocaleTimeString(undefined, {timeZone, timeStyle: "short"}).split(' ')[0];
|
74
|
-
} else {
|
75
|
-
return date.toLocaleTimeString(undefined, {timeStyle: "short"}).split(' ')[0];
|
55
|
+
toWeekday() {
|
56
|
+
return this.value.strftime('%a')
|
76
57
|
}
|
77
|
-
}
|
78
58
|
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
return date.toLocaleString(undefined, {timeZone, hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
83
|
-
} else {
|
84
|
-
return date.toLocaleString(undefined, {hour12: true }).slice(-2).charAt(0).toLocaleLowerCase();
|
85
|
-
}
|
86
|
-
}
|
59
|
+
toHour() {
|
60
|
+
return this.value.strftime('%l')
|
61
|
+
}
|
87
62
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
return date.toLocaleString(undefined, {timeZone, timeZoneName: "short"}).split(' ')[3];
|
92
|
-
} else {
|
93
|
-
return date.toLocaleString(undefined, {timeZoneName: "short"}).split(' ')[3];
|
94
|
-
}
|
95
|
-
}
|
63
|
+
toMinute() {
|
64
|
+
return this.value.strftime('%M')
|
65
|
+
}
|
96
66
|
|
97
|
-
|
98
|
-
|
99
|
-
|
100
|
-
}
|
67
|
+
toMeridian() {
|
68
|
+
return this.value.strftime('%P')[0]
|
69
|
+
}
|
101
70
|
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
}
|
71
|
+
toIso() {
|
72
|
+
return this.value.toISOString()
|
73
|
+
}
|
106
74
|
|
107
|
-
|
108
|
-
|
109
|
-
const startDate = new Date(newDate).getTime()
|
110
|
-
const endDate = new Date().getTime()
|
111
|
-
const elapsedTime = endDate - startDate
|
112
|
-
let elapsedTimeString = `${Math.round(elapsedTime / (365.25 * 24 * 60 * 60 * 1000))} years ago.`; // 730+ days
|
113
|
-
|
114
|
-
const elapsedTimeData = [
|
115
|
-
{ min: 0, max: 44999, value: "a few seconds ago" }, // 0-44 seconds
|
116
|
-
{ min: 45000, max: 89999, value: "a minute ago" }, // 45-89 seconds
|
117
|
-
{ min: 90000, max: 2649999, value: `${Math.round(elapsedTime / 60000)} minutes ago`}, // 90s-44 minutes
|
118
|
-
{ min: 2650000, max: 7299999, value: "an hour ago" }, // 45-120 minutes
|
119
|
-
{ min: 7300000, max: 75699999, value: `${Math.round(elapsedTime / 3600000)} hours ago`}, // 2-21 hours
|
120
|
-
{ min: 75700000, max: 172899999, value: "a day ago" }, // 22-48 hours
|
121
|
-
{ min: 172900000, max: 2169999999, value: `${Math.round(elapsedTime / 86400000)} days ago`}, // 2-25 days
|
122
|
-
{ min: 2170000000, max: 5184999999, value: "a month ago"}, // 26-60 days
|
123
|
-
{ min: 5185000000, max: 27561699999, value: `${Math.round(elapsedTime / 30.44 * 24 * 60 * 60 * 1000)} months ago`}, // 60-319 days
|
124
|
-
{ min: 27561700000, max: 63072999999, value: "a year ago"}, // 320-730 days
|
125
|
-
];
|
126
|
-
|
127
|
-
for (const timeDate of elapsedTimeData) {
|
128
|
-
if (elapsedTime >= timeDate.min && elapsedTime <= timeDate.max) {
|
129
|
-
elapsedTimeString = timeDate.value;
|
130
|
-
break;
|
131
|
-
}
|
132
|
-
}
|
133
|
-
|
134
|
-
return elapsedTimeString
|
135
|
-
}
|
75
|
+
toTime() {
|
76
|
+
const time = this.value.strftime('%I:%M')
|
136
77
|
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
return `${toMonthNum(date)}/${toDay(date)}`
|
141
|
-
} else {
|
142
|
-
return `${date.toLocaleString(undefined, {month: "short"})} ${toDay(date)}`
|
78
|
+
// strftime adds a leading 0 on single hour times. ie 08:31.
|
79
|
+
// this removes that 0 to match the rails kit.
|
80
|
+
return time.charAt() === '0' ? time.slice(1) : time
|
143
81
|
}
|
144
|
-
}
|
145
82
|
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
toYear,
|
155
|
-
toTime,
|
156
|
-
toMeridiem,
|
157
|
-
toTimeZone,
|
158
|
-
toTimeWithMeridiem,
|
159
|
-
toIso,
|
160
|
-
fromNow,
|
161
|
-
toCustomFormat,
|
162
|
-
}
|
83
|
+
toTimezone() {
|
84
|
+
return this.value.strftime('%Z')
|
85
|
+
}
|
86
|
+
|
87
|
+
toTimeWithMeridian() {
|
88
|
+
return this.toTime() + this.toMeridian()
|
89
|
+
}
|
90
|
+
}
|