@raketa-cloud/admin 0.0.14 → 0.0.15
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/ArticleChanges.js +15 -0
- package/src/cloud/ArticleRevisions.js +152 -0
- package/src/cloud/Articles.js +133 -0
- package/src/cloud/documents/articlesDocuments.js +109 -469
- package/src/cloud/documents/common.js +10 -0
- package/src/handlers/article_revisions/ArticleRevisionsHandler.js +49 -0
- package/src/handlers/article_revisions/CodeHandler.js +90 -0
- package/src/handlers/article_revisions/GeneralHandler.js +95 -0
- package/src/handlers/article_revisions/LocksHandler.js +54 -0
- package/src/handlers/article_revisions/MetaHandler.js +90 -0
- package/src/handlers/article_revisions/PublishesHandler.js +90 -0
- package/src/handlers/article_revisions/RevertsHandler.js +28 -0
- package/src/handlers/article_revisions/TagHandler.js +89 -0
- package/src/handlers/article_revisions/UnlocksHandler.js +22 -0
- package/src/handlers/article_revisions/VisualHandler.js +84 -0
- package/src/handlers/article_revisions/WidgetHandler.js +47 -0
- package/src/handlers/articles/ArticlesHandler.js +119 -0
- package/src/handlers/articles/ClonesHandler.js +17 -0
- package/src/handlers/articles/DeletesHandler.js +68 -0
- package/src/handlers/articles/TranslationsHandler.js +103 -0
- package/src/handlers/articles/URLsHandler.js +71 -0
- package/src/handlers/pages/PagesHandler.js +4 -2
- package/src/handlers/pages/TranslationsHandler.js +7 -5
- package/src/index.js +22 -0
- package/src/routeArticles.js +65 -0
- package/src/routeStandard.js +2 -0
- package/src/setupCloud.js +12 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +144 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +41 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +49 -0
- package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +105 -0
- package/src/tests/handlers/articles/ConesHandler.test/create.test.js +54 -0
- package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +110 -0
- package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +54 -0
- package/src/tests/handlers/articles/URLsHandler.test/create.test.js +155 -0
- package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +51 -0
- package/src/tests/handlers/pages/PagesHandler.test/create.test.js +3 -3
- package/src/utils.js +46 -0
- package/src/views/article_revisions/_nav.ejs +40 -0
- package/src/views/article_revisions/codes/edit_form.ejs +39 -0
- package/src/views/article_revisions/general/edit_form.ejs +70 -0
- package/src/views/article_revisions/locks/create_form.ejs +35 -0
- package/src/views/article_revisions/meta/edit_form.ejs +41 -0
- package/src/views/article_revisions/publishes/_form.ejs +57 -0
- package/src/views/article_revisions/publishes/create_form.ejs +10 -0
- package/src/views/article_revisions/tags/edit_form.ejs +64 -0
- package/src/views/article_revisions/visuals/edit_form.ejs +42 -0
- package/src/views/articles/_form.ejs +86 -0
- package/src/views/articles/create_form.ejs +9 -0
- package/src/views/articles/deletes/create_form.ejs +55 -0
- package/src/views/articles/edit_form.ejs +3 -0
- package/src/views/articles/index.ejs +161 -0
- package/src/views/articles/show.ejs +281 -0
- package/src/views/articles/translations/_form.ejs +77 -0
- package/src/views/articles/translations/create_form.ejs +11 -0
- package/src/views/articles/urls/create_form.ejs +31 -0
- package/src/views/page_revisions/locks/create_form.ejs +1 -1
- package/test/factory.js +37 -0
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
const show = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
|
|
4
|
+
const revision = await ctx.client.articleRevisions.find(
|
|
5
|
+
parent_id,
|
|
6
|
+
ctx.locale
|
|
7
|
+
);
|
|
8
|
+
const settings = await ctx.client.settings.find(ctx.locale);
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
json: {
|
|
12
|
+
revision: { ...revision, websiteSettings: settings },
|
|
13
|
+
},
|
|
14
|
+
};
|
|
15
|
+
};
|
|
16
|
+
|
|
17
|
+
const update = async (ctx) => {
|
|
18
|
+
const { parent_id } = ctx.params;
|
|
19
|
+
|
|
20
|
+
const revision = await ctx.client.articleRevisions.find(
|
|
21
|
+
parent_id,
|
|
22
|
+
ctx.locale
|
|
23
|
+
);
|
|
24
|
+
|
|
25
|
+
const params = ctx.resourceParams;
|
|
26
|
+
|
|
27
|
+
const data = await ctx.client.articleRevisions.updateWidgets(
|
|
28
|
+
revision.id,
|
|
29
|
+
ctx.locale,
|
|
30
|
+
params.widgets || []
|
|
31
|
+
);
|
|
32
|
+
|
|
33
|
+
if (data.revision) {
|
|
34
|
+
const settings = await ctx.client.settings.find(ctx.locale);
|
|
35
|
+
|
|
36
|
+
data.revision = { ...data.revision, websiteSettings: settings };
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
return {
|
|
40
|
+
json: data,
|
|
41
|
+
};
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
export default {
|
|
45
|
+
update,
|
|
46
|
+
show,
|
|
47
|
+
};
|
|
@@ -0,0 +1,119 @@
|
|
|
1
|
+
import { toUTCISO8601String } from "../../utils";
|
|
2
|
+
|
|
3
|
+
const index = async (ctx) => {
|
|
4
|
+
const items = await ctx.client.articles.list(ctx.query, ctx.locale);
|
|
5
|
+
const tags = await ctx.client.tags.all(ctx.locale);
|
|
6
|
+
|
|
7
|
+
return {
|
|
8
|
+
assigns: {
|
|
9
|
+
tags: tags.list,
|
|
10
|
+
items,
|
|
11
|
+
visibilityOptions: ctx.client.articles.visibilityOptions(),
|
|
12
|
+
},
|
|
13
|
+
};
|
|
14
|
+
};
|
|
15
|
+
|
|
16
|
+
const show = async (ctx) => {
|
|
17
|
+
const { id } = ctx.params;
|
|
18
|
+
const article = await ctx.client.articles.find(id, ctx.locale);
|
|
19
|
+
|
|
20
|
+
if (!article) {
|
|
21
|
+
throw new Error(`Missing article #${id}`);
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
const revisions = await ctx.client.articleRevisions.all(id, ctx.locale);
|
|
25
|
+
const changes = await ctx.client.articleChanges.all(id, ctx.locale);
|
|
26
|
+
|
|
27
|
+
return {
|
|
28
|
+
assigns: {
|
|
29
|
+
article,
|
|
30
|
+
revisions: revisions.list,
|
|
31
|
+
changes: changes.list,
|
|
32
|
+
_translations: Object.keys(ctx.locales)
|
|
33
|
+
.map((locale) => {
|
|
34
|
+
const translation = article.translations[locale];
|
|
35
|
+
|
|
36
|
+
if (translation) {
|
|
37
|
+
return {
|
|
38
|
+
locale,
|
|
39
|
+
path: `/${locale}/articles/${translation.id}`,
|
|
40
|
+
};
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
return null;
|
|
44
|
+
})
|
|
45
|
+
.filter(Boolean),
|
|
46
|
+
},
|
|
47
|
+
};
|
|
48
|
+
};
|
|
49
|
+
|
|
50
|
+
const create_form = async (ctx) => {
|
|
51
|
+
const tags = await ctx.client.tags.all(ctx.locale);
|
|
52
|
+
|
|
53
|
+
return {
|
|
54
|
+
assigns: {
|
|
55
|
+
article: { ...ctx.client.articles.defaults(), meta_image: {} },
|
|
56
|
+
tags: tags.list,
|
|
57
|
+
errors: {},
|
|
58
|
+
visibilityOptions: ctx.client.articles.visibilityOptions(),
|
|
59
|
+
_translations: [],
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
const create = async (ctx) => {
|
|
65
|
+
const params = { ...ctx.resourceParams.article };
|
|
66
|
+
|
|
67
|
+
params.meta_image = JSON.parse(params.meta_image || "{}");
|
|
68
|
+
|
|
69
|
+
const { errors } = await ctx.client.articles.create(
|
|
70
|
+
{
|
|
71
|
+
title: params.title,
|
|
72
|
+
slug: params.slug,
|
|
73
|
+
visibility: params.visibility,
|
|
74
|
+
publishAt: toUTCISO8601String(params.publish_at),
|
|
75
|
+
settings: {
|
|
76
|
+
layout: params.layout,
|
|
77
|
+
meta: {
|
|
78
|
+
title: params.meta_title,
|
|
79
|
+
description: params.meta_description,
|
|
80
|
+
image: params.meta_image,
|
|
81
|
+
},
|
|
82
|
+
credentials: {
|
|
83
|
+
user: params.username || "",
|
|
84
|
+
password: params.password || "",
|
|
85
|
+
},
|
|
86
|
+
},
|
|
87
|
+
widgets: [],
|
|
88
|
+
tags: params.tags || [],
|
|
89
|
+
categories: params.categories || [],
|
|
90
|
+
},
|
|
91
|
+
ctx.locale,
|
|
92
|
+
"article"
|
|
93
|
+
);
|
|
94
|
+
|
|
95
|
+
if (errors) {
|
|
96
|
+
const tags = await ctx.client.tags.all(ctx.locale);
|
|
97
|
+
|
|
98
|
+
return {
|
|
99
|
+
assigns: {
|
|
100
|
+
article: params,
|
|
101
|
+
tags: tags.list,
|
|
102
|
+
errors: { article: ctx.client.articles.formatErrors(errors) },
|
|
103
|
+
visibilityOptions: ctx.client.articles.visibilityOptions(),
|
|
104
|
+
_translations: [],
|
|
105
|
+
},
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
return {
|
|
110
|
+
redirect: `/${ctx.locale}/articles`,
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
|
|
114
|
+
export default {
|
|
115
|
+
index,
|
|
116
|
+
show,
|
|
117
|
+
create_form,
|
|
118
|
+
create,
|
|
119
|
+
};
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
const create = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
|
|
4
|
+
const { errors } = await ctx.client.articles.clone(parent_id, ctx.locale);
|
|
5
|
+
|
|
6
|
+
if (errors) {
|
|
7
|
+
throw new Error(`Error cloning article: ${JSON.stringify(errors)}`);
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
return {
|
|
11
|
+
redirect: `/${ctx.locale}/articles`,
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
export default {
|
|
16
|
+
create,
|
|
17
|
+
};
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
const create_form = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
const article = await ctx.client.articles.find(parent_id, ctx.locale);
|
|
4
|
+
|
|
5
|
+
if (!article) {
|
|
6
|
+
throw new Error(`Missing article #${parent_id}`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
assigns: {
|
|
11
|
+
deleteAction: {
|
|
12
|
+
id: article.id,
|
|
13
|
+
redirect: "",
|
|
14
|
+
},
|
|
15
|
+
errors: {},
|
|
16
|
+
_translations: [],
|
|
17
|
+
},
|
|
18
|
+
};
|
|
19
|
+
};
|
|
20
|
+
|
|
21
|
+
const create = async (ctx) => {
|
|
22
|
+
const { parent_id } = ctx.params;
|
|
23
|
+
const params = ctx.resourceParams.deleteAction;
|
|
24
|
+
const article = await ctx.client.articles.find(parent_id, ctx.locale);
|
|
25
|
+
|
|
26
|
+
if (!article) {
|
|
27
|
+
throw new Error(`Missing article #${parent_id}`);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
let redirect = null;
|
|
31
|
+
|
|
32
|
+
if (params.redirect === "301" || params.redirect === "410") {
|
|
33
|
+
redirect = {
|
|
34
|
+
// TODO: fix url with consideration of locale & defaultLocale in the frontend project
|
|
35
|
+
url: `/${article.slug}`,
|
|
36
|
+
destination: params.redirect === "301" ? params.destination : "/",
|
|
37
|
+
httpResponseCode: Number.parseInt(params.redirect, 10),
|
|
38
|
+
note: "Created via article deletion process",
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
const { errors } = await ctx.client.articles.delete(
|
|
43
|
+
article.id,
|
|
44
|
+
ctx.locale,
|
|
45
|
+
redirect
|
|
46
|
+
);
|
|
47
|
+
|
|
48
|
+
if (errors) {
|
|
49
|
+
return {
|
|
50
|
+
assigns: {
|
|
51
|
+
deleteAction: { ...params, id: article.id },
|
|
52
|
+
errors: {
|
|
53
|
+
deleteAction: ctx.client.articles.formatErrors(errors, "redirect"),
|
|
54
|
+
},
|
|
55
|
+
_translations: [],
|
|
56
|
+
},
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
return {
|
|
61
|
+
redirect: `/${ctx.locale}/articles`,
|
|
62
|
+
};
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
export default {
|
|
66
|
+
create_form,
|
|
67
|
+
create,
|
|
68
|
+
};
|
|
@@ -0,0 +1,103 @@
|
|
|
1
|
+
import { toDateTimeInput, toUTCISO8601String } from "../../utils";
|
|
2
|
+
|
|
3
|
+
const create_form = async (ctx) => {
|
|
4
|
+
// const tags = await ctx.client.tags.all(ctx.locale);
|
|
5
|
+
const { target_locale } = ctx.query;
|
|
6
|
+
const target_locate_tags = await ctx.client.tags.all(target_locale);
|
|
7
|
+
|
|
8
|
+
const { parent_id } = ctx.params;
|
|
9
|
+
const blueprint_article = await ctx.client.articles.find(
|
|
10
|
+
parent_id,
|
|
11
|
+
ctx.locale
|
|
12
|
+
);
|
|
13
|
+
|
|
14
|
+
const translation = {
|
|
15
|
+
title: blueprint_article.title,
|
|
16
|
+
slug: blueprint_article.slug,
|
|
17
|
+
visibility: blueprint_article.visibility,
|
|
18
|
+
publish_at: toDateTimeInput(blueprint_article.publishAt),
|
|
19
|
+
layout: blueprint_article.settings.layout,
|
|
20
|
+
meta_title: blueprint_article.settings.meta.title,
|
|
21
|
+
meta_description: blueprint_article.settings.meta.description,
|
|
22
|
+
meta_image: blueprint_article.settings.meta?.image || {},
|
|
23
|
+
username: blueprint_article.settings.credentials?.user,
|
|
24
|
+
password: blueprint_article.settings.credentials?.password,
|
|
25
|
+
tags: [],
|
|
26
|
+
// categories: blueprint_article.categories, # TODO: this will be added later?
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
return {
|
|
30
|
+
assigns: {
|
|
31
|
+
article: blueprint_article,
|
|
32
|
+
translation: translation,
|
|
33
|
+
targetLocale: target_locale,
|
|
34
|
+
tags: target_locate_tags.list,
|
|
35
|
+
blueprint_tags: blueprint_article.tags,
|
|
36
|
+
errors: {},
|
|
37
|
+
visibilityOptions: ctx.client.articles.visibilityOptions(),
|
|
38
|
+
_translations: [],
|
|
39
|
+
},
|
|
40
|
+
};
|
|
41
|
+
};
|
|
42
|
+
|
|
43
|
+
const create = async (ctx) => {
|
|
44
|
+
const { parent_id } = ctx.params;
|
|
45
|
+
const blueprint_article = await ctx.client.articles.find(
|
|
46
|
+
parent_id,
|
|
47
|
+
ctx.locale
|
|
48
|
+
);
|
|
49
|
+
|
|
50
|
+
const { target_locale } = ctx.resourceParams;
|
|
51
|
+
const translation = { ...ctx.translation };
|
|
52
|
+
|
|
53
|
+
translation.meta_image = JSON.parse(translation.meta_image || "{}");
|
|
54
|
+
|
|
55
|
+
const { errors } = await ctx.client.articles.translate(
|
|
56
|
+
parent_id,
|
|
57
|
+
target_locale,
|
|
58
|
+
{
|
|
59
|
+
title: translation.title,
|
|
60
|
+
slug: translation.slug,
|
|
61
|
+
visibility: translation.visibility,
|
|
62
|
+
publishAt: toUTCISO8601String(translation.publish_at),
|
|
63
|
+
settings: {
|
|
64
|
+
...blueprint_article.settings,
|
|
65
|
+
layout: translation.layout,
|
|
66
|
+
meta: {
|
|
67
|
+
title: translation.meta_title,
|
|
68
|
+
description: translation.meta_description,
|
|
69
|
+
image: translation.meta_image || "{}",
|
|
70
|
+
},
|
|
71
|
+
credentials: {
|
|
72
|
+
user: translation.username || "",
|
|
73
|
+
password: translation.password || "",
|
|
74
|
+
},
|
|
75
|
+
},
|
|
76
|
+
widgets: blueprint_article.widgets,
|
|
77
|
+
tags: translation.tags || [],
|
|
78
|
+
categories: blueprint_article.categories.map((category) => category.id),
|
|
79
|
+
}
|
|
80
|
+
);
|
|
81
|
+
if (errors) {
|
|
82
|
+
const tags = await ctx.client.tags.all(target_locale);
|
|
83
|
+
return {
|
|
84
|
+
assigns: {
|
|
85
|
+
article: blueprint_article,
|
|
86
|
+
translation: translation,
|
|
87
|
+
targetLocale: translation.target_locate,
|
|
88
|
+
tags: tags.list,
|
|
89
|
+
errors: {},
|
|
90
|
+
visibilityOptions: ctx.client.articles.visibilityOptions(),
|
|
91
|
+
_translations: [],
|
|
92
|
+
},
|
|
93
|
+
};
|
|
94
|
+
}
|
|
95
|
+
return {
|
|
96
|
+
redirect: `/${ctx.locale}/articles/${parent_id}`,
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
|
|
100
|
+
export default {
|
|
101
|
+
create_form,
|
|
102
|
+
create,
|
|
103
|
+
};
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
const create_form = async (ctx) => {
|
|
2
|
+
const { parent_id } = ctx.params;
|
|
3
|
+
const article = await ctx.client.articles.find(parent_id, ctx.locale);
|
|
4
|
+
|
|
5
|
+
if (!article) {
|
|
6
|
+
throw new Error(`Cannot find article with id ${parent_id}`);
|
|
7
|
+
}
|
|
8
|
+
|
|
9
|
+
return {
|
|
10
|
+
assigns: {
|
|
11
|
+
change: {
|
|
12
|
+
id: article.id,
|
|
13
|
+
slug: article.slug,
|
|
14
|
+
redirect: null,
|
|
15
|
+
},
|
|
16
|
+
errors: {},
|
|
17
|
+
_translations: [],
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
const create = async (ctx) => {
|
|
23
|
+
const { parent_id } = ctx.params;
|
|
24
|
+
const change = ctx.resourceParams.change;
|
|
25
|
+
|
|
26
|
+
const article = await ctx.client.articles.find(parent_id, ctx.locale);
|
|
27
|
+
|
|
28
|
+
if (!article) {
|
|
29
|
+
throw new Error(`Cannot find article with id ${parent_id}`);
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
let redirectParams = null;
|
|
33
|
+
|
|
34
|
+
if (change.redirect) {
|
|
35
|
+
redirectParams = {
|
|
36
|
+
// TODO: We need some config from the FE project on how to build paths here!
|
|
37
|
+
url: `/${article.slug}`,
|
|
38
|
+
destination: change.slug,
|
|
39
|
+
httpResponseCode: 301,
|
|
40
|
+
note: "Created with changed URL for a article",
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
|
|
44
|
+
const { errors } = await ctx.client.articles.updateSlug(
|
|
45
|
+
parent_id,
|
|
46
|
+
change.slug,
|
|
47
|
+
ctx.locale,
|
|
48
|
+
redirectParams
|
|
49
|
+
);
|
|
50
|
+
|
|
51
|
+
if (errors) {
|
|
52
|
+
return {
|
|
53
|
+
assigns: {
|
|
54
|
+
change: { ...change, id: article.id },
|
|
55
|
+
errors: {
|
|
56
|
+
change: ctx.client.articles.formatErrors(errors, "redirect"),
|
|
57
|
+
},
|
|
58
|
+
_translations: [],
|
|
59
|
+
},
|
|
60
|
+
};
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
return {
|
|
64
|
+
redirect: `/${ctx.locale}/articles/${parent_id}`,
|
|
65
|
+
};
|
|
66
|
+
};
|
|
67
|
+
|
|
68
|
+
export default {
|
|
69
|
+
create_form,
|
|
70
|
+
create,
|
|
71
|
+
};
|
|
@@ -60,7 +60,9 @@ const create_form = async (ctx) => {
|
|
|
60
60
|
};
|
|
61
61
|
|
|
62
62
|
const create = async (ctx) => {
|
|
63
|
-
const params = ctx.resourceParams.page;
|
|
63
|
+
const params = { ...ctx.resourceParams.page };
|
|
64
|
+
|
|
65
|
+
params.meta_image = JSON.parse(params.meta_image || "{}");
|
|
64
66
|
|
|
65
67
|
const { errors } = await ctx.client.pages.create(
|
|
66
68
|
{
|
|
@@ -72,7 +74,7 @@ const create = async (ctx) => {
|
|
|
72
74
|
meta: {
|
|
73
75
|
title: params.meta_title,
|
|
74
76
|
description: params.meta_description,
|
|
75
|
-
image:
|
|
77
|
+
image: params.meta_image,
|
|
76
78
|
},
|
|
77
79
|
credentials: {
|
|
78
80
|
user: params.username || "",
|
|
@@ -14,8 +14,8 @@ const create_form = async (ctx) => {
|
|
|
14
14
|
meta_title: blueprint_page.settings.meta.title,
|
|
15
15
|
meta_description: blueprint_page.settings.meta.description,
|
|
16
16
|
meta_image: blueprint_page.settings.meta?.image || {},
|
|
17
|
-
username: blueprint_page.settings.credentials
|
|
18
|
-
password: blueprint_page.settings.credentials
|
|
17
|
+
username: blueprint_page.settings.credentials?.user || "",
|
|
18
|
+
password: blueprint_page.settings.credentials?.password || "",
|
|
19
19
|
tags: [],
|
|
20
20
|
// categories: blueprint_page.categories, # TODO: this will be added later?
|
|
21
21
|
};
|
|
@@ -38,8 +38,10 @@ const create = async (ctx) => {
|
|
|
38
38
|
const { parent_id } = ctx.params;
|
|
39
39
|
const blueprint_page = await ctx.client.pages.find(parent_id, ctx.locale);
|
|
40
40
|
|
|
41
|
-
const { target_locale
|
|
42
|
-
translation
|
|
41
|
+
const { target_locale } = ctx.resourceParams;
|
|
42
|
+
const translation = { ...ctx.translation };
|
|
43
|
+
|
|
44
|
+
translation.meta_image = JSON.parse(translation.meta_image || "{}");
|
|
43
45
|
|
|
44
46
|
const { errors } = await ctx.client.pages.translate(
|
|
45
47
|
parent_id,
|
|
@@ -54,7 +56,7 @@ const create = async (ctx) => {
|
|
|
54
56
|
meta: {
|
|
55
57
|
title: translation.meta_title,
|
|
56
58
|
description: translation.meta_description,
|
|
57
|
-
image:
|
|
59
|
+
image: translation.meta_image,
|
|
58
60
|
},
|
|
59
61
|
credentials: {
|
|
60
62
|
user: translation.username || "",
|
package/src/index.js
CHANGED
|
@@ -5,6 +5,7 @@ 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 routePages } from "./routePages";
|
|
8
|
+
export { default as routeArticles } from "./routeArticles";
|
|
8
9
|
export { default as routeSettings } from "./routeSettings";
|
|
9
10
|
export { default as setupCloud } from "./setupCloud";
|
|
10
11
|
export { default as routeStandard } from "./routeStandard";
|
|
@@ -15,6 +16,9 @@ export { default as Settings } from "./cloud/Settings";
|
|
|
15
16
|
export { default as PageChanges } from "./cloud/PageChanges";
|
|
16
17
|
export { default as PageRevisions } from "./cloud/PageRevisions";
|
|
17
18
|
export { default as Pages } from "./cloud/Pages";
|
|
19
|
+
export { default as ArticleChanges } from "./cloud/ArticleChanges";
|
|
20
|
+
export { default as ArticleRevisions } from "./cloud/ArticleRevisions";
|
|
21
|
+
export { default as Articles } from "./cloud/Articles";
|
|
18
22
|
|
|
19
23
|
export { default as PageRevisionsHandler } from "./handlers/page_revisions/PageRevisionsHandler";
|
|
20
24
|
export { default as PageRevisionsCodeHandler } from "./handlers/page_revisions/CodeHandler";
|
|
@@ -41,3 +45,21 @@ export { default as PagesHandler } from "./handlers/pages/PagesHandler";
|
|
|
41
45
|
export { default as SettingsGeneralHandler } from "./handlers/settings/GeneralHandler";
|
|
42
46
|
export { default as SettingsLayoutHandler } from "./handlers/settings/LayoutHandler";
|
|
43
47
|
export { default as SettingsMetaHandler } from "./handlers/settings/MetaHandler";
|
|
48
|
+
|
|
49
|
+
export { default as ArticleRevisionsHandler } from "./handlers/article_revisions/ArticleRevisionsHandler";
|
|
50
|
+
export { default as ArticleRevisionsCodeHandler } from "./handlers/article_revisions/CodeHandler";
|
|
51
|
+
export { default as ArticleRevisionsGeneralHandler } from "./handlers/article_revisions/GeneralHandler";
|
|
52
|
+
export { default as ArticleRevisionsMetaHandler } from "./handlers/article_revisions/MetaHandler";
|
|
53
|
+
export { default as ArticleRevisionsLocksHandler } from "./handlers/article_revisions/LocksHandler";
|
|
54
|
+
export { default as ArticleRevisionsUnlocksHandler } from "./handlers/article_revisions/UnlocksHandler";
|
|
55
|
+
export { default as ArticleRevisionsVisualHandler } from "./handlers/article_revisions/VisualHandler";
|
|
56
|
+
export { default as ArticleRevisionsTagHandler } from "./handlers/article_revisions/TagHandler";
|
|
57
|
+
export { default as ArticleRevisionsWidgetHandler } from "./handlers/article_revisions/WidgetHandler";
|
|
58
|
+
export { default as ArticleRevisionsPublishesHandler } from "./handlers/article_revisions/PublishesHandler";
|
|
59
|
+
export { default as ArticleRevisionsRevertsHandler } from "./handlers/article_revisions/RevertsHandler";
|
|
60
|
+
|
|
61
|
+
export { default as ArticleClonesHandler } from "./handlers/articles/ClonesHandler";
|
|
62
|
+
export { default as ArticleDeletesHandler } from "./handlers/articles/DeletesHandler";
|
|
63
|
+
export { default as ArticleTranslationsHandler } from "./handlers/articles/TranslationsHandler";
|
|
64
|
+
export { default as ArticleURLsHandler } from "./handlers/articles/URLsHandler";
|
|
65
|
+
export { default as ArticlesHandler } from "./handlers/articles/ArticlesHandler";
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
import routeCollection from "./routeCollection";
|
|
2
|
+
import routeNestedCollection from "./routeNestedCollection";
|
|
3
|
+
import routeNestedMember from "./routeNestedMember";
|
|
4
|
+
import TranslationsHandler from "./handlers/articles/TranslationsHandler";
|
|
5
|
+
import ArticleRevisionsHandler from "./handlers/article_revisions/ArticleRevisionsHandler";
|
|
6
|
+
import GeneralHandler from "./handlers/article_revisions/GeneralHandler";
|
|
7
|
+
import VisualHandler from "./handlers/article_revisions/VisualHandler";
|
|
8
|
+
import CodeHandler from "./handlers/article_revisions/CodeHandler";
|
|
9
|
+
import MetaHandler from "./handlers/article_revisions/MetaHandler";
|
|
10
|
+
import TagHandler from "./handlers/article_revisions/TagHandler";
|
|
11
|
+
import LocksHandler from "./handlers/article_revisions/LocksHandler";
|
|
12
|
+
import UnlocksHandler from "./handlers/article_revisions/UnlocksHandler";
|
|
13
|
+
import ClonesHandler from "./handlers/articles/ClonesHandler";
|
|
14
|
+
import URLsHandler from "./handlers/articles/URLsHandler";
|
|
15
|
+
import DeletesHandler from "./handlers/articles/DeletesHandler";
|
|
16
|
+
import RevertsHandler from "./handlers/article_revisions/RevertsHandler";
|
|
17
|
+
import PublishesHandler from "./handlers/article_revisions/PublishesHandler";
|
|
18
|
+
import WidgetHandler from "./handlers/article_revisions/WidgetHandler";
|
|
19
|
+
import ArticlesHandler from "./handlers/articles/ArticlesHandler";
|
|
20
|
+
|
|
21
|
+
function routeArticles(adapter) {
|
|
22
|
+
routeCollection(adapter, "articles", ArticlesHandler);
|
|
23
|
+
routeNestedCollection(
|
|
24
|
+
adapter,
|
|
25
|
+
"articles",
|
|
26
|
+
"translations",
|
|
27
|
+
TranslationsHandler
|
|
28
|
+
);
|
|
29
|
+
routeNestedCollection(
|
|
30
|
+
adapter,
|
|
31
|
+
"articles",
|
|
32
|
+
"article_revisions",
|
|
33
|
+
ArticleRevisionsHandler
|
|
34
|
+
);
|
|
35
|
+
routeNestedMember(adapter, "article_revisions", "general", GeneralHandler);
|
|
36
|
+
routeNestedMember(adapter, "article_revisions", "visuals", VisualHandler);
|
|
37
|
+
routeNestedMember(adapter, "article_revisions", "codes", CodeHandler);
|
|
38
|
+
routeNestedMember(adapter, "article_revisions", "meta", MetaHandler);
|
|
39
|
+
routeNestedMember(adapter, "article_revisions", "tags", TagHandler);
|
|
40
|
+
routeNestedCollection(adapter, "article_revisions", "locks", LocksHandler);
|
|
41
|
+
routeNestedCollection(
|
|
42
|
+
adapter,
|
|
43
|
+
"article_revisions",
|
|
44
|
+
"unlocks",
|
|
45
|
+
UnlocksHandler
|
|
46
|
+
);
|
|
47
|
+
routeNestedCollection(adapter, "articles", "clones", ClonesHandler);
|
|
48
|
+
routeNestedCollection(adapter, "articles", "urls", URLsHandler);
|
|
49
|
+
routeNestedCollection(adapter, "articles", "deletes", DeletesHandler);
|
|
50
|
+
routeNestedCollection(
|
|
51
|
+
adapter,
|
|
52
|
+
"articles",
|
|
53
|
+
"article_changes/reverts",
|
|
54
|
+
RevertsHandler
|
|
55
|
+
);
|
|
56
|
+
routeNestedCollection(
|
|
57
|
+
adapter,
|
|
58
|
+
"article_revisions",
|
|
59
|
+
"publishes",
|
|
60
|
+
PublishesHandler
|
|
61
|
+
);
|
|
62
|
+
routeNestedMember(adapter, "api/article_revisions", "widgets", WidgetHandler);
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export default routeArticles;
|
package/src/routeStandard.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import routeCollection from "./routeCollection";
|
|
2
2
|
import routeSettings from "./routeSettings";
|
|
3
3
|
import routePages from "./routePages";
|
|
4
|
+
import routeArticles from "./routeArticles";
|
|
4
5
|
import RedirectsHandler from "./handlers/RedirectsHandler";
|
|
5
6
|
import TagsHandler from "./handlers/TagsHandler";
|
|
6
7
|
|
|
@@ -9,6 +10,7 @@ function routeStandard(adapter) {
|
|
|
9
10
|
routeCollection(adapter, "tags", TagsHandler);
|
|
10
11
|
routeSettings(adapter);
|
|
11
12
|
routePages(adapter);
|
|
13
|
+
routeArticles(adapter);
|
|
12
14
|
}
|
|
13
15
|
|
|
14
16
|
export default routeStandard;
|
package/src/setupCloud.js
CHANGED
|
@@ -4,6 +4,9 @@ import Tags from "./cloud/Tags";
|
|
|
4
4
|
import Pages from "./cloud/Pages";
|
|
5
5
|
import PageRevisions from "./cloud/PageRevisions";
|
|
6
6
|
import PageChanges from "./cloud/PageChanges";
|
|
7
|
+
import Articles from "./cloud/Articles";
|
|
8
|
+
import ArticleRevisions from "./cloud/ArticleRevisions";
|
|
9
|
+
import ArticleChanges from "./cloud/ArticleChanges";
|
|
7
10
|
|
|
8
11
|
function setupCloud(ctx, getConfig) {
|
|
9
12
|
if (!ctx?.authentication?.token) return;
|
|
@@ -19,6 +22,15 @@ function setupCloud(ctx, getConfig) {
|
|
|
19
22
|
ctx.authentication.token
|
|
20
23
|
);
|
|
21
24
|
ctx.client.pageChanges = new PageChanges(getConfig, ctx.authentication.token);
|
|
25
|
+
ctx.client.articles = new Articles(getConfig, ctx.authentication.token);
|
|
26
|
+
ctx.client.articleRevisions = new ArticleRevisions(
|
|
27
|
+
getConfig,
|
|
28
|
+
ctx.authentication.token
|
|
29
|
+
);
|
|
30
|
+
ctx.client.articleChanges = new ArticleChanges(
|
|
31
|
+
getConfig,
|
|
32
|
+
ctx.authentication.token
|
|
33
|
+
);
|
|
22
34
|
}
|
|
23
35
|
|
|
24
36
|
export default setupCloud;
|