@raketa-cloud/admin 0.0.30 → 0.0.31

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 (163) hide show
  1. package/package.json +1 -1
  2. package/src/cloud/ArticleRevisions.js +30 -1
  3. package/src/cloud/Articles.js +22 -9
  4. package/src/cloud/EventRevisions.js +40 -1
  5. package/src/cloud/Events.js +32 -11
  6. package/src/cloud/PageRevisions.js +20 -1
  7. package/src/cloud/Pages.js +13 -7
  8. package/src/cloud/RaketaClient.js +76 -0
  9. package/src/handlers/article_revisions/CodeHandler.js +18 -34
  10. package/src/handlers/article_revisions/GeneralHandler.js +19 -38
  11. package/src/handlers/article_revisions/LocksHandler.js +11 -6
  12. package/src/handlers/article_revisions/MetaHandler.js +18 -34
  13. package/src/handlers/article_revisions/TagHandler.js +23 -29
  14. package/src/handlers/article_revisions/UnlocksHandler.js +1 -1
  15. package/src/handlers/article_revisions/VisualHandler.js +18 -28
  16. package/src/handlers/articles/ArticlesHandler.js +11 -25
  17. package/src/handlers/articles/DeletesHandler.js +4 -4
  18. package/src/handlers/articles/TranslationsHandler.js +30 -56
  19. package/src/handlers/articles/URLsHandler.js +7 -7
  20. package/src/handlers/event_revisions/CodeHandler.js +22 -36
  21. package/src/handlers/event_revisions/GeneralHandler.js +22 -42
  22. package/src/handlers/event_revisions/LocksHandler.js +7 -6
  23. package/src/handlers/event_revisions/MetaHandler.js +22 -36
  24. package/src/handlers/event_revisions/TagHandler.js +25 -29
  25. package/src/handlers/event_revisions/VisualHandler.js +22 -30
  26. package/src/handlers/events/DeletesHandler.js +4 -4
  27. package/src/handlers/events/EventsHandler.js +13 -27
  28. package/src/handlers/events/TranslationsHandler.js +35 -58
  29. package/src/handlers/events/URLsHandler.js +7 -7
  30. package/src/handlers/page_revisions/CodeHandler.js +8 -34
  31. package/src/handlers/page_revisions/GeneralHandler.js +10 -37
  32. package/src/handlers/page_revisions/LocksHandler.js +11 -6
  33. package/src/handlers/page_revisions/MetaHandler.js +8 -34
  34. package/src/handlers/page_revisions/TagHandler.js +16 -27
  35. package/src/handlers/page_revisions/VisualHandler.js +8 -28
  36. package/src/handlers/pages/DeletesHandler.js +4 -4
  37. package/src/handlers/pages/PagesHandler.js +7 -24
  38. package/src/handlers/pages/TranslationsHandler.js +23 -45
  39. package/src/handlers/pages/URLsHandler.js +7 -7
  40. package/src/helpers/FormBuilder.js +1 -2
  41. package/src/tests/handlers/RedirectsHandler.test/create.test.js +1 -1
  42. package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +1 -1
  43. package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +1 -1
  44. package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +1 -1
  45. package/src/tests/handlers/RedirectsHandler.test/index.test.js +1 -1
  46. package/src/tests/handlers/RedirectsHandler.test/show.test.js +1 -1
  47. package/src/tests/handlers/RedirectsHandler.test/update.test.js +1 -1
  48. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +1 -1
  49. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +1 -1
  50. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +7 -7
  51. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +37 -19
  52. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +5 -11
  53. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +36 -28
  54. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +7 -8
  55. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +41 -25
  56. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +2 -2
  57. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +2 -2
  58. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +1 -1
  59. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +10 -7
  60. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +20 -14
  61. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +7 -6
  62. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +30 -19
  63. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +2 -2
  64. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +2 -2
  65. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +53 -29
  66. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +3 -3
  67. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +2 -2
  68. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +3 -3
  69. package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +1 -1
  70. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +4 -4
  71. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +2 -2
  72. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +6 -6
  73. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +2 -2
  74. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +11 -7
  75. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +43 -19
  76. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +1 -1
  77. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +1 -1
  78. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +7 -13
  79. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +42 -32
  80. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +11 -8
  81. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +47 -25
  82. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +2 -2
  83. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +2 -2
  84. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +1 -1
  85. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +14 -7
  86. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +26 -14
  87. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +11 -6
  88. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +36 -19
  89. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +2 -2
  90. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +2 -2
  91. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +1 -1
  92. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +4 -4
  93. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +2 -2
  94. package/src/tests/handlers/events/EventsHandler.test/create.test.js +53 -37
  95. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +3 -3
  96. package/src/tests/handlers/events/EventsHandler.test/index.test.js +2 -2
  97. package/src/tests/handlers/events/EventsHandler.test/show.test.js +3 -3
  98. package/src/tests/handlers/events/URLsHandler.test/create.test.js +6 -6
  99. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +2 -2
  100. package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +10 -8
  101. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +30 -17
  102. package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +3 -11
  103. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +38 -22
  104. package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +2 -8
  105. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +37 -23
  106. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +1 -1
  107. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +1 -1
  108. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +2 -2
  109. package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +2 -2
  110. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +1 -1
  111. package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +3 -7
  112. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +11 -12
  113. package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +10 -7
  114. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +23 -17
  115. package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +2 -2
  116. package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +2 -2
  117. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +1 -1
  118. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +4 -4
  119. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +2 -2
  120. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +50 -27
  121. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +3 -3
  122. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +2 -2
  123. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +3 -3
  124. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +6 -6
  125. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +2 -2
  126. package/src/utils.js +12 -0
  127. package/src/views/_shared/_credentials_input.ejs +31 -0
  128. package/src/views/_shared/_layout_input.ejs +5 -0
  129. package/src/views/article_revisions/_nav.ejs +5 -5
  130. package/src/views/article_revisions/codes/edit_form.ejs +17 -6
  131. package/src/views/article_revisions/general/edit_form.ejs +10 -36
  132. package/src/views/article_revisions/locks/create_form.ejs +4 -4
  133. package/src/views/article_revisions/meta/edit_form.ejs +7 -7
  134. package/src/views/article_revisions/tags/edit_form.ejs +5 -5
  135. package/src/views/article_revisions/visuals/edit_form.ejs +5 -9
  136. package/src/views/articles/_form.ejs +6 -37
  137. package/src/views/articles/deletes/create_form.ejs +9 -9
  138. package/src/views/articles/translations/_form.ejs +14 -46
  139. package/src/views/articles/urls/create_form.ejs +5 -5
  140. package/src/views/event_revisions/_nav.ejs +5 -5
  141. package/src/views/event_revisions/codes/edit_form.ejs +17 -6
  142. package/src/views/event_revisions/general/edit_form.ejs +12 -38
  143. package/src/views/event_revisions/locks/create_form.ejs +4 -4
  144. package/src/views/event_revisions/meta/edit_form.ejs +7 -7
  145. package/src/views/event_revisions/tags/edit_form.ejs +5 -5
  146. package/src/views/event_revisions/visuals/edit_form.ejs +5 -9
  147. package/src/views/events/_form.ejs +8 -39
  148. package/src/views/events/deletes/create_form.ejs +9 -9
  149. package/src/views/events/translations/_form.ejs +16 -47
  150. package/src/views/events/urls/create_form.ejs +5 -5
  151. package/src/views/layouts/application.ejs +57 -35
  152. package/src/views/page_revisions/_nav.ejs +5 -5
  153. package/src/views/page_revisions/codes/edit_form.ejs +17 -6
  154. package/src/views/page_revisions/general/edit_form.ejs +8 -35
  155. package/src/views/page_revisions/locks/create_form.ejs +4 -4
  156. package/src/views/page_revisions/meta/edit_form.ejs +7 -7
  157. package/src/views/page_revisions/publishes/_form.ejs +9 -9
  158. package/src/views/page_revisions/tags/edit_form.ejs +5 -5
  159. package/src/views/page_revisions/visuals/edit_form.ejs +5 -9
  160. package/src/views/pages/_form.ejs +5 -36
  161. package/src/views/pages/deletes/create_form.ejs +9 -9
  162. package/src/views/pages/translations/_form.ejs +13 -45
  163. package/src/views/pages/urls/create_form.ejs +5 -5
