@raketa-cloud/admin 0.0.62 → 0.0.65
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.
- package/package.json +1 -1
- package/src/cloud/Articles.js +3 -42
- package/src/cloud/Events.js +3 -29
- package/src/cloud/Pages.js +3 -29
- package/src/cloud/documents/articlesDocuments.js +11 -14
- package/src/cloud/documents/common.js +14 -0
- package/src/cloud/documents/eventsDocuments.js +13 -14
- package/src/cloud/documents/pagesDocuments.js +10 -14
- package/src/views/articles/index.ejs +27 -1
- package/src/views/articles/show.ejs +2 -2
- package/src/views/events/index.ejs +27 -1
- package/src/views/events/show.ejs +2 -2
- package/src/views/layouts/application.ejs +36 -7
- package/src/views/pages/index.ejs +22 -1
- package/src/views/pages/show.ejs +2 -2
- package/src/views/redirects/index.ejs +2 -2
- package/src/views/redirects/show.ejs +3 -3
package/package.json
CHANGED
package/src/cloud/Articles.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
DeleteArticleDocument,
|
|
8
8
|
TranslateArticleDocument,
|
|
9
9
|
ChangeArticleSlugDocument,
|
|
10
|
-
|
|
10
|
+
MiniArticlesDocument,
|
|
11
11
|
} from "./documents/articlesDocuments";
|
|
12
12
|
import { toDateTimeInput, toUTCISO8601String } from "../utils";
|
|
13
13
|
|
|
@@ -42,19 +42,6 @@ export default class Articles extends RaketaClient {
|
|
|
42
42
|
];
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
-
async minimal(query, locale, articleTypeSlug) {
|
|
46
|
-
const vars = this.buildListInput(query, locale);
|
|
47
|
-
|
|
48
|
-
const { articles: items } = await this.query(MinimalArticlesDocument, {
|
|
49
|
-
input: {
|
|
50
|
-
...vars.input,
|
|
51
|
-
filters: { ...vars.input.filters, articleTypeSlug },
|
|
52
|
-
},
|
|
53
|
-
});
|
|
54
|
-
|
|
55
|
-
return items;
|
|
56
|
-
}
|
|
57
|
-
|
|
58
45
|
async find(id, locale) {
|
|
59
46
|
const { article: item } = await this.query(ArticleByIdDocument, {
|
|
60
47
|
input: {
|
|
@@ -66,36 +53,10 @@ export default class Articles extends RaketaClient {
|
|
|
66
53
|
return item;
|
|
67
54
|
}
|
|
68
55
|
|
|
69
|
-
async
|
|
70
|
-
const vars = this.buildAllInput(query, locale);
|
|
71
|
-
|
|
72
|
-
const { articles: items } = await this.query(MinimalArticlesDocument, {
|
|
73
|
-
input: {
|
|
74
|
-
...vars.input,
|
|
75
|
-
filters: { ...vars.input.filters, articleTypeSlug },
|
|
76
|
-
},
|
|
77
|
-
});
|
|
78
|
-
|
|
79
|
-
return items;
|
|
80
|
-
}
|
|
81
|
-
|
|
82
|
-
async minimalList(query, locale, articleTypeSlug) {
|
|
83
|
-
const vars = this.buildListInput(query, locale);
|
|
84
|
-
|
|
85
|
-
const { articles: items } = await this.query(MinimalArticlesDocument, {
|
|
86
|
-
input: {
|
|
87
|
-
...vars.input,
|
|
88
|
-
filters: { ...vars.input.filters, articleTypeSlug },
|
|
89
|
-
},
|
|
90
|
-
});
|
|
91
|
-
|
|
92
|
-
return items;
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
async all(query, locale, articleTypeSlug) {
|
|
56
|
+
async listAll(query, locale, articleTypeSlug) {
|
|
96
57
|
const vars = this.buildAllInput(query, locale);
|
|
97
58
|
|
|
98
|
-
const {
|
|
59
|
+
const { miniArticles: items } = await this.query(MiniArticlesDocument, {
|
|
99
60
|
input: {
|
|
100
61
|
...vars.input,
|
|
101
62
|
filters: { ...vars.input.filters, articleTypeSlug },
|
package/src/cloud/Events.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
DeleteEventDocument,
|
|
8
8
|
TranslateEventDocument,
|
|
9
9
|
ChangeEventSlugDocument,
|
|
10
|
-
|
|
10
|
+
MiniEventsDocument,
|
|
11
11
|
} from "./documents/eventsDocuments";
|
|
12
12
|
import { toDateTimeInput, toUTCISO8601String } from "../utils";
|
|
13
13
|
|
|
@@ -63,36 +63,10 @@ export default class Events extends RaketaClient {
|
|
|
63
63
|
return item;
|
|
64
64
|
}
|
|
65
65
|
|
|
66
|
-
async
|
|
66
|
+
async listAll(query, locale, eventTypeSlug) {
|
|
67
67
|
const vars = this.buildAllInput(query, locale);
|
|
68
68
|
|
|
69
|
-
const {
|
|
70
|
-
input: {
|
|
71
|
-
...vars.input,
|
|
72
|
-
filters: { ...vars.input.filters, eventTypeSlug },
|
|
73
|
-
},
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return items;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
async minimalList(query, locale, eventTypeSlug) {
|
|
80
|
-
const vars = this.buildListInput(query, locale);
|
|
81
|
-
|
|
82
|
-
const { events: items } = await this.query(MinimalEventsDocument, {
|
|
83
|
-
input: {
|
|
84
|
-
...vars.input,
|
|
85
|
-
filters: { ...vars.input.filters, eventTypeSlug },
|
|
86
|
-
},
|
|
87
|
-
});
|
|
88
|
-
|
|
89
|
-
return items;
|
|
90
|
-
}
|
|
91
|
-
|
|
92
|
-
async all(query, locale, eventTypeSlug) {
|
|
93
|
-
const vars = this.buildAllInput(query, locale);
|
|
94
|
-
|
|
95
|
-
const { events: items } = await this.query(EventsDocument, {
|
|
69
|
+
const { miniEvents: items } = await this.query(MiniEventsDocument, {
|
|
96
70
|
input: {
|
|
97
71
|
...vars.input,
|
|
98
72
|
filters: { ...vars.input.filters, eventTypeSlug },
|
package/src/cloud/Pages.js
CHANGED
|
@@ -7,7 +7,7 @@ import {
|
|
|
7
7
|
DeletePageDocument,
|
|
8
8
|
TranslatePageDocument,
|
|
9
9
|
ChangePageSlugDocument,
|
|
10
|
-
|
|
10
|
+
MiniPagesDocument,
|
|
11
11
|
} from "./documents/pagesDocuments";
|
|
12
12
|
|
|
13
13
|
export default class Pages extends RaketaClient {
|
|
@@ -43,36 +43,10 @@ export default class Pages extends RaketaClient {
|
|
|
43
43
|
return item;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
|
-
async
|
|
46
|
+
async listAll(query, locale, pageTypeSlug) {
|
|
47
47
|
const vars = this.buildAllInput(query, locale);
|
|
48
48
|
|
|
49
|
-
const {
|
|
50
|
-
input: {
|
|
51
|
-
...vars.input,
|
|
52
|
-
filters: { ...vars.input.filters, pageTypeSlug },
|
|
53
|
-
},
|
|
54
|
-
});
|
|
55
|
-
|
|
56
|
-
return items;
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
async minimalList(query, locale, pageTypeSlug) {
|
|
60
|
-
const vars = this.buildListInput(query, locale);
|
|
61
|
-
|
|
62
|
-
const { pages: items } = await this.query(MinimalPagesDocument, {
|
|
63
|
-
input: {
|
|
64
|
-
...vars.input,
|
|
65
|
-
filters: { ...vars.input.filters, pageTypeSlug },
|
|
66
|
-
},
|
|
67
|
-
});
|
|
68
|
-
|
|
69
|
-
return items;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
async all(query, locale, pageTypeSlug) {
|
|
73
|
-
const vars = this.buildAllInput(query, locale);
|
|
74
|
-
|
|
75
|
-
const { pages: items } = await this.query(PagesDocument, {
|
|
49
|
+
const { miniPages: items } = await this.query(MiniPagesDocument, {
|
|
76
50
|
input: {
|
|
77
51
|
...vars.input,
|
|
78
52
|
filters: { ...vars.input.filters, pageTypeSlug },
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
paginationFragment,
|
|
7
7
|
revisionMetaFragment,
|
|
8
8
|
tagFragment,
|
|
9
|
+
summaryChangeFragment,
|
|
9
10
|
} from "./common";
|
|
10
11
|
|
|
11
12
|
function minimalArticleFragment() {
|
|
@@ -14,6 +15,8 @@ function minimalArticleFragment() {
|
|
|
14
15
|
id
|
|
15
16
|
slug
|
|
16
17
|
title
|
|
18
|
+
visibility
|
|
19
|
+
publishAt
|
|
17
20
|
}
|
|
18
21
|
`;
|
|
19
22
|
}
|
|
@@ -31,6 +34,9 @@ function articleFragment() {
|
|
|
31
34
|
originalId
|
|
32
35
|
translations
|
|
33
36
|
revisionsCount
|
|
37
|
+
insertedAt
|
|
38
|
+
updatedAt
|
|
39
|
+
changes ${summaryChangeFragment()}
|
|
34
40
|
tags ${tagFragment()}
|
|
35
41
|
articleType ${articleTypeFragment()}
|
|
36
42
|
categories ${categoryFragment()}
|
|
@@ -67,24 +73,15 @@ const ArticleByIdDocument = gql`
|
|
|
67
73
|
const ArticleChangesDocument = gql`
|
|
68
74
|
query ArticleChanges($input: IdInput!) {
|
|
69
75
|
articleChanges(input: $input) {
|
|
70
|
-
list {
|
|
71
|
-
version
|
|
72
|
-
title
|
|
73
|
-
description
|
|
74
|
-
operator
|
|
75
|
-
operatorMeta
|
|
76
|
-
source
|
|
77
|
-
insertedAt
|
|
78
|
-
}
|
|
76
|
+
list ${summaryChangeFragment()}
|
|
79
77
|
}
|
|
80
78
|
}
|
|
81
79
|
`;
|
|
82
80
|
|
|
83
|
-
const
|
|
84
|
-
query
|
|
85
|
-
|
|
81
|
+
const MiniArticlesDocument = gql`
|
|
82
|
+
query MiniArticles($input: ArticlesInput!) {
|
|
83
|
+
miniArticles(input: $input) {
|
|
86
84
|
list ${minimalArticleFragment()}
|
|
87
|
-
pagination ${paginationFragment()}
|
|
88
85
|
}
|
|
89
86
|
}
|
|
90
87
|
`;
|
|
@@ -248,7 +245,7 @@ const UnlockArticleRevisionDocument = gql`
|
|
|
248
245
|
export {
|
|
249
246
|
ArticleByIdDocument,
|
|
250
247
|
ArticlesDocument,
|
|
251
|
-
|
|
248
|
+
MiniArticlesDocument,
|
|
252
249
|
CreateArticleDocument,
|
|
253
250
|
UpdateArticleDocument,
|
|
254
251
|
UpdateArticleWidgetsDocument,
|
|
@@ -102,3 +102,17 @@ export function categoryFragment() {
|
|
|
102
102
|
}
|
|
103
103
|
`;
|
|
104
104
|
}
|
|
105
|
+
|
|
106
|
+
export function summaryChangeFragment() {
|
|
107
|
+
return gql`
|
|
108
|
+
{
|
|
109
|
+
version
|
|
110
|
+
title
|
|
111
|
+
description
|
|
112
|
+
operator
|
|
113
|
+
operatorMeta
|
|
114
|
+
source
|
|
115
|
+
insertedAt
|
|
116
|
+
}
|
|
117
|
+
`;
|
|
118
|
+
}
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
paginationFragment,
|
|
7
7
|
revisionMetaFragment,
|
|
8
8
|
tagFragment,
|
|
9
|
+
summaryChangeFragment,
|
|
9
10
|
} from "./common";
|
|
10
11
|
|
|
11
12
|
function minimalEventFragment() {
|
|
@@ -14,6 +15,10 @@ function minimalEventFragment() {
|
|
|
14
15
|
id
|
|
15
16
|
slug
|
|
16
17
|
title
|
|
18
|
+
visibility
|
|
19
|
+
publishAt
|
|
20
|
+
startsAt
|
|
21
|
+
endsAt
|
|
17
22
|
}
|
|
18
23
|
`;
|
|
19
24
|
}
|
|
@@ -33,6 +38,9 @@ function eventFragment() {
|
|
|
33
38
|
originalId
|
|
34
39
|
translations
|
|
35
40
|
revisionsCount
|
|
41
|
+
insertedAt
|
|
42
|
+
updatedAt
|
|
43
|
+
changes ${summaryChangeFragment()}
|
|
36
44
|
tags ${tagFragment()}
|
|
37
45
|
eventType ${eventTypeFragment()}
|
|
38
46
|
categories ${categoryFragment()}
|
|
@@ -71,24 +79,15 @@ const EventByIdDocument = gql`
|
|
|
71
79
|
const EventChangesDocument = gql`
|
|
72
80
|
query EventChanges($input: IdInput!) {
|
|
73
81
|
eventChanges(input: $input) {
|
|
74
|
-
list {
|
|
75
|
-
version
|
|
76
|
-
title
|
|
77
|
-
description
|
|
78
|
-
operator
|
|
79
|
-
operatorMeta
|
|
80
|
-
source
|
|
81
|
-
insertedAt
|
|
82
|
-
}
|
|
82
|
+
list ${summaryChangeFragment()}
|
|
83
83
|
}
|
|
84
84
|
}
|
|
85
85
|
`;
|
|
86
86
|
|
|
87
|
-
const
|
|
88
|
-
query
|
|
89
|
-
|
|
87
|
+
const MiniEventsDocument = gql`
|
|
88
|
+
query MiniEvents($input: EventsInput!) {
|
|
89
|
+
miniEvents(input: $input) {
|
|
90
90
|
list ${minimalEventFragment()}
|
|
91
|
-
pagination ${paginationFragment()}
|
|
92
91
|
}
|
|
93
92
|
}
|
|
94
93
|
`;
|
|
@@ -254,7 +253,7 @@ const UnlockEventRevisionDocument = gql`
|
|
|
254
253
|
export {
|
|
255
254
|
EventByIdDocument,
|
|
256
255
|
EventsDocument,
|
|
257
|
-
|
|
256
|
+
MiniEventsDocument,
|
|
258
257
|
CreateEventDocument,
|
|
259
258
|
UpdateEventDocument,
|
|
260
259
|
UpdateEventWidgetsDocument,
|
|
@@ -6,6 +6,7 @@ import {
|
|
|
6
6
|
paginationFragment,
|
|
7
7
|
revisionMetaFragment,
|
|
8
8
|
tagFragment,
|
|
9
|
+
summaryChangeFragment,
|
|
9
10
|
} from "./common";
|
|
10
11
|
|
|
11
12
|
function minimalPageFragment() {
|
|
@@ -14,6 +15,7 @@ function minimalPageFragment() {
|
|
|
14
15
|
id
|
|
15
16
|
slug
|
|
16
17
|
title
|
|
18
|
+
visibility
|
|
17
19
|
}
|
|
18
20
|
`;
|
|
19
21
|
}
|
|
@@ -30,9 +32,12 @@ function pageFragment() {
|
|
|
30
32
|
originalId
|
|
31
33
|
translations
|
|
32
34
|
revisionsCount
|
|
35
|
+
insertedAt
|
|
36
|
+
updatedAt
|
|
33
37
|
tags ${tagFragment()}
|
|
34
38
|
pageType ${pageTypeFragment()}
|
|
35
39
|
categories ${categoryFragment()}
|
|
40
|
+
changes ${summaryChangeFragment()}
|
|
36
41
|
}
|
|
37
42
|
`;
|
|
38
43
|
}
|
|
@@ -65,24 +70,15 @@ const PageByIdDocument = gql`
|
|
|
65
70
|
const PageChangesDocument = gql`
|
|
66
71
|
query PageChanges($input: IdInput!) {
|
|
67
72
|
pageChanges(input: $input) {
|
|
68
|
-
list {
|
|
69
|
-
version
|
|
70
|
-
title
|
|
71
|
-
description
|
|
72
|
-
operator
|
|
73
|
-
operatorMeta
|
|
74
|
-
source
|
|
75
|
-
insertedAt
|
|
76
|
-
}
|
|
73
|
+
list ${summaryChangeFragment()}
|
|
77
74
|
}
|
|
78
75
|
}
|
|
79
76
|
`;
|
|
80
77
|
|
|
81
|
-
const
|
|
82
|
-
query
|
|
83
|
-
|
|
78
|
+
const MiniPagesDocument = gql`
|
|
79
|
+
query MiniPages($input: PagesInput!) {
|
|
80
|
+
miniPages(input: $input) {
|
|
84
81
|
list ${minimalPageFragment()}
|
|
85
|
-
pagination ${paginationFragment()}
|
|
86
82
|
}
|
|
87
83
|
}
|
|
88
84
|
`;
|
|
@@ -245,7 +241,7 @@ const UnlockPageRevisionDocument = gql`
|
|
|
245
241
|
export {
|
|
246
242
|
PageByIdDocument,
|
|
247
243
|
PagesDocument,
|
|
248
|
-
|
|
244
|
+
MiniPagesDocument,
|
|
249
245
|
CreatePageDocument,
|
|
250
246
|
UpdatePageDocument,
|
|
251
247
|
UpdatePageWidgetsDocument,
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
<tr>
|
|
21
21
|
<th><%- sort_button("Title", "title", _context) %></th>
|
|
22
22
|
<th>Visibility</th>
|
|
23
|
+
<th><%- sort_button("Publish at", "publish_at", _context) %></th>
|
|
24
|
+
<th><%- sort_button("Last change", "updated_at", _context) %></th>
|
|
23
25
|
<th>Translations</th>
|
|
24
26
|
</tr>
|
|
25
27
|
</thead>
|
|
@@ -75,6 +77,30 @@
|
|
|
75
77
|
</div>
|
|
76
78
|
</td>
|
|
77
79
|
|
|
80
|
+
<td>
|
|
81
|
+
<time data-pretty-datetime datetime="<%= item.publishAt %>"><%= item.publishAt %></time>
|
|
82
|
+
</td>
|
|
83
|
+
|
|
84
|
+
<td>
|
|
85
|
+
<div class="body-3 text-raketa-foreground/50">
|
|
86
|
+
<div class="flex items-center gap-1 mb-0.5">
|
|
87
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4 text-raketa-foreground">
|
|
88
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
89
|
+
</svg>
|
|
90
|
+
<time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="flex items-center gap-1" title="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
94
|
+
<% if (item.changes[0]?.operatorMeta?.avatar) { %>
|
|
95
|
+
<img src="<%= item.changes[0]?.operatorMeta?.avatar %>" class="size-4 rounded-full" alt="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
96
|
+
<% } else { %>
|
|
97
|
+
<div class="size-4 rounded-full"></div>
|
|
98
|
+
<% } %>
|
|
99
|
+
<%= item.changes[0]?.operatorMeta?.name %>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</td>
|
|
103
|
+
|
|
78
104
|
<td>
|
|
79
105
|
<div class="flex flex-wrap items-center gap-1">
|
|
80
106
|
<% Object.keys(_context.locales).forEach(key => { %>
|
|
@@ -142,4 +168,4 @@
|
|
|
142
168
|
searchToggle.addEventListener('click', () => {
|
|
143
169
|
sidebar.classList.toggle('hidden');
|
|
144
170
|
});
|
|
145
|
-
</script>
|
|
171
|
+
</script>
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
78
78
|
</svg>
|
|
79
79
|
|
|
80
|
-
<%=
|
|
80
|
+
<time data-pretty-datetime datetime="<%= revision.insertedAt %>"><%= revision.insertedAt %></time>
|
|
81
81
|
</div>
|
|
82
82
|
</div>
|
|
83
83
|
</td>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
134
134
|
</svg>
|
|
135
135
|
|
|
136
|
-
<%=
|
|
136
|
+
<time data-pretty-datetime datetime="<%= change.insertedAt %>"><%= change.insertedAt %></time>
|
|
137
137
|
</div>
|
|
138
138
|
</div>
|
|
139
139
|
</td>
|
|
@@ -20,6 +20,8 @@
|
|
|
20
20
|
<tr>
|
|
21
21
|
<th><%- sort_button("Title", "title", _context) %></th>
|
|
22
22
|
<th>Visibility</th>
|
|
23
|
+
<th><%- sort_button("Publish at", "publish_at", _context) %></th>
|
|
24
|
+
<th><%- sort_button("Last change", "updated_at", _context) %></th>
|
|
23
25
|
<th>Translations</th>
|
|
24
26
|
</tr>
|
|
25
27
|
</thead>
|
|
@@ -75,6 +77,30 @@
|
|
|
75
77
|
</div>
|
|
76
78
|
</td>
|
|
77
79
|
|
|
80
|
+
<td>
|
|
81
|
+
<time data-pretty-datetime datetime="<%= item.publishAt %>"><%= item.publishAt %></time>
|
|
82
|
+
</td>
|
|
83
|
+
|
|
84
|
+
<td>
|
|
85
|
+
<div class="body-3 text-raketa-foreground/50">
|
|
86
|
+
<div class="flex items-center gap-1 mb-0.5">
|
|
87
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4 text-raketa-foreground">
|
|
88
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
89
|
+
</svg>
|
|
90
|
+
<time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
|
|
91
|
+
</div>
|
|
92
|
+
|
|
93
|
+
<div class="flex items-center gap-1" title="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
94
|
+
<% if (item.changes[0]?.operatorMeta?.avatar) { %>
|
|
95
|
+
<img src="<%= item.changes[0]?.operatorMeta?.avatar %>" class="size-4 rounded-full" alt="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
96
|
+
<% } else { %>
|
|
97
|
+
<div class="size-4 rounded-full"></div>
|
|
98
|
+
<% } %>
|
|
99
|
+
<%= item.changes[0]?.operatorMeta?.name %>
|
|
100
|
+
</div>
|
|
101
|
+
</div>
|
|
102
|
+
</td>
|
|
103
|
+
|
|
78
104
|
<td>
|
|
79
105
|
<div class="flex flex-wrap items-center gap-1">
|
|
80
106
|
<% Object.keys(_context.locales).forEach(key => { %>
|
|
@@ -142,4 +168,4 @@
|
|
|
142
168
|
searchToggle.addEventListener('click', () => {
|
|
143
169
|
sidebar.classList.toggle('hidden');
|
|
144
170
|
});
|
|
145
|
-
</script>
|
|
171
|
+
</script>
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
78
78
|
</svg>
|
|
79
79
|
|
|
80
|
-
<%=
|
|
80
|
+
<time data-pretty-datetime datetime="<%= revision.insertedAt %>"><%= revision.insertedAt %></time>
|
|
81
81
|
</div>
|
|
82
82
|
</div>
|
|
83
83
|
</td>
|
|
@@ -133,7 +133,7 @@
|
|
|
133
133
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
134
134
|
</svg>
|
|
135
135
|
|
|
136
|
-
<%=
|
|
136
|
+
<time data-pretty-datetime datetime="<%= change.insertedAt %>"><%= change.insertedAt %></time>
|
|
137
137
|
</div>
|
|
138
138
|
</div>
|
|
139
139
|
</td>
|
|
@@ -143,10 +143,22 @@
|
|
|
143
143
|
|
|
144
144
|
parent.querySelectorAll('[data-auto="1"]').forEach(node => node.remove())
|
|
145
145
|
|
|
146
|
+
// Add user's localtime
|
|
147
|
+
const strTime = fakeUTCDate.toLocaleString("en-GB", {});
|
|
148
|
+
|
|
149
|
+
const hint = document.createElement("div");
|
|
150
|
+
|
|
151
|
+
hint.classList.add('hint')
|
|
152
|
+
hint.innerText = `In your local time: ${strTime}`;
|
|
153
|
+
hint.dataset.auto = "1";
|
|
154
|
+
|
|
155
|
+
parent.appendChild(hint)
|
|
156
|
+
|
|
146
157
|
TIMEZONES.forEach(timeZone => {
|
|
147
|
-
const strTime = fakeUTCDate.toLocaleString("en-
|
|
158
|
+
const strTime = fakeUTCDate.toLocaleString("en-GB", {
|
|
148
159
|
timeZone: `${timeZone.value}`
|
|
149
160
|
});
|
|
161
|
+
|
|
150
162
|
const hint = document.createElement("div");
|
|
151
163
|
|
|
152
164
|
hint.classList.add('hint')
|
|
@@ -156,12 +168,6 @@
|
|
|
156
168
|
parent.appendChild(hint)
|
|
157
169
|
})
|
|
158
170
|
}
|
|
159
|
-
|
|
160
|
-
document.querySelectorAll('input[type="datetime-local"]').forEach(input => {
|
|
161
|
-
enhanceDateTimeInputs(input);
|
|
162
|
-
|
|
163
|
-
input.addEventListener("change", (event) => enhanceDateTimeInputs(event.target))
|
|
164
|
-
})
|
|
165
171
|
</script>
|
|
166
172
|
|
|
167
173
|
<script>
|
|
@@ -183,6 +189,29 @@
|
|
|
183
189
|
})
|
|
184
190
|
})
|
|
185
191
|
</script>
|
|
192
|
+
|
|
193
|
+
<script>
|
|
194
|
+
window.addEventListener("load", (_event) => {
|
|
195
|
+
|
|
196
|
+
// Setup datetime inputs
|
|
197
|
+
document.querySelectorAll('input[type="datetime-local"]').forEach(input => {
|
|
198
|
+
enhanceDateTimeInputs(input);
|
|
199
|
+
|
|
200
|
+
input.addEventListener("change", (event) => enhanceDateTimeInputs(event.target))
|
|
201
|
+
})
|
|
202
|
+
|
|
203
|
+
|
|
204
|
+
// Setup time presentation
|
|
205
|
+
document.querySelectorAll('time[data-pretty-datetime]').forEach(item => {
|
|
206
|
+
const dateStr = item.getAttribute("datetime");
|
|
207
|
+
|
|
208
|
+
item.innerText = new Date(dateStr).toLocaleString('en-GB', {
|
|
209
|
+
dateStyle: "short",
|
|
210
|
+
timeStyle: "short"
|
|
211
|
+
})
|
|
212
|
+
})
|
|
213
|
+
})
|
|
214
|
+
</script>
|
|
186
215
|
</body>
|
|
187
216
|
|
|
188
217
|
</html>
|
|
@@ -20,6 +20,7 @@
|
|
|
20
20
|
<tr>
|
|
21
21
|
<th><%- sort_button("Title", "title", _context) %></th>
|
|
22
22
|
<th>Visibility</th>
|
|
23
|
+
<th><%- sort_button("Last change", "updated_at", _context) %></th>
|
|
23
24
|
<th>Translations</th>
|
|
24
25
|
</tr>
|
|
25
26
|
</thead>
|
|
@@ -75,6 +76,26 @@
|
|
|
75
76
|
</div>
|
|
76
77
|
</td>
|
|
77
78
|
|
|
79
|
+
<td>
|
|
80
|
+
<div class="body-3 text-raketa-foreground/50">
|
|
81
|
+
<div class="flex items-center gap-1 mb-0.5">
|
|
82
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4 text-raketa-foreground">
|
|
83
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
84
|
+
</svg>
|
|
85
|
+
<time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
|
|
86
|
+
</div>
|
|
87
|
+
|
|
88
|
+
<div class="flex items-center gap-1" title="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
89
|
+
<% if (item.changes[0]?.operatorMeta?.avatar) { %>
|
|
90
|
+
<img src="<%= item.changes[0]?.operatorMeta?.avatar %>" class="size-4 rounded-full" alt="<%= item.changes[0]?.operatorMeta?.name %>">
|
|
91
|
+
<% } else { %>
|
|
92
|
+
<div class="size-4 rounded-full"></div>
|
|
93
|
+
<% } %>
|
|
94
|
+
<%= item.changes[0]?.operatorMeta?.name %>
|
|
95
|
+
</div>
|
|
96
|
+
</div>
|
|
97
|
+
</td>
|
|
98
|
+
|
|
78
99
|
<td>
|
|
79
100
|
<div class="flex flex-wrap items-center gap-1">
|
|
80
101
|
<% Object.keys(_context.locales).forEach(key => { %>
|
|
@@ -142,4 +163,4 @@
|
|
|
142
163
|
searchToggle.addEventListener('click', () => {
|
|
143
164
|
sidebar.classList.toggle('hidden');
|
|
144
165
|
});
|
|
145
|
-
</script>
|
|
166
|
+
</script>
|
package/src/views/pages/show.ejs
CHANGED
|
@@ -91,7 +91,7 @@
|
|
|
91
91
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
92
92
|
</svg>
|
|
93
93
|
|
|
94
|
-
<%=
|
|
94
|
+
<time data-pretty-datetime datetime="<%= revision.insertedAt %>"><%= revision.insertedAt %></time>
|
|
95
95
|
</div>
|
|
96
96
|
</div>
|
|
97
97
|
</td>
|
|
@@ -147,7 +147,7 @@
|
|
|
147
147
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
148
148
|
</svg>
|
|
149
149
|
|
|
150
|
-
<%=
|
|
150
|
+
<time data-pretty-datetime datetime="<%= change.insertedAt %>"><%= change.insertedAt %></time>
|
|
151
151
|
</div>
|
|
152
152
|
</div>
|
|
153
153
|
</td>
|
|
@@ -54,7 +54,7 @@
|
|
|
54
54
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
|
|
55
55
|
</svg>
|
|
56
56
|
|
|
57
|
-
<%=
|
|
57
|
+
<time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
|
|
58
58
|
</div>
|
|
59
59
|
</td>
|
|
60
60
|
<td class="actions">
|
|
@@ -72,4 +72,4 @@
|
|
|
72
72
|
</table>
|
|
73
73
|
|
|
74
74
|
<%- pagination(items.pagination, _context) %>
|
|
75
|
-
</div>
|
|
75
|
+
</div>
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
</tr>
|
|
30
30
|
<tr>
|
|
31
31
|
<th class="w-1 whitespace-nowrap">Updated at</th>
|
|
32
|
-
<
|
|
32
|
+
<time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
|
|
33
33
|
</tr>
|
|
34
34
|
</tbody>
|
|
35
35
|
</table>
|
|
@@ -52,9 +52,9 @@
|
|
|
52
52
|
<td><%= item.version %></td>
|
|
53
53
|
<td><%= item.title %></td>
|
|
54
54
|
<td><%= item.operatorMeta.name %></td>
|
|
55
|
-
<td
|
|
55
|
+
<td><time data-pretty-datetime datetime="<%= item.insertedAt %>"><%= item.insertedAt %></time></td>
|
|
56
56
|
</tr>
|
|
57
57
|
<% }) %>
|
|
58
58
|
</tbody>
|
|
59
59
|
</table>
|
|
60
|
-
</div>
|
|
60
|
+
</div>
|