@raketa-cloud/admin 0.0.6 → 0.0.8
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 +3 -2
- package/src/Adapter.js +1 -1
- package/src/cloud/ChangePageURL.js +24 -0
- package/src/cloud/ClonesPage.js +14 -0
- package/src/cloud/DeletePage.js +35 -0
- package/src/cloud/PageChanges.js +15 -0
- package/src/cloud/PageRevisions.js +135 -0
- package/src/cloud/PageTranslations.js +22 -0
- package/src/cloud/Pages.js +63 -0
- package/src/cloud/RaketaClient.js +118 -0
- package/src/cloud/Redirects.js +81 -0
- package/src/cloud/RevertPageRevision.js +18 -0
- package/src/cloud/Settings.js +30 -0
- package/src/cloud/Tags.js +80 -0
- package/src/cloud/documents/articlesDocuments.js +608 -0
- package/src/cloud/documents/categoryDocuments.js +64 -0
- package/src/cloud/documents/common.js +84 -0
- package/src/cloud/documents/pagesDocuments.js +245 -0
- package/src/cloud/documents/redirectsDocuments.js +82 -0
- package/src/cloud/documents/settingsDocuments.js +23 -0
- package/src/cloud/documents/tagsDocuments.js +63 -0
- package/src/handlers/PageCloneHandler.js +17 -0
- package/src/handlers/PageCloneHandler.test/create.test.js +55 -0
- package/src/handlers/PageDeleteHandler.js +68 -0
- package/src/handlers/PageDeleteHandler.test/create.test.js +112 -0
- package/src/handlers/PageDeleteHandler.test/create_form.test.js +54 -0
- package/src/handlers/PageRevisionsCodesHandler.js +83 -0
- package/src/handlers/PageRevisionsCodesHandler.test/edit_form.test.js +56 -0
- package/src/handlers/PageRevisionsCodesHandler.test/update.test.js +137 -0
- package/src/handlers/PageRevisionsGeneralHandler.js +86 -0
- package/src/handlers/PageRevisionsGeneralHandler.test/edit_form.test.js +62 -0
- package/src/handlers/PageRevisionsGeneralHandler.test/update.test.js +147 -0
- package/src/handlers/PageRevisionsHandler.js +47 -0
- package/src/handlers/PageRevisionsHandler.test/create.test.js +67 -0
- package/src/handlers/PageRevisionsHandler.test/destroy.test.js +54 -0
- package/src/handlers/PageRevisionsLockHandler.js +54 -0
- package/src/handlers/PageRevisionsMetaHandler.js +83 -0
- package/src/handlers/PageRevisionsMetaHandler.test/edit_form.test.js +57 -0
- package/src/handlers/PageRevisionsMetaHandler.test/update.test.js +141 -0
- package/src/handlers/PageRevisionsTagsHandler.js +80 -0
- package/src/handlers/PageRevisionsTagsHandler.test/edit_form.test.js +69 -0
- package/src/handlers/PageRevisionsTagsHandler.test/update.test.js +141 -0
- package/src/handlers/PageRevisionsUnlockHandler.js +22 -0
- package/src/handlers/PageRevisionsVisualsHandler.js +77 -0
- package/src/handlers/PageRevisionsVisualsHandler.test/edit_form.test.js +55 -0
- package/src/handlers/PageRevisionsVisualsHandler.test/update.test.js +129 -0
- package/src/handlers/PageRevisionsWidgetsHandler.js +41 -0
- package/src/handlers/PageRevisionsWidgetsHandler.test/show.test.js +47 -0
- package/src/handlers/PageRevisionsWidgetsHandler.test/update.test.js +104 -0
- package/src/handlers/PageTranslationsHandler.js +91 -0
- package/src/handlers/PageURLsHandler.js +69 -0
- package/src/handlers/PageURLsHandler.test/create.test.js +157 -0
- package/src/handlers/PageURLsHandler.test/create_form.test.js +51 -0
- package/src/handlers/PagesHandler.js +114 -0
- package/src/handlers/PagesHandler.test/create.test.js +140 -0
- package/src/handlers/PagesHandler.test/create_form.test.js +41 -0
- package/src/handlers/PagesHandler.test/index.test.js +49 -0
- package/src/handlers/PagesHandler.test/show.test.js +103 -0
- package/src/handlers/PublishPageRevisionHandler.js +84 -0
- package/src/handlers/PublishPageRevisionHandler.test/create.test.js +136 -0
- package/src/handlers/PublishPageRevisionHandler.test/create_form.test.js +47 -0
- package/src/handlers/RedirectsHandler.js +124 -0
- package/src/handlers/RedirectsHandler.test/create.test.js +84 -0
- package/src/handlers/RedirectsHandler.test/create_form.test.js +29 -0
- package/src/handlers/RedirectsHandler.test/destroy.test.js +54 -0
- package/src/handlers/RedirectsHandler.test/edit_form.test.js +38 -0
- package/src/handlers/RedirectsHandler.test/index.test.js +42 -0
- package/src/handlers/RedirectsHandler.test/show.test.js +41 -0
- package/src/handlers/RedirectsHandler.test/update.test.js +89 -0
- package/src/handlers/RevertPageRevisionHandler.js +26 -0
- package/src/handlers/RevertPageRevisionHandler.test/create.test.js +80 -0
- package/src/handlers/SettingsGeneralHandler.js +13 -0
- package/src/handlers/SettingsLayoutHandler.js +51 -0
- package/src/handlers/SettingsMetaHandler.js +52 -0
- package/src/handlers/TagsHandler.js +113 -0
- package/src/helpers/FormBuilder.js +12 -4
- package/src/index.js +33 -0
- package/src/setupAuthentication.js +3 -0
- package/src/styles/application.css +55 -19
- package/src/views/layouts/application.ejs +30 -31
- package/src/views/layouts/header.ejs +6 -7
- package/src/views/page_deletes/create_form.ejs +55 -0
- package/src/views/page_lock/create_form.ejs +35 -0
- package/src/views/page_publish/_form.ejs +57 -0
- package/src/views/page_publish/create_form.ejs +11 -0
- package/src/views/page_revisions/_nav.ejs +40 -0
- package/src/views/page_revisions/codes/edit_form.ejs +39 -0
- package/src/views/page_revisions/general/edit_form.ejs +69 -0
- package/src/views/page_revisions/meta/edit_form.ejs +41 -0
- package/src/views/page_revisions/tags/edit_form.ejs +64 -0
- package/src/views/page_revisions/visuals/edit_form.ejs +42 -0
- package/src/views/page_translations/_form.ejs +76 -0
- package/src/views/page_translations/create_form.ejs +11 -0
- package/src/views/page_urls/create_form.ejs +31 -0
- package/src/views/pages/_form.ejs +84 -0
- package/src/views/pages/create_form.ejs +9 -0
- package/src/views/pages/edit_form.ejs +3 -0
- package/src/views/pages/index.ejs +161 -0
- package/src/views/pages/show.ejs +281 -0
- package/src/views/redirects/_form.ejs +40 -0
- package/src/views/redirects/create_form.ejs +9 -0
- package/src/views/redirects/edit_form.ejs +9 -0
- package/src/views/redirects/index.ejs +75 -1
- package/src/views/redirects/show.ejs +60 -0
- package/src/views/settings/_nav.ejs +28 -0
- package/src/views/settings/general/edit_form.ejs +26 -0
- package/src/views/settings/layout/edit_form.ejs +22 -0
- package/src/views/settings/meta/edit_form.ejs +38 -0
- package/src/views/tags/_form.ejs +39 -0
- package/src/views/tags/create_form.ejs +9 -0
- package/src/views/tags/edit_form.ejs +9 -0
- package/src/views/tags/index.ejs +43 -0
- package/test/factory.js +91 -0
- package/test/handlersHelper.js +9 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
const edit_form = async (ctx) => {
|
|
2
|
+
const data = await ctx.client.settings.find(ctx.locale);
|
|
3
|
+
const meta_settings = {
|
|
4
|
+
...data.meta,
|
|
5
|
+
image: data.meta?.image || {},
|
|
6
|
+
};
|
|
7
|
+
const errors = {};
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
assigns: {
|
|
11
|
+
errors,
|
|
12
|
+
meta_settings,
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const update = async (ctx) => {
|
|
18
|
+
const params = ctx.resourceParams.meta_settings;
|
|
19
|
+
|
|
20
|
+
const currentSettings = await ctx.client.settings.find(ctx.locale);
|
|
21
|
+
|
|
22
|
+
if (!currentSettings.meta) {
|
|
23
|
+
currentSettings.meta = {};
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
currentSettings.meta.title = params.title;
|
|
27
|
+
currentSettings.meta.description = params.description;
|
|
28
|
+
currentSettings.meta.image = JSON.parse(params.image);
|
|
29
|
+
|
|
30
|
+
const { errors } = await ctx.client.settings.update(
|
|
31
|
+
ctx.locale,
|
|
32
|
+
currentSettings
|
|
33
|
+
);
|
|
34
|
+
|
|
35
|
+
if (errors) {
|
|
36
|
+
return {
|
|
37
|
+
assigns: {
|
|
38
|
+
setting: { ...params },
|
|
39
|
+
errors: { setting: ctx.client.settings.formatErrors(errors) },
|
|
40
|
+
},
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
return {
|
|
45
|
+
redirect: `/${ctx.locale}/settings/meta/edit`,
|
|
46
|
+
};
|
|
47
|
+
};
|
|
48
|
+
|
|
49
|
+
export default {
|
|
50
|
+
edit_form,
|
|
51
|
+
update,
|
|
52
|
+
};
|
|
@@ -0,0 +1,113 @@
|
|
|
1
|
+
const index = async (ctx) => {
|
|
2
|
+
const items = await ctx.client.tags.list(ctx.query, ctx.locale);
|
|
3
|
+
|
|
4
|
+
return {
|
|
5
|
+
assigns: {
|
|
6
|
+
items,
|
|
7
|
+
},
|
|
8
|
+
};
|
|
9
|
+
};
|
|
10
|
+
|
|
11
|
+
const create_form = (_ctx) => {
|
|
12
|
+
return {
|
|
13
|
+
assigns: {
|
|
14
|
+
tag: {},
|
|
15
|
+
errors: {},
|
|
16
|
+
_translations: [],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const edit_form = async (ctx) => {
|
|
22
|
+
const { id } = ctx.router.req.param();
|
|
23
|
+
const tag = await ctx.client.tags.find(id, ctx.locale);
|
|
24
|
+
|
|
25
|
+
return {
|
|
26
|
+
assigns: {
|
|
27
|
+
id,
|
|
28
|
+
tag,
|
|
29
|
+
errors: {},
|
|
30
|
+
_translations: [],
|
|
31
|
+
},
|
|
32
|
+
};
|
|
33
|
+
};
|
|
34
|
+
|
|
35
|
+
const create = async (ctx) => {
|
|
36
|
+
const params = ctx.resourceParams.tag;
|
|
37
|
+
|
|
38
|
+
const { errors } = await ctx.client.tags.create(
|
|
39
|
+
{
|
|
40
|
+
name: params.name,
|
|
41
|
+
slug: params.slug,
|
|
42
|
+
},
|
|
43
|
+
ctx.locale
|
|
44
|
+
);
|
|
45
|
+
|
|
46
|
+
if (errors) {
|
|
47
|
+
return {
|
|
48
|
+
assigns: {
|
|
49
|
+
tag: params,
|
|
50
|
+
errors: { tag: ctx.client.tags.formatErrors(errors) },
|
|
51
|
+
_translations: [],
|
|
52
|
+
},
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
|
|
56
|
+
return {
|
|
57
|
+
redirect: `/${ctx.locale}/tags`,
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
|
|
61
|
+
const update = async (ctx) => {
|
|
62
|
+
const { id } = ctx.params;
|
|
63
|
+
const params = ctx.resourceParams.tag;
|
|
64
|
+
|
|
65
|
+
const { errors } = await ctx.client.tags.update(
|
|
66
|
+
id,
|
|
67
|
+
{
|
|
68
|
+
name: params.name,
|
|
69
|
+
slug: params.slug,
|
|
70
|
+
},
|
|
71
|
+
ctx.locale
|
|
72
|
+
);
|
|
73
|
+
|
|
74
|
+
if (errors) {
|
|
75
|
+
return {
|
|
76
|
+
assigns: {
|
|
77
|
+
tag: { ...params, id },
|
|
78
|
+
errors: { tag: ctx.client.tags.formatErrors(errors) },
|
|
79
|
+
_translations: [],
|
|
80
|
+
},
|
|
81
|
+
};
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
return {
|
|
85
|
+
redirect: `/${ctx.locale}/tags`,
|
|
86
|
+
};
|
|
87
|
+
};
|
|
88
|
+
|
|
89
|
+
const destroy = async (ctx) => {
|
|
90
|
+
const { id } = ctx.params;
|
|
91
|
+
|
|
92
|
+
const { errors } = await ctx.client.tags.delete(id, ctx.locale);
|
|
93
|
+
|
|
94
|
+
if (errors) {
|
|
95
|
+
throw `Failed to delete tag #${id}. WTF?`;
|
|
96
|
+
}
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
headers: {
|
|
100
|
+
"HX-redirect": `/${ctx.locale}/tags`,
|
|
101
|
+
},
|
|
102
|
+
json: {},
|
|
103
|
+
};
|
|
104
|
+
};
|
|
105
|
+
|
|
106
|
+
export default {
|
|
107
|
+
index,
|
|
108
|
+
create_form,
|
|
109
|
+
edit_form,
|
|
110
|
+
create,
|
|
111
|
+
update,
|
|
112
|
+
destroy,
|
|
113
|
+
};
|
|
@@ -143,10 +143,18 @@ export default class FormBuilder extends HTMLBuilder {
|
|
|
143
143
|
renderedOpts.push(this.tag("label", `${checkbox} ${o[1]}`));
|
|
144
144
|
}
|
|
145
145
|
|
|
146
|
-
return this.tag(
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
146
|
+
return this.tag(
|
|
147
|
+
"div",
|
|
148
|
+
renderedOpts.length
|
|
149
|
+
? renderedOpts.join("")
|
|
150
|
+
: this.tag("div", "No items available.", {
|
|
151
|
+
class: "italic opacity-50",
|
|
152
|
+
}),
|
|
153
|
+
{
|
|
154
|
+
...rest,
|
|
155
|
+
class: ["checkbox-group", rest.class].filter(Boolean).join(" "),
|
|
156
|
+
}
|
|
157
|
+
);
|
|
150
158
|
}
|
|
151
159
|
|
|
152
160
|
checkbox(name, opts = {}) {
|
package/src/index.js
CHANGED
|
@@ -5,3 +5,36 @@ export { default as routeMember } from "./routeMember";
|
|
|
5
5
|
export { default as routeNestedMember } from "./routeNestedMember";
|
|
6
6
|
export { default as setGlobalContext } from "./setGlobalContext";
|
|
7
7
|
export { default as setGlobalConfig } from "./setGlobalConfig";
|
|
8
|
+
|
|
9
|
+
export { default as Redirects } from "./cloud/Redirects";
|
|
10
|
+
export { default as RedirectsHandler } from "./handlers/RedirectsHandler";
|
|
11
|
+
export { default as Tags } from "./cloud/Tags";
|
|
12
|
+
export { default as TagsHandler } from "./handlers/TagsHandler";
|
|
13
|
+
export { default as Settings } from "./cloud/Settings";
|
|
14
|
+
export { default as SettingsGeneralHandler } from "./handlers/SettingsGeneralHandler";
|
|
15
|
+
export { default as SettingsLayoutHandler } from "./handlers/SettingsLayoutHandler";
|
|
16
|
+
export { default as SettingsMetaHandler } from "./handlers/SettingsMetaHandler";
|
|
17
|
+
export { default as ChangePageURL } from "./cloud/ChangePageURL";
|
|
18
|
+
export { default as ClonePage } from "./cloud/ClonesPage";
|
|
19
|
+
export { default as DeletePage } from "./cloud/DeletePage";
|
|
20
|
+
export { default as PageChanges } from "./cloud/PageChanges";
|
|
21
|
+
export { default as PageRevisions } from "./cloud/PageRevisions";
|
|
22
|
+
export { default as PageTranslations } from "./cloud/PageTranslations";
|
|
23
|
+
export { default as Pages } from "./cloud/Pages";
|
|
24
|
+
export { default as RevertPageRevision } from "./cloud/RevertPageRevision";
|
|
25
|
+
export { default as PageCloneHandler } from "./handlers/PageCloneHandler";
|
|
26
|
+
export { default as PageDeleteHandler } from "./handlers/PageDeleteHandler";
|
|
27
|
+
export { default as PageRevisionsCodesHandler } from "./handlers/PageRevisionsCodesHandler";
|
|
28
|
+
export { default as PageRevisionsGeneralHandler } from "./handlers/PageRevisionsGeneralHandler";
|
|
29
|
+
export { default as PageRevisionsHandler } from "./handlers/PageRevisionsHandler";
|
|
30
|
+
export { default as PageRevisionsLockHandler } from "./handlers/PageRevisionsLockHandler";
|
|
31
|
+
export { default as PageRevisionsMetaHandler } from "./handlers/PageRevisionsMetaHandler";
|
|
32
|
+
export { default as PageRevisionsTagsHandler } from "./handlers/PageRevisionsTagsHandler";
|
|
33
|
+
export { default as PageRevisionsUnlockHandler } from "./handlers/PageRevisionsUnlockHandler";
|
|
34
|
+
export { default as PageRevisionsVisualsHandler } from "./handlers/PageRevisionsVisualsHandler";
|
|
35
|
+
export { default as PageRevisionsWidgetsHandler } from "./handlers/PageRevisionsWidgetsHandler";
|
|
36
|
+
export { default as PageTranslationsHandler } from "./handlers/PageTranslationsHandler";
|
|
37
|
+
export { default as PageURLsHandler } from "./handlers/PageURLsHandler";
|
|
38
|
+
export { default as PagesHandler } from "./handlers/PagesHandler";
|
|
39
|
+
export { default as PublishPageRevisionHandler } from "./handlers/PublishPageRevisionHandler";
|
|
40
|
+
export { default as RevertPageRevisionHandler } from "./handlers/RevertPageRevisionHandler";
|
|
@@ -5,11 +5,28 @@
|
|
|
5
5
|
:root {
|
|
6
6
|
--background: 255, 255, 255;
|
|
7
7
|
--foreground: 0, 0, 0;
|
|
8
|
-
|
|
8
|
+
|
|
9
|
+
/* --primary: 110, 110, 178; */
|
|
9
10
|
/* --primary: 0, 0, 0; */
|
|
10
|
-
--primary
|
|
11
|
-
--primary
|
|
11
|
+
/* --primary: 15, 82, 186; */
|
|
12
|
+
/* --primary: 0, 67, 206; */
|
|
13
|
+
--primary: 91, 95, 198;
|
|
14
|
+
|
|
15
|
+
/* --primary-dark: 88, 88, 142; */
|
|
12
16
|
/* --primary-dark: 0, 0, 0; */
|
|
17
|
+
--primary-dark: var(--primary);
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
@media (prefers-color-scheme: dark) {
|
|
21
|
+
:root {
|
|
22
|
+
--foreground: 255, 255, 255;
|
|
23
|
+
--background: 21, 21, 21;
|
|
24
|
+
--primary: 130, 133, 212;
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
body {
|
|
29
|
+
@apply text-raketa-foreground bg-raketa-background;
|
|
13
30
|
}
|
|
14
31
|
|
|
15
32
|
@layer components {
|
|
@@ -23,7 +40,11 @@
|
|
|
23
40
|
}
|
|
24
41
|
|
|
25
42
|
.help {
|
|
26
|
-
@apply bg-
|
|
43
|
+
@apply bg-orange-50 body-2 p-4 rounded sticky top-6 dark:bg-raketa-primary/20;
|
|
44
|
+
|
|
45
|
+
.heading-3 {
|
|
46
|
+
@apply text-raketa-foreground;
|
|
47
|
+
}
|
|
27
48
|
}
|
|
28
49
|
|
|
29
50
|
/* Typography */
|
|
@@ -86,7 +107,7 @@
|
|
|
86
107
|
}
|
|
87
108
|
|
|
88
109
|
.btn-danger {
|
|
89
|
-
@apply text-red-600 hover:text-raketa-foreground;
|
|
110
|
+
@apply text-red-600 hover:text-raketa-foreground dark:text-red-700;
|
|
90
111
|
}
|
|
91
112
|
|
|
92
113
|
.btn-toolbar {
|
|
@@ -113,7 +134,7 @@
|
|
|
113
134
|
input,
|
|
114
135
|
select,
|
|
115
136
|
textarea {
|
|
116
|
-
@apply border border-neutral-300 rounded px-3 py-2 w-full shadow-inner;
|
|
137
|
+
@apply border border-neutral-300 rounded px-3 py-2 w-full shadow-inner dark:bg-neutral-800 dark:border-neutral-700 dark:focus:border-raketa-primary dark:focus:ring-raketa-primary;
|
|
117
138
|
}
|
|
118
139
|
|
|
119
140
|
textarea {
|
|
@@ -127,7 +148,7 @@
|
|
|
127
148
|
}
|
|
128
149
|
|
|
129
150
|
.checkbox-group {
|
|
130
|
-
@apply max-h-[200px] overflow-y-auto py-1 px-2 mt-1 rounded shadow-inner border border-neutral-300;
|
|
151
|
+
@apply max-h-[200px] overflow-y-auto py-1 px-2 mt-1 rounded shadow-inner border border-neutral-300 bg-raketa-background dark:border-neutral-700;
|
|
131
152
|
}
|
|
132
153
|
|
|
133
154
|
.checkbox-group label {
|
|
@@ -165,17 +186,17 @@
|
|
|
165
186
|
|
|
166
187
|
th,
|
|
167
188
|
td {
|
|
168
|
-
@apply p-3 border-b border-neutral-200 transition-all duration-100 ease-in-out;
|
|
189
|
+
@apply p-3 leading-none border-b border-neutral-200 transition-all duration-100 ease-in-out dark:border-neutral-700;
|
|
169
190
|
}
|
|
170
191
|
|
|
171
192
|
th {
|
|
172
|
-
@apply
|
|
193
|
+
@apply border-b border-b-black/25 text-raketa-foreground dark:border-b-white/40;
|
|
173
194
|
}
|
|
174
195
|
|
|
175
196
|
tbody {
|
|
176
197
|
tr:hover {
|
|
177
198
|
td {
|
|
178
|
-
@apply border-neutral-300 bg-neutral-50 text-raketa-foreground;
|
|
199
|
+
@apply border-neutral-300 bg-neutral-50 text-raketa-foreground dark:bg-neutral-800 dark:border-neutral-600;
|
|
179
200
|
}
|
|
180
201
|
}
|
|
181
202
|
}
|
|
@@ -215,18 +236,12 @@
|
|
|
215
236
|
}
|
|
216
237
|
|
|
217
238
|
&.alt {
|
|
218
|
-
@apply bg-[#F0F0F8];
|
|
219
|
-
|
|
220
239
|
th {
|
|
221
|
-
@apply bg-
|
|
240
|
+
@apply bg-raketa-primary/15;
|
|
222
241
|
}
|
|
223
242
|
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
td {
|
|
227
|
-
@apply border-neutral-300 bg-neutral-50 text-raketa-foreground;
|
|
228
|
-
}
|
|
229
|
-
}
|
|
243
|
+
td {
|
|
244
|
+
@apply bg-raketa-primary/5;
|
|
230
245
|
}
|
|
231
246
|
}
|
|
232
247
|
}
|
|
@@ -248,6 +263,23 @@
|
|
|
248
263
|
}
|
|
249
264
|
}
|
|
250
265
|
|
|
266
|
+
/* Basic Layout */
|
|
267
|
+
.page-wrapper {
|
|
268
|
+
@apply w-full px-4;
|
|
269
|
+
}
|
|
270
|
+
|
|
271
|
+
.search-sidebar {
|
|
272
|
+
@apply p-4 w-[400px] bg-slate-50 border-l min-h-screen dark:bg-neutral-800/70 dark:border-neutral-700;
|
|
273
|
+
}
|
|
274
|
+
|
|
275
|
+
.page-title {
|
|
276
|
+
@apply flex items-center justify-between my-6;
|
|
277
|
+
}
|
|
278
|
+
|
|
279
|
+
.actions-toolbar {
|
|
280
|
+
@apply flex items-center gap-4;
|
|
281
|
+
}
|
|
282
|
+
|
|
251
283
|
/* Hacks */
|
|
252
284
|
.unstyled-details {
|
|
253
285
|
@apply appearance-none;
|
|
@@ -263,6 +295,10 @@
|
|
|
263
295
|
}
|
|
264
296
|
}
|
|
265
297
|
|
|
298
|
+
.unstyled-details summary {
|
|
299
|
+
list-style: none;
|
|
300
|
+
}
|
|
301
|
+
|
|
266
302
|
.unstyled-details summary::-webkit-details-marker {
|
|
267
303
|
display: none;
|
|
268
304
|
}
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
<%- include('header.ejs') %>
|
|
21
21
|
|
|
22
22
|
<div id="sidebar" class="flex h-[calc(100vh-56px)] overflow-y-auto relative group">
|
|
23
|
-
<div class="flex w-16 group-[.expanded]:w-60 h-[calc(100vh-56px)] flex-col sticky left-0 top-0 transition-all duration-150 ease-in-out justify-between group/sidebar bg-
|
|
23
|
+
<div class="flex w-16 group-[.expanded]:w-60 h-[calc(100vh-56px)] flex-col sticky left-0 top-0 transition-all duration-150 ease-in-out justify-between group/sidebar bg-raketa-primary/5 dark:bg-raketa-primary/15">
|
|
24
24
|
<button id="expand" type="button" class="absolute z-20 flex items-center justify-center rotate-180 transition-all ease-in-out duration-300 group-[.expanded]:rotate-0 rounded-full bottom-12 size-8 -right-4 bg-raketa-primary text-white">
|
|
25
25
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="size-5">
|
|
26
26
|
<path fill-rule="evenodd" d="M11.78 5.22a.75.75 0 0 1 0 1.06L8.06 10l3.72 3.72a.75.75 0 1 1-1.06 1.06l-4.25-4.25a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0Z" clip-rule="evenodd" />
|
|
@@ -29,7 +29,7 @@
|
|
|
29
29
|
|
|
30
30
|
<div class="my-4">
|
|
31
31
|
<div class="group/item">
|
|
32
|
-
<a href="<%= `/${_context.locale}/pages` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
32
|
+
<a href="<%= `/${_context.locale}/pages` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
|
|
33
33
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
34
34
|
<path stroke-linecap="round" stroke-linejoin="round" d="M19.5 14.25v-2.625a3.375 3.375 0 0 0-3.375-3.375h-1.5A1.125 1.125 0 0 1 13.5 7.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H8.25m2.25 0H5.625c-.621 0-1.125.504-1.125 1.125v17.25c0 .621.504 1.125 1.125 1.125h12.75c.621 0 1.125-.504 1.125-1.125V11.25a9 9 0 0 0-9-9Z" />
|
|
35
35
|
</svg>
|
|
@@ -40,7 +40,7 @@
|
|
|
40
40
|
</div>
|
|
41
41
|
|
|
42
42
|
<div class="group/item">
|
|
43
|
-
<a href="<%= `/${_context.locale}/articles` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
43
|
+
<a href="<%= `/${_context.locale}/articles` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
|
|
44
44
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
45
45
|
<path stroke-linecap="round" stroke-linejoin="round" d="M12 7.5h1.5m-1.5 3h1.5m-7.5 3h7.5m-7.5 3h7.5m3-9h3.375c.621 0 1.125.504 1.125 1.125V18a2.25 2.25 0 0 1-2.25 2.25M16.5 7.5V18a2.25 2.25 0 0 0 2.25 2.25M16.5 7.5V4.875c0-.621-.504-1.125-1.125-1.125H4.125C3.504 3.75 3 4.254 3 4.875V18a2.25 2.25 0 0 0 2.25 2.25h13.5M6 7.5h3v3H6v-3Z" />
|
|
46
46
|
</svg>
|
|
@@ -51,7 +51,7 @@
|
|
|
51
51
|
</div>
|
|
52
52
|
|
|
53
53
|
<div class="group/item">
|
|
54
|
-
<a href="<%= `/${_context.locale}/events` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
54
|
+
<a href="<%= `/${_context.locale}/events` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
|
|
55
55
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
56
56
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6.75 3v2.25M17.25 3v2.25M3 18.75V7.5a2.25 2.25 0 0 1 2.25-2.25h13.5A2.25 2.25 0 0 1 21 7.5v11.25m-18 0A2.25 2.25 0 0 0 5.25 21h13.5A2.25 2.25 0 0 0 21 18.75m-18 0v-7.5A2.25 2.25 0 0 1 5.25 9h13.5A2.25 2.25 0 0 1 21 11.25v7.5" />
|
|
57
57
|
</svg>
|
|
@@ -62,7 +62,7 @@
|
|
|
62
62
|
</div>
|
|
63
63
|
|
|
64
64
|
<div class="group/item">
|
|
65
|
-
<a href="<%= `/${_context.locale}/redirects` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
65
|
+
<a href="<%= `/${_context.locale}/redirects` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
|
|
66
66
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
67
67
|
<path stroke-linecap="round" stroke-linejoin="round" d="M7.5 21 3 16.5m0 0L7.5 12M3 16.5h13.5m0-13.5L21 7.5m0 0L16.5 12M21 7.5H7.5" />
|
|
68
68
|
</svg>
|
|
@@ -73,7 +73,7 @@
|
|
|
73
73
|
</div>
|
|
74
74
|
|
|
75
75
|
<div class="group/item">
|
|
76
|
-
<a href="<%= `/${_context.locale}/tags` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
76
|
+
<a href="<%= `/${_context.locale}/tags` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
|
|
77
77
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
78
78
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9.568 3H5.25A2.25 2.25 0 0 0 3 5.25v4.318c0 .597.237 1.17.659 1.591l9.581 9.581c.699.699 1.78.872 2.607.33a18.095 18.095 0 0 0 5.223-5.223c.542-.827.369-1.908-.33-2.607L11.16 3.66A2.25 2.25 0 0 0 9.568 3Z" />
|
|
79
79
|
<path stroke-linecap="round" stroke-linejoin="round" d="M6 6h.008v.008H6V6Z" />
|
|
@@ -86,7 +86,7 @@
|
|
|
86
86
|
|
|
87
87
|
<div class="group/item">
|
|
88
88
|
<details class="unstyled-details">
|
|
89
|
-
<summary class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary
|
|
89
|
+
<summary class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary cursor-pointer transition-all duration-300 ease-in-out">
|
|
90
90
|
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
91
91
|
<path stroke-linecap="round" stroke-linejoin="round" d="M9.594 3.94c.09-.542.56-.94 1.11-.94h2.593c.55 0 1.02.398 1.11.94l.213 1.281c.063.374.313.686.645.87.074.04.147.083.22.127.325.196.72.257 1.075.124l1.217-.456a1.125 1.125 0 0 1 1.37.49l1.296 2.247a1.125 1.125 0 0 1-.26 1.431l-1.003.827c-.293.241-.438.613-.43.992a7.723 7.723 0 0 1 0 .255c-.008.378.137.75.43.991l1.004.827c.424.35.534.955.26 1.43l-1.298 2.247a1.125 1.125 0 0 1-1.369.491l-1.217-.456c-.355-.133-.75-.072-1.076.124a6.47 6.47 0 0 1-.22.128c-.331.183-.581.495-.644.869l-.213 1.281c-.09.543-.56.94-1.11.94h-2.594c-.55 0-1.019-.398-1.11-.94l-.213-1.281c-.062-.374-.312-.686-.644-.87a6.52 6.52 0 0 1-.22-.127c-.325-.196-.72-.257-1.076-.124l-1.217.456a1.125 1.125 0 0 1-1.369-.49l-1.297-2.247a1.125 1.125 0 0 1 .26-1.431l1.004-.827c.292-.24.437-.613.43-.991a6.932 6.932 0 0 1 0-.255c.007-.38-.138-.751-.43-.992l-1.004-.827a1.125 1.125 0 0 1-.26-1.43l1.297-2.247a1.125 1.125 0 0 1 1.37-.491l1.216.456c.356.133.751.072 1.076-.124.072-.044.146-.086.22-.128.332-.183.582-.495.644-.869l.214-1.28Z" />
|
|
92
92
|
<path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
|
|
@@ -99,7 +99,7 @@
|
|
|
99
99
|
</svg>
|
|
100
100
|
</summary>
|
|
101
101
|
|
|
102
|
-
<div class="pl-12 py-4 bg-
|
|
102
|
+
<div class="pl-12 py-4 bg-raketa-background/50 group-[.expanded]:block hidden">
|
|
103
103
|
<a href="<%= `/${_context.locale}/settings/general/edit` %>" class="block py-2 body-2 text-raketa-foreground/50 hover:text-raketa-foreground transition-all ease-in-out duration-300">General</a>
|
|
104
104
|
<a href="<%= `/${_context.locale}/settings/meta/edit` %>" class="block py-2 body-2 text-raketa-foreground/50 hover:text-raketa-foreground transition-all ease-in-out duration-300">Meta and OpenGraph</a>
|
|
105
105
|
<a href="<%= `/${_context.locale}/settings/layout/edit` %>" class="block py-2 body-2 text-raketa-foreground/50 hover:text-raketa-foreground transition-all ease-in-out duration-300">Layout and Navigation</a>
|
|
@@ -109,7 +109,7 @@
|
|
|
109
109
|
</div>
|
|
110
110
|
|
|
111
111
|
<div class="group/item">
|
|
112
|
-
<a href="/logout" class="relative flex items-center gap-3 px-5 py-4 border-t border-
|
|
112
|
+
<a href="/logout" class="relative flex items-center gap-3 px-5 py-4 border-t border-neutral-300 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white dark:border-neutral-700">
|
|
113
113
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="size-6 opacity-100 group-[.expanded]:opacity-50">
|
|
114
114
|
<path fill-rule="evenodd" d="M3 4.25A2.25 2.25 0 0 1 5.25 2h5.5A2.25 2.25 0 0 1 13 4.25v2a.75.75 0 0 1-1.5 0v-2a.75.75 0 0 0-.75-.75h-5.5a.75.75 0 0 0-.75.75v11.5c0 .414.336.75.75.75h5.5a.75.75 0 0 0 .75-.75v-2a.75.75 0 0 1 1.5 0v2A2.25 2.25 0 0 1 10.75 18h-5.5A2.25 2.25 0 0 1 3 15.75V4.25Z" clip-rule="evenodd" />
|
|
115
115
|
<path fill-rule="evenodd" d="M6 10a.75.75 0 0 1 .75-.75h9.546l-1.048-.943a.75.75 0 1 1 1.004-1.114l2.5 2.25a.75.75 0 0 1 0 1.114l-2.5 2.25a.75.75 0 1 1-1.004-1.114l1.048-.943H6.75A.75.75 0 0 1 6 10Z" clip-rule="evenodd" />
|
|
@@ -120,28 +120,27 @@
|
|
|
120
120
|
</div>
|
|
121
121
|
</div>
|
|
122
122
|
|
|
123
|
-
|
|
124
|
-
<%- body %>
|
|
125
|
-
</div>
|
|
123
|
+
<%- body %>
|
|
126
124
|
</div>
|
|
127
|
-
</body>
|
|
128
125
|
|
|
129
|
-
</html>
|
|
130
126
|
|
|
131
|
-
<script>
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
</script>
|
|
127
|
+
<script>
|
|
128
|
+
const toggleEl = document.getElementById('expand');
|
|
129
|
+
const sidebarEl = document.getElementById('sidebar');
|
|
130
|
+
|
|
131
|
+
const initToggle = () => {
|
|
132
|
+
const savedState = localStorage.getItem('sidebar') || 'off';
|
|
133
|
+
sidebarEl.classList.toggle('expanded', savedState === 'on');
|
|
134
|
+
};
|
|
135
|
+
|
|
136
|
+
const handleToggle = () => {
|
|
137
|
+
sidebarEl.classList.toggle('expanded');
|
|
138
|
+
localStorage.setItem("sidebar", sidebarEl.classList.contains('expanded') ? 'on' : 'off');
|
|
139
|
+
};
|
|
140
|
+
|
|
141
|
+
initToggle();
|
|
142
|
+
toggleEl.addEventListener('click', handleToggle);
|
|
143
|
+
</script>
|
|
144
|
+
</body>
|
|
145
|
+
|
|
146
|
+
</html>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
<header class="sticky top-0 z-10 flex items-center bg-
|
|
1
|
+
<header class="sticky top-0 z-10 flex items-center bg-raketa-background border-b border-mono-25 dark:border-neutral-700">
|
|
2
2
|
<div class="flex items-center justify-center flex-none size-14">
|
|
3
|
-
<a href="<%= `/${_context.locale}
|
|
4
|
-
<img src="/static/_assets/logo.svg" alt="Raketa" />
|
|
3
|
+
<a href="<%= `/${_context.locale}/pages` %>">
|
|
4
|
+
<img src="/static/_assets/logo.svg" alt="Raketa" class="dark:invert" />
|
|
5
5
|
</a>
|
|
6
6
|
</div>
|
|
7
7
|
|
|
@@ -15,19 +15,18 @@
|
|
|
15
15
|
<div class="flex items-center gap-4">
|
|
16
16
|
<div class="relative flex items-center gap-1 group body-2">
|
|
17
17
|
<img src="<%= _context.locales[_context.locale].flag %>" alt="<%= _context.locales[_context.locale].name %>" class="size-4 rounded-full" />
|
|
18
|
-
<div><%= _context.locales[_context.locale].name %></div>
|
|
19
18
|
|
|
20
19
|
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="<%= (!locals._translations || locals._translations.length > 0) ? "currentColor" : "transparent" %>" class="size-5">
|
|
21
20
|
<path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
|
|
22
21
|
</svg>
|
|
23
22
|
|
|
24
23
|
<div class="absolute right-0 hidden pt-1 w-48 top-full group-hover:block">
|
|
25
|
-
<div class="bg-
|
|
24
|
+
<div class="bg-raketa-background border rounded border-mono-purple-25 shadow-lg dark:border-neutral-700">
|
|
26
25
|
<% if (locals._translations) { %>
|
|
27
26
|
<% locals._translations.forEach(translation => { %>
|
|
28
27
|
<% const { name, _code, flag} = _context.locales[translation.locale] %>
|
|
29
28
|
|
|
30
|
-
<a href="<%= translation.path %>" class="flex items-center gap-2 p-2 hover:bg-mono-purple-25">
|
|
29
|
+
<a href="<%= translation.path %>" class="flex items-center gap-2 p-2 hover:bg-mono-purple-25 dark:hover:bg-neutral-700">
|
|
31
30
|
<img src="<%= flag %>" alt="<%= name %>" class="size-4 rounded-full" />
|
|
32
31
|
<div><%= name %></div>
|
|
33
32
|
</a>
|
|
@@ -35,7 +34,7 @@
|
|
|
35
34
|
<% } else { %>
|
|
36
35
|
<% Object.keys(_context.locales).forEach(locale => { %>
|
|
37
36
|
<% const { name, _code, flag} = _context.locales[locale] %>
|
|
38
|
-
<a href="<%= `/${locale}${_context.path.slice(_context.locale.length + 1)}` %>" class="flex items-center gap-2 p-2 hover:bg-mono-purple-25">
|
|
37
|
+
<a href="<%= `/${locale}${_context.path.slice(_context.locale.length + 1)}` %>" class="flex items-center gap-2 p-2 hover:bg-mono-purple-25 dark:hover:bg-neutral-700">
|
|
39
38
|
<img src="<%= flag %>" alt="<%= name %>" class="size-4 rounded-full" />
|
|
40
39
|
<div><%= name %></div>
|
|
41
40
|
</a>
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
<div class="page-wrapper">
|
|
2
|
+
<div class="page-title">
|
|
3
|
+
<h1 class="heading-1">Delete a page</h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class="grid gap-4 md:grid-cols-3">
|
|
7
|
+
<div>
|
|
8
|
+
<% form_for({ deleteAction }, errors, (f) => { %>
|
|
9
|
+
<form action="<%= `/${_context.locale}/pages/${deleteAction.id}/page_deletes` %>" method="POST" class="form">
|
|
10
|
+
<%- f.field('deleteAction.redirect', { as: 'select', required: true,options: [['301', 'Redirect to another page'], ['404', 'Return 404'],['410', 'Return 410']] }) %>
|
|
11
|
+
<%- f.field('deleteAction.destination', {label: 'Destination URL', required: true}) %>
|
|
12
|
+
|
|
13
|
+
<div class="form-actions">
|
|
14
|
+
<div class="btn-toolbar">
|
|
15
|
+
<%- f.submit('Proceed', { class: 'btn-primary' }) %>
|
|
16
|
+
<a href="<%=`/${_context.locale}/pages/${deleteAction.id}`%>" class="btn-secondary">Back</a>
|
|
17
|
+
</div>
|
|
18
|
+
</div>
|
|
19
|
+
</form>
|
|
20
|
+
<% }) %>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<div>
|
|
24
|
+
<div class="help">
|
|
25
|
+
<div class="mb-2 flex items-center gap-1">
|
|
26
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
|
|
27
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" />
|
|
28
|
+
</svg>
|
|
29
|
+
|
|
30
|
+
<h3 class="heading-3">Contextual help</h3>
|
|
31
|
+
</div>
|
|
32
|
+
|
|
33
|
+
<p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Tempore nostrum fugit sint sunt distinctio ut cum, corrupti ad error, quo labore minima. Reprehenderit quasi maxime repudiandae voluptatum commodi saepe molestiae?</p>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|
|
36
|
+
</div>
|
|
37
|
+
</div>
|
|
38
|
+
|
|
39
|
+
<script>
|
|
40
|
+
function onDestinationChange(event) {
|
|
41
|
+
const newValue = event.target.value;
|
|
42
|
+
const requiresRedirect = newValue === "301"
|
|
43
|
+
|
|
44
|
+
document.getElementById("f_destination").parentElement.style.display = requiresRedirect ? "block" : "none";
|
|
45
|
+
document.getElementById("f_destination").required = requiresRedirect;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
onDestinationChange({
|
|
49
|
+
target: {
|
|
50
|
+
value: '<%= deleteAction.redirect %>'
|
|
51
|
+
}
|
|
52
|
+
})
|
|
53
|
+
|
|
54
|
+
document.getElementById("f_redirect").addEventListener("change", onDestinationChange)
|
|
55
|
+
</script>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
<div class="page-wrapper">
|
|
2
|
+
<div class="page-title">
|
|
3
|
+
<h1 class="heading-1">Change URL</h1>
|
|
4
|
+
</div>
|
|
5
|
+
|
|
6
|
+
<div class="grid gap-4 md:grid-cols-3">
|
|
7
|
+
<div>
|
|
8
|
+
<% form_for({ lock_settings }, errors, (f) => { %>
|
|
9
|
+
<form action="<%= `/${_context.locale}/page_revisions/${lock_settings.revision.id}/page_lock` %>" method="POST" class="form">
|
|
10
|
+
<%- f.field('lock_settings.message', { as: 'textarea', label: 'Lock Message', required: true }) %>
|
|
11
|
+
<div class="form-actions">
|
|
12
|
+
<div class="btn-toolbar">
|
|
13
|
+
<%- f.submit('Lock revision', { class: 'btn-primary' }) %>
|
|
14
|
+
<a href="<%= `/${_context.locale}/pages/${lock_settings.revision.originalId}` %>" class="btn-secondary">Cancel</a>
|
|
15
|
+
</div>
|
|
16
|
+
</div>
|
|
17
|
+
</form>
|
|
18
|
+
<% }) %>
|
|
19
|
+
</div>
|
|
20
|
+
|
|
21
|
+
<div>
|
|
22
|
+
<div class="help">
|
|
23
|
+
<div class="mb-2 flex items-center gap-1">
|
|
24
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
|
|
25
|
+
<path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" />
|
|
26
|
+
</svg>
|
|
27
|
+
|
|
28
|
+
<h3 class="heading-3">Contextual help</h3>
|
|
29
|
+
</div>
|
|
30
|
+
|
|
31
|
+
<p>Locking a revision will prevent further changes to this version of the page. This action cannot be undone. Please provide a reason for locking this revision.</p>
|
|
32
|
+
</div>
|
|
33
|
+
</div>
|
|
34
|
+
</div>
|
|
35
|
+
</div>
|