comfy_middle_seat 3.2.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 (436) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +4 -0
  3. data/.gitattributes +3 -0
  4. data/.github/dependabot.yml +7 -0
  5. data/.github/issue_template.md +19 -0
  6. data/.github/pull_request_template.md +6 -0
  7. data/.github/workflows/claude-code-review.yml +46 -0
  8. data/.github/workflows/claude.yml +148 -0
  9. data/.github/workflows/coveralls.yml +53 -0
  10. data/.github/workflows/rubyonrails.yml +94 -0
  11. data/.gitignore +25 -0
  12. data/.rubocop.yml +82 -0
  13. data/.travis.yml +44 -0
  14. data/CHANGELOG.md +147 -0
  15. data/CONTRIBUTING.md +42 -0
  16. data/Gemfile +44 -0
  17. data/LICENSE +20 -0
  18. data/README.md +158 -0
  19. data/Rakefile +206 -0
  20. data/app/assets/builds/.keep +0 -0
  21. data/app/assets/config/manifest.js +1 -0
  22. data/app/assets/fonts/comfy/admin/cms/lib/redactor-font.eot +0 -0
  23. data/app/assets/javascripts/comfy/admin/cms/application.js +27 -0
  24. data/app/assets/javascripts/comfy/admin/cms/base.js +48 -0
  25. data/app/assets/javascripts/comfy/admin/cms/categories.js +17 -0
  26. data/app/assets/javascripts/comfy/admin/cms/codemirror.js +43 -0
  27. data/app/assets/javascripts/comfy/admin/cms/custom.js +1 -0
  28. data/app/assets/javascripts/comfy/admin/cms/diff.js +12 -0
  29. data/app/assets/javascripts/comfy/admin/cms/file_link.js +96 -0
  30. data/app/assets/javascripts/comfy/admin/cms/file_upload.js +229 -0
  31. data/app/assets/javascripts/comfy/admin/cms/files_modal.js +97 -0
  32. data/app/assets/javascripts/comfy/admin/cms/page_fragments.js +22 -0
  33. data/app/assets/javascripts/comfy/admin/cms/slugify.js +34 -0
  34. data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +49 -0
  35. data/app/assets/javascripts/comfy/admin/cms/timepicker.js +38 -0
  36. data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +91 -0
  37. data/app/assets/javascripts/comfy/vendor/diff/diff_match_patch.min.js +49 -0
  38. data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +88 -0
  39. data/app/assets/javascripts/comfy/vendor/flatpickr.min.js +2 -0
  40. data/app/assets/javascripts/comfy/vendor/fontawesome.js +5 -0
  41. data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +50 -0
  42. data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +79 -0
  43. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ar.js +76 -0
  44. data/app/assets/javascripts/comfy/vendor/redactor/i18n/az.js +75 -0
  45. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ba.js +79 -0
  46. data/app/assets/javascripts/comfy/vendor/redactor/i18n/bg.js +77 -0
  47. data/app/assets/javascripts/comfy/vendor/redactor/i18n/by.js +77 -0
  48. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ca.js +75 -0
  49. data/app/assets/javascripts/comfy/vendor/redactor/i18n/cs.js +87 -0
  50. data/app/assets/javascripts/comfy/vendor/redactor/i18n/da.js +75 -0
  51. data/app/assets/javascripts/comfy/vendor/redactor/i18n/de.js +80 -0
  52. data/app/assets/javascripts/comfy/vendor/redactor/i18n/el.js +76 -0
  53. data/app/assets/javascripts/comfy/vendor/redactor/i18n/en.js +75 -0
  54. data/app/assets/javascripts/comfy/vendor/redactor/i18n/eo.js +76 -0
  55. data/app/assets/javascripts/comfy/vendor/redactor/i18n/es.js +75 -0
  56. data/app/assets/javascripts/comfy/vendor/redactor/i18n/es_AR.js +76 -0
  57. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fa.js +76 -0
  58. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fi.js +75 -0
  59. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fr.js +75 -0
  60. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ge.js +75 -0
  61. data/app/assets/javascripts/comfy/vendor/redactor/i18n/gr.js +75 -0
  62. data/app/assets/javascripts/comfy/vendor/redactor/i18n/he.js +75 -0
  63. data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +78 -0
  64. data/app/assets/javascripts/comfy/vendor/redactor/i18n/hu.js +77 -0
  65. data/app/assets/javascripts/comfy/vendor/redactor/i18n/id.js +76 -0
  66. data/app/assets/javascripts/comfy/vendor/redactor/i18n/it.js +78 -0
  67. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ja.js +76 -0
  68. data/app/assets/javascripts/comfy/vendor/redactor/i18n/kn.js +75 -0
  69. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ko.js +76 -0
  70. data/app/assets/javascripts/comfy/vendor/redactor/i18n/lt.js +75 -0
  71. data/app/assets/javascripts/comfy/vendor/redactor/i18n/lv.js +75 -0
  72. data/app/assets/javascripts/comfy/vendor/redactor/i18n/mk.js +75 -0
  73. data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +77 -0
  74. data/app/assets/javascripts/comfy/vendor/redactor/i18n/nl.js +80 -0
  75. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +78 -0
  76. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt-BR.js +75 -0
  77. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt.js +75 -0
  78. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ro.js +76 -0
  79. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ru.js +76 -0
  80. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sk.js +76 -0
  81. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sl.js +79 -0
  82. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sq.js +79 -0
  83. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-CIR.js +79 -0
  84. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-LAT.js +79 -0
  85. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sv.js +74 -0
  86. data/app/assets/javascripts/comfy/vendor/redactor/i18n/th.js +74 -0
  87. data/app/assets/javascripts/comfy/vendor/redactor/i18n/tr.js +75 -0
  88. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ua.js +77 -0
  89. data/app/assets/javascripts/comfy/vendor/redactor/i18n/uk.js +77 -0
  90. data/app/assets/javascripts/comfy/vendor/redactor/i18n/vi.js +74 -0
  91. data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-CN.js +75 -0
  92. data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-TW.js +75 -0
  93. data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +68 -0
  94. data/app/assets/javascripts/comfy/vendor/redactor/table.js +348 -0
  95. data/app/assets/javascripts/comfy/vendor/redactor/video.js +82 -0
  96. data/app/assets/javascripts/comfy/vendor/redactor.js +9563 -0
  97. data/app/assets/stylesheets/comfy/admin/cms/application.sass +11 -0
  98. data/app/assets/stylesheets/comfy/admin/cms/base.sass +256 -0
  99. data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +19 -0
  100. data/app/assets/stylesheets/comfy/admin/cms/custom.sass +1 -0
  101. data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +22 -0
  102. data/app/assets/stylesheets/comfy/vendor/bootstrap/_alert.scss +51 -0
  103. data/app/assets/stylesheets/comfy/vendor/bootstrap/_badge.scss +54 -0
  104. data/app/assets/stylesheets/comfy/vendor/bootstrap/_breadcrumb.scss +41 -0
  105. data/app/assets/stylesheets/comfy/vendor/bootstrap/_button-group.scss +163 -0
  106. data/app/assets/stylesheets/comfy/vendor/bootstrap/_buttons.scss +137 -0
  107. data/app/assets/stylesheets/comfy/vendor/bootstrap/_card.scss +289 -0
  108. data/app/assets/stylesheets/comfy/vendor/bootstrap/_carousel.scss +197 -0
  109. data/app/assets/stylesheets/comfy/vendor/bootstrap/_close.scss +41 -0
  110. data/app/assets/stylesheets/comfy/vendor/bootstrap/_code.scss +48 -0
  111. data/app/assets/stylesheets/comfy/vendor/bootstrap/_custom-forms.scss +507 -0
  112. data/app/assets/stylesheets/comfy/vendor/bootstrap/_dropdown.scss +191 -0
  113. data/app/assets/stylesheets/comfy/vendor/bootstrap/_forms.scss +330 -0
  114. data/app/assets/stylesheets/comfy/vendor/bootstrap/_functions.scss +86 -0
  115. data/app/assets/stylesheets/comfy/vendor/bootstrap/_grid.scss +52 -0
  116. data/app/assets/stylesheets/comfy/vendor/bootstrap/_images.scss +42 -0
  117. data/app/assets/stylesheets/comfy/vendor/bootstrap/_input-group.scss +193 -0
  118. data/app/assets/stylesheets/comfy/vendor/bootstrap/_jumbotron.scss +17 -0
  119. data/app/assets/stylesheets/comfy/vendor/bootstrap/_list-group.scss +149 -0
  120. data/app/assets/stylesheets/comfy/vendor/bootstrap/_media.scss +8 -0
  121. data/app/assets/stylesheets/comfy/vendor/bootstrap/_mixins.scss +47 -0
  122. data/app/assets/stylesheets/comfy/vendor/bootstrap/_modal.scss +229 -0
  123. data/app/assets/stylesheets/comfy/vendor/bootstrap/_nav.scss +120 -0
  124. data/app/assets/stylesheets/comfy/vendor/bootstrap/_navbar.scss +294 -0
  125. data/app/assets/stylesheets/comfy/vendor/bootstrap/_pagination.scss +73 -0
  126. data/app/assets/stylesheets/comfy/vendor/bootstrap/_popover.scss +171 -0
  127. data/app/assets/stylesheets/comfy/vendor/bootstrap/_print.scss +141 -0
  128. data/app/assets/stylesheets/comfy/vendor/bootstrap/_progress.scss +43 -0
  129. data/app/assets/stylesheets/comfy/vendor/bootstrap/_reboot.scss +483 -0
  130. data/app/assets/stylesheets/comfy/vendor/bootstrap/_root.scss +19 -0
  131. data/app/assets/stylesheets/comfy/vendor/bootstrap/_spinners.scss +55 -0
  132. data/app/assets/stylesheets/comfy/vendor/bootstrap/_tables.scss +185 -0
  133. data/app/assets/stylesheets/comfy/vendor/bootstrap/_toasts.scss +44 -0
  134. data/app/assets/stylesheets/comfy/vendor/bootstrap/_tooltip.scss +115 -0
  135. data/app/assets/stylesheets/comfy/vendor/bootstrap/_transitions.scss +20 -0
  136. data/app/assets/stylesheets/comfy/vendor/bootstrap/_type.scss +125 -0
  137. data/app/assets/stylesheets/comfy/vendor/bootstrap/_utilities.scss +17 -0
  138. data/app/assets/stylesheets/comfy/vendor/bootstrap/_variables.scss +1123 -0
  139. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-grid.scss +29 -0
  140. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-reboot.scss +12 -0
  141. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap.scss +44 -0
  142. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_alert.scss +13 -0
  143. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_background-variant.scss +21 -0
  144. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_badge.scss +17 -0
  145. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_border-radius.scss +63 -0
  146. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_box-shadow.scss +20 -0
  147. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_breakpoints.scss +123 -0
  148. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_buttons.scss +107 -0
  149. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_caret.scss +62 -0
  150. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_clearfix.scss +7 -0
  151. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_deprecate.scss +10 -0
  152. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_float.scss +14 -0
  153. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_forms.scss +192 -0
  154. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_gradients.scss +45 -0
  155. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid-framework.scss +66 -0
  156. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid.scss +51 -0
  157. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_hover.scss +37 -0
  158. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_image.scss +36 -0
  159. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_list-group.scss +21 -0
  160. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_lists.scss +7 -0
  161. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
  162. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_pagination.scss +22 -0
  163. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_reset-text.scss +17 -0
  164. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_resize.scss +6 -0
  165. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_screen-reader.scss +33 -0
  166. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_size.scss +7 -0
  167. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_table-row.scss +39 -0
  168. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-emphasis.scss +16 -0
  169. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-hide.scss +11 -0
  170. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-truncate.scss +8 -0
  171. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_transition.scss +16 -0
  172. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_visibility.scss +8 -0
  173. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_align.scss +8 -0
  174. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_background.scss +19 -0
  175. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_borders.scss +75 -0
  176. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_clearfix.scss +3 -0
  177. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_display.scss +26 -0
  178. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_embed.scss +39 -0
  179. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_flex.scss +51 -0
  180. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_float.scss +11 -0
  181. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_overflow.scss +5 -0
  182. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_position.scss +32 -0
  183. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_screenreaders.scss +11 -0
  184. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_shadows.scss +6 -0
  185. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_sizing.scss +20 -0
  186. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_spacing.scss +73 -0
  187. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_stretched-link.scss +19 -0
  188. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_text.scss +72 -0
  189. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_visibility.scss +13 -0
  190. data/app/assets/stylesheets/comfy/vendor/bootstrap/vendor/_rfs.scss +204 -0
  191. data/app/assets/stylesheets/comfy/vendor/fontawesome.css +343 -0
  192. data/app/assets/stylesheets/comfy/vendor/redactor.css +948 -0
  193. data/app/controllers/application_controller.rb +5 -0
  194. data/app/controllers/comfy/admin/base_controller.rb +20 -0
  195. data/app/controllers/comfy/admin/cms/base_controller.rb +54 -0
  196. data/app/controllers/comfy/admin/cms/categories_controller.rb +38 -0
  197. data/app/controllers/comfy/admin/cms/files_controller.rb +140 -0
  198. data/app/controllers/comfy/admin/cms/layouts_controller.rb +69 -0
  199. data/app/controllers/comfy/admin/cms/pages_controller.rb +193 -0
  200. data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +48 -0
  201. data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +16 -0
  202. data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +28 -0
  203. data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +16 -0
  204. data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +29 -0
  205. data/app/controllers/comfy/admin/cms/sites_controller.rb +68 -0
  206. data/app/controllers/comfy/admin/cms/snippets_controller.rb +66 -0
  207. data/app/controllers/comfy/admin/cms/translations_controller.rb +117 -0
  208. data/app/controllers/comfy/cms/assets_controller.rb +38 -0
  209. data/app/controllers/comfy/cms/base_controller.rb +35 -0
  210. data/app/controllers/comfy/cms/content_controller.rb +90 -0
  211. data/app/controllers/concerns/comfy/paginate.rb +11 -0
  212. data/app/controllers/concerns/comfy/reorder_action.rb +19 -0
  213. data/app/helpers/comfy/admin/cms_helper.rb +50 -0
  214. data/app/helpers/comfy/cms_helper.rb +71 -0
  215. data/app/models/comfy/cms/categorization.rb +23 -0
  216. data/app/models/comfy/cms/category.rb +22 -0
  217. data/app/models/comfy/cms/file.rb +65 -0
  218. data/app/models/comfy/cms/fragment.rb +65 -0
  219. data/app/models/comfy/cms/layout.rb +119 -0
  220. data/app/models/comfy/cms/page.rb +182 -0
  221. data/app/models/comfy/cms/revision.rb +10 -0
  222. data/app/models/comfy/cms/site.rb +93 -0
  223. data/app/models/comfy/cms/snippet.rb +43 -0
  224. data/app/models/comfy/cms/translation.rb +47 -0
  225. data/app/models/concerns/comfy/cms/with_categories.rb +51 -0
  226. data/app/models/concerns/comfy/cms/with_fragments.rb +123 -0
  227. data/app/views/comfy/admin/cms/categories/_categories.html.haml +4 -0
  228. data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -0
  229. data/app/views/comfy/admin/cms/categories/_form.html.haml +5 -0
  230. data/app/views/comfy/admin/cms/categories/_index.html.haml +28 -0
  231. data/app/views/comfy/admin/cms/categories/_show.html.haml +15 -0
  232. data/app/views/comfy/admin/cms/categories/create.js.erb +7 -0
  233. data/app/views/comfy/admin/cms/categories/destroy.js.erb +8 -0
  234. data/app/views/comfy/admin/cms/categories/edit.js.erb +3 -0
  235. data/app/views/comfy/admin/cms/categories/update.js.erb +6 -0
  236. data/app/views/comfy/admin/cms/files/_file.html.haml +31 -0
  237. data/app/views/comfy/admin/cms/files/_form.html.haml +26 -0
  238. data/app/views/comfy/admin/cms/files/_modal.html.haml +3 -0
  239. data/app/views/comfy/admin/cms/files/destroy.js.erb +4 -0
  240. data/app/views/comfy/admin/cms/files/edit.html.haml +5 -0
  241. data/app/views/comfy/admin/cms/files/index.html.haml +31 -0
  242. data/app/views/comfy/admin/cms/files/new.html.haml +5 -0
  243. data/app/views/comfy/admin/cms/fragments/_form_fragment_attachments.html.haml +23 -0
  244. data/app/views/comfy/admin/cms/fragments/_form_fragments.html.haml +38 -0
  245. data/app/views/comfy/admin/cms/layouts/_form.html.haml +20 -0
  246. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +26 -0
  247. data/app/views/comfy/admin/cms/layouts/edit.html.haml +9 -0
  248. data/app/views/comfy/admin/cms/layouts/index.html.haml +10 -0
  249. data/app/views/comfy/admin/cms/layouts/new.html.haml +5 -0
  250. data/app/views/comfy/admin/cms/pages/_form.html.haml +31 -0
  251. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +44 -0
  252. data/app/views/comfy/admin/cms/pages/edit.html.haml +14 -0
  253. data/app/views/comfy/admin/cms/pages/index.html.haml +13 -0
  254. data/app/views/comfy/admin/cms/pages/new.html.haml +5 -0
  255. data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +19 -0
  256. data/app/views/comfy/admin/cms/revisions/_sidebar.html.haml +2 -0
  257. data/app/views/comfy/admin/cms/revisions/show.html.haml +36 -0
  258. data/app/views/comfy/admin/cms/sites/_form.html.haml +15 -0
  259. data/app/views/comfy/admin/cms/sites/edit.html.haml +5 -0
  260. data/app/views/comfy/admin/cms/sites/index.html.haml +28 -0
  261. data/app/views/comfy/admin/cms/sites/new.html.haml +5 -0
  262. data/app/views/comfy/admin/cms/snippets/_form.html.haml +19 -0
  263. data/app/views/comfy/admin/cms/snippets/edit.html.haml +9 -0
  264. data/app/views/comfy/admin/cms/snippets/index.html.haml +33 -0
  265. data/app/views/comfy/admin/cms/snippets/new.html.haml +5 -0
  266. data/app/views/comfy/admin/cms/translations/_form.html.haml +20 -0
  267. data/app/views/comfy/admin/cms/translations/_sidebar.html.haml +19 -0
  268. data/app/views/comfy/admin/cms/translations/edit.html.haml +10 -0
  269. data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
  270. data/app/views/kaminari/comfy/_first_page.html.haml +3 -0
  271. data/app/views/kaminari/comfy/_gap.html.haml +2 -0
  272. data/app/views/kaminari/comfy/_last_page.html.haml +3 -0
  273. data/app/views/kaminari/comfy/_next_page.html.haml +2 -0
  274. data/app/views/kaminari/comfy/_page.html.haml +2 -0
  275. data/app/views/kaminari/comfy/_paginator.html.haml +11 -0
  276. data/app/views/kaminari/comfy/_prev_page.html.haml +2 -0
  277. data/app/views/layouts/comfy/admin/cms/_body.html.haml +14 -0
  278. data/app/views/layouts/comfy/admin/cms/_flash.html.haml +4 -0
  279. data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +6 -0
  280. data/app/views/layouts/comfy/admin/cms/_head.html.haml +19 -0
  281. data/app/views/layouts/comfy/admin/cms/_left.html.haml +46 -0
  282. data/app/views/layouts/comfy/admin/cms/_right.html.haml +5 -0
  283. data/app/views/layouts/comfy/admin/cms.html.haml +4 -0
  284. data/bin/bundle +3 -0
  285. data/bin/rails +4 -0
  286. data/bin/rake +4 -0
  287. data/bin/setup +36 -0
  288. data/bin/update +31 -0
  289. data/bin/yarn +11 -0
  290. data/comfy_middle_seat.gemspec +35 -0
  291. data/config/application.rb +62 -0
  292. data/config/boot.rb +5 -0
  293. data/config/cable.yml +10 -0
  294. data/config/cms_routes.rb +8 -0
  295. data/config/database.yml +40 -0
  296. data/config/environment.rb +7 -0
  297. data/config/environments/development.rb +81 -0
  298. data/config/environments/production.rb +93 -0
  299. data/config/environments/test.rb +74 -0
  300. data/config/initializers/comfortable_media_surfer.rb +122 -0
  301. data/config/initializers/content_security_policy.rb +27 -0
  302. data/config/initializers/filter_parameter_logging.rb +10 -0
  303. data/config/initializers/inflections.rb +18 -0
  304. data/config/initializers/json.rb +11 -0
  305. data/config/initializers/new_framework_defaults_7_0.rb +144 -0
  306. data/config/initializers/new_framework_defaults_7_1.rb +225 -0
  307. data/config/initializers/permissions_policy.rb +15 -0
  308. data/config/locales/ar.yml +268 -0
  309. data/config/locales/ca.yml +268 -0
  310. data/config/locales/cs.yml +268 -0
  311. data/config/locales/da.yml +268 -0
  312. data/config/locales/de.yml +268 -0
  313. data/config/locales/en.yml +268 -0
  314. data/config/locales/es.yml +268 -0
  315. data/config/locales/fi.yml +268 -0
  316. data/config/locales/fr.yml +268 -0
  317. data/config/locales/gr.yml +268 -0
  318. data/config/locales/hr.yml +268 -0
  319. data/config/locales/it.yml +268 -0
  320. data/config/locales/ja.yml +268 -0
  321. data/config/locales/nb.yml +268 -0
  322. data/config/locales/nl.yml +268 -0
  323. data/config/locales/pl.yml +268 -0
  324. data/config/locales/pt-BR.yml +268 -0
  325. data/config/locales/ru.yml +268 -0
  326. data/config/locales/sk.yml +268 -0
  327. data/config/locales/sv.yml +268 -0
  328. data/config/locales/tr.yml +268 -0
  329. data/config/locales/uk.yml +268 -0
  330. data/config/locales/zh-CN.yml +268 -0
  331. data/config/locales/zh-TW.yml +268 -0
  332. data/config/puma.rb +43 -0
  333. data/config/storage.yml +35 -0
  334. data/config.ru +6 -0
  335. data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
  336. data/db/cms_seeds/sample-site/files/default.jpg +0 -0
  337. data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
  338. data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
  339. data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
  340. data/db/cms_seeds/sample-site/pages/index/child_b/child_a/content.html +6 -0
  341. data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
  342. data/db/cms_seeds/sample-site/pages/index/cms logo.png +0 -0
  343. data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
  344. data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
  345. data/db/cms_seeds/sample-site/pages/index/content.html +25 -0
  346. data/db/cms_seeds/sample-site/pages/index/footer.png +0 -0
  347. data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
  348. data/db/cms_seeds/sample-site/snippets/default.html +8 -0
  349. data/db/migrate/00_create_active_storage_tables.active_storage.rb +50 -0
  350. data/db/migrate/01_create_cms.rb +142 -0
  351. data/db/migrate/02_add_markdown_to_snippets.rb +5 -0
  352. data/gemfiles/7.2.gemfile +36 -0
  353. data/gemfiles/8.0.gemfile +36 -0
  354. data/gemfiles/8.1.gemfile +36 -0
  355. data/lib/comfortable_media_surfer/access_control/admin_authentication.rb +22 -0
  356. data/lib/comfortable_media_surfer/access_control/admin_authorization.rb +10 -0
  357. data/lib/comfortable_media_surfer/access_control/public_authentication.rb +10 -0
  358. data/lib/comfortable_media_surfer/access_control/public_authorization.rb +10 -0
  359. data/lib/comfortable_media_surfer/configuration.rb +138 -0
  360. data/lib/comfortable_media_surfer/content/block.rb +12 -0
  361. data/lib/comfortable_media_surfer/content/params_parser.rb +149 -0
  362. data/lib/comfortable_media_surfer/content/renderer.rb +146 -0
  363. data/lib/comfortable_media_surfer/content/tag.rb +48 -0
  364. data/lib/comfortable_media_surfer/content/tags/asset.rb +57 -0
  365. data/lib/comfortable_media_surfer/content/tags/audio.rb +39 -0
  366. data/lib/comfortable_media_surfer/content/tags/breadcrumbs.rb +43 -0
  367. data/lib/comfortable_media_surfer/content/tags/checkbox.rb +27 -0
  368. data/lib/comfortable_media_surfer/content/tags/children.rb +52 -0
  369. data/lib/comfortable_media_surfer/content/tags/date.rb +19 -0
  370. data/lib/comfortable_media_surfer/content/tags/datetime.rb +42 -0
  371. data/lib/comfortable_media_surfer/content/tags/file.rb +70 -0
  372. data/lib/comfortable_media_surfer/content/tags/file_link.rb +58 -0
  373. data/lib/comfortable_media_surfer/content/tags/files.rb +41 -0
  374. data/lib/comfortable_media_surfer/content/tags/fragment.rb +64 -0
  375. data/lib/comfortable_media_surfer/content/tags/helper.rb +53 -0
  376. data/lib/comfortable_media_surfer/content/tags/image.rb +56 -0
  377. data/lib/comfortable_media_surfer/content/tags/markdown.rb +22 -0
  378. data/lib/comfortable_media_surfer/content/tags/mixins/file_content.rb +42 -0
  379. data/lib/comfortable_media_surfer/content/tags/number.rb +18 -0
  380. data/lib/comfortable_media_surfer/content/tags/page_file_link.rb +86 -0
  381. data/lib/comfortable_media_surfer/content/tags/partial.rb +47 -0
  382. data/lib/comfortable_media_surfer/content/tags/siblings.rb +66 -0
  383. data/lib/comfortable_media_surfer/content/tags/snippet.rb +36 -0
  384. data/lib/comfortable_media_surfer/content/tags/template.rb +42 -0
  385. data/lib/comfortable_media_surfer/content/tags/text.rb +18 -0
  386. data/lib/comfortable_media_surfer/content/tags/textarea.rb +19 -0
  387. data/lib/comfortable_media_surfer/content/tags/wysiwyg.rb +19 -0
  388. data/lib/comfortable_media_surfer/content/tags.rb +29 -0
  389. data/lib/comfortable_media_surfer/content.rb +11 -0
  390. data/lib/comfortable_media_surfer/engine.rb +24 -0
  391. data/lib/comfortable_media_surfer/error.rb +24 -0
  392. data/lib/comfortable_media_surfer/extensions/acts_as_tree.rb +114 -0
  393. data/lib/comfortable_media_surfer/extensions/has_revisions.rb +68 -0
  394. data/lib/comfortable_media_surfer/extensions.rb +8 -0
  395. data/lib/comfortable_media_surfer/form_builder.rb +43 -0
  396. data/lib/comfortable_media_surfer/render_methods.rb +106 -0
  397. data/lib/comfortable_media_surfer/routing.rb +87 -0
  398. data/lib/comfortable_media_surfer/seeds/file/exporter.rb +37 -0
  399. data/lib/comfortable_media_surfer/seeds/file/importer.rb +55 -0
  400. data/lib/comfortable_media_surfer/seeds/layout/exporter.rb +38 -0
  401. data/lib/comfortable_media_surfer/seeds/layout/importer.rb +60 -0
  402. data/lib/comfortable_media_surfer/seeds/page/exporter.rb +88 -0
  403. data/lib/comfortable_media_surfer/seeds/page/importer.rb +245 -0
  404. data/lib/comfortable_media_surfer/seeds/snippet/exporter.rb +32 -0
  405. data/lib/comfortable_media_surfer/seeds/snippet/importer.rb +47 -0
  406. data/lib/comfortable_media_surfer/seeds.rb +110 -0
  407. data/lib/comfortable_media_surfer/version.rb +3 -0
  408. data/lib/comfortable_media_surfer/view_hooks.rb +33 -0
  409. data/lib/comfortable_media_surfer.rb +56 -0
  410. data/lib/comfy_middle_seat/version.rb +5 -0
  411. data/lib/comfy_middle_seat.rb +3 -0
  412. data/lib/generators/comfy/cms/README +21 -0
  413. data/lib/generators/comfy/cms/assets_generator.rb +16 -0
  414. data/lib/generators/comfy/cms/cms_generator.rb +69 -0
  415. data/lib/generators/comfy/cms/controllers_generator.rb +15 -0
  416. data/lib/generators/comfy/cms/models_generator.rb +15 -0
  417. data/lib/generators/comfy/cms/views_generator.rb +15 -0
  418. data/lib/generators/comfy/scaffold/scaffold_generator.rb +79 -0
  419. data/lib/generators/comfy/scaffold/templates/controller.rb.tt +62 -0
  420. data/lib/generators/comfy/scaffold/templates/migration.rb.tt +11 -0
  421. data/lib/generators/comfy/scaffold/templates/model.rb.tt +21 -0
  422. data/lib/generators/comfy/scaffold/templates/tests/controller.rb.tt +115 -0
  423. data/lib/generators/comfy/scaffold/templates/tests/fixture.yml.tt +4 -0
  424. data/lib/generators/comfy/scaffold/templates/tests/model.rb.tt +26 -0
  425. data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
  426. data/lib/generators/comfy/scaffold/templates/views/edit.haml.tt +5 -0
  427. data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
  428. data/lib/generators/comfy/scaffold/templates/views/new.haml.tt +5 -0
  429. data/lib/generators/comfy/scaffold/templates/views/show.haml.tt +4 -0
  430. data/lib/tasks/cms_assets.rake +19 -0
  431. data/lib/tasks/cms_seeds.rake +40 -0
  432. data/package-lock.json +989 -0
  433. data/package.json +23 -0
  434. data/public/favicon.ico +0 -0
  435. data/rakelib/create_release.rake +82 -0
  436. metadata +665 -0
