@raketa-cloud/admin 0.0.30 → 0.0.33

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.
Files changed (173) hide show
  1. package/package.json +1 -1
  2. package/src/Adapter.js +3 -6
  3. package/src/HonoAdapter.js +3 -3
  4. package/src/Logger.js +21 -0
  5. package/src/cloud/ArticleRevisions.js +30 -1
  6. package/src/cloud/Articles.js +22 -9
  7. package/src/cloud/EventRevisions.js +40 -1
  8. package/src/cloud/Events.js +32 -11
  9. package/src/cloud/PageRevisions.js +20 -1
  10. package/src/cloud/Pages.js +13 -7
  11. package/src/cloud/RaketaClient.js +76 -0
  12. package/src/handlers/article_revisions/CodeHandler.js +18 -34
  13. package/src/handlers/article_revisions/GeneralHandler.js +19 -38
  14. package/src/handlers/article_revisions/LocksHandler.js +11 -6
  15. package/src/handlers/article_revisions/MetaHandler.js +18 -34
  16. package/src/handlers/article_revisions/TagHandler.js +23 -29
  17. package/src/handlers/article_revisions/UnlocksHandler.js +1 -1
  18. package/src/handlers/article_revisions/VisualHandler.js +18 -28
  19. package/src/handlers/articles/ArticlesHandler.js +11 -25
  20. package/src/handlers/articles/DeletesHandler.js +4 -4
  21. package/src/handlers/articles/TranslationsHandler.js +30 -56
  22. package/src/handlers/articles/URLsHandler.js +7 -7
  23. package/src/handlers/event_revisions/CodeHandler.js +22 -36
  24. package/src/handlers/event_revisions/GeneralHandler.js +22 -42
  25. package/src/handlers/event_revisions/LocksHandler.js +7 -6
  26. package/src/handlers/event_revisions/MetaHandler.js +22 -36
  27. package/src/handlers/event_revisions/TagHandler.js +25 -29
  28. package/src/handlers/event_revisions/VisualHandler.js +22 -30
  29. package/src/handlers/events/DeletesHandler.js +4 -4
  30. package/src/handlers/events/EventsHandler.js +13 -27
  31. package/src/handlers/events/TranslationsHandler.js +35 -58
  32. package/src/handlers/events/URLsHandler.js +7 -7
  33. package/src/handlers/page_revisions/CodeHandler.js +8 -34
  34. package/src/handlers/page_revisions/GeneralHandler.js +10 -37
  35. package/src/handlers/page_revisions/LocksHandler.js +11 -6
  36. package/src/handlers/page_revisions/MetaHandler.js +8 -34
  37. package/src/handlers/page_revisions/TagHandler.js +16 -27
  38. package/src/handlers/page_revisions/VisualHandler.js +8 -28
  39. package/src/handlers/pages/DeletesHandler.js +4 -4
  40. package/src/handlers/pages/PagesHandler.js +7 -24
  41. package/src/handlers/pages/TranslationsHandler.js +23 -45
  42. package/src/handlers/pages/URLsHandler.js +7 -7
  43. package/src/helpers/FormBuilder.js +1 -2
  44. package/src/helpers/Inflector.js +6 -0
  45. package/src/index.js +2 -0
  46. package/src/styles/application.css +7 -7
  47. package/src/tests/handlers/RedirectsHandler.test/create.test.js +1 -1
  48. package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +1 -1
  49. package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
  50. package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +1 -1
  51. package/src/tests/handlers/RedirectsHandler.test/index.test.js +1 -1
  52. package/src/tests/handlers/RedirectsHandler.test/show.test.js +1 -1
  53. package/src/tests/handlers/RedirectsHandler.test/update.test.js +1 -1
  54. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +1 -1
  55. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +1 -1
  56. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +7 -7
  57. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +37 -19
  58. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +5 -11
  59. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +36 -28
  60. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +7 -8
  61. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +41 -25
  62. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +2 -2
  63. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +2 -2
  64. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +1 -1
  65. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +10 -7
  66. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +20 -14
  67. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +7 -6
  68. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +30 -19
  69. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +2 -2
  70. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +2 -2
  71. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +53 -29
  72. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +3 -3
  73. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +2 -2
  74. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +3 -3
  75. package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +1 -1
  76. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +4 -4
  77. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +2 -2
  78. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +6 -6
  79. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +2 -2
  80. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +11 -7
  81. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +43 -19
  82. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +1 -1
  83. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +1 -1
  84. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +7 -13
  85. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +42 -32
  86. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +11 -8
  87. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +47 -25
  88. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +2 -2
  89. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +2 -2
  90. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +1 -1
  91. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +14 -7
  92. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +26 -14
  93. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +11 -6
  94. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +36 -19
  95. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +2 -2
  96. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +2 -2
  97. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +1 -1
  98. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +4 -4
  99. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +2 -2
  100. package/src/tests/handlers/events/EventsHandler.test/create.test.js +53 -37
  101. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +3 -3
  102. package/src/tests/handlers/events/EventsHandler.test/index.test.js +2 -2
  103. package/src/tests/handlers/events/EventsHandler.test/show.test.js +3 -3
  104. package/src/tests/handlers/events/URLsHandler.test/create.test.js +6 -6
  105. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +2 -2
  106. package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +10 -8
  107. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +30 -17
  108. package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +3 -11
  109. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +38 -22
  110. package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +2 -8
  111. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +37 -23
  112. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +1 -1
  113. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +1 -1
  114. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +2 -2
  115. package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +2 -2
  116. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +1 -1
  117. package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +3 -7
  118. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +11 -12
  119. package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +10 -7
  120. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +23 -17
  121. package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +2 -2
  122. package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +2 -2
  123. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +1 -1
  124. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +4 -4
  125. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +2 -2
  126. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +50 -27
  127. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +3 -3
  128. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +2 -2
  129. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +3 -3
  130. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +6 -6
  131. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +2 -2
  132. package/src/utils.js +12 -0
  133. package/src/views/_shared/_credentials_input.ejs +31 -0
  134. package/src/views/_shared/_layout_input.ejs +5 -0
  135. package/src/views/article_revisions/_nav.ejs +5 -5
  136. package/src/views/article_revisions/codes/edit_form.ejs +17 -6
  137. package/src/views/article_revisions/general/edit_form.ejs +10 -36
  138. package/src/views/article_revisions/locks/create_form.ejs +4 -4
  139. package/src/views/article_revisions/meta/edit_form.ejs +7 -7
  140. package/src/views/article_revisions/tags/edit_form.ejs +5 -5
  141. package/src/views/article_revisions/visuals/edit_form.ejs +5 -9
  142. package/src/views/articles/_form.ejs +6 -37
  143. package/src/views/articles/deletes/create_form.ejs +9 -9
  144. package/src/views/articles/index.ejs +1 -1
  145. package/src/views/articles/translations/_form.ejs +14 -46
  146. package/src/views/articles/urls/create_form.ejs +5 -5
  147. package/src/views/event_revisions/_nav.ejs +5 -5
  148. package/src/views/event_revisions/codes/edit_form.ejs +17 -6
  149. package/src/views/event_revisions/general/edit_form.ejs +12 -38
  150. package/src/views/event_revisions/locks/create_form.ejs +4 -4
  151. package/src/views/event_revisions/meta/edit_form.ejs +7 -7
  152. package/src/views/event_revisions/tags/edit_form.ejs +5 -5
  153. package/src/views/event_revisions/visuals/edit_form.ejs +5 -9
  154. package/src/views/events/_form.ejs +8 -39
  155. package/src/views/events/deletes/create_form.ejs +9 -9
  156. package/src/views/events/index.ejs +1 -1
  157. package/src/views/events/translations/_form.ejs +16 -47
  158. package/src/views/events/urls/create_form.ejs +5 -5
  159. package/src/views/layouts/application.ejs +57 -35
  160. package/src/views/page_revisions/_nav.ejs +5 -5
  161. package/src/views/page_revisions/codes/edit_form.ejs +17 -6
  162. package/src/views/page_revisions/general/edit_form.ejs +8 -35
  163. package/src/views/page_revisions/locks/create_form.ejs +4 -4
  164. package/src/views/page_revisions/meta/edit_form.ejs +7 -7
  165. package/src/views/page_revisions/publishes/_form.ejs +9 -9
  166. package/src/views/page_revisions/tags/edit_form.ejs +5 -5
  167. package/src/views/page_revisions/visuals/edit_form.ejs +5 -9
  168. package/src/views/pages/_form.ejs +5 -36
  169. package/src/views/pages/deletes/create_form.ejs +9 -9
  170. package/src/views/pages/index.ejs +1 -1
  171. package/src/views/pages/translations/_form.ejs +13 -45
  172. package/src/views/pages/urls/create_form.ejs +5 -5
  173. package/tailwind.config.js +1 -0
