@raketa-cloud/admin 0.0.102 → 0.0.103

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 (370) hide show
  1. package/package.json +2 -1
  2. package/src/Adapter.js +265 -0
  3. package/src/HonoAdapter.js +269 -0
  4. package/src/Logger.js +21 -0
  5. package/src/RaketaContext.js +46 -0
  6. package/src/buildResourcePath.js +22 -0
  7. package/src/cipher.js +49 -0
  8. package/src/cloud/ArticleChanges.js +36 -0
  9. package/src/cloud/ArticleRevisions.js +239 -0
  10. package/src/cloud/Articles.js +194 -0
  11. package/src/cloud/Categories.js +97 -0
  12. package/src/cloud/EventChanges.js +36 -0
  13. package/src/cloud/EventRevisions.js +246 -0
  14. package/src/cloud/Events.js +204 -0
  15. package/src/cloud/PageChanges.js +36 -0
  16. package/src/cloud/PageRevisions.js +226 -0
  17. package/src/cloud/Pages.js +185 -0
  18. package/src/cloud/RaketaClient.js +223 -0
  19. package/src/cloud/Redirects.js +81 -0
  20. package/src/cloud/Settings.js +28 -0
  21. package/src/cloud/Tags.js +80 -0
  22. package/src/cloud/documents/articlesDocuments.js +343 -0
  23. package/src/cloud/documents/categoryDocuments.js +52 -0
  24. package/src/cloud/documents/common.js +133 -0
  25. package/src/cloud/documents/eventsDocuments.js +351 -0
  26. package/src/cloud/documents/pagesDocuments.js +339 -0
  27. package/src/cloud/documents/redirectsDocuments.js +82 -0
  28. package/src/cloud/documents/settingsDocuments.js +23 -0
  29. package/src/cloud/documents/tagsDocuments.js +63 -0
  30. package/src/currentPath.cjs +1 -0
  31. package/src/handlers/DashboardsHandler.js +9 -0
  32. package/src/handlers/RedirectsHandler.js +124 -0
  33. package/src/handlers/TagsHandler.js +113 -0
  34. package/src/handlers/_shared/SettingsHandler.js +36 -0
  35. package/src/handlers/article_revisions/ArticleRevisionsHandler.js +49 -0
  36. package/src/handlers/article_revisions/CancelSchedulesHandler.js +26 -0
  37. package/src/handlers/article_revisions/CodeHandler.js +74 -0
  38. package/src/handlers/article_revisions/GeneralHandler.js +76 -0
  39. package/src/handlers/article_revisions/LocksHandler.js +77 -0
  40. package/src/handlers/article_revisions/MetaHandler.js +74 -0
  41. package/src/handlers/article_revisions/PublishesHandler.js +120 -0
  42. package/src/handlers/article_revisions/RevertsHandler.js +28 -0
  43. package/src/handlers/article_revisions/TagHandler.js +82 -0
  44. package/src/handlers/article_revisions/UnlocksHandler.js +24 -0
  45. package/src/handlers/article_revisions/VisualHandler.js +74 -0
  46. package/src/handlers/article_revisions/WidgetHandler.js +47 -0
  47. package/src/handlers/articles/ArticlesHandler.js +109 -0
  48. package/src/handlers/articles/ClonesHandler.js +19 -0
  49. package/src/handlers/articles/DeletesHandler.js +72 -0
  50. package/src/handlers/articles/HistoryHandler.js +31 -0
  51. package/src/handlers/articles/TranslationsHandler.js +231 -0
  52. package/src/handlers/articles/URLsHandler.js +83 -0
  53. package/src/handlers/categories/index.js +122 -0
  54. package/src/handlers/event_revisions/CancelSchedulesHandler.js +26 -0
  55. package/src/handlers/event_revisions/CodeHandler.js +72 -0
  56. package/src/handlers/event_revisions/EventRevisionsHandler.js +47 -0
  57. package/src/handlers/event_revisions/GeneralHandler.js +74 -0
  58. package/src/handlers/event_revisions/LocksHandler.js +65 -0
  59. package/src/handlers/event_revisions/MetaHandler.js +72 -0
  60. package/src/handlers/event_revisions/PublishesHandler.js +112 -0
  61. package/src/handlers/event_revisions/RevertsHandler.js +26 -0
  62. package/src/handlers/event_revisions/TagHandler.js +79 -0
  63. package/src/handlers/event_revisions/UnlocksHandler.js +24 -0
  64. package/src/handlers/event_revisions/VisualHandler.js +72 -0
  65. package/src/handlers/event_revisions/WidgetHandler.js +41 -0
  66. package/src/handlers/events/ClonesHandler.js +19 -0
  67. package/src/handlers/events/DeletesHandler.js +72 -0
  68. package/src/handlers/events/EventsHandler.js +111 -0
  69. package/src/handlers/events/HistoryHandler.js +31 -0
  70. package/src/handlers/events/TranslationsHandler.js +233 -0
  71. package/src/handlers/events/URLsHandler.js +81 -0
  72. package/src/handlers/page_revisions/CancelSchedulesHandler.js +26 -0
  73. package/src/handlers/page_revisions/CodeHandler.js +57 -0
  74. package/src/handlers/page_revisions/GeneralHandler.js +59 -0
  75. package/src/handlers/page_revisions/LocksHandler.js +69 -0
  76. package/src/handlers/page_revisions/MetaHandler.js +57 -0
  77. package/src/handlers/page_revisions/PageRevisionsHandler.js +47 -0
  78. package/src/handlers/page_revisions/PublishesHandler.js +112 -0
  79. package/src/handlers/page_revisions/RevertsHandler.js +26 -0
  80. package/src/handlers/page_revisions/TagHandler.js +105 -0
  81. package/src/handlers/page_revisions/UnlocksHandler.js +22 -0
  82. package/src/handlers/page_revisions/VisualHandler.js +58 -0
  83. package/src/handlers/page_revisions/WidgetHandler.js +41 -0
  84. package/src/handlers/pages/ClonesHandler.js +19 -0
  85. package/src/handlers/pages/DeletesHandler.js +68 -0
  86. package/src/handlers/pages/HistoryHandler.js +31 -0
  87. package/src/handlers/pages/PagesHandler.js +104 -0
  88. package/src/handlers/pages/TranslationsHandler.js +233 -0
  89. package/src/handlers/pages/URLsHandler.js +77 -0
  90. package/src/helpers/AuthHelper.js +49 -0
  91. package/src/helpers/FormBuilder.js +438 -0
  92. package/src/helpers/HTMLBuilder.js +38 -0
  93. package/src/helpers/Inflector.js +9 -0
  94. package/src/helpers/Pagination.js +92 -0
  95. package/src/helpers/SortButton.js +102 -0
  96. package/src/helpers/form_for.js +8 -0
  97. package/src/helpers/historyUtils.js +133 -0
  98. package/src/helpers/pagination_helper.js +5 -0
  99. package/src/helpers/sort_button.js +5 -0
  100. package/src/helpers/utils.js +21 -0
  101. package/src/routeArticlesModule.js +151 -0
  102. package/src/routeCategoriesModule.js +16 -0
  103. package/src/routeCollection.js +90 -0
  104. package/src/routeEventsModule.js +166 -0
  105. package/src/routeMember.js +40 -0
  106. package/src/routeNestedCollection.js +96 -0
  107. package/src/routeNestedMember.js +46 -0
  108. package/src/routePagesModule.js +163 -0
  109. package/src/routeSettings.js +14 -0
  110. package/src/routeStandard.js +35 -0
  111. package/src/setGlobalContext.js +5 -0
  112. package/src/setupAuthentication.js +154 -0
  113. package/src/setupCloud.js +50 -0
  114. package/src/styles/application.css +561 -0
  115. package/src/tests/Adapter.test.js +39 -0
  116. package/src/tests/HonoAdapter.test.js +34 -0
  117. package/src/tests/Logger.test.js +33 -0
  118. package/src/tests/handlers/DashboardsHandler.test/index.test.js +17 -0
  119. package/src/tests/handlers/RedirectsHandler.test/create.test.js +83 -0
  120. package/src/tests/handlers/RedirectsHandler.test/create_form.test.js +27 -0
  121. package/src/tests/handlers/RedirectsHandler.test/destroy.test.js +53 -0
  122. package/src/tests/handlers/RedirectsHandler.test/edit_form.test.js +37 -0
  123. package/src/tests/handlers/RedirectsHandler.test/index.test.js +41 -0
  124. package/src/tests/handlers/RedirectsHandler.test/show.test.js +41 -0
  125. package/src/tests/handlers/RedirectsHandler.test/update.test.js +88 -0
  126. package/src/tests/handlers/TagsHandler.test/create.test.js +96 -0
  127. package/src/tests/handlers/TagsHandler.test/create_form.test.js +25 -0
  128. package/src/tests/handlers/TagsHandler.test/destroy.test.js +51 -0
  129. package/src/tests/handlers/TagsHandler.test/edit_form.test.js +60 -0
  130. package/src/tests/handlers/TagsHandler.test/index.test.js +37 -0
  131. package/src/tests/handlers/TagsHandler.test/update.test.js +105 -0
  132. package/src/tests/handlers/_shared/SettingsHandler.test/edit_form.test.js +36 -0
  133. package/src/tests/handlers/_shared/SettingsHandler.test/update.test.js +114 -0
  134. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/create.test.js +79 -0
  135. package/src/tests/handlers/article_revisions/ArticleRevisionsHandler.test/destroy.test.js +57 -0
  136. package/src/tests/handlers/article_revisions/CancelScheduledHandler.test/create.test.js +90 -0
  137. package/src/tests/handlers/article_revisions/CodesHandler.test/edit_form.test.js +56 -0
  138. package/src/tests/handlers/article_revisions/CodesHandler.test/update.test.js +161 -0
  139. package/src/tests/handlers/article_revisions/GeneralHandler.test/edit_form.test.js +59 -0
  140. package/src/tests/handlers/article_revisions/GeneralHandler.test/update.test.js +162 -0
  141. package/src/tests/handlers/article_revisions/LocksHandler.test/create.test.js +142 -0
  142. package/src/tests/handlers/article_revisions/LocksHandler.test/create_form.test.js +55 -0
  143. package/src/tests/handlers/article_revisions/MetaHandler.test/edit_form.test.js +56 -0
  144. package/src/tests/handlers/article_revisions/MetaHandler.test/update.test.js +163 -0
  145. package/src/tests/handlers/article_revisions/PublishesHandler.test/create.test.js +333 -0
  146. package/src/tests/handlers/article_revisions/PublishesHandler.test/create_form.test.js +48 -0
  147. package/src/tests/handlers/article_revisions/RevertsHandler.test/create.test.js +86 -0
  148. package/src/tests/handlers/article_revisions/TagHandler.test/edit_form.test.js +72 -0
  149. package/src/tests/handlers/article_revisions/TagHandler.test/update.test.js +153 -0
  150. package/src/tests/handlers/article_revisions/UnlocksHandler.test/create.test.js +84 -0
  151. package/src/tests/handlers/article_revisions/VisualHandler.test.test/edit_form.test.js +56 -0
  152. package/src/tests/handlers/article_revisions/VisualHandler.test.test/update.test.js +146 -0
  153. package/src/tests/handlers/article_revisions/WidgetHandler.test/show.test.js +46 -0
  154. package/src/tests/handlers/article_revisions/WidgetHandler.test/update.test.js +103 -0
  155. package/src/tests/handlers/articles/ArticlesHandler.test/create.test.js +172 -0
  156. package/src/tests/handlers/articles/ArticlesHandler.test/create_form.test.js +44 -0
  157. package/src/tests/handlers/articles/ArticlesHandler.test/index.test.js +57 -0
  158. package/src/tests/handlers/articles/ArticlesHandler.test/show.test.js +109 -0
  159. package/src/tests/handlers/articles/ArticlesHistoryHandler.test/index.test.js +87 -0
  160. package/src/tests/handlers/articles/ClonesHandler.test/create.test.js +57 -0
  161. package/src/tests/handlers/articles/DeletesHandler.test/create.test.js +115 -0
  162. package/src/tests/handlers/articles/DeletesHandler.test/create_form.test.js +60 -0
  163. package/src/tests/handlers/articles/TranslationHandler.test/create.test.js +297 -0
  164. package/src/tests/handlers/articles/TranslationHandler.test/create_form.test.js +71 -0
  165. package/src/tests/handlers/articles/TranslationHandler.test/index.test.js +91 -0
  166. package/src/tests/handlers/articles/URLsHandler.test/create.test.js +160 -0
  167. package/src/tests/handlers/articles/URLsHandler.test/create_form.test.js +55 -0
  168. package/src/tests/handlers/categories/create.test.js +94 -0
  169. package/src/tests/handlers/categories/create_form.test.js +26 -0
  170. package/src/tests/handlers/categories/destroy.test.js +57 -0
  171. package/src/tests/handlers/categories/edit_form.test.js +59 -0
  172. package/src/tests/handlers/categories/index.test.js +46 -0
  173. package/src/tests/handlers/categories/update.test.js +88 -0
  174. package/src/tests/handlers/event_revisions/CancelScheduledHandler.test/create.test.js +90 -0
  175. package/src/tests/handlers/event_revisions/CodesHandler.test/edit_form.test.js +60 -0
  176. package/src/tests/handlers/event_revisions/CodesHandler.test/update.test.js +171 -0
  177. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/create.test.js +79 -0
  178. package/src/tests/handlers/event_revisions/EventRevisionsHandler.test/destroy.test.js +57 -0
  179. package/src/tests/handlers/event_revisions/GeneralHandler.test/edit_form.test.js +63 -0
  180. package/src/tests/handlers/event_revisions/GeneralHandler.test/update.test.js +172 -0
  181. package/src/tests/handlers/event_revisions/LocksHandler.test/create.test.js +142 -0
  182. package/src/tests/handlers/event_revisions/LocksHandler.test/create_form.test.js +55 -0
  183. package/src/tests/handlers/event_revisions/MetaHandler.test/edit_form.test.js +60 -0
  184. package/src/tests/handlers/event_revisions/MetaHandler.test/update.test.js +173 -0
  185. package/src/tests/handlers/event_revisions/PublishesHandler.test/create.test.js +333 -0
  186. package/src/tests/handlers/event_revisions/PublishesHandler.test/create_form.test.js +48 -0
  187. package/src/tests/handlers/event_revisions/RevertsHandler.test/create.test.js +83 -0
  188. package/src/tests/handlers/event_revisions/TagHandler.test/edit_form.test.js +76 -0
  189. package/src/tests/handlers/event_revisions/TagHandler.test/update.test.js +163 -0
  190. package/src/tests/handlers/event_revisions/UnlocksHandler.test/create.test.js +84 -0
  191. package/src/tests/handlers/event_revisions/VisualHandler.test.test/edit_form.test.js +60 -0
  192. package/src/tests/handlers/event_revisions/VisualHandler.test.test/update.test.js +156 -0
  193. package/src/tests/handlers/event_revisions/WidgetHandler.test/show.test.js +46 -0
  194. package/src/tests/handlers/event_revisions/WidgetHandler.test/update.test.js +103 -0
  195. package/src/tests/handlers/events/ClonesHandler.test/create.test.js +57 -0
  196. package/src/tests/handlers/events/DeletesHandler.test/create.test.js +115 -0
  197. package/src/tests/handlers/events/DeletesHandler.test/create_form.test.js +60 -0
  198. package/src/tests/handlers/events/EventsHandler.test/create.test.js +172 -0
  199. package/src/tests/handlers/events/EventsHandler.test/create_form.test.js +45 -0
  200. package/src/tests/handlers/events/EventsHandler.test/index.test.js +53 -0
  201. package/src/tests/handlers/events/EventsHandler.test/show.test.js +109 -0
  202. package/src/tests/handlers/events/EventsHistoryHandler.test/index.test.js +87 -0
  203. package/src/tests/handlers/events/TranslationHandler.test/create.test.js +303 -0
  204. package/src/tests/handlers/events/TranslationHandler.test/create_form.test.js +71 -0
  205. package/src/tests/handlers/events/TranslationHandler.test/index.test.js +91 -0
  206. package/src/tests/handlers/events/URLsHandler.test/create.test.js +160 -0
  207. package/src/tests/handlers/events/URLsHandler.test/create_form.test.js +55 -0
  208. package/src/tests/handlers/page_revisions/CancelScheduledHandler.test/create.test.js +86 -0
  209. package/src/tests/handlers/page_revisions/CodesHandler.test/edit_form.test.js +58 -0
  210. package/src/tests/handlers/page_revisions/CodesHandler.test/update.test.js +154 -0
  211. package/src/tests/handlers/page_revisions/GeneralHandler.test/edit_form.test.js +54 -0
  212. package/src/tests/handlers/page_revisions/GeneralHandler.test/update.test.js +166 -0
  213. package/src/tests/handlers/page_revisions/LocksHandler.test/create.test.js +138 -0
  214. package/src/tests/handlers/page_revisions/LocksHandler.test/create_form.test.js +55 -0
  215. package/src/tests/handlers/page_revisions/MetaHandler.test/edit_form.test.js +51 -0
  216. package/src/tests/handlers/page_revisions/MetaHandler.test/update.test.js +159 -0
  217. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/create.test.js +71 -0
  218. package/src/tests/handlers/page_revisions/PageRevisionsHandler.test/destroy.test.js +57 -0
  219. package/src/tests/handlers/page_revisions/PublishesHandler.test/create.test.js +333 -0
  220. package/src/tests/handlers/page_revisions/PublishesHandler.test/create_form.test.js +48 -0
  221. package/src/tests/handlers/page_revisions/RevertsHandler.test/create.test.js +83 -0
  222. package/src/tests/handlers/page_revisions/TagHandler.test/edit_form.test.js +100 -0
  223. package/src/tests/handlers/page_revisions/TagHandler.test/update.test.js +180 -0
  224. package/src/tests/handlers/page_revisions/UnlocksHandler.test/create.test.js +80 -0
  225. package/src/tests/handlers/page_revisions/VisualHandler.test.test/edit_form.test.js +58 -0
  226. package/src/tests/handlers/page_revisions/VisualHandler.test.test/update.test.js +139 -0
  227. package/src/tests/handlers/page_revisions/WidgetHandler.test/show.test.js +46 -0
  228. package/src/tests/handlers/page_revisions/WidgetHandler.test/update.test.js +103 -0
  229. package/src/tests/handlers/pages/ConesHandler.test/create.test.js +57 -0
  230. package/src/tests/handlers/pages/DeletesHandler.test/create.test.js +115 -0
  231. package/src/tests/handlers/pages/DeletesHandler.test/create_form.test.js +60 -0
  232. package/src/tests/handlers/pages/PagesHandler.test/create.test.js +167 -0
  233. package/src/tests/handlers/pages/PagesHandler.test/create_form.test.js +41 -0
  234. package/src/tests/handlers/pages/PagesHandler.test/index.test.js +53 -0
  235. package/src/tests/handlers/pages/PagesHandler.test/show.test.js +107 -0
  236. package/src/tests/handlers/pages/PagesHistoryHandler.test/index.test.js +87 -0
  237. package/src/tests/handlers/pages/TranslationHandler.test/create.test.js +290 -0
  238. package/src/tests/handlers/pages/TranslationHandler.test/create_form.test.js +71 -0
  239. package/src/tests/handlers/pages/TranslationHandler.test/index.test.js +87 -0
  240. package/src/tests/handlers/pages/URLsHandler.test/create.test.js +160 -0
  241. package/src/tests/handlers/pages/URLsHandler.test/create_form.test.js +58 -0
  242. package/src/tests/helpers/AuthHelper.test.js +169 -0
  243. package/src/tests/helpers/FormBuildert.test.js +357 -0
  244. package/src/tests/helpers/HTMLBuilder.test.js +44 -0
  245. package/src/tests/helpers/Inflector.test.js +75 -0
  246. package/src/tests/helpers/Pagination.test.js +65 -0
  247. package/src/tests/helpers/SortButton.test.js +85 -0
  248. package/src/tests/helpers/historyUtils.test.js +107 -0
  249. package/src/tests/helpers/utils.test.js +27 -0
  250. package/src/tests/routeCollection.test.js +163 -0
  251. package/src/tests/routeMember.test.js +97 -0
  252. package/src/tests/routeNestedCollection.test.js +182 -0
  253. package/src/tests/routeNestedMember.test.js +102 -0
  254. package/src/tests/support/factory.js +194 -0
  255. package/src/tests/support/handlersHelper.js +31 -0
  256. package/src/utils.js +30 -0
  257. package/src/views/_auth/login.ejs +82 -0
  258. package/src/views/_shared/_credentials_input.ejs +31 -0
  259. package/src/views/_shared/_layout_input.ejs +5 -0
  260. package/src/views/_shared/_scripts_input.ejs +5 -0
  261. package/src/views/_shared/_structured_json_input.ejs +7 -0
  262. package/src/views/article_revisions/_nav.ejs +44 -0
  263. package/src/views/article_revisions/codes/_form.ejs +13 -0
  264. package/src/views/article_revisions/codes/edit_form.ejs +16 -0
  265. package/src/views/article_revisions/general/_form.ejs +17 -0
  266. package/src/views/article_revisions/general/edit_form.ejs +16 -0
  267. package/src/views/article_revisions/locks/_form.ejs +11 -0
  268. package/src/views/article_revisions/locks/create_form.ejs +27 -0
  269. package/src/views/article_revisions/meta/_form.ejs +15 -0
  270. package/src/views/article_revisions/meta/edit_form.ejs +16 -0
  271. package/src/views/article_revisions/publishes/_form.ejs +70 -0
  272. package/src/views/article_revisions/publishes/create_form.ejs +9 -0
  273. package/src/views/article_revisions/tags/_form.ejs +12 -0
  274. package/src/views/article_revisions/tags/edit_form.ejs +16 -0
  275. package/src/views/article_revisions/visuals/_form.ejs +12 -0
  276. package/src/views/article_revisions/visuals/edit_form.ejs +16 -0
  277. package/src/views/articles/_form.ejs +45 -0
  278. package/src/views/articles/_shared/_history_toolbar.ejs +24 -0
  279. package/src/views/articles/_shared/_revision_toolbar.ejs +68 -0
  280. package/src/views/articles/_shared/_title.ejs +11 -0
  281. package/src/views/articles/_shared/_toolbar.ejs +33 -0
  282. package/src/views/articles/_shared/history_table.ejs +68 -0
  283. package/src/views/articles/create_form.ejs +9 -0
  284. package/src/views/articles/deletes/create_form.ejs +68 -0
  285. package/src/views/articles/history/index.ejs +87 -0
  286. package/src/views/articles/index.ejs +171 -0
  287. package/src/views/articles/show.ejs +234 -0
  288. package/src/views/articles/translations/_translation_toolbar.ejs +18 -0
  289. package/src/views/articles/translations/create_form.ejs +75 -0
  290. package/src/views/articles/translations/index.ejs +39 -0
  291. package/src/views/articles/urls/create_form.ejs +36 -0
  292. package/src/views/categories/_form.ejs +24 -0
  293. package/src/views/categories/create_form.ejs +9 -0
  294. package/src/views/categories/edit_form.ejs +9 -0
  295. package/src/views/categories/index.ejs +35 -0
  296. package/src/views/dashboard/index.ejs +23 -0
  297. package/src/views/event_revisions/_nav.ejs +44 -0
  298. package/src/views/event_revisions/codes/_form.ejs +13 -0
  299. package/src/views/event_revisions/codes/edit_form.ejs +16 -0
  300. package/src/views/event_revisions/general/_form.ejs +19 -0
  301. package/src/views/event_revisions/general/edit_form.ejs +16 -0
  302. package/src/views/event_revisions/locks/_form.ejs +11 -0
  303. package/src/views/event_revisions/locks/create_form.ejs +27 -0
  304. package/src/views/event_revisions/meta/_form.ejs +15 -0
  305. package/src/views/event_revisions/meta/edit_form.ejs +16 -0
  306. package/src/views/event_revisions/publishes/_form.ejs +77 -0
  307. package/src/views/event_revisions/publishes/create_form.ejs +9 -0
  308. package/src/views/event_revisions/tags/_form.ejs +12 -0
  309. package/src/views/event_revisions/tags/edit_form.ejs +16 -0
  310. package/src/views/event_revisions/visuals/_form.ejs +12 -0
  311. package/src/views/event_revisions/visuals/edit_form.ejs +16 -0
  312. package/src/views/events/_form.ejs +47 -0
  313. package/src/views/events/_shared/_history_toolbar.ejs +24 -0
  314. package/src/views/events/_shared/_revision_toolbar.ejs +68 -0
  315. package/src/views/events/_shared/_title.ejs +12 -0
  316. package/src/views/events/_shared/_toolbar.ejs +33 -0
  317. package/src/views/events/_shared/history_table.ejs +68 -0
  318. package/src/views/events/create_form.ejs +9 -0
  319. package/src/views/events/deletes/create_form.ejs +68 -0
  320. package/src/views/events/history/index.ejs +87 -0
  321. package/src/views/events/index.ejs +171 -0
  322. package/src/views/events/show.ejs +234 -0
  323. package/src/views/events/translations/_translation_toolbar.ejs +18 -0
  324. package/src/views/events/translations/create_form.ejs +75 -0
  325. package/src/views/events/translations/index.ejs +39 -0
  326. package/src/views/events/urls/create_form.ejs +36 -0
  327. package/src/views/layouts/application.ejs +239 -0
  328. package/src/views/layouts/header.ejs +47 -0
  329. package/src/views/page_revisions/_nav.ejs +44 -0
  330. package/src/views/page_revisions/codes/_form.ejs +13 -0
  331. package/src/views/page_revisions/codes/edit_form.ejs +16 -0
  332. package/src/views/page_revisions/general/_form.ejs +16 -0
  333. package/src/views/page_revisions/general/edit_form.ejs +16 -0
  334. package/src/views/page_revisions/locks/_form.ejs +11 -0
  335. package/src/views/page_revisions/locks/create_form.ejs +27 -0
  336. package/src/views/page_revisions/meta/_form.ejs +15 -0
  337. package/src/views/page_revisions/meta/edit_form.ejs +16 -0
  338. package/src/views/page_revisions/publishes/_form.ejs +76 -0
  339. package/src/views/page_revisions/publishes/create_form.ejs +9 -0
  340. package/src/views/page_revisions/tags/_form.ejs +12 -0
  341. package/src/views/page_revisions/tags/edit_form.ejs +21 -0
  342. package/src/views/page_revisions/visuals/_form.ejs +12 -0
  343. package/src/views/page_revisions/visuals/edit_form.ejs +16 -0
  344. package/src/views/pages/_form.ejs +44 -0
  345. package/src/views/pages/_shared/_history_toolbar.ejs +24 -0
  346. package/src/views/pages/_shared/_revision_toolbar.ejs +68 -0
  347. package/src/views/pages/_shared/_title.ejs +12 -0
  348. package/src/views/pages/_shared/_toolbar.ejs +33 -0
  349. package/src/views/pages/_shared/history_table.ejs +68 -0
  350. package/src/views/pages/create_form.ejs +9 -0
  351. package/src/views/pages/deletes/create_form.ejs +68 -0
  352. package/src/views/pages/history/index.ejs +87 -0
  353. package/src/views/pages/index.ejs +166 -0
  354. package/src/views/pages/show.ejs +235 -0
  355. package/src/views/pages/translations/_translation_toolbar.ejs +18 -0
  356. package/src/views/pages/translations/create_form.ejs +75 -0
  357. package/src/views/pages/translations/index.ejs +39 -0
  358. package/src/views/pages/urls/create_form.ejs +36 -0
  359. package/src/views/redirects/_form.ejs +26 -0
  360. package/src/views/redirects/create_form.ejs +9 -0
  361. package/src/views/redirects/edit_form.ejs +9 -0
  362. package/src/views/redirects/index.ejs +75 -0
  363. package/src/views/redirects/show.ejs +60 -0
  364. package/src/views/settings/_nav.ejs +22 -0
  365. package/src/views/settings/layout/edit_form.ejs +58 -0
  366. package/src/views/settings/meta/edit_form.ejs +24 -0
  367. package/src/views/tags/_form.ejs +25 -0
  368. package/src/views/tags/create_form.ejs +9 -0
  369. package/src/views/tags/edit_form.ejs +9 -0
  370. package/src/views/tags/index.ejs +43 -0