@@ -0,0 +1,268 @@
1
+ zh-TW:
2
+ activerecord:
3
+ models:
4
+ comfy/cms/site: 站點
5
+ comfy/cms/layout: 佈局
6
+ comfy/cms/page: 頁面
7
+ comfy/cms/snippet: 片段
8
+ comfy/cms/file: 文件
9
+ comfy/cms/translation: 翻譯
10
+
11
+ attributes:
12
+ comfy/cms/site:
13
+ identifier: 標識符
14
+ label: 標籤
15
+ hostname: 主機名
16
+ path: 路徑
17
+ locale: 語言
18
+ comfy/cms/layout:
19
+ identifier: 標識符
20
+ label: 佈局名稱
21
+ app_layout: 應用佈局
22
+ parent_id: 上級佈局
23
+ content: 內容
24
+ css: 樣式
25
+ js: Javascript
26
+ comfy/cms/page:
27
+ label: 頁面名稱
28
+ layout_id: 佈局
29
+ slug: 路徑名
30
+ full_path: 完整路徑
31
+ parent_id: 上級
32
+ target_page_id: 跳轉至
33
+ content: 內容
34
+ is_published: 發佈
35
+ comfy/cms/file:
36
+ label: 標籤
37
+ file: 文件
38
+ description: 描述
39
+ comfy/cms/snippet:
40
+ identifier: 標識符
41
+ label: 標籤
42
+ content: 內容
43
+ comfy/cms/translation:
44
+ locale: 語言
45
+ label: 標籤
46
+ layout_id: 佈局
47
+ is_published: 發佈
48
+
49
+ comfy:
50
+ cms:
51
+ content:
52
+ site_not_found: 站點不存在
53
+ layout_not_found: 佈局不存在
54
+ page_not_found: 頁面不存在
55
+
56
+ admin:
57
+ cms:
58
+ base:
59
+ site_not_found: 沒有該站點
60
+ seeds_enabled: CMS樣板已經啟用,在此處的所有修改將被忽略。
61
+ sites: 站點
62
+ layouts: 佈局
63
+ pages: 頁面
64
+ snippets: 片段
65
+ files: 文件
66
+
67
+ sites:
68
+ created: 站點創建成功
69
+ creation_failure: 站點創建失敗
70
+ updated: 站點更新成功
71
+ update_failure: 站點更新失敗
72
+ deleted: 站點刪除成功
73
+ not_found: 站點不存在
74
+
75
+ index:
76
+ title: 站點
77
+ new_link: 創建站點
78
+ select: 選擇站點
79
+ edit: 編輯
80
+ delete: 刪除
81
+ are_you_sure: 確定刪除該站點嗎?
82
+ new:
83
+ title: 新站點
84
+ edit:
85
+ title: 編輯站點
86
+ form:
87
+ create: 創建站點
88
+ cancel: 取消
89
+ update: 更新站點
90
+
91
+ layouts:
92
+ created: 佈局創建成功
93
+ creation_failure: 佈局創建失敗
94
+ updated: 佈局更新成功
95
+ update_failure: 佈局更新失敗
96
+ deleted: 佈局刪除成功
97
+ not_found: 佈局不存在
98
+
99
+ index:
100
+ title: 佈局
101
+ new_link: 創建新佈局
102
+ index_branch:
103
+ add_child_layout: 創建子佈局
104
+ edit: 編輯
105
+ delete: 刪除
106
+ are_you_sure: 確定刪除該佈局嗎?
107
+ new:
108
+ title: 新佈局
109
+ edit:
110
+ title: 編輯佈局
111
+ form:
112
+ select_parent_layout: 選擇上級佈局
113
+ select_app_layout: 選擇應用佈局
114
+ create: 創建佈局
115
+ cancel: 取消
116
+ update: 更新佈局
117
+
118
+ pages:
119
+ created: 頁面創建成功
120
+ creation_failure: 頁面創建失敗
121
+ updated: 頁面更新成功
122
+ update_failure: 頁面更新失敗
123
+ children_published: 子頁面已發佈
124
+ children_unpublished: 子頁面已取消發佈
125
+ deleted: 頁面刪除成功
126
+ not_found: 頁面不存在
127
+ layout_not_found: 沒有佈局,請先創建一個佈局。
128
+
129
+ index:
130
+ title: 頁面
131
+ new_link: 創建新頁面
132
+ index_branch:
133
+ toggle: 切換
134
+ add_child_page: 創建子頁面
135
+ edit: 編輯
136
+ delete: 刪除
137
+ are_you_sure: 確定刪除該頁面嗎?
138
+ new:
139
+ title: 新頁面
140
+ edit:
141
+ title: 編輯頁面
142
+ publish_children: 發佈子頁面
143
+ publish_children_confirmation: 發佈所有子頁面?
144
+ unpublish_children: 取消發佈子頁面
145
+ unpublish_children_confirmation: 取消發佈所有子頁面?
146
+ form:
147
+ select_target_page: 沒有跳轉
148
+ preview: 預覽
149
+ create: 創建頁面
150
+ cancel: 取消
151
+ update: 更新頁面
152
+ choose_link: 選擇頁面...
153
+
154
+ fragments:
155
+ form_fragments:
156
+ no_tags: |-
157
+ 佈局中沒有定義內容標記。<br/>
158
+ 編輯內容使其包含一個頁面或者欄位標記。例如: <code>{{cms:wysiwyg content}}</code>
159
+
160
+ translations:
161
+ created: 翻譯創建成功
162
+ creation_failure: 翻譯創建失敗
163
+ updated: 翻譯更新成功
164
+ update_failure: 翻譯更新失敗
165
+ deleted: 翻譯刪除成功
166
+ not_found: 翻譯不存在
167
+
168
+ new:
169
+ title: 新翻譯
170
+ edit:
171
+ title: 編輯翻譯
172
+ form:
173
+ preview: 預覽
174
+ create: 創建
175
+ update: 更新
176
+ cancel: 取消
177
+ sidebar:
178
+ new: 新翻譯
179
+ confirm: 確定刪除該翻譯嗎?
180
+
181
+ snippets:
182
+ created: 片段創建成功
183
+ creation_failure: 片段創建失敗
184
+ updated: 片段更新成功
185
+ update_failure: 片段更新失敗
186
+ deleted: 片段刪除成功
187
+ not_found: 片段不存在
188
+
189
+ index:
190
+ title: 片段
191
+ new_link: 創建新片段
192
+ edit: 編輯
193
+ delete: 刪除
194
+ are_you_sure: 確定刪除該片段嗎?
195
+ new:
196
+ title: 新片段
197
+ edit:
198
+ title: 編輯片段
199
+ form:
200
+ create: 創建片段
201
+ cancel: 取消
202
+ update: 更新片段
203
+
204
+ revisions:
205
+ reverted: 內容恢復成功
206
+ record_not_found: 記錄不存在
207
+ not_found: 修訂版本不存在
208
+
209
+ show:
210
+ title: 修訂版本屬於
211
+ revision: 修訂版本
212
+ update: 更新到該修訂版本
213
+ cancel: 取消
214
+ content: 內容
215
+ changes: 變更
216
+ previous: 先前
217
+ current: 現在
218
+ sidebar:
219
+ revision:
220
+ zero: '%{count} 修訂版本'
221
+ one: '%{count} 修訂版本'
222
+ few: '%{count} 修訂版本'
223
+ many: '%{count} 修訂版本'
224
+ other: '%{count} 修訂版本'
225
+
226
+ files:
227
+ created: 文件上傳成功
228
+ creation_failure: 文件上傳失敗
229
+ updated: 文件更新成功
230
+ update_failure: 文件更新失敗
231
+ deleted: 文件刪除成功
232
+ not_found: 文件不存在
233
+
234
+ index:
235
+ title: 文件
236
+ new_link: 上傳新文件
237
+ button: 上傳文件
238
+ new:
239
+ title: 新文件
240
+ edit:
241
+ title: 編輯文件
242
+ form:
243
+ current_file: 當前文件
244
+ create: 上傳文件
245
+ cancel: 取消
246
+ update: 更新文件
247
+ delete: 刪除
248
+ are_you_sure: 確定刪除該文件嗎?
249
+ page_form:
250
+ are_you_sure: 確定刪除該文件嗎?
251
+ file:
252
+ edit: 編輯
253
+ delete: 刪除
254
+ are_you_sure: 確定刪除該文件嗎?
255
+
256
+ categories:
257
+ index:
258
+ edit: 編輯
259
+ done: 完成
260
+ all: 全部 分類
261
+ add: 創建
262
+ add_placeholder: 添加類別
263
+ show:
264
+ are_you_sure: 確定刪除該分類嗎?
265
+ edit:
266
+ save: 保存
267
+ form:
268
+ label: 分類
data/config/puma.rb ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This configuration file will be evaluated by Puma. The top-level methods that
4
+ # are invoked here are part of Puma's configuration DSL. For more information
5
+ # about methods provided by the DSL, see https://puma.io/puma/Puma/DSL.html.
6
+ #
7
+ # Puma starts a configurable number of processes (workers) and each process
8
+ # serves each request in a thread from an internal thread pool.
9
+ #
10
+ # You can control the number of workers using ENV["WEB_CONCURRENCY"]. You
11
+ # should only set this value when you want to run 2 or more workers. The
12
+ # default is already 1.
13
+ #
14
+ # The ideal number of threads per worker depends both on how much time the
15
+ # application spends waiting for IO operations and on how much you wish to
16
+ # prioritize throughput over latency.
17
+ #
18
+ # As a rule of thumb, increasing the number of threads will increase how much
19
+ # traffic a given process can handle (throughput), but due to CRuby's
20
+ # Global VM Lock (GVL) it has diminishing returns and will degrade the
21
+ # response time (latency) of the application.
22
+ #
23
+ # The default is set to 3 threads as it's deemed a decent compromise between
24
+ # throughput and latency for the average Rails application.
25
+ #
26
+ # Any libraries that use a connection pool or another resource pool should
27
+ # be configured to provide at least as many connections as the number of
28
+ # threads. This includes Active Record's `pool` parameter in `database.yml`.
29
+ threads_count = ENV.fetch('RAILS_MAX_THREADS', 3)
30
+ threads threads_count, threads_count
31
+
32
+ # Specifies the `port` that Puma will listen on to receive requests; default is 3000.
33
+ port ENV.fetch('PORT', 3000)
34
+
35
+ # Allow puma to be restarted by `bin/rails restart` command.
36
+ plugin :tmp_restart
37
+
38
+ # Run the Solid Queue supervisor inside of Puma for single-server deployments
39
+ plugin :solid_queue if ENV['SOLID_QUEUE_IN_PUMA']
40
+
41
+ # Specify the PID file. Defaults to tmp/pids/server.pid in development.
42
+ # In other environments, only set the PID file if requested.
43
+ pidfile ENV['PIDFILE'] if ENV['PIDFILE']
@@ -0,0 +1,35 @@
1
+ test:
2
+ service: Disk
3
+ root: <%= Rails.root.join("tmp/storage#{ENV.fetch('TEST_ENV_NUMBER', nil)}") %>
4
+
5
+ local:
6
+ service: Disk
7
+ root: <%= Rails.root.join("storage") %>
8
+
9
+ # Use rails credentials:edit to set the AWS secrets (as aws:access_key_id|secret_access_key)
10
+ # amazon:
11
+ # service: S3
12
+ # access_key_id: <%= Rails.application.credentials.dig(:aws, :access_key_id) %>
13
+ # secret_access_key: <%= Rails.application.credentials.dig(:aws, :secret_access_key) %>
14
+ # region: us-east-1
15
+ # bucket: your_own_bucket
16
+
17
+ # Remember not to checkin your GCS keyfile to a repository
18
+ # google:
19
+ # service: GCS
20
+ # project: your_project
21
+ # keyfile: <%= Rails.root.join("path/to/gcs.keyfile") %>
22
+ # bucket: your_own_bucket
23
+
24
+ # Use rails credentials:edit to set the Azure Storage secret (as azure_storage:storage_access_key)
25
+ # microsoft:
26
+ # service: AzureStorage
27
+ # path: your_azure_storage_path
28
+ # storage_account_name: your_account_name
29
+ # storage_access_key: <%= Rails.application.credentials.dig(:azure_storage, :storage_access_key) %>
30
+ # container: your_container_name
31
+
32
+ # mirror:
33
+ # service: Mirror
34
+ # primary: local
35
+ # mirrors: [ amazon, google, microsoft ]
data/config.ru ADDED
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is used by Rack-based servers to start the application.
4
+
5
+ require File.expand_path('config/environment', __dir__)
6
+ run ComfortableMediaSurfer::Application
@@ -0,0 +1,5 @@
1
+ label: Seed File
2
+ description: Seed File Description
3
+ categories:
4
+ - category_a
5
+ - category_b
@@ -0,0 +1,16 @@
1
+ [attributes]
2
+ label: Default Seed Layout
3
+
4
+ [content]
5
+ <html>
6
+ <body>
7
+ {{ cms:file header, as: image }}
8
+ {{ cms:markdown content }}
9
+ </body>
10
+ </html>
11
+
12
+ [js]
13
+ // default js
14
+
15
+ [css]
16
+ body{color: red}
@@ -0,0 +1,14 @@
1
+ [attributes]
2
+ label: Nested Seed Layout
3
+ position: 42
4
+
5
+ [content]
6
+ {{ cms:file thumbnail }}
7
+ <div class="left">{{ cms:markdown left }}</div>
8
+ <div class="right">{{ cms:markdown right }}</div>
9
+
10
+ [js]
11
+ // nested js
12
+
13
+ [css]
14
+ div{float:left}
@@ -0,0 +1,7 @@
1
+ [attributes]
2
+ label: Child Seed Page
3
+ layout: nested
4
+ target_page: '/child_b'
5
+
6
+ [textarea content]
7
+ Child A Page Seed Content
@@ -0,0 +1,6 @@
1
+ [attributes]
2
+ label: Child of Child Seed Page
3
+ layout: nested
4
+
5
+ [textares content]
6
+ Child A of Child B Page Seed Content
@@ -0,0 +1,6 @@
1
+ [attributes]
2
+ label: Child Seed Page
3
+ layout: nested
4
+
5
+ [textares content]
6
+ Child B Page Seed Content
@@ -0,0 +1,6 @@
1
+ [attributes]
2
+ label: Bienvenido
3
+ layout: default
4
+
5
+ [wysiwyg content]
6
+ Spanish Home Page Seed Content
@@ -0,0 +1,6 @@
1
+ [attributes]
2
+ label: Bienvenue
3
+ layout: default
4
+
5
+ [wysiwyg content]
6
+ French Home Page Seed Content
@@ -0,0 +1,25 @@
1
+ [attributes]
2
+ label: Home Seed Page
3
+ layout: default
4
+ position: 69
5
+ categories:
6
+ - category_a
7
+ - category_b
8
+
9
+ [file header]
10
+ header.png
11
+
12
+ [date published_on]
13
+ 2015-10-31
14
+
15
+ [wysiwyg content]
16
+ Home Page Seed Contént
17
+ {{ cms:snippet default }}
18
+
19
+ [checkbox published]
20
+ true
21
+
22
+ [files attachments]
23
+ header.png
24
+ footer.png
25
+ cms logo.png
@@ -0,0 +1,8 @@
1
+ [attributes]
2
+ label: Default Seed Snippet
3
+ categories:
4
+ - category_a
5
+ - category_b
6
+
7
+ [content]
8
+ Default Seed Snippet Content
@@ -0,0 +1,50 @@
1
+ class CreateActiveStorageTables < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :active_storage_blobs do |t|
4
+ t.string :key, null: false
5
+ t.string :filename, null: false
6
+ t.string :content_type
7
+ t.string :service_name, null: false
8
+ t.text :metadata
9
+ t.bigint :byte_size, null: false
10
+ t.string :checksum, null: true
11
+ t.datetime :created_at, null: false
12
+
13
+ t.index [ :key ], unique: true
14
+ end
15
+
16
+ if configured_service = ActiveStorage::Blob.service.name
17
+ ActiveStorage::Blob.unscoped.update_all(service_name: configured_service)
18
+ end
19
+
20
+ create_table :active_storage_attachments do |t|
21
+ t.string :name, null: false
22
+ t.references :record, null: false, polymorphic: true, index: false
23
+ t.references :blob, null: false
24
+
25
+ t.datetime :created_at, null: false
26
+
27
+ t.index [ :record_type, :record_id, :name, :blob_id ], name: "index_active_storage_attachments_uniqueness", unique: true
28
+ end
29
+
30
+ create_table :active_storage_variant_records, id: primary_key_type, if_not_exists: true do |t|
31
+ t.belongs_to :blob, null: false, index: false, type: blobs_primary_key_type
32
+ t.string :variation_digest, null: false
33
+
34
+ t.index %i[ blob_id variation_digest ], name: "index_active_storage_variant_records_uniqueness", unique: true
35
+ t.foreign_key :active_storage_blobs, column: :blob_id
36
+ end
37
+ end
38
+
39
+ private
40
+ def primary_key_type
41
+ config = Rails.configuration.generators
42
+ config.options[config.orm][:primary_key_type] || :primary_key
43
+ end
44
+
45
+ def blobs_primary_key_type
46
+ pkey_name = connection.primary_key(:active_storage_blobs)
47
+ pkey_column = connection.columns(:active_storage_blobs).find { |c| c.name == pkey_name }
48
+ pkey_column.bigint? ? :bigint : pkey_column.type
49
+ end
50
+ end
@@ -0,0 +1,142 @@
1
+ class CreateCms < ActiveRecord::Migration[5.2]
2
+
3
+ LIMIT = 16777215
4
+
5
+ def change
6
+
7
+ # -- Sites -----------------------------------------------------------------
8
+ create_table :comfy_cms_sites, force: true do |t|
9
+ t.string :label, null: false
10
+ t.string :identifier, null: false
11
+ t.string :hostname, null: false
12
+ t.string :path
13
+ t.string :locale, null: false, default: "en"
14
+ t.timestamps
15
+
16
+ t.index :hostname
17
+ end
18
+
19
+ # -- Layouts ---------------------------------------------------------------
20
+ create_table :comfy_cms_layouts, force: true do |t|
21
+ t.integer :site_id, null: false
22
+ t.integer :parent_id
23
+ t.string :app_layout
24
+ t.string :label, null: false
25
+ t.string :identifier, null: false
26
+ t.text :content, limit: LIMIT
27
+ t.text :css, limit: LIMIT
28
+ t.text :js, limit: LIMIT
29
+ t.integer :position, null: false, default: 0
30
+ t.timestamps
31
+
32
+ t.index [:parent_id, :position]
33
+ t.index [:site_id, :identifier], unique: true
34
+ end
35
+
36
+ # -- Pages -----------------------------------------------------------------
37
+ create_table :comfy_cms_pages, force: true do |t|
38
+ t.integer :site_id, null: false
39
+ t.integer :layout_id
40
+ t.integer :parent_id
41
+ t.integer :target_page_id
42
+ t.string :label, null: false
43
+ t.string :slug
44
+ t.string :full_path, null: false
45
+ t.text :content_cache, limit: LIMIT
46
+ t.integer :position, null: false, default: 0
47
+ t.integer :children_count, null: false, default: 0
48
+ t.boolean :is_published, null: false, default: true
49
+ t.timestamps
50
+
51
+ t.index [:site_id, :full_path]
52
+ t.index [:parent_id, :position]
53
+ t.index [:is_published]
54
+ end
55
+
56
+ # -- Translations ----------------------------------------------------------
57
+ create_table :comfy_cms_translations, force: true do |t|
58
+ t.string :locale, null: false
59
+ t.integer :page_id, null: false
60
+ t.integer :layout_id
61
+ t.string :label, null: false
62
+ t.text :content_cache, limit: LIMIT
63
+ t.boolean :is_published, null: false, default: true
64
+ t.timestamps
65
+
66
+ t.index [:page_id]
67
+ t.index [:locale]
68
+ t.index [:is_published]
69
+ end
70
+
71
+ # -- Fragments -------------------------------------------------------------
72
+ create_table :comfy_cms_fragments, force: true do |t|
73
+ t.references :record, polymorphic: true
74
+ t.string :identifier, null: false
75
+ t.string :tag, null: false, default: "text"
76
+ t.text :content, limit: LIMIT
77
+ t.boolean :boolean, null: false, default: false
78
+ t.datetime :datetime
79
+ t.timestamps
80
+
81
+ t.index [:identifier]
82
+ t.index [:datetime]
83
+ t.index [:boolean]
84
+ end
85
+
86
+ # -- Snippets --------------------------------------------------------------
87
+ create_table :comfy_cms_snippets, force: true do |t|
88
+ t.integer :site_id, null: false
89
+ t.string :label, null: false
90
+ t.string :identifier, null: false
91
+ t.text :content, limit: LIMIT
92
+ t.integer :position, null: false, default: 0
93
+ t.timestamps
94
+
95
+ t.index [:site_id, :identifier], unique: true
96
+ t.index [:site_id, :position]
97
+ end
98
+
99
+ # -- Files -----------------------------------------------------------------
100
+ create_table :comfy_cms_files, force: true do |t|
101
+ t.integer :site_id, null: false
102
+ t.string :label, null: false, default: ""
103
+ t.text :description, limit: 2048
104
+ t.integer :position, null: false, default: 0
105
+ t.timestamps
106
+
107
+ t.index [:site_id, :position]
108
+ end
109
+
110
+ # -- Revisions -------------------------------------------------------------
111
+ create_table :comfy_cms_revisions, force: true do |t|
112
+ t.string :record_type, null: false
113
+ t.integer :record_id, null: false
114
+ t.text :data, limit: LIMIT
115
+ t.datetime :created_at
116
+
117
+ t.index [:record_type, :record_id, :created_at],
118
+ name: "index_cms_revisions_on_rtype_and_rid_and_created_at"
119
+ end
120
+
121
+ # -- Categories ------------------------------------------------------------
122
+ create_table :comfy_cms_categories, force: true do |t|
123
+ t.integer :site_id, null: false
124
+ t.string :label, null: false
125
+ t.string :categorized_type, null: false
126
+
127
+ t.index [:site_id, :categorized_type, :label],
128
+ unique: true,
129
+ name: "index_cms_categories_on_site_id_and_cat_type_and_label"
130
+ end
131
+
132
+ create_table :comfy_cms_categorizations, force: true do |t|
133
+ t.integer :category_id, null: false
134
+ t.string :categorized_type, null: false
135
+ t.integer :categorized_id, null: false
136
+
137
+ t.index [:category_id, :categorized_type, :categorized_id],
138
+ unique: true,
139
+ name: "index_cms_categorizations_on_cat_id_and_catd_type_and_catd_id"
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,5 @@
1
+ class AddMarkdownToSnippets < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :comfy_cms_snippets, :markdown, :boolean, default: false
4
+ end
5
+ end