Skip to content

Commit 56aa99b

Browse files
committed
Add a button to copy event id/hash.
1 parent 16492df commit 56aa99b

File tree

8 files changed

+67
-38
lines changed

8 files changed

+67
-38
lines changed

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@
1616
"@types/moment": "^2.13.0",
1717
"@types/moment-timezone": "^0.5.6",
1818
"browserify": "^16.2.2",
19+
"clipboard-copy": "^3.0.0",
1920
"markdown-it": "^8.4.2",
2021
"moment": "^2.22.2",
2122
"moment-timezone": "^0.5.20",

scss/main.scss

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,12 @@ body {
5858
color: $red;
5959
}
6060

61+
.copy {
62+
color: $dimmed_foreground;
63+
cursor: pointer;
64+
margin-left: 5px;
65+
}
66+
6167
.description {
6268
margin-top: 20px;
6369
text-align: left;

ts/CancelledEvent.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@ import * as moment from 'moment';
44
import ComponentsArray from './ComponentsArray';
55
import Countdown from './Countdown';
66
import UiComponent from './UiComponent';
7+
import Timestamp from './Timestamp';
78

89
export default class CancelledEvent implements UiComponent {
9-
constructor(private _event: dto.Event) {
10+
constructor(private _event: dto.Event,
11+
private _timestamp: string) {
1012
}
1113

1214
appendTo(entry: HTMLElement | null): void {
1315
new html.Div(
1416
new ComponentsArray([
15-
new html.Div(
16-
new html.Href(
17-
`#_${this._event.datetime.utc().unix()}`,
18-
new html.Text(`${this._event.datetime.utc().unix()}`)
19-
),
20-
{"class": "timestamp"}
21-
),
17+
new Timestamp(this._timestamp),
2218
new html.H1(
2319
new html.Href(
2420
`${this._event.url}`,

ts/CurrentEvent.ts

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,22 @@
11
import * as dto from './dto';
22
import * as html from './html';
33
import * as moment from 'moment';
4+
import copy = require('clipboard-copy')
45
import ComponentsArray from './ComponentsArray';
56
import Countdown from './Countdown';
67
import UiComponent from './UiComponent';
78
import TwitchPlayer from './TwitchPlayer';
9+
import Timestamp from './Timestamp'
810

911
export default class CurrentEvent implements UiComponent {
10-
constructor(private _event: dto.Event) {
12+
constructor(private _event: dto.Event,
13+
private _timestamp: string) {
1114
}
1215

1316
appendTo(entry: HTMLElement | null): void {
1417
new html.Div(
1518
new ComponentsArray([
16-
new html.Div(
17-
new html.Href(
18-
`#_${this._event.datetime.utc().unix()}`,
19-
new html.Text(`${this._event.datetime.utc().unix()}`)
20-
),
21-
{"class": "timestamp"}
22-
),
19+
new Timestamp(this._timestamp),
2320
new html.Div(
2421
new html.Href(
2522
this._event.channel ? this._event.channel : "https://twitch.tv/tsoding",

ts/Event.ts

Lines changed: 8 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -13,19 +13,21 @@ export default class Event implements UiComponent {
1313
}
1414

1515
appendTo(entry: HTMLElement | null): void {
16-
let secondsDiff = moment().diff(this._event.datetime, 'seconds');
16+
const secondsDiff = moment().diff(this._event.datetime, 'seconds');
17+
const timestamp = this._event.datetime.utc().unix().toString();
1718

1819
if (this.isCancelled()) {
19-
new CancelledEvent(this._event).appendTo(entry);
20+
new CancelledEvent(this._event, timestamp).appendTo(entry);
2021
} else if (0 <= secondsDiff && secondsDiff < 4 * 60 * 60) {
21-
new CurrentEvent(this._event).appendTo(entry);
22+
new CurrentEvent(this._event, timestamp).appendTo(entry);
2223
} else if (secondsDiff >= 4 * 60 * 60) {
23-
new PastEvent(this._event).appendTo(entry);
24+
new PastEvent(this._event, timestamp).appendTo(entry);
2425
} else {
25-
new FutureEvent(this._event).appendTo(entry);
26+
new FutureEvent(this._event, timestamp).appendTo(entry);
2627
}
2728

28-
const hashId = "#_" + this._event.datetime.utc().unix();
29+
const hashId = "#_" + timestamp;
30+
2931
if (window.location.hash == hashId) {
3032
window.location.hash = "";
3133
setTimeout(() => { window.location.hash = hashId; }, 0);

ts/FutureEvent.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@ import * as moment from 'moment';
44
import ComponentsArray from './ComponentsArray';
55
import Countdown from './Countdown';
66
import UiComponent from './UiComponent';
7+
import Timestamp from './Timestamp';
78

89
export default class FutureEvent implements UiComponent {
9-
constructor(private _event: dto.Event) {
10+
constructor(private _event: dto.Event,
11+
private _timestamp: string) {
1012
}
1113

1214
appendTo(entry: HTMLElement | null): void {
1315
new html.Div(
1416
new ComponentsArray([
15-
new html.Div(
16-
new html.Href(
17-
`#_${this._event.datetime.utc().unix()}`,
18-
new html.Text(`${this._event.datetime.utc().unix()}`)
19-
),
20-
{"class": "timestamp"}
21-
),
17+
new Timestamp(this._timestamp),
2218
new html.H1(
2319
new html.Href(
2420
`${this._event.url}`,

ts/PastEvent.ts

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -4,21 +4,17 @@ import * as moment from 'moment';
44
import ComponentsArray from './ComponentsArray';
55
import Countdown from './Countdown';
66
import UiComponent from './UiComponent';
7+
import Timestamp from './Timestamp';
78

89
export default class PastEvent implements UiComponent {
9-
constructor(private _event: dto.Event) {
10+
constructor(private _event: dto.Event,
11+
private _timestamp: string) {
1012
}
1113

1214
appendTo(entry: HTMLElement | null): void {
1315
new html.Div(
1416
new ComponentsArray([
15-
new html.Div(
16-
new html.Href(
17-
`#_${this._event.datetime.utc().unix()}`,
18-
new html.Text(`${this._event.datetime.utc().unix()}`)
19-
),
20-
{"class": "timestamp"}
21-
),
17+
new Timestamp(this._timestamp),
2218
new html.H1(
2319
new html.Href(
2420
`${this._event.url}`,

ts/Timestamp.ts

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
import * as dto from './dto';
2+
import * as html from './html';
3+
import * as moment from 'moment';
4+
import copy = require('clipboard-copy')
5+
import ComponentsArray from './ComponentsArray';
6+
import Countdown from './Countdown';
7+
import UiComponent from './UiComponent';
8+
import TwitchPlayer from './TwitchPlayer';
9+
10+
export default class CurrentEvent implements UiComponent {
11+
constructor(private _timestamp: string) {
12+
}
13+
14+
onCopyClick = () => {
15+
copy(this._timestamp)
16+
}
17+
18+
appendTo(entry: HTMLElement | null): void {
19+
new html.Div(
20+
new ComponentsArray([
21+
new html.Href(
22+
`#_${this._timestamp}`,
23+
new html.Text(`${this._timestamp}`)
24+
),
25+
new html.Tag(
26+
"i",
27+
new html.Empty(),
28+
{"class": "copy fas fa-copy fa-lg"},
29+
{"click": this.onCopyClick}
30+
)
31+
]),
32+
{"class": "timestamp"}
33+
).appendTo(entry);
34+
}
35+
}

0 commit comments

Comments
 (0)