@@ -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.eventType}_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.eventType}_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.eventTypePlural}/${meta_settings.originalId}` %>" class="btn-secondary">Back</a>
20
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${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.eventType}_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.eventType}_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.eventTypePlural}/${tag_settings.originalId}` %>" class="btn-secondary">Back</a>
17
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${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.eventType}_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.eventType}_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.eventTypePlural}/${visual_settings.originalId}` %>" class="btn-secondary">Back</a>
17
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
22
18
  </div>
23
19
  </div>
24
20
  </form>
@@ -2,23 +2,18 @@
2
2
  <form action="<%= resource?.id ? `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}` : `/${_context.locale}/${_context.resourceConfig.eventTypePlural}` %>" 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)' }) %>
6
- <%- f.field('resource.starts_at', { required: true, type: 'datetime-local', label: 'Starts at (UTC)' }) %>
7
- <%- f.field('resource.ends_at', { required: true, type: 'datetime-local', label: 'Ends at (UTC)' }) %>
5
+ <%- f.field('resource.publishAt', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
6
+ <%- f.field('resource.startsAt', { required: true, type: 'datetime-local', label: 'Starts at (UTC)' }) %>
7
+ <%- f.field('resource.endsAt', { required: true, type: 'datetime-local', label: 'Ends at (UTC)' }) %>
8
8
  <%- f.field('resource.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
9
- <%- f.field('resource.username', { required: true }) %>
10
- <%- f.field('resource.password', { required: true }) %>
11
9
 
12
- <%- f.field('resource.layout', { as: 'select', required: true, options: [
13
- ["default", "Default"],
14
- ["landing", "Landing page"],
15
- ["headless", "Headless"],
16
- ] }) %>
10
+ <%- include('../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
11
+ <%- include('../_shared/_layout_input.ejs', { f }) %>
17
12
 
18
- <%- f.field('resource.meta_title', { required: true }) %>
19
- <%- f.field('resource.meta_description', { as: "textarea", required: true }) %>
13
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title" }) %>
14
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description" }) %>
20
15
 
21
- <raketa-image-picker name="resource[meta_image]" value="<%= JSON.stringify(resource.meta_image) %>"></raketa-image-picker>
16
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="Meta image"></raketa-image-picker>
22
17
 
23
18
  <%- f.field('resource.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name]) }) %>
24
19
 
@@ -55,29 +50,3 @@
55
50
  <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>
56
51
  </div>
57
52
  </div>
58
-
59
- <script>
60
- function onVisibilityChange(event) {
61
- const newValue = event.target.value;
62
-
63
- if (newValue === "protected") {
64
- document.getElementById("f_username").parentElement.style.display = "block";
65
- document.getElementById("f_username").required = true;
66
- document.getElementById("f_password").parentElement.style.display = "block";
67
- document.getElementById("f_password").required = true;
68
- } else {
69
- document.getElementById("f_username").parentElement.style.display = "none";
70
- document.getElementById("f_username").required = false;
71
- document.getElementById("f_password").parentElement.style.display = "none";
72
- document.getElementById("f_password").required = false;
73
- }
74
- }
75
-
76
- onVisibilityChange({
77
- target: {
78
- value: '<%= resource.visibility %>'
79
- }
80
- })
81
-
82
- document.getElementById("f_visibility").addEventListener("change", onVisibilityChange)
83
- </script>
@@ -5,15 +5,15 @@
5
5
 
6
6
  <div class="grid gap-4 md:grid-cols-3">
7
7
  <div>
8
- <% form_for({ deleteAction }, errors, (f) => { %>
9
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${deleteAction.id}/deletes` %>" method="POST" class="form">
10
- <%- f.field('deleteAction.redirect', { as: 'select', required: true,options: [['301', 'Redirect to another page'], ['404', 'Return 404'],['410', 'Return 410']] }) %>
11
- <%- f.field('deleteAction.destination', {label: 'Destination URL', required: true}) %>
8
+ <% form_for({ resource }, errors, (f) => { %>
9
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/deletes` %>" method="POST" class="form">
10
+ <%- f.field('resource.redirect', { as: 'select', required: true,options: [['301', 'Redirect to another page'], ['404', 'Return 404'],['410', 'Return 410']] }) %>
11
+ <%- f.field('resource.destination', {label: 'Destination URL', required: true}) %>
12
12
 
13
13
  <div class="form-actions">
14
14
  <div class="btn-toolbar">
15
15
  <%- f.submit('Proceed', { class: 'btn-primary' }) %>
16
- <a href="<%=`/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${deleteAction.id}`%>" class="btn-secondary">Back</a>
16
+ <a href="<%=`/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}`%>" class="btn-secondary">Back</a>
17
17
  </div>
18
18
  </div>
19
19
  </form>
@@ -41,15 +41,15 @@
41
41
  const newValue = event.target.value;
42
42
  const requiresRedirect = newValue === "301"
43
43
 
44
- document.getElementById("f_destination").parentElement.style.display = requiresRedirect ? "block" : "none";
45
- document.getElementById("f_destination").required = requiresRedirect;
44
+ document.getElementById("f_resource_destination").parentElement.style.display = requiresRedirect ? "block" : "none";
45
+ document.getElementById("f_resource_destination").required = requiresRedirect;
46
46
  }
47
47
 
48
48
  onDestinationChange({
49
49
  target: {
50
- value: '<%= deleteAction.redirect %>'
50
+ value: '<%= resource.redirect %>'
51
51
  }
52
52
  })
53
53
 
54
- document.getElementById("f_redirect").addEventListener("change", onDestinationChange)
54
+ document.getElementById("f_resource_redirect").addEventListener("change", onDestinationChange)
55
55
  </script>
@@ -1,37 +1,32 @@
1
- <% form_for({ translation }, errors, (f) => { %>
2
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/translations` %>" method="post" class="form">
1
+ <% form_for({ resource }, errors, (f) => { %>
2
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${blueprint.id}/translations` %>" method="post" class="form">
3
3
  <input type="hidden" name="target_locale" value="<%= targetLocale %>" />
4
4
 
5
- <%- f.field('translation.title', { required: true }) %>
6
- <%- f.field('translation.slug', { label: "URL", required: true }) %>
7
- <%- f.field('translation.publish_at', { required: true, type: 'datetime-local' }) %>
8
- <%- f.field('translation.starts_at', { required: true, type: 'datetime-local' }) %>
9
- <%- f.field('translation.ends_at', { required: true, type: 'datetime-local' }) %>
10
- <%- f.field('translation.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
11
- <%- f.field('translation.username', { required: true }) %>
12
- <%- f.field('translation.password', { required: true }) %>
5
+ <%- f.field('resource.title', { required: true }) %>
6
+ <%- f.field('resource.slug', { label: "URL", required: true }) %>
7
+ <%- f.field('resource.publishAt', { required: true, type: 'datetime-local' }) %>
8
+ <%- f.field('resource.startsAt', { required: true, type: 'datetime-local' }) %>
9
+ <%- f.field('resource.endsAt', { required: true, type: 'datetime-local' }) %>
10
+ <%- f.field('resource.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
13
11
 
14
- <%- f.field('translation.layout', { as: 'select', required: true, options: [
15
- ["default", "Default"],
16
- ["landing", "Landing page"],
17
- ["headless", "Headless"],
18
- ] }) %>
12
+ <%- include('../../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
13
+ <%- include('../../_shared/_layout_input.ejs', { f }) %>
19
14
 
20
- <%- f.field('translation.meta_title', { required: true }) %>
21
- <%- f.field('translation.meta_description', { as: "textarea", required: true }) %>
15
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title" }) %>
16
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description" }) %>
22
17
 
23
- <raketa-image-picker name="translation[meta_image]" value="<%= JSON.stringify(translation.meta_image) %>"></raketa-image-picker>
18
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="Meta image"></raketa-image-picker>
24
19
 
25
20
  <h6>Original tags:</h6>
26
- <div><%= blueprint_tags.map((tag) => tag.name).join(", ")%></div>
21
+ <div><%= blueprint.tags.map((tag) => tag.name).join(", ")%></div>
27
22
 
28
- <%- f.field('translation.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name])}) %>
23
+ <%- f.field('resource.tags', { as: 'checkbox_group', required: true, options: tags.map(tag => [tag.id, tag.name])}) %>
29
24
 
30
25
  <div class="form-actions">
31
26
  <div class="btn-toolbar">
32
27
  <%- f.submit('Save record', { class: 'btn-primary' }) %>
33
28
 
34
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}` %>" class="btn-secondary">Cancel</a>
29
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${blueprint.id}` %>" class="btn-secondary">Cancel</a>
35
30
  </div>
36
31
  </div>
37
32
  </form>
@@ -50,29 +45,3 @@
50
45
  <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>
51
46
  </div>
52
47
  </div>
53
-
54
- <script>
55
- function onVisibilityChange(event) {
56
- const newValue = event.target.value;
57
-
58
- if (newValue === "protected") {
59
- document.getElementById("f_username").parentElement.style.display = "block";
60
- document.getElementById("f_username").required = true;
61
- document.getElementById("f_password").parentElement.style.display = "block";
62
- document.getElementById("f_password").required = true;
63
- } else {
64
- document.getElementById("f_username").parentElement.style.display = "none";
65
- document.getElementById("f_username").required = false;
66
- document.getElementById("f_password").parentElement.style.display = "none";
67
- document.getElementById("f_password").required = false;
68
- }
69
- }
70
-
71
- onVisibilityChange({
72
- target: {
73
- value: '<%= resource.visibility %>'
74
- }
75
- })
76
-
77
- document.getElementById("f_visibility").addEventListener("change", onVisibilityChange)
78
- </script>
@@ -4,13 +4,13 @@
4
4
  </div>
5
5
 
6
6
  <div class="grid gap-4 md:grid-cols-3">
7
- <% form_for({ change }, errors, (f) => { %>
8
- <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${change.id}/urls` %>" method="post" class="form">
9
- <%- f.field('change.slug', { label: "URL", required: true }) %>
10
- <%- f.field('change.redirect', { as: "checkbox", value: "1", label: "Create 301 redirect for the old URL" }) %>
7
+ <% form_for({ resource }, errors, (f) => { %>
8
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/urls` %>" method="post" class="form">
9
+ <%- f.field('resource.slug', { label: "URL", required: true }) %>
10
+ <%- f.field('resource.redirect', { as: "checkbox", value: "1", label: "Create 301 redirect for the old URL" }) %>
11
11
 
12
12
  <%- f.submit('Save record', { class: 'btn-primary' }) %>
13
- <a href="<%=`/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${change.id}`%>" class="btn-secondary">Back</a>
13
+ <a href="<%=`/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}`%>" class="btn-secondary">Back</a>
14
14
  </form>
15
15
  <% }) %>
16
16
 
@@ -29,44 +29,44 @@
29
29
 
30
30
  <div class="my-4">
31
31
  <% _context.layout.sidebar.forEach((menu, idx) => { %>
32
- <% if (menu.submenus) { %>
33
-
34
- <div class="group/item">
35
- <details class="unstyled-details">
36
- <summary class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary cursor-pointer transition-all duration-300 ease-in-out">
37
- <div class="size-6 opacity-100 group-[.expanded]:opacity-50">
38
- <%- atob(menu.icon) %>
39
- </div>
40
-
41
- <span class="group-[.expanded]:block hidden"><%= menu.label %></span>
42
-
43
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="icon-toggle absolute right-4 size-4 group-[.expanded]:block hidden">
44
- <path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
45
- </svg>
46
- </summary>
47
-
48
- <div class="pl-12 py-4 bg-raketa-background/50 group-[.expanded]:block hidden">
49
- <% menu.submenus.forEach(submenu => { %>
50
- <a href="<%= `/${_context.locale}/${submenu.link}` %>" class="block py-2 body-2 text-raketa-foreground/50 hover:text-raketa-foreground transition-all ease-in-out duration-300"><%= submenu.label %></a>
51
- <% }) %>
52
- </div>
53
- </details>
32
+ <% if (menu.submenus) { %>
33
+
34
+ <div class="group/item">
35
+ <details class="unstyled-details">
36
+ <summary class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary cursor-pointer transition-all duration-300 ease-in-out">
37
+ <div class="size-6 opacity-100 group-[.expanded]:opacity-50">
38
+ <%- atob(menu.icon) %>
39
+ </div>
40
+
41
+ <span class="group-[.expanded]:block hidden"><%= menu.label %></span>
42
+
43
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="icon-toggle absolute right-4 size-4 group-[.expanded]:block hidden">
44
+ <path fill-rule="evenodd" d="M5.22 8.22a.75.75 0 0 1 1.06 0L10 11.94l3.72-3.72a.75.75 0 1 1 1.06 1.06l-4.25 4.25a.75.75 0 0 1-1.06 0L5.22 9.28a.75.75 0 0 1 0-1.06Z" clip-rule="evenodd" />
45
+ </svg>
46
+ </summary>
47
+
48
+ <div class="pl-12 py-4 bg-raketa-background/50 group-[.expanded]:block hidden">
49
+ <% menu.submenus.forEach(submenu => { %>
50
+ <a href="<%= `/${_context.locale}/${submenu.link}` %>" class="block py-2 body-2 text-raketa-foreground/50 hover:text-raketa-foreground transition-all ease-in-out duration-300"><%= submenu.label %></a>
51
+ <% }) %>
54
52
  </div>
53
+ </details>
54
+ </div>
55
55
 
56
- <% } else { %>
56
+ <% } else { %>
57
57
 
58
- <div class="group/item">
59
- <a href="<%= `/${_context.locale}${menu.link}` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
60
- <div class="size-6 opacity-100 group-[.expanded]:opacity-50">
61
- <%- atob(menu.icon) %>
62
- </div>
63
-
64
- <span class="group-[.expanded]:block hidden"><%= menu.label %></span>
65
- <div class="absolute group-hover/item:opacity-100 group-[.is-active]/item:opacity-100 opacity-0 top-0 z-10 -right-[10px] w-0 h-0 border-t-[28px] border-t-transparent border-b-[28px] border-b-transparent border-l-[10px] border-l-raketa-primary"></div>
66
- </a>
58
+ <div class="group/item">
59
+ <a href="<%= `/${_context.locale}${menu.link}` %>" class="relative flex items-center gap-3 px-5 py-4 text-raketa-primary hover:bg-raketa-primary hover:text-white group-[.is-active]/item:bg-raketa-primary group-[.is-active]/item:text-white">
60
+ <div class="size-6 opacity-100 group-[.expanded]:opacity-50">
61
+ <%- atob(menu.icon) %>
67
62
  </div>
68
63
 
69
- <% } %>
64
+ <span class="group-[.expanded]:block hidden"><%= menu.label %></span>
65
+ <div class="absolute group-hover/item:opacity-100 group-[.is-active]/item:opacity-100 opacity-0 top-0 z-10 -right-[10px] w-0 h-0 border-t-[28px] border-t-transparent border-b-[28px] border-b-transparent border-l-[10px] border-l-raketa-primary"></div>
66
+ </a>
67
+ </div>
68
+
69
+ <% } %>
70
70
  <% }) %>
71
71
 
72
72
  </div>
@@ -119,7 +119,9 @@
119
119
  parent.querySelectorAll('[data-auto="1"]').forEach(node => node.remove())
120
120
 
121
121
  TIMEZONES.forEach(timeZone => {
122
- const strTime = fakeUTCDate.toLocaleString("en-EU",{timeZone: `${timeZone.value}`});
122
+ const strTime = fakeUTCDate.toLocaleString("en-EU", {
123
+ timeZone: `${timeZone.value}`
124
+ });
123
125
  const hint = document.createElement("div");
124
126
 
125
127
  hint.classList.add('hint')
@@ -134,7 +136,27 @@
134
136
  enhanceDateTimeInputs(input);
135
137
 
136
138
  input.addEventListener("change", (event) => enhanceDateTimeInputs(event.target))
137
- } )
139
+ })
140
+ </script>
141
+
142
+ <script>
143
+ function isValidJSON(value) {
144
+ try {
145
+ JSON.parse(value);
146
+ } catch (e) {
147
+ return false;
148
+ }
149
+
150
+ return true;
151
+ };
152
+
153
+ document.querySelectorAll('[data-validations-json]').forEach(input => {
154
+ input.addEventListener("change", (event) => {
155
+ if (event.target.value && !isValidJSON(event.target.value)) {
156
+ event.target.setCustomValidity("Please enter a valid JSON structure.");
157
+ } else event.target.setCustomValidity("");
158
+ })
159
+ })
138
160
  </script>
139
161
  </body>
140
162
 
@@ -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.pageType}_revisions/${settings.id}/general/edit` %>" class="text-raketa-primary font-semibold">
10
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.pageType}_revisions/${settings.id}/visuals/edit` %>" class="text-raketa-primary font-semibold">
16
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.pageType}_revisions/${settings.id}/codes/edit` %>" class="text-raketa-primary font-semibold">
22
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.pageType}_revisions/${settings.id}/meta/edit` %>" class="text-raketa-primary font-semibold">
28
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.pageType}_revisions/${settings.id}/tags/edit` %>" class="text-raketa-primary font-semibold">
34
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.pageType}_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.pageType}_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.pageTypePlural}/${code_settings.originalId}` %>" class="btn-secondary">Back</a>
29
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
19
30
  </div>
20
31
  </div>
21
32
  </form>
@@ -3,23 +3,22 @@
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.pageType}_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.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.pageType}_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.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
15
15
 
16
- <%- f.field('general_settings.username', { required: true }) %>
17
- <%- f.field('general_settings.password', { required: true }) %>
16
+ <%- include('../../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
18
17
 
19
18
  <div class="form-actions">
20
19
  <div class="btn-toolbar">
21
20
  <%- f.submit('Save changes', { class: 'btn-primary' }) %>
22
- <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${general_settings.originalId}` %>" class="btn-secondary">Back</a>
21
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
23
22
  </div>
24
23
  </div>
25
24
  </form>
@@ -41,29 +40,3 @@
41
40
  </div>
42
41
  </div>
43
42
  </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.pageType}_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.pageType}_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.pageTypePlural}/${lock_settings.revision.originalId}` %>" class="btn-secondary">Cancel</a>
14
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${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.pageType}_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.pageType}_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.pageTypePlural}/${meta_settings.originalId}` %>" class="btn-secondary">Back</a>
20
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
21
21
  </div>
22
22
  </div>
23
23
  </form>