@@ -0,0 +1,27 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">Lock revision</h1>
4
+ </div>
5
+
6
+ <div class="grid gap-4 md:grid-cols-3">
7
+ <div>
8
+ <%- render_partial('_form.ejs') %>
9
+ </div>
10
+
11
+ <div>
12
+ <div class="help">
13
+ <div class="mb-2 flex items-center gap-1">
14
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
15
+ <path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" />
16
+ </svg>
17
+
18
+ <h3 class="heading-3">How to lock a revision?</h3>
19
+ </div>
20
+
21
+ <div class="markdown">
22
+ <p>You can lock a revision to prevent publishing or deletion by anyone, including yourself. When locking, provide a clear, informative message explaining the reason. Remember that while this feature is designed to facilitate collaboration, any user can still unlock the revision.</p>
23
+ </div>
24
+ </div>
25
+ </div>
26
+ </div>
27
+ </div>
@@ -0,0 +1,15 @@
1
+ <% form_for({ resource }, errors, (f) => { %>
2
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${resource.id}/meta` %>" method="POST" class="form">
3
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title", hint: "Used for both meta and OpenGraph" }) %>
4
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description", hint: "Used for both meta and OpenGraph" }) %>
5
+
6
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="OpenGraph image"></raketa-image-picker>
7
+
8
+ <div class="form-actions">
9
+ <div class="btn-toolbar">
10
+ <%- f.submit('Save changes', { class: 'btn-primary' }) %>
11
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
12
+ </div>
13
+ </div>
14
+ </form>
15
+ <% }) %>
@@ -0,0 +1,16 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">
4
+ <span class="opacity-50">OpenGraph & Meta tags / </span>
5
+ <%= resource.title %>
6
+ </h1>
7
+ </div>
8
+
9
+ <%- render_partial('../_nav.ejs', { resource, active: 'meta' }) %>
10
+
11
+ <div class="grid gap-4 md:grid-cols-3">
12
+ <div>
13
+ <%- render_partial('_form.ejs') %>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,77 @@
1
+ <% form_for({ publishing }, errors, (f) => { %>
2
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${publishing.id}/publishes` %>" method="post" class="form">
3
+ <% if (errors.slug) { %>
4
+ <div class="mb-4 text-red-500">A page with this URL already exists</div>
5
+ <% } %>
6
+
7
+ <%- f.field('publishing.type', { as: 'radio_group', label: "", options: [["now", "Publish now"], ["later", "Schedule for a date"]] }) %>
8
+ <%- f.field('publishing.mergeAt', { type: 'datetime-local', label: 'Publish revision at (UTC)' }) %>
9
+
10
+ <%- f.field('publishing.title'), { required: true, hint: "Appears in the history of changes" } %>
11
+ <%- f.field('publishing.description', { as: "textarea", hint: "Provide optional details" }) %>
12
+ <%- f.field('publishing.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
13
+ <%- f.field('publishing.username', { required: true }) %>
14
+ <%- f.field('publishing.password', { required: true }) %>
15
+
16
+ <div class="form-actions">
17
+ <div class="btn-toolbar">
18
+ <%- f.submit('Save record', { class: 'btn-primary' }) %>
19
+
20
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${publishing.originalId}` %>" class="btn-secondary">Back</a>
21
+ </div>
22
+ </div>
23
+ </form>
24
+ <% }) %>
25
+
26
+
27
+ <script>
28
+ // Takes care of the publishint time!
29
+ const typeEl = document.getElementById("f_publishing_type")
30
+ const mergeAtEl = document.getElementById("f_publishing_mergeAt")
31
+
32
+ function radioGroupValue(radioGroup) {
33
+ let val = "";
34
+
35
+ radioGroup.querySelectorAll('input[type="radio"]').forEach(input => {
36
+
37
+ if (input.checked) {
38
+ val = input.value
39
+ }
40
+
41
+ })
42
+
43
+ return val;
44
+ }
45
+
46
+ function handleTypeChange(value) {
47
+ const shouldShowMergeAt = value === "later"
48
+
49
+ if (shouldShowMergeAt) {
50
+ mergeAtEl.parentNode.classList.remove('hidden')
51
+ } else {
52
+ mergeAtEl.parentNode.classList.add('hidden')
53
+ }
54
+ }
55
+
56
+ typeEl.addEventListener("change", (e) => handleTypeChange(e.target.value))
57
+ handleTypeChange(radioGroupValue(typeEl))
58
+ </script>
59
+
60
+ <script>
61
+ const visibilityEl = document.getElementById("f_publishing_visibility");
62
+ const usernameEl = document.getElementById("f_publishing_username").parentElement;
63
+ const passwordEl = document.getElementById("f_publishing_password").parentElement;
64
+
65
+ function handleVisibilityChange(value) {
66
+ const isHidden = value !== "protected";
67
+
68
+ usernameEl.classList.toggle('hidden', isHidden);
69
+ passwordEl.classList.toggle('hidden', isHidden);
70
+
71
+ usernameEl.querySelector('input').toggleAttribute('required', !isHidden);
72
+ passwordEl.querySelector('input').toggleAttribute('required', !isHidden);
73
+ }
74
+
75
+ visibilityEl.addEventListener("change", (e) => handleVisibilityChange(e.target.value));
76
+ handleVisibilityChange(visibilityEl.value);
77
+ </script>
@@ -0,0 +1,9 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">Publish revision</h1>
4
+ </div>
5
+
6
+ <div class="grid gap-4 md:grid-cols-3">
7
+ <%- render_partial('_form.ejs') %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,12 @@
1
+ <% form_for({ resource }, errors, (f) => { %>
2
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${resource.id}/tags` %>" method="POST" class="form">
3
+ <%- f.field('resource.tags', { as: 'checkbox_group', options: tags.map(tag => [tag.id, tag.name]) }) %>
4
+
5
+ <div class="form-actions">
6
+ <div class="btn-toolbar">
7
+ <%- f.submit('Save changes', { class: 'btn-primary' }) %>
8
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
9
+ </div>
10
+ </div>
11
+ </form>
12
+ <% }) %>
@@ -0,0 +1,16 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">
4
+ <span class="opacity-50">Tags / </span>
5
+ <%= resource.title %>
6
+ </h1>
7
+ </div>
8
+
9
+ <%- render_partial('../_nav.ejs', { resource, active: 'tags' }) %>
10
+
11
+ <div class="grid gap-4 md:grid-cols-3">
12
+ <div>
13
+ <%- render_partial('_form.ejs', { tags: tags }) %>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,12 @@
1
+ <% form_for({ resource }, errors, (f) => { %>
2
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${resource.id}/visuals` %>" method="POST" class="form">
3
+ <%- include('../../_shared/_layout_input.ejs', { f }) %>
4
+
5
+ <div class="form-actions">
6
+ <div class="btn-toolbar">
7
+ <%- f.submit('Save changes', { class: 'btn-primary' }) %>
8
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.originalId}` %>" class="btn-secondary">Back</a>
9
+ </div>
10
+ </div>
11
+ </form>
12
+ <% }) %>
@@ -0,0 +1,16 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">
4
+ <span class="opacity-50">Visuals / </span>
5
+ <%= resource.title %>
6
+ </h1>
7
+ </div>
8
+
9
+ <%- render_partial('../_nav.ejs', { resource, active: 'visuals' }) %>
10
+
11
+ <div class="grid gap-4 md:grid-cols-3">
12
+ <div>
13
+ <%- render_partial('_form.ejs') %>
14
+ </div>
15
+ </div>
16
+ </div>
@@ -0,0 +1,47 @@
1
+ <% form_for({ resource }, errors, (f) => { %>
2
+ <form action="<%= resource?.id ? `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}` : `/${_context.locale}/${_context.resourceConfig.eventTypePlural}` %>" method="post" class="form">
3
+ <h2 class="heading-2 mb-4">General</h2>
4
+
5
+ <%- f.field('resource.title', { required: true }) %>
6
+ <%- f.field('resource.slug', { label: "URL", required: true, hint: "Only lowercase letters, numbers and dash allowed. Ex: celebrate-friday-13" }) %>
7
+ <%- f.field('resource.publishAt', { required: true, type: 'datetime-local', label: 'Publish at (UTC)' }) %>
8
+ <%- f.field('resource.startsAt', { required: true, type: 'datetime-local', label: 'Starts at (UTC)' }) %>
9
+ <%- f.field('resource.endsAt', { required: true, type: 'datetime-local', label: 'Ends at (UTC)' }) %>
10
+ <%- f.field('resource.visibility', { as: 'select', required: true, options: visibilityOptions }) %>
11
+
12
+ <%- include('../_shared/_credentials_input.ejs', { f, visibilityFieldId: "f_resource_visibility"}) %>
13
+
14
+ <h2 class="heading-2 my-4">Visuals</h2>
15
+
16
+ <%- include('../_shared/_layout_input.ejs', { f }) %>
17
+
18
+ <h2 class="heading-2 my-4">OpenGraph & Meta tags</h2>
19
+
20
+ <%- f.field('resource.settings.meta.title', { required: true, label: "Meta title", hint: "Used for both meta and OpenGraph" }) %>
21
+ <%- f.field('resource.settings.meta.description', { as: "textarea", required: true, label: "Meta description", hint: "Used for both meta and OpenGraph" }) %>
22
+
23
+ <raketa-image-picker name="resource[settings][meta][image]" value="<%= JSON.stringify(resource.settings?.meta?.image || {}) %>" label="OpenGraph image"></raketa-image-picker>
24
+
25
+ <h2 class="heading-2 my-4">Content tags</h2>
26
+
27
+ <%- f.field('resource.tags', { as: 'checkbox_group', options: tags.map(tag => [tag.id, tag.name]) }) %>
28
+
29
+ <div class="form-actions">
30
+ <div class="btn-toolbar">
31
+ <%- f.submit('Save record', { class: 'btn-primary' }) %>
32
+
33
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}` %>" class="btn-secondary">Back to list</a>
34
+ </div>
35
+
36
+ <% if (resource?.id) {%>
37
+ <button hx-delete="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}` %>" hx-confirm="Are you sure?" class="btn-danger has-icon">
38
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
39
+ <path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
40
+ </svg>
41
+
42
+ Delete record
43
+ </button>
44
+ <% } %>
45
+ </div>
46
+ </form>
47
+ <% }) %>
@@ -0,0 +1,24 @@
1
+ <div class="actions-toolbar justify-end">
2
+ <form method="POST" action="<%= `/${_context.locale}/${_context.resourceConfig.pageTypePlural}/${resource.id}/${_context.resourceConfig.pageType}_changes/reverts` %>" class="inline-block">
3
+ <input type="hidden" name="version" value="<%= change.version %>">
4
+
5
+ <% if (history.isChangeRevertable(change, maxVersion)) { %>
6
+ <button type="submit" class="btn-text">
7
+ Revert
8
+ </button>
9
+ <% } else { %>
10
+ <button type="submit" disabled class="btn-text opacity-50 cursor-not-allowed">
11
+ Revert
12
+ </button>
13
+ <% } %>
14
+ </form>
15
+
16
+ <a href="/remote/login?redirect_to=/<%= _context.locale %>/admin/<%= _context.resourceConfig.eventTypePlural %>/<%= resource.id %>/changes/<%= change.version %>" class="btn-text has-icon">
17
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
18
+ <path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z" />
19
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
20
+ </svg>
21
+
22
+ Preview
23
+ </a>
24
+ </div>
@@ -0,0 +1,68 @@
1
+ <div class="actions-toolbar justify-end">
2
+ <a href="/remote/login?redirect_to=/<%= _context.locale %>/admin/<%= _context.resourceConfig.eventType %>-revisions/<%= revision.id %>/builder" class="btn-text has-icon <%= revision.meta && revision.meta.locked ? 'cursor-not-allowed text-gray-400 pointer-events-none' : '' %>">
3
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
4
+ <path stroke-linecap="round" stroke-linejoin="round" d="m16.862 4.487 1.687-1.688a1.875 1.875 0 1 1 2.652 2.652L6.832 19.82a4.5 4.5 0 0 1-1.897 1.13l-2.685.8.8-2.685a4.5 4.5 0 0 1 1.13-1.897L16.863 4.487Zm0 0L19.5 7.125" />
5
+ </svg>
6
+ Edit content
7
+ </a>
8
+
9
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}/general/edit` %>" class="btn-text has-icon <%= revision.meta && revision.meta.locked ? 'cursor-not-allowed text-gray-400 pointer-events-none' : '' %>">
10
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
11
+ <path stroke-linecap="round" stroke-linejoin="round" d="M10.343 3.94c.09-.542.56-.94 1.11-.94h1.093c.55 0 1.02.398 1.11.94l.149.894c.07.424.384.764.78.93.398.164.855.142 1.205-.108l.737-.527a1.125 1.125 0 0 1 1.45.12l.773.774c.39.389.44 1.002.12 1.45l-.527.737c-.25.35-.272.806-.107 1.204.165.397.505.71.93.78l.893.15c.543.09.94.559.94 1.109v1.094c0 .55-.397 1.02-.94 1.11l-.894.149c-.424.07-.764.383-.929.78-.165.398-.143.854.107 1.204l.527.738c.32.447.269 1.06-.12 1.45l-.774.773a1.125 1.125 0 0 1-1.449.12l-.738-.527c-.35-.25-.806-.272-1.203-.107-.398.165-.71.505-.781.929l-.149.894c-.09.542-.56.94-1.11.94h-1.094c-.55 0-1.019-.398-1.11-.94l-.148-.894c-.071-.424-.384-.764-.781-.93-.398-.164-.854-.142-1.204.108l-.738.527c-.447.32-1.06.269-1.45-.12l-.773-.774a1.125 1.125 0 0 1-.12-1.45l.527-.737c.25-.35.272-.806.108-1.204-.165-.397-.506-.71-.93-.78l-.894-.15c-.542-.09-.94-.56-.94-1.109v-1.094c0-.55.398-1.02.94-1.11l.894-.149c.424-.07.765-.383.93-.78.165-.398.143-.854-.108-1.204l-.526-.738a1.125 1.125 0 0 1 .12-1.45l.773-.773a1.125 1.125 0 0 1 1.45-.12l.737.527c.35.25.807.272 1.204.107.397-.165.71-.505.78-.929l.15-.894Z" />
12
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
13
+ </svg>
14
+
15
+ Edit settings
16
+ </a>
17
+
18
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}/publishes/new` %>" class="btn-text has-icon <%= revision.meta && revision.meta.locked ? 'cursor-not-allowed text-gray-400 pointer-events-none' : '' %>">
19
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
20
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15.59 14.37a6 6 0 0 1-5.84 7.38v-4.8m5.84-2.58a14.98 14.98 0 0 0 6.16-12.12A14.98 14.98 0 0 0 9.631 8.41m5.96 5.96a14.926 14.926 0 0 1-5.841 2.58m-.119-8.54a6 6 0 0 0-7.381 5.84h4.8m2.581-5.84a14.927 14.927 0 0 0-2.58 5.84m2.699 2.7c-.103.021-.207.041-.311.06a15.09 15.09 0 0 1-2.448-2.448 14.9 14.9 0 0 1 .06-.312m-2.24 2.39a4.493 4.493 0 0 0-1.757 4.306 4.493 4.493 0 0 0 4.306-1.758M16.5 9a1.5 1.5 0 1 1-3 0 1.5 1.5 0 0 1 3 0Z" />
21
+ </svg>
22
+
23
+ Publish
24
+ </a>
25
+
26
+ <details class="unstyled-details">
27
+ <summary class="cursor-pointer">
28
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6">
29
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 6.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 12.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5ZM12 18.75a.75.75 0 1 1 0-1.5.75.75 0 0 1 0 1.5Z" />
30
+ </svg>
31
+ </summary>
32
+
33
+ <div class="absolute border bg-raketa-background p-4 right-4 z-20 mt-2 flex flex-col gap-4 shadow-md rounded dark:border-neutral-500">
34
+ <a href="/remote/login?redirect_to=/<%= _context.locale %>/admin/<%= _context.resourceConfig.eventType %>-revisions/<%= revision.id %>/preview" target="_blank" class="btn-text has-icon <%= revision.meta && revision.meta.locked ? 'cursor-not-allowed text-gray-400 pointer-events-none' : '' %>">
35
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
36
+ <path stroke-linecap="round" stroke-linejoin="round" d="M2.036 12.322a1.012 1.012 0 0 1 0-.639C3.423 7.51 7.36 4.5 12 4.5c4.638 0 8.573 3.007 9.963 7.178.07.207.07.431 0 .639C20.577 16.49 16.64 19.5 12 19.5c-4.638 0-8.573-3.007-9.963-7.178Z" />
37
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
38
+ </svg>
39
+
40
+ Preview
41
+ </a>
42
+
43
+ <% if (revision.meta && revision.meta.locked) { %>
44
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}/unlocks` %>" method="post" class="inline-flex gap-2 items-center">
45
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
46
+ <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 10.5V6.75a4.5 4.5 0 1 1 9 0v3.75M3.75 21.75h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H3.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" />
47
+ </svg>
48
+ <%- f.submit('Unlock', { class: 'btn-text' }) %>
49
+ </form>
50
+ <% } else { %>
51
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}/locks/new` %>" class="btn-text has-icon">
52
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
53
+ <path stroke-linecap="round" stroke-linejoin="round" d="M16.5 10.5V6.75a4.5 4.5 0 1 0-9 0v3.75m-.75 11.25h10.5a2.25 2.25 0 0 0 2.25-2.25v-6.75a2.25 2.25 0 0 0-2.25-2.25H6.75a2.25 2.25 0 0 0-2.25 2.25v6.75a2.25 2.25 0 0 0 2.25 2.25Z" />
54
+ </svg>
55
+ Lock
56
+ </a>
57
+ <% } %>
58
+
59
+ <button hx-delete="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}` %>" hx-confirm="Are you sure?" type="button" class="btn-danger has-icon <%= revision.meta && revision.meta.locked ? 'cursor-not-allowed text-gray-400 pointer-events-none' : '' %>">
60
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
61
+ <path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
62
+ </svg>
63
+
64
+ Delete
65
+ </button>
66
+ </div>
67
+ </details>
68
+ </div>
@@ -0,0 +1,12 @@
1
+ <h1 class="heading-1 flex items-center gap-2">
2
+ <%= resource.title %>
3
+
4
+ <% if (resource.visibility !== "private") { %>
5
+ <a href="<%= _context.remoteConfig.resourceUrl(resource, _context.resourceConfig.eventType, _context.locale) %>" target="_blank">
6
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-6 text-raketa-primary">
7
+ <path stroke-linecap="round" stroke-linejoin="round" d="M13.5 6H5.25A2.25 2.25 0 0 0 3 8.25v10.5A2.25 2.25 0 0 0 5.25 21h10.5A2.25 2.25 0 0 0 18 18.75V10.5m-10.5 6L21 3m0 0h-5.25M21 3v5.25" />
8
+ </svg>
9
+ </a>
10
+ <% } %>
11
+ </h1>
12
+
@@ -0,0 +1,33 @@
1
+ <div class="actions-toolbar">
2
+ <form method="POST" action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/${_context.resourceConfig.eventType}_revisions` %>" class="inline-block">
3
+ <button type="submit" class="btn-primary">
4
+ Start revision
5
+ </button>
6
+ </form>
7
+
8
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/urls/new` %>" class="btn-text has-icon">
9
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
10
+ <path stroke-linecap="round" stroke-linejoin="round" d="M13.19 8.688a4.5 4.5 0 0 1 1.242 7.244l-4.5 4.5a4.5 4.5 0 0 1-6.364-6.364l1.757-1.757m13.35-.622 1.757-1.757a4.5 4.5 0 0 0-6.364-6.364l-4.5 4.5a4.5 4.5 0 0 0 1.242 7.244" />
11
+ </svg>
12
+
13
+ Change URL
14
+ </a>
15
+
16
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/clones` %>" method="post" class="inline-block">
17
+ <button type="submit" class="btn-text has-icon">
18
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
19
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15.75 17.25v3.375c0 .621-.504 1.125-1.125 1.125h-9.75a1.125 1.125 0 0 1-1.125-1.125V7.875c0-.621.504-1.125 1.125-1.125H6.75a9.06 9.06 0 0 1 1.5.124m7.5 10.376h3.375c.621 0 1.125-.504 1.125-1.125V11.25c0-4.46-3.243-8.161-7.5-8.876a9.06 9.06 0 0 0-1.5-.124H9.375c-.621 0-1.125.504-1.125 1.125v3.5m7.5 10.375H9.375a1.125 1.125 0 0 1-1.125-1.125v-9.25m12 6.625v-1.875a3.375 3.375 0 0 0-3.375-3.375h-1.5a1.125 1.125 0 0 1-1.125-1.125v-1.5a3.375 3.375 0 0 0-3.375-3.375H9.75" />
20
+ </svg>
21
+
22
+ Clone <%= Inflector.humanize(Inflector.downcase(_context.resourceConfig.eventType)) %>
23
+ </button>
24
+ </form>
25
+
26
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/deletes/new` %>" class="btn-danger has-icon">
27
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
28
+ <path stroke-linecap="round" stroke-linejoin="round" d="m14.74 9-.346 9m-4.788 0L9.26 9m9.968-3.21c.342.052.682.107 1.022.166m-1.022-.165L18.16 19.673a2.25 2.25 0 0 1-2.244 2.077H8.084a2.25 2.25 0 0 1-2.244-2.077L4.772 5.79m14.456 0a48.108 48.108 0 0 0-3.478-.397m-12 .562c.34-.059.68-.114 1.022-.165m0 0a48.11 48.11 0 0 1 3.478-.397m7.5 0v-.916c0-1.18-.91-2.164-2.09-2.201a51.964 51.964 0 0 0-3.32 0c-1.18.037-2.09 1.022-2.09 2.201v.916m7.5 0a48.667 48.667 0 0 0-7.5 0" />
29
+ </svg>
30
+
31
+ Delete <%= Inflector.humanize(Inflector.downcase(_context.resourceConfig.eventType)) %>
32
+ </a>
33
+ </div>
@@ -0,0 +1,68 @@
1
+ <% const maxVersion = history.getMaxVersion(changes); %>
2
+
3
+ <div class="history-table-wrapper mb-4">
4
+ <table class="data-grid">
5
+ <thead>
6
+ <tr>
7
+ <th>#</th>
8
+ <th>Date of change</th>
9
+ <th>Editor</th>
10
+ <th>Action</th>
11
+ <th>Reason</th>
12
+ <th>&nbsp;</th>
13
+ </tr>
14
+ </thead>
15
+
16
+ <tbody>
17
+ <% changes.list.forEach((change)=> { %>
18
+ <tr class="border-b border-mono-25">
19
+ <td class="py-4 pl-2">
20
+ <div class="flex items-center gap-2">
21
+ <%= change.version %>
22
+ </div>
23
+ </td>
24
+
25
+ <td class="whitespace-nowrap">
26
+ <div class="body-3 text-raketa-foreground/50">
27
+ <div class="flex items-center gap-1">
28
+ <time data-pretty-datetime datetime="<%= change.insertedAt %>"><%= change.insertedAt %></time>
29
+ </div>
30
+ </div>
31
+ </td>
32
+
33
+ <td class="whitespace-nowrap">
34
+ <div class="body-3 text-raketa-foreground/50">
35
+ <div class="flex items-center gap-1" title="<%= change.operatorMeta.name %>">
36
+ <% if (change.operatorMeta.avatar) { %>
37
+ <img src="<%= change.operatorMeta.avatar %>" class="size-4 rounded-full">
38
+ <% } %>
39
+
40
+ <%= change.operatorMeta.name %>
41
+ </div>
42
+ </div>
43
+ </td>
44
+
45
+ <td class="py-4 pl-2">
46
+ <div class="flex items-center gap-2">
47
+ <%= history.changeAction(change, _context.resourceConfig.eventType) %>
48
+ </div>
49
+ </td>
50
+
51
+ <td class="py-4 pl-2">
52
+ <div class="flex items-center gap-2">
53
+ <%= history.changeReason(change) %>
54
+ </div>
55
+ </td>
56
+
57
+ <td>
58
+ <%- render_partial(toolbarPath, { maxVersion, change }) %>
59
+ </td>
60
+ </tr>
61
+ <% }); %>
62
+ </tbody>
63
+ </table>
64
+
65
+ <% if (!skipPagination) { %>
66
+ <%- pagination(changes.pagination, _context) %>
67
+ <% } %>
68
+ </div>
@@ -0,0 +1,9 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">Create <%= Inflector.humanize(Inflector.downcase(_context.resourceConfig.eventType)) %></h1>
4
+ </div>
5
+
6
+ <div class="grid gap-4 md:grid-cols-3">
7
+ <%- render_partial('_form.ejs') %>
8
+ </div>
9
+ </div>
@@ -0,0 +1,68 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1">
4
+ <span class="opacity-50">Delete / </span>
5
+ <%= event.title %>
6
+ </h1>
7
+ </div>
8
+
9
+ <div class="grid gap-4 md:grid-cols-3">
10
+ <div>
11
+ <% form_for({ resource }, errors, (f) => { %>
12
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/deletes` %>" method="POST" class="form">
13
+ <%- f.field('resource.redirect', { as: 'select', required: true,options: [['301', '301: Redirect to another page'], ['404', '404: Return an error'],['410', '410: Inform Google to remove the content from its index']] }) %>
14
+ <%- f.field('resource.destination', {label: 'Destination URL', required: true}) %>
15
+
16
+ <div class="form-actions">
17
+ <div class="btn-toolbar">
18
+ <%- f.submit('Proceed', { class: 'btn-primary' }) %>
19
+ <a href="<%=`/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}`%>" class="btn-secondary">Back</a>
20
+ </div>
21
+ </div>
22
+ </form>
23
+ <% }) %>
24
+ </div>
25
+
26
+ <div>
27
+ <div class="help">
28
+ <div class="mb-2 flex items-center gap-1">
29
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
30
+ <path stroke-linecap="round" stroke-linejoin="round" d="m11.25 11.25.041-.02a.75.75 0 0 1 1.063.852l-.708 2.836a.75.75 0 0 0 1.063.853l.041-.021M21 12a9 9 0 1 1-18 0 9 9 0 0 1 18 0Zm-9-3.75h.008v.008H12V8.25Z" />
31
+ </svg>
32
+
33
+ <h3 class="heading-3">How to safely retire a page?</h3>
34
+ </div>
35
+
36
+ <div class="markdown">
37
+ <p>Warning: Deleting a page can break existing links. To mitigate this, choose one of these options:</p>
38
+
39
+ <ol>
40
+ <li>Create a redirect to another page</li>
41
+ <li>Set a 410 response to signal Google to remove the page from its index</li>
42
+ <li>Use a 404 response only if absolutely certain</li>
43
+ </ol>
44
+
45
+ <p>In all cases, the current content will be deleted and forgotten like tears in rain — a moment lost in time. You might also consider changing the visibility of the page to private, which will preserve the content but hide it from end users.</p>
46
+ </div>
47
+ </div>
48
+ </div>
49
+ </div>
50
+ </div>
51
+
52
+ <script>
53
+ function onDestinationChange(event) {
54
+ const newValue = event.target.value;
55
+ const requiresRedirect = newValue === "301"
56
+
57
+ document.getElementById("f_resource_destination").parentElement.style.display = requiresRedirect ? "block" : "none";
58
+ document.getElementById("f_resource_destination").required = requiresRedirect;
59
+ }
60
+
61
+ onDestinationChange({
62
+ target: {
63
+ value: '<%= resource.redirect %>'
64
+ }
65
+ })
66
+
67
+ document.getElementById("f_resource_redirect").addEventListener("change", onDestinationChange)
68
+ </script>