@raketa-cloud/admin 1.8.6 → 1.8.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/dist/application.css +0 -4
- package/package.json +1 -1
- package/src/HonoAdapter.js +9 -22
- package/src/index.js +0 -3
- package/src/routeCategoriesModule.js +1 -1
- package/src/routeCollection.js +15 -8
- package/src/routeNestedCollection.js +1 -1
- package/src/routeNestedMember.js +1 -1
- package/src/routeResource.js +19 -21
- package/src/routeStandard.js +6 -6
- package/src/tests/HonoAdapter.coverage.test.js +15 -25
- package/src/tests/routeCategoriesModule.test.js +2 -2
- package/src/tests/routeResource.test.js +12 -37
- package/src/tests/routeStandard.test.js +13 -13
- package/src/views/_shared/_date_fields_input.ejs +13 -0
- package/src/views/{page_revisions → resource_revisions}/general/_form.ejs +1 -0
- package/src/views/{pages → resources}/_form.ejs +1 -0
- package/src/views/{pages → resources}/history/index.ejs +1 -1
- package/src/views/{articles → resources}/index.ejs +6 -0
- package/src/views/{pages → resources}/show.ejs +7 -7
- package/src/views/{articles → resources}/translations/create_form.ejs +2 -2
- package/src/routeArticlesModule.js +0 -15
- package/src/routeEventsModule.js +0 -15
- package/src/routePagesModule.js +0 -15
- package/src/tests/routeArticlesModule.test.js +0 -43
- package/src/tests/routeEventsModule.test.js +0 -43
- package/src/tests/routePagesModule.test.js +0 -43
- package/src/views/article_revisions/_nav.ejs +0 -53
- package/src/views/article_revisions/general/_form.ejs +0 -18
- package/src/views/article_revisions/tags/edit_form.ejs +0 -16
- package/src/views/articles/_form.ejs +0 -45
- package/src/views/articles/_shared/history_table.ejs +0 -74
- package/src/views/articles/deletes/create_form.ejs +0 -68
- package/src/views/articles/history/index.ejs +0 -80
- package/src/views/articles/show.ejs +0 -222
- package/src/views/articles/urls/create_form.ejs +0 -36
- package/src/views/event_revisions/codes/_form.ejs +0 -14
- package/src/views/event_revisions/codes/edit_form.ejs +0 -16
- package/src/views/event_revisions/general/_form.ejs +0 -20
- package/src/views/event_revisions/general/edit_form.ejs +0 -16
- package/src/views/event_revisions/locks/_form.ejs +0 -11
- package/src/views/event_revisions/locks/create_form.ejs +0 -27
- package/src/views/event_revisions/meta/_form.ejs +0 -16
- package/src/views/event_revisions/meta/edit_form.ejs +0 -16
- package/src/views/event_revisions/publishes/_form.ejs +0 -77
- package/src/views/event_revisions/publishes/create_form.ejs +0 -9
- package/src/views/event_revisions/tags/_form.ejs +0 -13
- package/src/views/event_revisions/tags/edit_form.ejs +0 -16
- package/src/views/event_revisions/visuals/_form.ejs +0 -13
- package/src/views/event_revisions/visuals/edit_form.ejs +0 -16
- package/src/views/events/_form.ejs +0 -47
- package/src/views/events/_shared/_addons.ejs +0 -0
- package/src/views/events/_shared/_export_button.ejs +0 -9
- package/src/views/events/_shared/_history_toolbar.ejs +0 -24
- package/src/views/events/_shared/_revision_operator.ejs +0 -8
- package/src/views/events/_shared/_revision_toolbar.ejs +0 -68
- package/src/views/events/_shared/_title.ejs +0 -14
- package/src/views/events/_shared/_toolbar.ejs +0 -45
- package/src/views/events/_shared/history_table.ejs +0 -74
- package/src/views/events/create_form.ejs +0 -9
- package/src/views/events/deletes/create_form.ejs +0 -68
- package/src/views/events/history/index.ejs +0 -80
- package/src/views/events/index.ejs +0 -190
- package/src/views/events/show.ejs +0 -222
- package/src/views/events/translations/_translation_toolbar.ejs +0 -18
- package/src/views/events/translations/create_form.ejs +0 -75
- package/src/views/events/translations/index.ejs +0 -39
- package/src/views/events/urls/create_form.ejs +0 -36
- package/src/views/page_revisions/_nav.ejs +0 -53
- package/src/views/page_revisions/codes/_form.ejs +0 -14
- package/src/views/page_revisions/codes/edit_form.ejs +0 -16
- package/src/views/page_revisions/general/edit_form.ejs +0 -16
- package/src/views/page_revisions/locks/_form.ejs +0 -11
- package/src/views/page_revisions/locks/create_form.ejs +0 -27
- package/src/views/page_revisions/meta/_form.ejs +0 -16
- package/src/views/page_revisions/meta/edit_form.ejs +0 -16
- package/src/views/page_revisions/publishes/_form.ejs +0 -76
- package/src/views/page_revisions/publishes/create_form.ejs +0 -9
- package/src/views/page_revisions/tags/_form.ejs +0 -13
- package/src/views/page_revisions/visuals/_form.ejs +0 -13
- package/src/views/page_revisions/visuals/edit_form.ejs +0 -16
- package/src/views/pages/_shared/_addons.ejs +0 -0
- package/src/views/pages/_shared/_export_button.ejs +0 -9
- package/src/views/pages/_shared/_history_toolbar.ejs +0 -24
- package/src/views/pages/_shared/_revision_operator.ejs +0 -8
- package/src/views/pages/_shared/_revision_toolbar.ejs +0 -68
- package/src/views/pages/_shared/_title.ejs +0 -14
- package/src/views/pages/_shared/_toolbar.ejs +0 -45
- package/src/views/pages/create_form.ejs +0 -9
- package/src/views/pages/index.ejs +0 -185
- package/src/views/pages/translations/_translation_toolbar.ejs +0 -18
- package/src/views/pages/translations/create_form.ejs +0 -75
- package/src/views/pages/translations/index.ejs +0 -39
- /package/src/views/{event_revisions → resource_revisions}/_nav.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/codes/_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/codes/edit_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/general/edit_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/locks/_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/locks/create_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/meta/_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/meta/edit_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/publishes/_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/publishes/create_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/tags/_form.ejs +0 -0
- /package/src/views/{page_revisions → resource_revisions}/tags/edit_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/visuals/_form.ejs +0 -0
- /package/src/views/{article_revisions → resource_revisions}/visuals/edit_form.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_addons.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_export_button.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_history_toolbar.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_revision_operator.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_revision_toolbar.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_title.ejs +0 -0
- /package/src/views/{articles → resources}/_shared/_toolbar.ejs +0 -0
- /package/src/views/{pages → resources}/_shared/history_table.ejs +0 -0
- /package/src/views/{articles → resources}/create_form.ejs +0 -0
- /package/src/views/{pages → resources}/deletes/create_form.ejs +0 -0
- /package/src/views/{articles → resources}/translations/_translation_toolbar.ejs +0 -0
- /package/src/views/{articles → resources}/translations/index.ejs +0 -0
- /package/src/views/{pages → resources}/urls/create_form.ejs +0 -0
package/dist/application.css
CHANGED
package/package.json
CHANGED
package/src/HonoAdapter.js
CHANGED
|
@@ -65,13 +65,11 @@ function putIn(result, key, value) {
|
|
|
65
65
|
const sanitizePath = (filePath) =>
|
|
66
66
|
path.normalize(path.join("/", ...filePath.split("/")));
|
|
67
67
|
|
|
68
|
-
// Find template path
|
|
69
|
-
function getPartialPath(partialPath, views
|
|
68
|
+
// Find template path, preferring an app override over the package template
|
|
69
|
+
function getPartialPath(partialPath, views) {
|
|
70
70
|
const paths = [
|
|
71
71
|
sanitizePath(`${process.cwd()}/src/views/${views}/${partialPath}`),
|
|
72
72
|
sanitizePath(`${currentPath}/views/${views}/${partialPath}`),
|
|
73
|
-
viewsFallback &&
|
|
74
|
-
sanitizePath(`${currentPath}/views/${viewsFallback}/${partialPath}`),
|
|
75
73
|
].filter(Boolean);
|
|
76
74
|
|
|
77
75
|
// Return first existing path
|
|
@@ -137,11 +135,8 @@ export default class HonoAdapter {
|
|
|
137
135
|
this.globalAfterFilters.push({ pattern, filter });
|
|
138
136
|
}
|
|
139
137
|
|
|
140
|
-
getActionPath(views,
|
|
141
|
-
const packagePath =
|
|
142
|
-
? `${currentPath}/views/${viewsFallback}/${action}.ejs`
|
|
143
|
-
: `${currentPath}/views/${views}/${action}.ejs`;
|
|
144
|
-
|
|
138
|
+
getActionPath(views, action) {
|
|
139
|
+
const packagePath = `${currentPath}/views/${views}/${action}.ejs`;
|
|
145
140
|
const appPath = `${process.cwd()}/src/views/${views}/${action}.ejs`;
|
|
146
141
|
|
|
147
142
|
return existsSync(appPath) ? appPath : packagePath;
|
|
@@ -172,9 +167,9 @@ export default class HonoAdapter {
|
|
|
172
167
|
});
|
|
173
168
|
}
|
|
174
169
|
|
|
175
|
-
renderPartial(assigns, views
|
|
170
|
+
renderPartial(assigns, views) {
|
|
176
171
|
return function render(relativePath, localAssigns) {
|
|
177
|
-
const partialPath = getPartialPath(relativePath, views
|
|
172
|
+
const partialPath = getPartialPath(relativePath, views);
|
|
178
173
|
|
|
179
174
|
try {
|
|
180
175
|
// Synchronously read the partial file as ejs does not support async/await
|
|
@@ -198,18 +193,11 @@ export default class HonoAdapter {
|
|
|
198
193
|
};
|
|
199
194
|
}
|
|
200
195
|
|
|
201
|
-
async renderAction(
|
|
202
|
-
{ views, viewsFallback, action, assigns },
|
|
203
|
-
viewHelpersConfig = {}
|
|
204
|
-
) {
|
|
196
|
+
async renderAction({ views, action, assigns }, viewHelpersConfig = {}) {
|
|
205
197
|
// Pick the parent here in the views so we can reuse stuff...
|
|
206
|
-
const fullTemplatePath = this.getActionPath(views,
|
|
198
|
+
const fullTemplatePath = this.getActionPath(views, action);
|
|
207
199
|
const renderAssigns = { ...this.getHelpers(viewHelpersConfig), ...assigns };
|
|
208
|
-
const renderPartialHelper = this.renderPartial(
|
|
209
|
-
renderAssigns,
|
|
210
|
-
views,
|
|
211
|
-
viewsFallback
|
|
212
|
-
);
|
|
200
|
+
const renderPartialHelper = this.renderPartial(renderAssigns, views);
|
|
213
201
|
|
|
214
202
|
try {
|
|
215
203
|
// Synchronously read the full template file
|
|
@@ -399,7 +387,6 @@ export default class HonoAdapter {
|
|
|
399
387
|
const rendered = this.renderAction(
|
|
400
388
|
{
|
|
401
389
|
views,
|
|
402
|
-
viewsFallback: resourceConfig.viewsFallback,
|
|
403
390
|
action,
|
|
404
391
|
assigns: fullAssigns,
|
|
405
392
|
},
|
package/src/index.js
CHANGED
|
@@ -5,9 +5,6 @@ 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 routeResource } from "./routeResource";
|
|
8
|
-
export { default as routePagesModule } from "./routePagesModule";
|
|
9
|
-
export { default as routeArticlesModule } from "./routeArticlesModule";
|
|
10
|
-
export { default as routeEventsModule } from "./routeEventsModule";
|
|
11
8
|
export { default as routeSettings } from "./routeSettings";
|
|
12
9
|
export { default as setupCloud } from "./setupCloud";
|
|
13
10
|
export { default as routeStandard } from "./routeStandard";
|
package/src/routeCollection.js
CHANGED
|
@@ -1,18 +1,25 @@
|
|
|
1
1
|
const routeCollection = (adapter, resource, handler, resourceConfig = {}) => {
|
|
2
|
+
const views = resourceConfig.views ?? resource;
|
|
3
|
+
|
|
2
4
|
// Create route definitions
|
|
3
5
|
const routes = [
|
|
4
|
-
["GET",
|
|
5
|
-
["GET",
|
|
6
|
-
["GET",
|
|
7
|
-
["GET",
|
|
8
|
-
["POST",
|
|
9
|
-
["POST",
|
|
10
|
-
["DELETE", `/${resource}/:id`,
|
|
6
|
+
["GET", `/${resource}`, "index", handler.index],
|
|
7
|
+
["GET", `/${resource}/new`, "create_form", handler.create_form],
|
|
8
|
+
["GET", `/${resource}/:id`, "show", handler.show],
|
|
9
|
+
["GET", `/${resource}/:id/edit`, "edit_form", handler.edit_form],
|
|
10
|
+
["POST", `/${resource}`, "create_form", handler.create],
|
|
11
|
+
["POST", `/${resource}/:id`, "edit_form", handler.update],
|
|
12
|
+
["DELETE", `/${resource}/:id`, "destroy", handler.destroy],
|
|
11
13
|
];
|
|
12
14
|
|
|
13
15
|
// Map routes to full configuration
|
|
14
16
|
const mapping = routes.map(([verb, path, action, fn]) => [
|
|
15
|
-
verb,
|
|
17
|
+
verb,
|
|
18
|
+
path,
|
|
19
|
+
resource,
|
|
20
|
+
views,
|
|
21
|
+
action,
|
|
22
|
+
fn,
|
|
16
23
|
]);
|
|
17
24
|
|
|
18
25
|
adapter.routeCollection(mapping, resourceConfig);
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const routeNestedCollection = (adapter, parent, resource, handler, resourceConfig = {}) => {
|
|
2
|
-
const views = `${parent}/${resource}`;
|
|
2
|
+
const views = resourceConfig.views ?? `${parent}/${resource}`;
|
|
3
3
|
|
|
4
4
|
// Define routes exactly as they were in the original implementation
|
|
5
5
|
// to maintain compatibility with the tests
|
package/src/routeNestedMember.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
const routeNestedMember = (adapter, parent, resource, handler, resourceConfig = {}) => {
|
|
2
|
-
const views = `${parent}/${resource}`;
|
|
2
|
+
const views = resourceConfig.views ?? `${parent}/${resource}`;
|
|
3
3
|
const basePath = `/${parent}/:parent_id/${resource}`;
|
|
4
4
|
|
|
5
5
|
// Create route definitions
|
package/src/routeResource.js
CHANGED
|
@@ -27,13 +27,11 @@ function routeResource(
|
|
|
27
27
|
adapter,
|
|
28
28
|
resourceType,
|
|
29
29
|
resourceTypePlural,
|
|
30
|
-
{ dateFields = []
|
|
30
|
+
{ dateFields = [] } = {},
|
|
31
31
|
) {
|
|
32
32
|
const baseResource = resourceTypePlural;
|
|
33
33
|
const revisionsBaseResource = `${resourceType}_revisions`;
|
|
34
34
|
const changesBaseResource = `${resourceType}_changes`;
|
|
35
|
-
const viewsRevisions = `${viewsType}_revisions`;
|
|
36
|
-
const viewsChanges = `${viewsType}_changes`;
|
|
37
35
|
|
|
38
36
|
const resourceConfig = {
|
|
39
37
|
resourceType,
|
|
@@ -46,7 +44,7 @@ function routeResource(
|
|
|
46
44
|
"GET",
|
|
47
45
|
`/${baseResource}/exports`,
|
|
48
46
|
"exports",
|
|
49
|
-
|
|
47
|
+
"resources/exports",
|
|
50
48
|
"index",
|
|
51
49
|
ExportsHandler.index,
|
|
52
50
|
],
|
|
@@ -55,7 +53,7 @@ function routeResource(
|
|
|
55
53
|
|
|
56
54
|
routeCollection(adapter, baseResource, ResourcesHandler, {
|
|
57
55
|
...resourceConfig,
|
|
58
|
-
|
|
56
|
+
views: "resources",
|
|
59
57
|
});
|
|
60
58
|
|
|
61
59
|
routeNestedCollection(
|
|
@@ -63,12 +61,12 @@ function routeResource(
|
|
|
63
61
|
baseResource,
|
|
64
62
|
"translations",
|
|
65
63
|
TranslationsHandler,
|
|
66
|
-
{ ...resourceConfig,
|
|
64
|
+
{ ...resourceConfig, views: "resources/translations" },
|
|
67
65
|
);
|
|
68
66
|
|
|
69
67
|
routeNestedCollection(adapter, baseResource, "history", HistoryHandler, {
|
|
70
68
|
...resourceConfig,
|
|
71
|
-
|
|
69
|
+
views: "resources/history",
|
|
72
70
|
});
|
|
73
71
|
|
|
74
72
|
routeNestedCollection(
|
|
@@ -78,38 +76,38 @@ function routeResource(
|
|
|
78
76
|
ResourceRevisionsHandler,
|
|
79
77
|
{
|
|
80
78
|
...resourceConfig,
|
|
81
|
-
|
|
79
|
+
views: "resource_revisions",
|
|
82
80
|
},
|
|
83
81
|
);
|
|
84
82
|
|
|
85
83
|
routeNestedMember(adapter, revisionsBaseResource, "general", GeneralHandler, {
|
|
86
84
|
...resourceConfig,
|
|
87
|
-
|
|
85
|
+
views: "resource_revisions/general",
|
|
88
86
|
});
|
|
89
87
|
|
|
90
88
|
routeNestedMember(adapter, revisionsBaseResource, "visuals", VisualHandler, {
|
|
91
89
|
...resourceConfig,
|
|
92
|
-
|
|
90
|
+
views: "resource_revisions/visuals",
|
|
93
91
|
});
|
|
94
92
|
|
|
95
93
|
routeNestedMember(adapter, revisionsBaseResource, "codes", CodeHandler, {
|
|
96
94
|
...resourceConfig,
|
|
97
|
-
|
|
95
|
+
views: "resource_revisions/codes",
|
|
98
96
|
});
|
|
99
97
|
|
|
100
98
|
routeNestedMember(adapter, revisionsBaseResource, "meta", MetaHandler, {
|
|
101
99
|
...resourceConfig,
|
|
102
|
-
|
|
100
|
+
views: "resource_revisions/meta",
|
|
103
101
|
});
|
|
104
102
|
|
|
105
103
|
routeNestedMember(adapter, revisionsBaseResource, "tags", TagHandler, {
|
|
106
104
|
...resourceConfig,
|
|
107
|
-
|
|
105
|
+
views: "resource_revisions/tags",
|
|
108
106
|
});
|
|
109
107
|
|
|
110
108
|
routeNestedCollection(adapter, revisionsBaseResource, "locks", LocksHandler, {
|
|
111
109
|
...resourceConfig,
|
|
112
|
-
|
|
110
|
+
views: "resource_revisions/locks",
|
|
113
111
|
});
|
|
114
112
|
|
|
115
113
|
routeNestedCollection(
|
|
@@ -119,23 +117,23 @@ function routeResource(
|
|
|
119
117
|
UnlocksHandler,
|
|
120
118
|
{
|
|
121
119
|
...resourceConfig,
|
|
122
|
-
|
|
120
|
+
views: "resource_revisions/unlocks",
|
|
123
121
|
},
|
|
124
122
|
);
|
|
125
123
|
|
|
126
124
|
routeNestedCollection(adapter, baseResource, "clones", ClonesHandler, {
|
|
127
125
|
...resourceConfig,
|
|
128
|
-
|
|
126
|
+
views: "resources/clones",
|
|
129
127
|
});
|
|
130
128
|
|
|
131
129
|
routeNestedCollection(adapter, baseResource, "urls", URLsHandler, {
|
|
132
130
|
...resourceConfig,
|
|
133
|
-
|
|
131
|
+
views: "resources/urls",
|
|
134
132
|
});
|
|
135
133
|
|
|
136
134
|
routeNestedCollection(adapter, baseResource, "deletes", DeletesHandler, {
|
|
137
135
|
...resourceConfig,
|
|
138
|
-
|
|
136
|
+
views: "resources/deletes",
|
|
139
137
|
});
|
|
140
138
|
|
|
141
139
|
routeNestedCollection(
|
|
@@ -145,7 +143,7 @@ function routeResource(
|
|
|
145
143
|
RevertsHandler,
|
|
146
144
|
{
|
|
147
145
|
...resourceConfig,
|
|
148
|
-
|
|
146
|
+
views: "resource_changes/reverts",
|
|
149
147
|
},
|
|
150
148
|
);
|
|
151
149
|
|
|
@@ -156,7 +154,7 @@ function routeResource(
|
|
|
156
154
|
PublishesHandler,
|
|
157
155
|
{
|
|
158
156
|
...resourceConfig,
|
|
159
|
-
|
|
157
|
+
views: "resource_revisions/publishes",
|
|
160
158
|
},
|
|
161
159
|
);
|
|
162
160
|
|
|
@@ -167,7 +165,7 @@ function routeResource(
|
|
|
167
165
|
CancelSchedulesHandler,
|
|
168
166
|
{
|
|
169
167
|
...resourceConfig,
|
|
170
|
-
|
|
168
|
+
views: "resource_revisions/cancel_schedules",
|
|
171
169
|
},
|
|
172
170
|
);
|
|
173
171
|
|
package/src/routeStandard.js
CHANGED
|
@@ -2,10 +2,8 @@ import DashboardsHandler from "./handlers/DashboardsHandler";
|
|
|
2
2
|
import RedirectsHandler from "./handlers/RedirectsHandler";
|
|
3
3
|
import TagsAPIHandler from "./handlers/TagsAPIHandler";
|
|
4
4
|
import TagsHandler from "./handlers/TagsHandler";
|
|
5
|
-
import routeArticlesModule from "./routeArticlesModule";
|
|
6
5
|
import routeCollection from "./routeCollection";
|
|
7
|
-
import
|
|
8
|
-
import routePagesModule from "./routePagesModule";
|
|
6
|
+
import routeResource from "./routeResource";
|
|
9
7
|
import routeSettings from "./routeSettings";
|
|
10
8
|
|
|
11
9
|
function routeStandard(adapter) {
|
|
@@ -29,9 +27,11 @@ function routeStandard(adapter) {
|
|
|
29
27
|
routeCollection(adapter, "tags", TagsHandler);
|
|
30
28
|
routeCollection(adapter, "api/tags", TagsAPIHandler);
|
|
31
29
|
routeSettings(adapter);
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
30
|
+
routeResource(adapter, "page", "pages", { dateFields: [] });
|
|
31
|
+
routeResource(adapter, "article", "articles", { dateFields: ["publish_at"] });
|
|
32
|
+
routeResource(adapter, "event", "events", {
|
|
33
|
+
dateFields: ["publish_at", "starts_at", "ends_at"],
|
|
34
|
+
});
|
|
35
35
|
}
|
|
36
36
|
|
|
37
37
|
export default routeStandard;
|
|
@@ -86,25 +86,17 @@ describe("HonoAdapter.getActionPath", () => {
|
|
|
86
86
|
test("returns app path when it exists", () => {
|
|
87
87
|
existsSync.mockReturnValue(true);
|
|
88
88
|
|
|
89
|
-
const result = adapter.getActionPath("
|
|
89
|
+
const result = adapter.getActionPath("resources", "index");
|
|
90
90
|
|
|
91
|
-
expect(result).toBe(`${process.cwd()}/src/views/
|
|
91
|
+
expect(result).toBe(`${process.cwd()}/src/views/resources/index.ejs`);
|
|
92
92
|
});
|
|
93
93
|
|
|
94
|
-
test("returns package path
|
|
94
|
+
test("returns package path when app missing", () => {
|
|
95
95
|
existsSync.mockReturnValue(false);
|
|
96
96
|
|
|
97
|
-
const result = adapter.getActionPath("
|
|
97
|
+
const result = adapter.getActionPath("resources", "index");
|
|
98
98
|
|
|
99
|
-
expect(result).toContain("/views/
|
|
100
|
-
});
|
|
101
|
-
|
|
102
|
-
test("returns package path with views when no fallback", () => {
|
|
103
|
-
existsSync.mockReturnValue(false);
|
|
104
|
-
|
|
105
|
-
const result = adapter.getActionPath("pages", null, "index");
|
|
106
|
-
|
|
107
|
-
expect(result).toContain("/views/pages/index.ejs");
|
|
99
|
+
expect(result).toContain("/views/resources/index.ejs");
|
|
108
100
|
});
|
|
109
101
|
});
|
|
110
102
|
|
|
@@ -140,7 +132,7 @@ describe("HonoAdapter.renderPartial", () => {
|
|
|
140
132
|
readFileSync.mockReturnValue("<%= foo %>");
|
|
141
133
|
ejs.render.mockReturnValue("rendered");
|
|
142
134
|
|
|
143
|
-
const render = adapter.renderPartial({ foo: "bar" }, "
|
|
135
|
+
const render = adapter.renderPartial({ foo: "bar" }, "resources");
|
|
144
136
|
const result = render("_partial.ejs", { extra: 1 });
|
|
145
137
|
|
|
146
138
|
expect(result).toBe("rendered");
|
|
@@ -159,7 +151,7 @@ describe("HonoAdapter.renderPartial", () => {
|
|
|
159
151
|
throw err;
|
|
160
152
|
});
|
|
161
153
|
|
|
162
|
-
const render = adapter.renderPartial({}, "
|
|
154
|
+
const render = adapter.renderPartial({}, "resources");
|
|
163
155
|
const result = render("_partial.ejs", {});
|
|
164
156
|
|
|
165
157
|
expect(result).toContain("Error rendering");
|
|
@@ -170,7 +162,7 @@ describe("HonoAdapter.renderPartial", () => {
|
|
|
170
162
|
test("throws when partial cannot be located", () => {
|
|
171
163
|
existsSync.mockReturnValue(false);
|
|
172
164
|
|
|
173
|
-
const render = adapter.renderPartial({}, "
|
|
165
|
+
const render = adapter.renderPartial({}, "resources");
|
|
174
166
|
|
|
175
167
|
expect(() => render("_missing.ejs", {})).toThrow(/Template not found/);
|
|
176
168
|
});
|
|
@@ -195,8 +187,7 @@ describe("HonoAdapter.renderAction", () => {
|
|
|
195
187
|
ejs.renderFile.mockResolvedValue("<html>...</html>");
|
|
196
188
|
|
|
197
189
|
const result = await adapter.renderAction({
|
|
198
|
-
views: "
|
|
199
|
-
viewsFallback: null,
|
|
190
|
+
views: "resources",
|
|
200
191
|
action: "index",
|
|
201
192
|
assigns: { title: "Hi" },
|
|
202
193
|
});
|
|
@@ -215,8 +206,7 @@ describe("HonoAdapter.renderAction", () => {
|
|
|
215
206
|
});
|
|
216
207
|
|
|
217
208
|
const result = await adapter.renderAction({
|
|
218
|
-
views: "
|
|
219
|
-
viewsFallback: null,
|
|
209
|
+
views: "resources",
|
|
220
210
|
action: "index",
|
|
221
211
|
assigns: {},
|
|
222
212
|
});
|
|
@@ -395,8 +385,8 @@ describe("HonoAdapter.createAction", () => {
|
|
|
395
385
|
const handler = jest.fn().mockResolvedValue({ assigns: { title: "Hi" } });
|
|
396
386
|
|
|
397
387
|
await adapter.createAction(
|
|
398
|
-
["GET", "/pages", "pages", "
|
|
399
|
-
{
|
|
388
|
+
["GET", "/pages", "pages", "resources", "index", handler],
|
|
389
|
+
{}
|
|
400
390
|
);
|
|
401
391
|
|
|
402
392
|
const registered = getRegisteredHandler(adapter, "/en/pages");
|
|
@@ -631,10 +621,10 @@ describe("HonoAdapter.routeCollection (instance)", () => {
|
|
|
631
621
|
["POST", "/a", "a", "a", "create", handler],
|
|
632
622
|
];
|
|
633
623
|
|
|
634
|
-
adapter.routeCollection(mapping, {
|
|
624
|
+
adapter.routeCollection(mapping, { views: "a" });
|
|
635
625
|
|
|
636
626
|
expect(createSpy).toHaveBeenCalledTimes(2);
|
|
637
|
-
expect(createSpy).toHaveBeenCalledWith(mapping[0], {
|
|
638
|
-
expect(createSpy).toHaveBeenCalledWith(mapping[1], {
|
|
627
|
+
expect(createSpy).toHaveBeenCalledWith(mapping[0], { views: "a" });
|
|
628
|
+
expect(createSpy).toHaveBeenCalledWith(mapping[1], { views: "a" });
|
|
639
629
|
});
|
|
640
630
|
});
|
|
@@ -9,7 +9,7 @@ describe("routeCategoriesModule", () => {
|
|
|
9
9
|
routeCollection.mockClear();
|
|
10
10
|
});
|
|
11
11
|
|
|
12
|
-
test("registers categories collection with categoryType + plural +
|
|
12
|
+
test("registers categories collection with categoryType + plural + views", () => {
|
|
13
13
|
const adapter = {};
|
|
14
14
|
|
|
15
15
|
routeCategoriesModule(adapter, "tag", "tags");
|
|
@@ -17,7 +17,7 @@ describe("routeCategoriesModule", () => {
|
|
|
17
17
|
expect(routeCollection).toHaveBeenCalledWith(adapter, "tags", CategoriesHandler, {
|
|
18
18
|
categoryType: "tag",
|
|
19
19
|
categoryTypePlural: "tags",
|
|
20
|
-
|
|
20
|
+
views: "categories",
|
|
21
21
|
});
|
|
22
22
|
});
|
|
23
23
|
});
|
|
@@ -13,8 +13,6 @@ describe("routeResource", () => {
|
|
|
13
13
|
const adapter = makeAdapter();
|
|
14
14
|
|
|
15
15
|
routeResource(adapter, "article", "articles", {
|
|
16
|
-
viewsType: "article",
|
|
17
|
-
viewsTypePlural: "articles",
|
|
18
16
|
dateFields: ["publish_at"],
|
|
19
17
|
});
|
|
20
18
|
|
|
@@ -25,7 +23,7 @@ describe("routeResource", () => {
|
|
|
25
23
|
"GET",
|
|
26
24
|
"/articles/exports",
|
|
27
25
|
"exports",
|
|
28
|
-
"
|
|
26
|
+
"resources/exports",
|
|
29
27
|
"index",
|
|
30
28
|
expect.any(Function),
|
|
31
29
|
],
|
|
@@ -41,8 +39,6 @@ describe("routeResource", () => {
|
|
|
41
39
|
const adapter = makeAdapter();
|
|
42
40
|
|
|
43
41
|
routeResource(adapter, "event", "events", {
|
|
44
|
-
viewsType: "event",
|
|
45
|
-
viewsTypePlural: "events",
|
|
46
42
|
dateFields: ["publish_at", "starts_at", "ends_at"],
|
|
47
43
|
});
|
|
48
44
|
|
|
@@ -64,10 +60,7 @@ describe("routeResource", () => {
|
|
|
64
60
|
test("registers ResourcesHandler collection at base resource", () => {
|
|
65
61
|
const adapter = makeAdapter();
|
|
66
62
|
|
|
67
|
-
routeResource(adapter, "page", "pages"
|
|
68
|
-
viewsType: "page",
|
|
69
|
-
viewsTypePlural: "pages",
|
|
70
|
-
});
|
|
63
|
+
routeResource(adapter, "page", "pages");
|
|
71
64
|
|
|
72
65
|
const baseCollection = adapter.routeCollection.mock.calls.find(
|
|
73
66
|
([mapping]) => mapping.some(([, path]) => path === "/pages")
|
|
@@ -75,17 +68,14 @@ describe("routeResource", () => {
|
|
|
75
68
|
|
|
76
69
|
expect(baseCollection).toBeDefined();
|
|
77
70
|
expect(baseCollection[1]).toMatchObject({
|
|
78
|
-
|
|
71
|
+
views: "resources",
|
|
79
72
|
});
|
|
80
73
|
});
|
|
81
74
|
|
|
82
75
|
test("registers api collection for resources", () => {
|
|
83
76
|
const adapter = makeAdapter();
|
|
84
77
|
|
|
85
|
-
routeResource(adapter, "page", "pages"
|
|
86
|
-
viewsType: "page",
|
|
87
|
-
viewsTypePlural: "pages",
|
|
88
|
-
});
|
|
78
|
+
routeResource(adapter, "page", "pages");
|
|
89
79
|
|
|
90
80
|
const apiCollection = adapter.routeCollection.mock.calls.find(
|
|
91
81
|
([mapping]) => mapping.some(([, path]) => path === "/api/pages")
|
|
@@ -97,10 +87,7 @@ describe("routeResource", () => {
|
|
|
97
87
|
test("registers nested collections for revisions, translations, history, locks, unlocks, clones, urls, deletes, publishes, cancel_schedules, reverts", () => {
|
|
98
88
|
const adapter = makeAdapter();
|
|
99
89
|
|
|
100
|
-
routeResource(adapter, "article", "articles"
|
|
101
|
-
viewsType: "article",
|
|
102
|
-
viewsTypePlural: "articles",
|
|
103
|
-
});
|
|
90
|
+
routeResource(adapter, "article", "articles");
|
|
104
91
|
|
|
105
92
|
const nestedPaths = adapter.routeNestedCollection.mock.calls.flatMap(
|
|
106
93
|
([mapping]) => mapping.map(([, path]) => path)
|
|
@@ -126,10 +113,7 @@ describe("routeResource", () => {
|
|
|
126
113
|
test("registers nested members for general, visuals, codes, meta, tags", () => {
|
|
127
114
|
const adapter = makeAdapter();
|
|
128
115
|
|
|
129
|
-
routeResource(adapter, "article", "articles"
|
|
130
|
-
viewsType: "article",
|
|
131
|
-
viewsTypePlural: "articles",
|
|
132
|
-
});
|
|
116
|
+
routeResource(adapter, "article", "articles");
|
|
133
117
|
|
|
134
118
|
const nestedMemberPaths = adapter.routeNestedMember.mock.calls.flatMap(
|
|
135
119
|
([mapping]) => mapping.map(([, path]) => path)
|
|
@@ -149,10 +133,7 @@ describe("routeResource", () => {
|
|
|
149
133
|
test("registers api widgets and change endpoints", () => {
|
|
150
134
|
const adapter = makeAdapter();
|
|
151
135
|
|
|
152
|
-
routeResource(adapter, "page", "pages"
|
|
153
|
-
viewsType: "page",
|
|
154
|
-
viewsTypePlural: "pages",
|
|
155
|
-
});
|
|
136
|
+
routeResource(adapter, "page", "pages");
|
|
156
137
|
|
|
157
138
|
const nestedMemberPaths = adapter.routeNestedMember.mock.calls.flatMap(
|
|
158
139
|
([mapping]) => mapping.map(([, path]) => path)
|
|
@@ -169,34 +150,28 @@ describe("routeResource", () => {
|
|
|
169
150
|
test("uses default empty dateFields when not provided", () => {
|
|
170
151
|
const adapter = makeAdapter();
|
|
171
152
|
|
|
172
|
-
routeResource(adapter, "page", "pages"
|
|
173
|
-
viewsType: "page",
|
|
174
|
-
viewsTypePlural: "pages",
|
|
175
|
-
});
|
|
153
|
+
routeResource(adapter, "page", "pages");
|
|
176
154
|
|
|
177
155
|
const firstCall = adapter.routeCollection.mock.calls[0];
|
|
178
156
|
expect(firstCall[1].dateFields).toEqual([]);
|
|
179
157
|
});
|
|
180
158
|
|
|
181
|
-
test("propagates
|
|
159
|
+
test("propagates shared resources views for migrated collection helpers", () => {
|
|
182
160
|
const adapter = makeAdapter();
|
|
183
161
|
|
|
184
|
-
routeResource(adapter, "event", "events"
|
|
185
|
-
viewsType: "event",
|
|
186
|
-
viewsTypePlural: "events",
|
|
187
|
-
});
|
|
162
|
+
routeResource(adapter, "event", "events");
|
|
188
163
|
|
|
189
164
|
const baseCollection = adapter.routeCollection.mock.calls.find(
|
|
190
165
|
([mapping]) => mapping.some(([, path]) => path === "/events")
|
|
191
166
|
);
|
|
192
167
|
|
|
193
|
-
expect(baseCollection[1].
|
|
168
|
+
expect(baseCollection[1].views).toBe("resources");
|
|
194
169
|
|
|
195
170
|
const translationsCall = adapter.routeNestedCollection.mock.calls.find(
|
|
196
171
|
([mapping]) =>
|
|
197
172
|
mapping.some(([, path]) => path === "/events/:parent_id/translations")
|
|
198
173
|
);
|
|
199
174
|
|
|
200
|
-
expect(translationsCall[1].
|
|
175
|
+
expect(translationsCall[1].views).toBe("resources/translations");
|
|
201
176
|
});
|
|
202
177
|
});
|
|
@@ -1,9 +1,7 @@
|
|
|
1
1
|
import routeStandard from "../routeStandard";
|
|
2
2
|
import routeCollection from "../routeCollection";
|
|
3
3
|
import routeSettings from "../routeSettings";
|
|
4
|
-
import
|
|
5
|
-
import routeArticlesModule from "../routeArticlesModule";
|
|
6
|
-
import routeEventsModule from "../routeEventsModule";
|
|
4
|
+
import routeResource from "../routeResource";
|
|
7
5
|
|
|
8
6
|
import DashboardsHandler from "../handlers/DashboardsHandler";
|
|
9
7
|
import RedirectsHandler from "../handlers/RedirectsHandler";
|
|
@@ -12,17 +10,13 @@ import TagsAPIHandler from "../handlers/TagsAPIHandler";
|
|
|
12
10
|
|
|
13
11
|
jest.mock("../routeCollection", () => jest.fn());
|
|
14
12
|
jest.mock("../routeSettings", () => jest.fn());
|
|
15
|
-
jest.mock("../
|
|
16
|
-
jest.mock("../routeArticlesModule", () => jest.fn());
|
|
17
|
-
jest.mock("../routeEventsModule", () => jest.fn());
|
|
13
|
+
jest.mock("../routeResource", () => jest.fn());
|
|
18
14
|
|
|
19
15
|
describe("routeStandard", () => {
|
|
20
16
|
beforeEach(() => {
|
|
21
17
|
routeCollection.mockClear();
|
|
22
18
|
routeSettings.mockClear();
|
|
23
|
-
|
|
24
|
-
routeArticlesModule.mockClear();
|
|
25
|
-
routeEventsModule.mockClear();
|
|
19
|
+
routeResource.mockClear();
|
|
26
20
|
});
|
|
27
21
|
|
|
28
22
|
test("registers dashboard mapping via adapter.routeCollection", () => {
|
|
@@ -57,14 +51,20 @@ describe("routeStandard", () => {
|
|
|
57
51
|
expect(routeCollection).toHaveBeenCalledWith(adapter, "api/tags", TagsAPIHandler);
|
|
58
52
|
});
|
|
59
53
|
|
|
60
|
-
test("delegates to
|
|
54
|
+
test("delegates to routeSettings and registers page/article/event resources", () => {
|
|
61
55
|
const adapter = { routeCollection: jest.fn() };
|
|
62
56
|
|
|
63
57
|
routeStandard(adapter);
|
|
64
58
|
|
|
65
59
|
expect(routeSettings).toHaveBeenCalledWith(adapter);
|
|
66
|
-
expect(
|
|
67
|
-
|
|
68
|
-
|
|
60
|
+
expect(routeResource).toHaveBeenCalledWith(adapter, "page", "pages", {
|
|
61
|
+
dateFields: [],
|
|
62
|
+
});
|
|
63
|
+
expect(routeResource).toHaveBeenCalledWith(adapter, "article", "articles", {
|
|
64
|
+
dateFields: ["publish_at"],
|
|
65
|
+
});
|
|
66
|
+
expect(routeResource).toHaveBeenCalledWith(adapter, "event", "events", {
|
|
67
|
+
dateFields: ["publish_at", "starts_at", "ends_at"],
|
|
68
|
+
});
|
|
69
69
|
});
|
|
70
70
|
});
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
<%
|
|
2
|
+
const dateFieldMeta = {
|
|
3
|
+
publish_at: { type: "date", label: `${Inflector.capitalize(_context.resourceConfig.resourceType)} post date` },
|
|
4
|
+
starts_at: { type: "datetime-local", label: "Starts at (UTC)" },
|
|
5
|
+
ends_at: { type: "datetime-local", label: "Ends at (UTC)" },
|
|
6
|
+
};
|
|
7
|
+
%>
|
|
8
|
+
<% (_context.resourceConfig.dateFields || []).forEach((name) => { %>
|
|
9
|
+
<% const meta = dateFieldMeta[name]; %>
|
|
10
|
+
<% if (meta) { %>
|
|
11
|
+
<%- f.field(`resource.settings.${name}`, { required: true, type: meta.type, label: meta.label }) %>
|
|
12
|
+
<% } %>
|
|
13
|
+
<% }) %>
|