@raketa-cloud/admin 0.0.102 → 1.0.0

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 +53 -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 +80 -0
  286. package/src/views/articles/index.ejs +164 -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 +53 -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 +80 -0
  321. package/src/views/events/index.ejs +164 -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 +276 -0
  328. package/src/views/layouts/header.ejs +47 -0
  329. package/src/views/page_revisions/_nav.ejs +53 -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 +80 -0
  353. package/src/views/pages/index.ejs +159 -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,80 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <div>
4
+ <h1 class="heading-1">Events / History of changes</h1>
5
+ <span class="body-2 opacity-50"><%= %></span>
6
+ </div>
7
+
8
+ <div class="actions-toolbar">
9
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}` %>" class="btn-text">Back</a>
10
+ <button type="button" data-toggle-sidebar="1" class="p-2.5 rounded hover:bg-neutral-200 transition-all duration-300 ease-in-out dark:hover:bg-neutral-700">
11
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
12
+ <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
13
+ </svg>
14
+ </button>
15
+ </div>
16
+ </div>
17
+
18
+ <%- render_partial('../_shared/history_table.ejs', {
19
+ changes,
20
+ resource,
21
+ _context,
22
+ render_partial,
23
+ skipPagination: false,
24
+ toolbarPath: '../_shared/_history_toolbar.ejs'
25
+ }) %>
26
+
27
+ </div>
28
+
29
+ <div data-sidebar="1" class="search-sidebar <%= Object.keys(_context.query).some(k => k.startsWith('f:')) ? '' : 'hidden' %>">
30
+ <span class="heading-2">Search by</span>
31
+
32
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/history` %>" method="GET" class="form mt-4">
33
+ <input type="hidden" name="order_direction" value="<%= _context.query.order_direction %>" />
34
+ <input type="hidden" name="order_by" value="<%= _context.query.order_by %>" />
35
+
36
+ <div class="mb-4">
37
+ <label for="date_from" class="font-semibold hover:cursor-pointer body-3">From</label>
38
+ <input type="date" name="f:date_from" value="<%= _context.query["f:date_from"] %>" />
39
+ </div>
40
+
41
+ <div class="mb-4">
42
+ <label for="date_to" class="font-semibold hover:cursor-pointer body-3">To</label>
43
+ <input type="date" name="f:date_to" value="<%= _context.query["f:date_to"] %>" />
44
+ </div>
45
+
46
+ <div class="mb-4">
47
+ <%- f.field('f:operator', {
48
+ as: 'select',
49
+ options: editors.map(editor => [editor.id, editor.name]),
50
+ label: "Editor",
51
+ include_blank: 'All Editors',
52
+ value: _context.query["f:operator"]
53
+ }) %>
54
+ </div>
55
+
56
+ <div class="mb-4">
57
+ <label for="" class="font-semibold hover:cursor-pointer body-3">Changes</label>
58
+ <div class="checkbox-group mb-4">
59
+ <% Object.entries(history.changeTypes(_context.resourceConfig.eventType)).forEach(([key, {label}])=> { %>
60
+ <div class="flex items-center gap-1">
61
+ <% if (utils.includedInCollection(key, _context.query["f:change_type"])) { %>
62
+ <input type="checkbox" name="f:change_type" id='change-<%= key %>' checked value="<%= key %>" class="hover:cursor-pointer">
63
+ <% } else { %>
64
+ <input type="checkbox" name="f:change_type" id='change-<%= key %>' value="<%= key %>" class="hover:cursor-pointer">
65
+ <% } %>
66
+ <label for='change-<%= key %>' class="body-2 hover:cursor-pointer">
67
+ <%= label %>
68
+ </label>
69
+ </div>
70
+ <% }); %>
71
+ </div>
72
+ </div>
73
+
74
+ <div class="btn-toolbar">
75
+ <button type="submit" class="btn-primary">Search</button>
76
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/history` %>" class="btn-text">Clear search</a>
77
+ </div>
78
+ </form>
79
+ </div>
80
+
@@ -0,0 +1,164 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <h1 class="heading-1"><%= Inflector.humanize(Inflector.capitalize(_context.resourceConfig.eventTypePlural)) %></h1>
4
+
5
+ <div class="actions-toolbar">
6
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/new` %>" class="btn-primary">
7
+ Create new
8
+ </a>
9
+
10
+ <button type="button" data-toggle-sidebar="1" class="p-2.5 rounded hover:bg-neutral-200 transition-all duration-300 ease-in-out dark:hover:bg-neutral-700">
11
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
12
+ <path stroke-linecap="round" stroke-linejoin="round" d="m21 21-5.197-5.197m0 0A7.5 7.5 0 1 0 5.196 5.196a7.5 7.5 0 0 0 10.607 10.607Z" />
13
+ </svg>
14
+ </button>
15
+ </div>
16
+ </div>
17
+
18
+ <table class="data-grid">
19
+ <thead>
20
+ <tr>
21
+ <th><%- sort_button("Title", "title", _context) %></th>
22
+ <th>Visibility</th>
23
+ <th><%- sort_button("Publish at", "publish_at", _context) %></th>
24
+ <th><%- sort_button("Last change", "updated_at", _context) %></th>
25
+ <th>Translations</th>
26
+ </tr>
27
+ </thead>
28
+
29
+ <tbody>
30
+ <% items.list.forEach((item, idx)=> { %>
31
+ <tr>
32
+ <td class="w-1/2">
33
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${item.id}` %>" class="btn-text mr-1">
34
+ <%= item.title %>
35
+ </a>
36
+ <% if (item.revisionsCount > 0) { %>
37
+ <span class="bg-orange-100 chip text-orange-700 dark:bg-orange-900/50 dark:text-orange-300"><%= item.revisionsCount !== 1 ? `${item.revisionsCount} open revisions` : 'Open revision' %></span>
38
+ <% } %>
39
+
40
+ <% if (item.visibility !== "private") { %>
41
+ <div class="mt-1">
42
+ <a href="<%= _context.remoteConfig.resourceUrl(item, _context.resourceConfig.eventType, _context.locale) %>" class="body-3 text-raketa-foreground/50" target="_blank">
43
+ <%= _context.remoteConfig.resourcePath(item, _context.resourceConfig.eventType, _context.locale) %>
44
+ </a>
45
+ </div>
46
+ <% } %>
47
+ </td>
48
+
49
+ <td>
50
+ <div class="flex itemx-center gap-1 whitespace-nowrap">
51
+ <span class="text-raketa-foreground/30" title="<%= visibilityOptions.find(opt => opt[0] === item.visibility)[1] %>">
52
+ <% if (item.visibility === 'public') { %>
53
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
54
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 21a9.004 9.004 0 0 0 8.716-6.747M12 21a9.004 9.004 0 0 1-8.716-6.747M12 21c2.485 0 4.5-4.03 4.5-9S14.485 3 12 3m0 18c-2.485 0-4.5-4.03-4.5-9S9.515 3 12 3m0 0a8.997 8.997 0 0 1 7.843 4.582M12 3a8.997 8.997 0 0 0-7.843 4.582m15.686 0A11.953 11.953 0 0 1 12 10.5c-2.998 0-5.74-1.1-7.843-2.918m15.686 0A8.959 8.959 0 0 1 21 12c0 .778-.099 1.533-.284 2.253m0 0A17.919 17.919 0 0 1 12 16.5c-3.162 0-6.133-.815-8.716-2.247m0 0A9.015 9.015 0 0 1 3 12c0-1.605.42-3.113 1.157-4.418" />
55
+ </svg>
56
+
57
+ <% } %>
58
+ <% if (item.visibility === 'private') { %>
59
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="size-4">
60
+ <path d="M8.5 4.5a2.5 2.5 0 1 1-5 0 2.5 2.5 0 0 1 5 0ZM10.9 12.006c.11.542-.348.994-.9.994H2c-.553 0-1.01-.452-.902-.994a5.002 5.002 0 0 1 9.803 0ZM14.002 12h-1.59a2.556 2.556 0 0 0-.04-.29 6.476 6.476 0 0 0-1.167-2.603 3.002 3.002 0 0 1 3.633 1.911c.18.522-.283.982-.836.982ZM12 8a2 2 0 1 0 0-4 2 2 0 0 0 0 4Z" />
61
+ </svg>
62
+ <% } %>
63
+ <% if (item.visibility === 'unlisted') { %>
64
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="size-4">
65
+ <path fill-rule="evenodd" d="M3.28 2.22a.75.75 0 0 0-1.06 1.06l10.5 10.5a.75.75 0 1 0 1.06-1.06l-1.322-1.323a7.012 7.012 0 0 0 2.16-3.11.87.87 0 0 0 0-.567A7.003 7.003 0 0 0 4.82 3.76l-1.54-1.54Zm3.196 3.195 1.135 1.136A1.502 1.502 0 0 1 9.45 8.389l1.136 1.135a3 3 0 0 0-4.109-4.109Z" clip-rule="evenodd" />
66
+ <path d="m7.812 10.994 1.816 1.816A7.003 7.003 0 0 1 1.38 8.28a.87.87 0 0 1 0-.566 6.985 6.985 0 0 1 1.113-2.039l2.513 2.513a3 3 0 0 0 2.806 2.806Z" />
67
+ </svg>
68
+ <% } %>
69
+ <% if (item.visibility === 'protected') { %>
70
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16" fill="currentColor" class="size-4">
71
+ <path fill-rule="evenodd" d="M8 1a3.5 3.5 0 0 0-3.5 3.5V7A1.5 1.5 0 0 0 3 8.5v5A1.5 1.5 0 0 0 4.5 15h7a1.5 1.5 0 0 0 1.5-1.5v-5A1.5 1.5 0 0 0 11.5 7V4.5A3.5 3.5 0 0 0 8 1Zm2 6V4.5a2 2 0 1 0-4 0V7h4Z" clip-rule="evenodd" />
72
+ </svg>
73
+ <% } %>
74
+ </span>
75
+
76
+ <%= visibilityOptions.find(opt => opt[0] === item.visibility)[1] %>
77
+ </div>
78
+ </td>
79
+
80
+ <td>
81
+ <time data-pretty-datetime datetime="<%= item.publishAt %>"><%= item.publishAt %></time>
82
+ </td>
83
+
84
+ <td>
85
+ <div class="body-3 text-raketa-foreground/50">
86
+ <div class="flex items-center gap-1 mb-0.5">
87
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4 text-raketa-foreground">
88
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
89
+ </svg>
90
+ <time data-pretty-datetime datetime="<%= item.updatedAt %>"><%= item.updatedAt %></time>
91
+ </div>
92
+
93
+ <div class="flex items-center gap-1" title="<%= item.changes[0]?.operatorMeta?.name %>">
94
+ <% if (item.changes[0]?.operatorMeta?.avatar) { %>
95
+ <img src="<%= item.changes[0]?.operatorMeta?.avatar %>" class="size-4 rounded-full" alt="<%= item.changes[0]?.operatorMeta?.name %>">
96
+ <% } else { %>
97
+ <div class="size-4 rounded-full"></div>
98
+ <% } %>
99
+ <%= item.changes[0]?.operatorMeta?.name %>
100
+ </div>
101
+ </div>
102
+ </td>
103
+
104
+ <td>
105
+ <div class="flex flex-wrap items-center gap-1">
106
+ <% Object.keys(_context.locales).forEach(key => { %>
107
+ <% const { name, _code, flag} = _context.locales[key] %>
108
+ <% if (key === _context.locale) { %>
109
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="size-6 rounded-full border dark:border-neutral-700" />
110
+ <% } else if (item.translations[key]) { %>
111
+ <a href="<%= `/${key}/${_context.resourceConfig.eventTypePlural}/${item.translations[key].id}` %>">
112
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="size-6 rounded-full border dark:border-neutral-700" />
113
+ </a>
114
+ <% } else { %>
115
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${item.id}/translations/new?target_locale=${key}` %>">
116
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="<%= [" transition-all ease-in-out duration-300 size-6 rounded-full border hover:opacity-100 dark:border-neutral-700", key === _context.locale ? "opacity-100" : "opacity-10"].join(" ") %>" />
117
+ </a>
118
+ <% } %>
119
+ <% }); %>
120
+ </div>
121
+ </td>
122
+ </tr>
123
+ <% }); %>
124
+ </tbody>
125
+ </table>
126
+
127
+ <%- pagination(items.pagination, _context) %>
128
+ </div>
129
+
130
+ <div data-sidebar="1" class="search-sidebar <%= Object.keys(_context.query).some(k => k.startsWith('f:')) ? '' : 'hidden' %>">
131
+ <span class="heading-2">Search by</span>
132
+
133
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}` %>" method="GET" class="form mt-4">
134
+ <input type="hidden" name="order_direction" value="<%= _context.query.order_direction %>" />
135
+ <input type="hidden" name="order_by" value="<%= _context.query.order_by %>" />
136
+
137
+ <div class="mb-4">
138
+ <label for="keyword" class="font-semibold hover:cursor-pointer body-3">Keyword</label>
139
+ <input type="text" name="f:keyword" value="<%= _context.query["f:keyword"] %>" />
140
+ </div>
141
+
142
+ <div class="mb-4">
143
+ <label for="" class="font-semibold hover:cursor-pointer body-3">Tags</label>
144
+ <div class="checkbox-group mb-4">
145
+ <% tags.forEach((item,idx)=> { %>
146
+ <div class="flex items-center gap-1">
147
+ <% if (utils.includedInCollection(item.id, _context.query["f:tags"])) { %>
148
+ <input type="checkbox" name="f:tags" id='tag-<%= item.id %>' checked value="<%= item.id %>" class="hover:cursor-pointer">
149
+ <% } else { %>
150
+ <input type="checkbox" name="f:tags" id='tag-<%= item.id %>' value="<%= item.id %>" class="hover:cursor-pointer">
151
+ <% } %>
152
+ <label for='tag-<%= item.id %>' class="body-2 hover:cursor-pointer"><%= item.name %></label>
153
+ </div>
154
+ <% }); %>
155
+ </div>
156
+ </div>
157
+
158
+ <div class="btn-toolbar">
159
+ <button type="submit" class="btn-primary">Search</button>
160
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}` %>" class="btn-text">Clear search</a>
161
+ </div>
162
+ </form>
163
+ </div>
164
+
@@ -0,0 +1,234 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <%- render_partial('./_shared/_title.ejs') %>
4
+ <%- render_partial('./_shared/_toolbar.ejs') %>
5
+ </div>
6
+
7
+ <div class="flex flex-wrap items-center gap-1 mb-6 -mt-4">
8
+ <%
9
+ const availableLocales = Object.keys(_context.locales);
10
+ const totalPossibleTranslations = availableLocales.length - 1;
11
+ const existingTranslationsCount = Object.keys(resource.translations).length;
12
+ const canBeTranslated = existingTranslationsCount < totalPossibleTranslations;
13
+ %>
14
+
15
+ <% Object.keys(_context.locales).forEach(key => { %>
16
+ <% const { name, _code, flag} = _context.locales[key] %>
17
+ <% if (key === _context.locale) { %>
18
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="size-6 rounded-full border dark:border-neutral-700" />
19
+ <% } else if (resource.translations[key]) { %>
20
+ <a href="<%= `/${key}/${_context.resourceConfig.eventTypePlural}/${resource.translations[key].id}` %>">
21
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="size-6 rounded-full border dark:border-neutral-700" />
22
+ </a>
23
+ <% } else { %>
24
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/translations/new?target_locale=${key}` %>">
25
+ <img title="<%= name %>" src="<%= flag %>" alt="<%= name %>" class="<%= [" transition-all ease-in-out duration-300 size-6 rounded-full border hover:opacity-100 dark:border-neutral-700", key === _context.locale ? "opacity-100" : "opacity-10"].join(" ") %>" />
26
+ </a>
27
+ <% } %>
28
+ <% }); %>
29
+
30
+ <% if (canBeTranslated) { %>
31
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/translations/new` %>" class="btn-text ml-2">
32
+ Translate
33
+ </a>
34
+ <% } %>
35
+ </div>
36
+
37
+ <%
38
+ const openedRevisions = []
39
+ const scheduledRevisions = []
40
+
41
+ revisions.forEach(r => {
42
+ if (r.schedule) {
43
+ scheduledRevisions.push(r)
44
+ } else {
45
+ openedRevisions.push(r)
46
+ }
47
+ })
48
+ %>
49
+
50
+ <% if (openedRevisions.length) { %>
51
+ <div class="pb-8">
52
+ <h4 class="pb-4 heading-3 flex items-center gap-2">
53
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-4 text-raketa-primary">
54
+ <path fill-rule="evenodd" d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z" clip-rule="evenodd" />
55
+ <path d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z" />
56
+ </svg>
57
+
58
+ Open revisions
59
+ </h4>
60
+
61
+ <table class="data-grid alt">
62
+ <thead>
63
+ <tr>
64
+ <th>Title</th>
65
+ <th>Created by</th>
66
+ <th>Last change</th>
67
+ <th>&nbsp;</th>
68
+ </tr>
69
+ </thead>
70
+
71
+ <tbody>
72
+ <% openedRevisions.forEach((revision, idx)=> { %>
73
+ <tr class="border-b border-mono-25">
74
+ <td class="py-4 pl-2 w-1/2">
75
+ <div class="flex gap-1 items-center">
76
+ <% if (revision.meta && revision.meta.locked) { %>
77
+ <div title="<%= revision.meta.lockMessage %>">
78
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="currentColor" class="size-4">
79
+ <path fill-rule="evenodd" d="M10 1a4.5 4.5 0 0 0-4.5 4.5V9H5a2 2 0 0 0-2 2v6a2 2 0 0 0 2 2h10a2 2 0 0 0 2-2v-6a2 2 0 0 0-2-2h-.5V5.5A4.5 4.5 0 0 0 10 1Zm3 8V5.5a3 3 0 1 0-6 0V9h6Z" clip-rule="evenodd" />
80
+ </svg>
81
+ </div>
82
+ <% } %>
83
+
84
+ <%= revision.title %>
85
+ </div>
86
+ </td>
87
+
88
+ <td class="whitespace-nowrap">
89
+ <div class="body-3 text-raketa-foreground/50">
90
+ <div class="flex items-center gap-1" title="<%= revision.meta.operatorMeta.name %>">
91
+ <% if (revision.meta.operatorMeta.avatar) { %>
92
+ <img src="<%= revision.meta.operatorMeta.avatar %>" class="size-4 rounded-full">
93
+ <% } %>
94
+ <%= revision.meta.operatorMeta.name %>
95
+ </div>
96
+ </div>
97
+ </td>
98
+
99
+ <td class="whitespace-nowrap">
100
+ <div class="body-3 text-raketa-foreground/50">
101
+ <div class="flex items-center gap-1">
102
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4 text-raketa-foreground">
103
+ <path stroke-linecap="round" stroke-linejoin="round" d="M12 6v6h4.5m4.5 0a9 9 0 1 1-18 0 9 9 0 0 1 18 0Z" />
104
+ </svg>
105
+
106
+ <time data-pretty-datetime datetime="<%= revision.insertedAt %>"><%= revision.insertedAt %></time>
107
+ </div>
108
+ </div>
109
+ </td>
110
+
111
+ <td class="whitespace-nowrap">
112
+ <%- render_partial('./_shared/_revision_toolbar.ejs', { revision }) %>
113
+ </td>
114
+ </tr>
115
+ <% }); %>
116
+ </tbody>
117
+ </table>
118
+ </div>
119
+ <% } %>
120
+
121
+ <% if (scheduledRevisions.length) { %>
122
+ <div class="pb-8">
123
+ <h4 class="pb-4 heading-3 flex items-center gap-2">
124
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-4 text-raketa-primary">
125
+ <path fill-rule="evenodd" d="M5.625 1.5c-1.036 0-1.875.84-1.875 1.875v17.25c0 1.035.84 1.875 1.875 1.875h12.75c1.035 0 1.875-.84 1.875-1.875V12.75A3.75 3.75 0 0 0 16.5 9h-1.875a1.875 1.875 0 0 1-1.875-1.875V5.25A3.75 3.75 0 0 0 9 1.5H5.625ZM7.5 15a.75.75 0 0 1 .75-.75h7.5a.75.75 0 0 1 0 1.5h-7.5A.75.75 0 0 1 7.5 15Zm.75 2.25a.75.75 0 0 0 0 1.5H12a.75.75 0 0 0 0-1.5H8.25Z" clip-rule="evenodd" />
126
+ <path d="M12.971 1.816A5.23 5.23 0 0 1 14.25 5.25v1.875c0 .207.168.375.375.375H16.5a5.23 5.23 0 0 1 3.434 1.279 9.768 9.768 0 0 0-6.963-6.963Z" />
127
+ </svg>
128
+
129
+ Scheduled for publication
130
+ </h4>
131
+
132
+ <table class="data-grid alt">
133
+ <thead>
134
+ <tr>
135
+ <th>Title</th>
136
+ <th>Created by</th>
137
+ <th>Scheduled by</th>
138
+ <th>Publish on</th>
139
+ <th>&nbsp;</th>
140
+ </tr>
141
+ </thead>
142
+
143
+ <tbody>
144
+ <% scheduledRevisions.forEach((revision, idx)=> { %>
145
+ <tr class="border-b border-mono-25">
146
+ <td class="py-4 pl-2 w-1/2">
147
+ <div class="flex gap-1 items-center">
148
+ <%= revision.title %>
149
+ </div>
150
+ </td>
151
+
152
+ <td class="whitespace-nowrap">
153
+ <div class="body-3 text-raketa-foreground/50">
154
+ <div class="flex items-center gap-1" title="<%= revision.meta.operatorMeta.name %>">
155
+ <% if (revision.meta.operatorMeta.avatar) { %>
156
+ <img src="<%= revision.meta.operatorMeta.avatar %>" class="size-4 rounded-full">
157
+ <% } %>
158
+ <%= revision.meta.operatorMeta.name %>
159
+ </div>
160
+ </div>
161
+ </td>
162
+
163
+ <td class="whitespace-nowrap">
164
+ <div class="body-3 text-raketa-foreground/50">
165
+ <div class="flex items-center gap-1" title="<%= revision.schedule.operatorMeta.name %>">
166
+ <% if (revision.schedule.operatorMeta.avatar) { %>
167
+ <img src="<%= revision.schedule.operatorMeta.avatar %>" class="size-4 rounded-full">
168
+ <% } %>
169
+ <%= revision.schedule.operatorMeta.name %>
170
+ </div>
171
+ </div>
172
+ </td>
173
+
174
+ <td class="whitespace-nowrap">
175
+ <div class="body-3 text-raketa-foreground/50">
176
+ <div class="flex items-center gap-1">
177
+ <svg xmlns="http://www.w3.org/2000/svg" class="size-4 text-raketa-foreground" viewBox="0 0 512 512">
178
+ <path d="M112.91 128A191.85 191.85 0 0064 254c-1.18 106.35 85.65 193.8 192 194 106.2.2 192-85.83 192-192 0-104.54-83.55-189.61-187.5-192a4.36 4.36 0 00-4.5 4.37V152" fill="none" stroke="currentColor" stroke-linecap="round" stroke-linejoin="round" stroke-width="32" />
179
+ <path d="M233.38 278.63l-79-113a8.13 8.13 0 0111.32-11.32l113 79a32.5 32.5 0 01-37.25 53.26 33.21 33.21 0 01-8.07-7.94z" />
180
+ </svg>
181
+
182
+
183
+ <time data-pretty-expiration-time datetime="<%= revision.schedule.mergeAt %>"><%= revision.schedule.mergeAt %></time>
184
+ </div>
185
+ </div>
186
+ </td>
187
+
188
+ <td class="whitespace-nowrap">
189
+ <div class="actions-toolbar justify-end">
190
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventType}_revisions/${revision.id}/cancel_schedules` %>" method="post" class="inline-flex gap-2 items-center">
191
+ <%- f.submit('Remove schedule', { class: 'btn-text' }) %>
192
+ </form>
193
+
194
+ <a href="/remote/login?redirect_to=/<%= _context.locale %>/admin/<%= _context.resourceConfig.eventType %>-revisions/<%= revision.id %>/preview" target="_blank" class="btn-text has-icon">
195
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
196
+ <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" />
197
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
198
+ </svg>
199
+
200
+ Preview
201
+ </a>
202
+ </div>
203
+ </td>
204
+ </tr>
205
+ <% }); %>
206
+ </tbody>
207
+ </table>
208
+ </div>
209
+ <% } %>
210
+
211
+ <div class="mb-4">
212
+ <h4 class="pb-4 heading-3 items-center gap-2 flex">
213
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" fill="currentColor" class="size-4 text-raketa-primary">
214
+ <path d="M3.375 3C2.339 3 1.5 3.84 1.5 4.875v.75c0 1.036.84 1.875 1.875 1.875h17.25c1.035 0 1.875-.84 1.875-1.875v-.75C22.5 3.839 21.66 3 20.625 3H3.375Z" />
215
+ <path fill-rule="evenodd" d="m3.087 9 .54 9.176A3 3 0 0 0 6.62 21h10.757a3 3 0 0 0 2.995-2.824L20.913 9H3.087Zm6.163 3.75A.75.75 0 0 1 10 12h4a.75.75 0 0 1 0 1.5h-4a.75.75 0 0 1-.75-.75Z" clip-rule="evenodd" />
216
+ </svg>
217
+
218
+ History of changes
219
+ </h4>
220
+
221
+ <%- render_partial('./_shared/history_table.ejs', {
222
+ changes,
223
+ resource,
224
+ _context,
225
+ render_partial,
226
+ skipPagination: true,
227
+ toolbarPath: './_shared/_history_toolbar.ejs'
228
+ }) %>
229
+
230
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${resource.id}/history` %>" class="btn-text ml-2 my-8">
231
+ Full page history
232
+ </a>
233
+ </div>
234
+ </div>
@@ -0,0 +1,18 @@
1
+ <div class="actions-toolbar justify-end">
2
+ <a href="/remote/login?redirect_to=/<%= translation.translationLocale %>/admin/<%= _context.resourceConfig.eventType %>-revisions/<%= translation.revisionId %>/builder" class="btn-text has-icon">
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
+
7
+ Update Content
8
+ </a>
9
+
10
+ <a href="<%= `/${translation.translationLocale}/${_context.resourceConfig.eventType}_revisions/${translation.revisionId}/general/edit` %>" class="btn-text has-icon">
11
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
12
+ <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" />
13
+ <path stroke-linecap="round" stroke-linejoin="round" d="M15 12a3 3 0 1 1-6 0 3 3 0 0 1 6 0Z" />
14
+ </svg>
15
+
16
+ Update Settings
17
+ </a>
18
+ </div>
@@ -0,0 +1,75 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title flex flex-col items-start">
3
+ <h1 class="heading-1">
4
+ <span class="opacity-50">Translate from <%= _context.locales[_context.locale].name %> / </span>
5
+ <%= blueprint.title %>
6
+ </h1>
7
+ </div>
8
+
9
+ <div class="grid gap-4 md:grid-cols-3">
10
+ <% form_for({ resource }, errors, (f) => { %>
11
+ <form action="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${blueprint.id}/translations` %>" method="post" class="form">
12
+ <h6>Available languages:</h6>
13
+ <% if (targetLocale) { %>
14
+ <input type="hidden" name="resource[languages][]" value="<%= targetLocale %>">
15
+ <% } %>
16
+ <div class="checkbox-group !max-h-fit mb-3">
17
+ <% Object.entries(_context.locales).forEach(([key, locale]) => {
18
+ const isExistingTranslation = resource.translations[key];
19
+ const isCurrentLocale = key === _context.locale;
20
+ const wasSelected = Array.isArray(resource.languages) && resource.languages.includes(key);
21
+ const isChecked = isExistingTranslation || isCurrentLocale || key === targetLocale || wasSelected;
22
+ const isDisabled = isExistingTranslation || isCurrentLocale || key === targetLocale;
23
+ %>
24
+ <% if(!isCurrentLocale) { %>
25
+ <label class="<%= isDisabled && key !== targetLocale ? 'opacity-50' : '' %>">
26
+ <input type="<%= isCurrentLocale ? 'hidden' : 'checkbox' %>" name="resource[languages][]" value="<%= key %>" <%= isChecked ? 'checked' : '' %> <%= isDisabled ? 'disabled' : '' %>>
27
+ <%= locale.name %>
28
+ </label>
29
+ <% } %>
30
+ <% }) %>
31
+ </div>
32
+
33
+ <% if (errors?.resource && targetLocale) { %>
34
+ <div>
35
+ <% if (targetLocale !== _context.locale) { %>
36
+ <p class="text-sm text-red-600 font-medium mb-1">
37
+ Failed to create <%= _context.locales[targetLocale].name %> translation.
38
+ </p>
39
+ <% } %>
40
+ <% Object.entries(errors.resource).forEach(([errorKey, error]) => { %>
41
+ <p class="text-sm text-red-600 font-medium mb-3"> Reason is <%= errorKey %>: <%= error %></p>
42
+ <% }) %>
43
+ </div>
44
+ <% } %>
45
+
46
+ <div class="form-actions">
47
+ <div class="btn-toolbar">
48
+ <%- f.submit('Initiate translations', { class: 'btn-primary' }) %>
49
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${blueprint.id}` %>" class="btn-secondary">Cancel</a>
50
+ </div>
51
+ </div>
52
+ </form>
53
+ <% }) %>
54
+
55
+ <div>
56
+ <div class="help">
57
+ <div class="flex items-center gap-1 mb-2">
58
+ <svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24" stroke-width="1.5" stroke="currentColor" class="size-4">
59
+ <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" />
60
+ </svg>
61
+
62
+ <h3 class="heading-3">Translating events</h3>
63
+ </div>
64
+
65
+ <div class="markdown">
66
+ <ol>
67
+ <li>Select multiple locales to initiate bulk translations.</li>
68
+ <li>A private copy of the event will be automatically created for each selected language, with a new revision opened to facilitate the translation process.</li>
69
+ <li>On the next screen you'll see a list with quick links to transalte settings and widgets</li>
70
+ </ol>
71
+ </div>
72
+ </div>
73
+ </div>
74
+ </div>
75
+ </div>
@@ -0,0 +1,39 @@
1
+ <div class="page-wrapper">
2
+ <div class="page-title">
3
+ <div>
4
+ <h1 class="heading-1">Translations initiated</h1>
5
+ <span class="body-2 opacity-50"><%= eventTitle %></span>
6
+ </div>
7
+ </div>
8
+
9
+ <% if (translations && translations.length > 0) { %>
10
+ <table class="data-grid alt">
11
+ <thead>
12
+ <tr>
13
+ <th>Locale</th>
14
+ <th>&nbsp;</th>
15
+ </tr>
16
+ </thead>
17
+ <tbody>
18
+ <% translations.forEach(translation => { %>
19
+ <tr class="border-b border-mono-25">
20
+ <td class="py-4 pl-2 w-full">
21
+ <div class="flex gap-1 items-center">
22
+ <a href="<%= `/${translation.translationLocale}/${_context.resourceConfig.eventTypePlural}/${translation.id}` %>" class="btn-text">
23
+ <%= _context.locales[translation.translationLocale].name %>
24
+ </a>
25
+ </div>
26
+ </td>
27
+
28
+ <td class="whitespace-nowrap">
29
+ <%- render_partial('./_translation_toolbar.ejs', { translation }) %>
30
+ </td>
31
+ </tr>
32
+ <% }) %>
33
+ </tbody>
34
+ </table>
35
+ <% } %>
36
+ <a href="<%= `/${_context.locale}/${_context.resourceConfig.eventTypePlural}/${parent_id}` %>" class="btn-primary mt-8">
37
+ Go to original
38
+ </a>
39
+ </div>