@@ -5,7 +5,7 @@ import Factory from "../../../support/factory";
5
5
  function buildCtx(page) {
6
6
  return {
7
7
  client: {
8
- pages: new Pages({}, "token"),
8
+ pages: new Pages(() => ({}), "token"),
9
9
  },
10
10
  params: { parent_id: page.id },
11
11
  locale: "en",
@@ -6,11 +6,11 @@ import { remoteConfig } from "../../../support/handlersHelper";
6
6
  function buildCtx(page, updateSettings) {
7
7
  return {
8
8
  client: {
9
- pages: new Pages({}, "token"),
9
+ pages: new Pages(() => ({}), "token"),
10
10
  },
11
11
  params: { parent_id: page.id },
12
12
  resourceParams: {
13
- deleteAction: updateSettings,
13
+ resource: updateSettings,
14
14
  },
15
15
  locale: "en",
16
16
  remoteConfig: remoteConfig(),
@@ -90,9 +90,9 @@ describe("Page delete", () => {
90
90
 
91
91
  expect(result).toEqual({
92
92
  assigns: {
93
- deleteAction: { ...updateSettings, id: page.id },
93
+ resource: { ...updateSettings, id: page.id },
94
94
  errors: {
95
- deleteAction: { redirect: "url: has already been taken" },
95
+ resource: { redirect: "url: has already been taken" },
96
96
  },
97
97
  _translations: [],
98
98
  },
@@ -6,7 +6,7 @@ import { remoteConfig } from "../../../support/handlersHelper";
6
6
  function buildCtx(page) {
7
7
  return {
8
8
  client: {
9
- pages: new Pages({}, "token"),
9
+ pages: new Pages(() => ({}), "token"),
10
10
  },
11
11
  params: { parent_id: page.id },
12
12
  locale: "en",
@@ -33,7 +33,7 @@ describe("Page delete", () => {
33
33
 
34
34
  expect(result).toEqual({
35
35
  assigns: {
36
- deleteAction: {
36
+ resource: {
37
37
  id: page.id,
38
38
  redirect: "",
39
39
  },
@@ -8,8 +8,8 @@ describe("Pages Handler", () => {
8
8
  function buildCtx(params) {
9
9
  return {
10
10
  client: {
11
- pages: new Pages({}, "token"),
12
- tags: new Tags({}, "token"),
11
+ pages: new Pages(() => ({}), "token"),
12
+ tags: new Tags(() => ({}), "token"),
13
13
  },
14
14
  resourceParams: {
15
15
  resource: params,
@@ -28,12 +28,18 @@ describe("Pages Handler", () => {
28
28
  title: "Page title",
29
29
  slug: "url",
30
30
  visibility: "public",
31
- layout: "default",
32
- meta_title: "Meta title",
33
- meta_description: "Meta description",
34
- meta_image: JSON.stringify({ id: 42 }),
35
- username: "admin",
36
- password: "admin123!@#",
31
+ settings: {
32
+ layout: "default",
33
+ meta: {
34
+ title: "Meta title",
35
+ description: "Meta description",
36
+ image: JSON.stringify({ id: 42 }),
37
+ },
38
+ credentials: {
39
+ user: "admin",
40
+ password: "admin123!@#",
41
+ },
42
+ },
37
43
  tags: [tag.id],
38
44
  };
39
45
 
@@ -51,15 +57,15 @@ describe("Pages Handler", () => {
51
57
  slug: params.slug,
52
58
  visibility: params.visibility,
53
59
  settings: {
54
- layout: params.layout,
60
+ layout: params.settings.layout,
55
61
  meta: {
56
- title: params.meta_title,
57
- description: params.meta_description,
58
- image: JSON.parse(params.meta_image),
62
+ title: params.settings.meta.title,
63
+ description: params.settings.meta.description,
64
+ image: JSON.parse(params.settings.meta.image),
59
65
  },
60
66
  credentials: {
61
- user: params.username,
62
- password: params.password,
67
+ user: params.settings.credentials.user,
68
+ password: params.settings.credentials.password,
63
69
  },
64
70
  },
65
71
  widgets: [],
@@ -81,12 +87,18 @@ describe("Pages Handler", () => {
81
87
  title: "Page title",
82
88
  slug: "",
83
89
  visibility: "public",
84
- layout: "default",
85
- meta_title: "Meta title",
86
- meta_description: "Meta description",
87
- meta_image: JSON.stringify({ id: 42 }),
88
- username: "admin",
89
- password: "admin123!@#",
90
+ settings: {
91
+ layout: "default",
92
+ meta: {
93
+ title: "Meta title",
94
+ description: "Meta description",
95
+ image: JSON.stringify({ id: 42 }),
96
+ },
97
+ credentials: {
98
+ user: "admin",
99
+ password: "admin123!@#",
100
+ },
101
+ },
90
102
  tags: [tag.id],
91
103
  };
92
104
 
@@ -112,15 +124,15 @@ describe("Pages Handler", () => {
112
124
  slug: "",
113
125
  visibility: params.visibility,
114
126
  settings: {
115
- layout: params.layout,
127
+ layout: params.settings.layout,
116
128
  meta: {
117
- title: params.meta_title,
118
- description: params.meta_description,
119
- image: JSON.parse(params.meta_image),
129
+ title: params.settings.meta.title,
130
+ description: params.settings.meta.description,
131
+ image: JSON.parse(params.settings.meta.image),
120
132
  },
121
133
  credentials: {
122
- user: params.username,
123
- password: params.password,
134
+ user: params.settings.credentials.user,
135
+ password: params.settings.credentials.password,
124
136
  },
125
137
  },
126
138
  widgets: [],
@@ -133,7 +145,18 @@ describe("Pages Handler", () => {
133
145
 
134
146
  expect(result).toEqual({
135
147
  assigns: {
136
- resource: { ...params, meta_image: JSON.parse(params.meta_image) },
148
+ resource: {
149
+ widgets: [],
150
+ categories: [],
151
+ ...params,
152
+ settings: {
153
+ ...params.settings,
154
+ meta: {
155
+ ...params.settings.meta,
156
+ image: JSON.parse(params.settings.meta.image),
157
+ },
158
+ },
159
+ },
137
160
  tags: [tag],
138
161
  errors: { resource: { slug: "cannot be blank" } },
139
162
  visibilityOptions: ctx.client.pages.visibilityOptions(),
@@ -8,8 +8,8 @@ describe("Pages Handler", () => {
8
8
  function buildCtx() {
9
9
  return {
10
10
  client: {
11
- pages: new Pages({}, "token"),
12
- tags: new Tags({}, "token"),
11
+ pages: new Pages(() => ({}), "token"),
12
+ tags: new Tags(() => ({}), "token"),
13
13
  },
14
14
  query: { foo: "bar" },
15
15
  locale: "en",
@@ -30,7 +30,7 @@ describe("Pages Handler", () => {
30
30
 
31
31
  expect(result).toEqual({
32
32
  assigns: {
33
- resource: { ...ctx.client.pages.defaults(), meta_image: {} },
33
+ resource: { ...ctx.client.pages.defaults() },
34
34
  tags: tags,
35
35
  errors: {},
36
36
  visibilityOptions: ctx.client.pages.visibilityOptions(),
@@ -8,8 +8,8 @@ describe("Pages Handler", () => {
8
8
  function buildCtx() {
9
9
  return {
10
10
  client: {
11
- pages: new Pages({}, "token"),
12
- tags: new Tags({}, "token"),
11
+ pages: new Pages(() => ({}), "token"),
12
+ tags: new Tags(() => ({}), "token"),
13
13
  },
14
14
  query: { foo: "bar" },
15
15
  locale: "en",
@@ -9,9 +9,9 @@ describe("Pages Handler", () => {
9
9
  function buildCtx(page) {
10
10
  return {
11
11
  client: {
12
- pages: new Pages({}, "token"),
13
- pageChanges: new PageChanges({}, "token"),
14
- pageRevisions: new PageRevisions({}, "token"),
12
+ pages: new Pages(() => ({}), "token"),
13
+ pageChanges: new PageChanges(() => ({}), "token"),
14
+ pageRevisions: new PageRevisions(() => ({}), "token"),
15
15
  },
16
16
  params: { id: page.id },
17
17
  locale: "en",
@@ -6,11 +6,11 @@ import { remoteConfig } from "../../../support/handlersHelper";
6
6
  function buildCtx(page, updateSettings) {
7
7
  return {
8
8
  client: {
9
- pages: new Pages({}, "token"),
9
+ pages: new Pages(() => ({}), "token"),
10
10
  },
11
11
  params: { parent_id: page.id },
12
12
  resourceParams: {
13
- change: updateSettings,
13
+ resource: updateSettings,
14
14
  },
15
15
  locale: "en",
16
16
  remoteConfig: remoteConfig(),
@@ -88,8 +88,8 @@ describe("Page change url", () => {
88
88
 
89
89
  expect(result).toEqual({
90
90
  assigns: {
91
- change: { ...updateSettings, id: page.id },
92
- errors: { change: { slug: "has already been taken" } },
91
+ resource: { ...updateSettings, id: page.id },
92
+ errors: { resource: { slug: "has already been taken" } },
93
93
  _translations: [],
94
94
  },
95
95
  });
@@ -137,8 +137,8 @@ describe("Page change url", () => {
137
137
 
138
138
  expect(result).toEqual({
139
139
  assigns: {
140
- change: { ...updateSettings, id: page.id },
141
- errors: { change: { redirect: "url: has already been taken" } },
140
+ resource: { ...updateSettings, id: page.id },
141
+ errors: { resource: { redirect: "url: has already been taken" } },
142
142
  _translations: [],
143
143
  },
144
144
  });
@@ -5,7 +5,7 @@ import Factory from "../../../support/factory";
5
5
  function buildCtx(page) {
6
6
  return {
7
7
  client: {
8
- pages: new Pages({}, "token"),
8
+ pages: new Pages(() => ({}), "token"),
9
9
  },
10
10
  params: { parent_id: page.id },
11
11
  locale: "en",
@@ -34,7 +34,7 @@ describe("Page change url", () => {
34
34
 
35
35
  expect(result).toEqual({
36
36
  assigns: {
37
- change: { slug: page.slug, id: page.id, redirect: null },
37
+ resource: { slug: page.slug, id: page.id, redirect: null },
38
38
  errors: {},
39
39
  _translations: [],
40
40
  },
package/src/utils.js CHANGED
@@ -28,3 +28,15 @@ export function toDateTimeInput(initialDate = null) {
28
28
  now.getMinutes().toString().padStart(2, "0"),
29
29
  ].join("");
30
30
  }
31
+
32
+ export function checkboxesToArray(value) {
33
+ if (Array.isArray(value)) {
34
+ return value;
35
+ }
36
+
37
+ if (!value) {
38
+ return [];
39
+ }
40
+
41
+ return [value];
42
+ }
@@ -0,0 +1,31 @@
1
+ <%- f.field('resource.settings.credentials.user', { required: true, label: "Username" }) %>
2
+ <%- f.field('resource.settings.credentials.password', { required: true }) %>
3
+
4
+ <script>
5
+ function onVisibilityChange(event) {
6
+ const newValue = event.target.value;
7
+
8
+ const userInput = document.getElementById("f_resource_settings_credentials_user");
9
+ const passInput = document.getElementById("f_resource_settings_credentials_password");
10
+
11
+ if (newValue === "protected") {
12
+ userInput.parentElement.style.display = "block";
13
+ userInput.required = true;
14
+ passInput.parentElement.style.display = "block";
15
+ passInput.required = true;
16
+ } else {
17
+ userInput.parentElement.style.display = "none";
18
+ userInput.required = false;
19
+ passInput.parentElement.style.display = "none";
20
+ passInput.required = false;
21
+ }
22
+ }
23
+
24
+ onVisibilityChange({
25
+ target: {
26
+ value: '<%= resource.visibility %>'
27
+ }
28
+ })
29
+
30
+ document.getElementById('<%= visibilityFieldId %>').addEventListener("change", onVisibilityChange)
31
+ </script>
@@ -0,0 +1,5 @@
1
+ <%- f.field('resource.settings.layout', { as: 'select', required: true, options: [
2
+ ["default", "Default"],
3
+ ["landing", "Landing page"],
4
+ ["headless", "Headless"],
5
+ ] }) %>
@@ -7,31 +7,31 @@
7
7
  <div class="flex items-center justify-between mb-4">
8
8
  <div class="flex items-center border-b-2">
9
9
  <div class=" <%= active === 'general' ? activeClass : inactiveClass %>">
10
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${settings.id}/general/edit` %>" class="text-raketa-primary font-semibold">
10
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/general/edit` %>" class="text-raketa-primary font-semibold">
11
11
  General
12
12
  </a>
13
13
  </div>
14
14
 
15
15
  <div class="<%= active === 'visuals' ? activeClass : inactiveClass %>">
16
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${settings.id}/visuals/edit` %>" class="text-raketa-primary font-semibold">
16
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/visuals/edit` %>" class="text-raketa-primary font-semibold">
17
17
  Visuals
18
18
  </a>
19
19
  </div>
20
20
 
21
21
  <div class="<%= active === 'codes' ? activeClass : inactiveClass %>">
22
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${settings.id}/codes/edit` %>" class="text-raketa-primary font-semibold">
22
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/codes/edit` %>" class="text-raketa-primary font-semibold">
23
23
  Code customizations
24
24
  </a>
25
25
  </div>
26
26
 
27
27
  <div class="<%= active === 'meta' ? activeClass : inactiveClass %>">
28
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${settings.id}/meta/edit` %>" class="text-raketa-primary font-semibold">
28
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/meta/edit` %>" class="text-raketa-primary font-semibold">
29
29
  Open graph & meta tags
30
30
  </a>
31
31
  </div>
32
32
 
33
33
  <div class="<%= active === 'tags' ? activeClass : inactiveClass %>">
34
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${settings.id}/tags/edit` %>" class="text-raketa-primary font-semibold">
34
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/tags/edit` %>" class="text-raketa-primary font-semibold">
35
35
  Content tags
36
36
  </a>
37
37
  </div>
@@ -3,19 +3,30 @@
3
3
  <h1 class="heading-1">Edit revision / Code customizations</h1>
4
4
  </div>
5
5
 
6
- <%- render_partial('../_nav.ejs', { settings: code_settings, active: 'codes' }) %>
6
+ <%- render_partial('../_nav.ejs', { resource, active: 'codes' }) %>
7
7
 
8
8
  <div class="grid gap-4 md:grid-cols-3">
9
9
  <div>
10
- <% form_for({ code_settings }, errors, (f) => { %>
11
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${code_settings.id}/codes` %>" method="POST" class="form">
12
- <%- f.field('code_settings.scripts', { as: 'textarea', }) %>
13
- <%- f.field('code_settings.structured_data', { label: 'Structured data (JSON)', as: 'textarea', hint: 'Click here for a structured data verification tool' }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/codes` %>" method="POST" class="form">
12
+ <%- f.field('resource.settings.codes.scripts', {
13
+ as: 'textarea',
14
+ "data-validations-json": true,
15
+ value: JSON.stringify(resource.settings?.codes?.scripts || undefined)
16
+ }) %>
17
+
18
+ <%- f.field('resource.settings.codes.structured_data', {
19
+ label: 'Structured data (JSON)',
20
+ as: 'textarea',
21
+ hint: 'Click here for a structured data verification tool',
22
+ "data-validations-json": true,
23
+ value: JSON.stringify(resource.settings?.codes?.structured_data || undefined)
24
+ }) %>
14
25
 
15
26
  <div class="form-actions">
16
27
  <div class="btn-toolbar">
17
28
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
18
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${code_settings.originalId}` %>" class="btn-secondary">Back</a>
29
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
19
30
  </div>
20
31
  </div>
21
32
  </form>
@@ -3,23 +3,23 @@
3
3
  <h1 class="heading-1">Edit revision / General</h1>
4
4
  </div>
5
5
 
6
- <%- render_partial('../_nav.ejs', { settings: general_settings, active: 'general' }) %>
6
+ <%- render_partial('../_nav.ejs', { resource, active: 'general' }) %>
7
7
 
8
8
  <div class="grid gap-4 md:grid-cols-3">
9
9
  <div>
10
- <% form_for({ general_settings }, errors, (f) => { %>
11
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${general_settings.id}/general` %>" method="POST" class="form">
12
- <%- f.field('general_settings.title', { required: true }) %>
13
- <%- f.field('general_settings.slug', { label: "URL", required: true }) %>
14
- <%- f.field('general_settings.publish_at', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
15
- <%- f.field('general_settings.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
16
- <%- f.field('general_settings.username', { required: true }) %>
17
- <%- f.field('general_settings.password', { required: true }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/general` %>" method="POST" class="form">
12
+ <%- f.field('resource.title', { required: true }) %>
13
+ <%- f.field('resource.slug', { label: "URL", required: true }) %>
14
+ <%- f.field('resource.publishAt', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
15
+ <%- f.field('resource.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
16
+
17
+ <%- include('../../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
18
18
 
19
19
  <div class="form-actions">
20
20
  <div class="btn-toolbar">
21
21
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
22
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${general_settings.originalId}` %>" class="btn-secondary">Back</a>
22
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
23
23
  </div>
24
24
  </div>
25
25
  </form>
@@ -41,29 +41,3 @@
41
41
  </div>
42
42
  </div>
43
43
  </div>
44
-
45
- <script>
46
- function onVisibilityChange(event) {
47
- const newValue = event.target.value;
48
-
49
- if (newValue === "protected") {
50
- document.getElementById("f_username").parentElement.style.display = "block";
51
- document.getElementById("f_username").required = true;
52
- document.getElementById("f_password").parentElement.style.display = "block";
53
- document.getElementById("f_password").required = true;
54
- } else {
55
- document.getElementById("f_username").parentElement.style.display = "none";
56
- document.getElementById("f_username").required = false;
57
- document.getElementById("f_password").parentElement.style.display = "none";
58
- document.getElementById("f_password").required = false;
59
- }
60
- }
61
-
62
- onVisibilityChange({
63
- target: {
64
- value: '<%= general_settings.visibility %>'
65
- }
66
- })
67
-
68
- document.getElementById("f_visibility").addEventListener("change", onVisibilityChange)
69
- </script>
@@ -5,13 +5,13 @@
5
5
 
6
6
  <div class="grid gap-4 md:grid-cols-3">
7
7
  <div>
8
- <% form_for({ lock_settings }, errors, (f) => { %>
9
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${lock_settings.revision.id}/locks` %>" method="POST" class="form">
10
- <%- f.field('lock_settings.message', { as: 'textarea', label: 'Lock Message', required: true }) %>
8
+ <% form_for({ resource }, errors, (f) => { %>
9
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/locks` %>" method="POST" class="form">
10
+ <%- f.field('resource.message', { as: 'textarea', label: 'Lock Message', required: true }) %>
11
11
  <div class="form-actions">
12
12
  <div class="btn-toolbar">
13
13
  <%- f.submit('Lock revision', { class: 'btn-primary' }) %>
14
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${lock_settings.revision.originalId}` %>" class="btn-secondary">Cancel</a>
14
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Cancel</a>
15
15
  </div>
16
16
  </div>
17
17
  </form>
@@ -3,21 +3,21 @@
3
3
  <h1 class="heading-1">Edit revision / Open graph & meta tags</h1>
4
4
  </div>
5
5
 
6
- <%- render_partial('../_nav.ejs', { settings: meta_settings, active: 'meta' }) %>
6
+ <%- render_partial('../_nav.ejs', { resource, active: 'meta' }) %>
7
7
 
8
8
  <div class="grid gap-4 md:grid-cols-3">
9
9
  <div>
10
- <% form_for({ meta_settings }, errors, (f) => { %>
11
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${meta_settings.id}/meta` %>" method="POST" class="form">
12
- <%- f.field('meta_settings.title', { required: true }) %>
13
- <%- f.field('meta_settings.description', { as: 'textarea', required: true }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/meta` %>" method="POST" class="form">
12
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title" }) %>
13
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description" }) %>
14
14
 
15
- <raketa-image-picker name="meta_settings[image]" value="<%= JSON.stringify(meta_settings.image) %>"></raketa-image-picker>
15
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="Meta image"></raketa-image-picker>
16
16
 
17
17
  <div class="form-actions">
18
18
  <div class="btn-toolbar">
19
19
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
20
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${meta_settings.originalId}` %>" class="btn-secondary">Back</a>
20
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
21
21
  </div>
22
22
  </div>
23
23
  </form>
@@ -3,18 +3,18 @@
3
3
  <h1 class="heading-1">Edit revision / Content tags</h1>
4
4
  </div>
5
5
 
6
- <%- render_partial('../_nav.ejs', { settings: tag_settings, active: 'tags' }) %>
6
+ <%- render_partial('../_nav.ejs', { resource, active: 'tags' }) %>
7
7
 
8
8
  <div class="grid gap-4 md:grid-cols-3">
9
9
  <div>
10
- <% form_for({ tag_settings }, errors, (f) => { %>
11
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${tag_settings.id}/tags` %>" method="POST" class="form">
12
- <%- f.field('tag_settings.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name]) }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/tags` %>" method="POST" class="form">
12
+ <%- f.field('resource.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name]) }) %>
13
13
 
14
14
  <div class="form-actions">
15
15
  <div class="btn-toolbar">
16
16
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
17
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${tag_settings.originalId}` %>" class="btn-secondary">Back</a>
17
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
18
18
  </div>
19
19
  </div>
20
20
  </form>
@@ -3,22 +3,18 @@
3
3
  <h1 class="heading-1">Edit revision / Visuals</h1>
4
4
  </div>
5
5
 
6
- <%- render_partial('../_nav.ejs', { settings: visual_settings, active: 'visuals' }) %>
6
+ <%- render_partial('../_nav.ejs', { resource, active: 'visuals' }) %>
7
7
 
8
8
  <div class="grid gap-4 md:grid-cols-3">
9
9
  <div>
10
- <% form_for({ visual_settings }, errors, (f) => { %>
11
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${visual_settings.id}/visuals` %>" method="POST" class="form">
12
- <%- f.field('visual_settings.layout', { as: 'select', required: true, options: [
13
- ["default", "Default"],
14
- ["landing", "Landing page"],
15
- ["headless", "Headless"],
16
- ] }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.articleType}_revisions/${resource.id}/visuals` %>" method="POST" class="form">
12
+ <%- include('../../_shared/_layout_input.ejs', { f }) %>
17
13
 
18
14
  <div class="form-actions">
19
15
  <div class="btn-toolbar">
20
16
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
21
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${visual_settings.originalId}` %>" class="btn-secondary">Back</a>
17
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
22
18
  </div>
23
19
  </div>
24
20
  </form>
@@ -2,21 +2,16 @@
2
2
  <form action="<%= resource?.id ? `/${_context.locale}/${_context.resourceConfig.articleTypePlural}/${resource.id}` : `/${_context.locale}/${_context.resourceConfig.articleTypePlural}` %>" method="post" class="form">
3
3
  <%- f.field('resource.title', { required: true }) %>
4
4
  <%- f.field('resource.slug', { label: "URL", required: true }) %>
5
- <%- f.field('resource.publish_at', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
5
+ <%- f.field('resource.publishAt', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
6
6
  <%- f.field('resource.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
7
- <%- f.field('resource.username', { required: true }) %>
8
- <%- f.field('resource.password', { required: true }) %>
9
7
 
10
- <%- f.field('resource.layout', { as: 'select', required: true, options: [
11
- ["default", "Default"],
12
- ["landing", "Landing page"],
13
- ["headless", "Headless"],
14
- ] }) %>
8
+ <%- include('../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
9
+ <%- include('../_shared/_layout_input.ejs', { f }) %>
15
10
 
16
- <%- f.field('resource.meta_title', { required: true }) %>
17
- <%- f.field('resource.meta_description', { as: "textarea", required: true }) %>
11
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title" }) %>
12
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description" }) %>
18
13
 
19
- <raketa-image-picker name="resource[meta_image]" value="<%= JSON.stringify(resource.meta_image) %>"></raketa-image-picker>
14
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="Meta image"></raketa-image-picker>
20
15
 
21
16
  <%- f.field('resource.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name]) }) %>
22
17
 
@@ -53,29 +48,3 @@
53
48
  <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>
54
49
  </div>
55
50
  </div>
56
-
57
- <script>
58
- function onVisibilityChange(event) {
59
- const newValue = event.target.value;
60
-
61
- if (newValue === "protected") {
62
- document.getElementById("f_username").parentElement.style.display = "block";
63
- document.getElementById("f_username").required = true;
64
- document.getElementById("f_password").parentElement.style.display = "block";
65
- document.getElementById("f_password").required = true;
66
- } else {
67
- document.getElementById("f_username").parentElement.style.display = "none";
68
- document.getElementById("f_username").required = false;
69
- document.getElementById("f_password").parentElement.style.display = "none";
70
- document.getElementById("f_password").required = false;
71
- }
72
- }
73
-
74
- onVisibilityChange({
75
- target: {
76
- value: '<%= resource.visibility %>'
77
- }
78
- })
79
-
80
- document.getElementById("f_visibility").addEventListener("change", onVisibilityChange)
81
- </script>