comfortable_media_surfer 3.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (491) hide show
  1. checksums.yaml +7 -0
  2. data/.codeclimate.yml +4 -0
  3. data/.gitattributes +2 -0
  4. data/.github/issue_template.md +19 -0
  5. data/.github/pull_request_template.md +6 -0
  6. data/.github/workflows/coveralls.yml +40 -0
  7. data/.github/workflows/rubyonrails.yml +51 -0
  8. data/.gitignore +21 -0
  9. data/.rubocop.yml +75 -0
  10. data/.travis.yml +44 -0
  11. data/CONTRIBUTING.md +35 -0
  12. data/Gemfile +38 -0
  13. data/LICENSE +20 -0
  14. data/README.md +109 -0
  15. data/Rakefile +5 -0
  16. data/app/assets/config/manifest.js +0 -0
  17. data/app/assets/fonts/comfy/admin/cms/lib/redactor-font.eot +0 -0
  18. data/app/assets/javascripts/comfy/admin/cms/application.js +39 -0
  19. data/app/assets/javascripts/comfy/admin/cms/base.js +46 -0
  20. data/app/assets/javascripts/comfy/admin/cms/categories.js +17 -0
  21. data/app/assets/javascripts/comfy/admin/cms/codemirror.js +31 -0
  22. data/app/assets/javascripts/comfy/admin/cms/custom.js +1 -0
  23. data/app/assets/javascripts/comfy/admin/cms/diff.js +10 -0
  24. data/app/assets/javascripts/comfy/admin/cms/file_link.js +67 -0
  25. data/app/assets/javascripts/comfy/admin/cms/file_upload.js +194 -0
  26. data/app/assets/javascripts/comfy/admin/cms/files_modal.js +40 -0
  27. data/app/assets/javascripts/comfy/admin/cms/page_fragments.js +22 -0
  28. data/app/assets/javascripts/comfy/admin/cms/slugify.js +34 -0
  29. data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +40 -0
  30. data/app/assets/javascripts/comfy/admin/cms/timepicker.js +30 -0
  31. data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +72 -0
  32. data/app/assets/javascripts/comfy/vendor/Moxie.swf +0 -0
  33. data/app/assets/javascripts/comfy/vendor/Moxie.xap +0 -0
  34. data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js +7 -0
  35. data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js.map +1 -0
  36. data/app/assets/javascripts/comfy/vendor/codemirror/addon/edit/closetag.js +169 -0
  37. data/app/assets/javascripts/comfy/vendor/codemirror/mode/css/css.js +832 -0
  38. data/app/assets/javascripts/comfy/vendor/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
  39. data/app/assets/javascripts/comfy/vendor/codemirror/mode/javascript/javascript.js +875 -0
  40. data/app/assets/javascripts/comfy/vendor/codemirror/mode/markdown/markdown.js +861 -0
  41. data/app/assets/javascripts/comfy/vendor/codemirror/mode/xml/xml.js +394 -0
  42. data/app/assets/javascripts/comfy/vendor/codemirror.js +9653 -0
  43. data/app/assets/javascripts/comfy/vendor/diff/diff_match_patch.min.js +49 -0
  44. data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +76 -0
  45. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ar.js +52 -0
  46. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bg.js +65 -0
  47. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bn.js +65 -0
  48. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ca.js +83 -0
  49. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cs.js +70 -0
  50. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cy.js +92 -0
  51. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/da.js +71 -0
  52. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/de.js +70 -0
  53. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/default.js +80 -0
  54. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/eo.js +73 -0
  55. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/es.js +69 -0
  56. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/et.js +73 -0
  57. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fa.js +68 -0
  58. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fi.js +69 -0
  59. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fr.js +75 -0
  60. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/gr.js +74 -0
  61. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/he.js +57 -0
  62. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hi.js +65 -0
  63. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hr.js +66 -0
  64. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hu.js +72 -0
  65. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/id.js +61 -0
  66. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/it.js +70 -0
  67. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ja.js +57 -0
  68. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ko.js +60 -0
  69. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lt.js +72 -0
  70. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lv.js +67 -0
  71. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mk.js +69 -0
  72. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mn.js +67 -0
  73. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ms.js +68 -0
  74. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/my.js +69 -0
  75. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/nl.js +75 -0
  76. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/no.js +73 -0
  77. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pa.js +65 -0
  78. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pl.js +68 -0
  79. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt-BR.js +66 -0
  80. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt.js +66 -0
  81. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ro.js +69 -0
  82. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ru.js +66 -0
  83. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/si.js +65 -0
  84. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sk.js +70 -0
  85. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sl.js +70 -0
  86. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sq.js +65 -0
  87. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sr.js +69 -0
  88. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sv.js +70 -0
  89. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/th.js +72 -0
  90. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/tr.js +66 -0
  91. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/uk.js +66 -0
  92. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/vn.js +66 -0
  93. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-CN.js +61 -0
  94. data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-TW.js +61 -0
  95. data/app/assets/javascripts/comfy/vendor/flatpickr.min.js +2 -0
  96. data/app/assets/javascripts/comfy/vendor/fontawesome.js +5 -0
  97. data/app/assets/javascripts/comfy/vendor/moxie.min.js +16 -0
  98. data/app/assets/javascripts/comfy/vendor/plupload.dev.js +2497 -0
  99. data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +53 -0
  100. data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +64 -0
  101. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ar.js +76 -0
  102. data/app/assets/javascripts/comfy/vendor/redactor/i18n/az.js +75 -0
  103. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ba.js +79 -0
  104. data/app/assets/javascripts/comfy/vendor/redactor/i18n/bg.js +77 -0
  105. data/app/assets/javascripts/comfy/vendor/redactor/i18n/by.js +77 -0
  106. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ca.js +75 -0
  107. data/app/assets/javascripts/comfy/vendor/redactor/i18n/cs.js +87 -0
  108. data/app/assets/javascripts/comfy/vendor/redactor/i18n/da.js +75 -0
  109. data/app/assets/javascripts/comfy/vendor/redactor/i18n/de.js +80 -0
  110. data/app/assets/javascripts/comfy/vendor/redactor/i18n/el.js +76 -0
  111. data/app/assets/javascripts/comfy/vendor/redactor/i18n/en.js +75 -0
  112. data/app/assets/javascripts/comfy/vendor/redactor/i18n/eo.js +76 -0
  113. data/app/assets/javascripts/comfy/vendor/redactor/i18n/es.js +75 -0
  114. data/app/assets/javascripts/comfy/vendor/redactor/i18n/es_AR.js +76 -0
  115. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fa.js +76 -0
  116. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fi.js +75 -0
  117. data/app/assets/javascripts/comfy/vendor/redactor/i18n/fr.js +75 -0
  118. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ge.js +75 -0
  119. data/app/assets/javascripts/comfy/vendor/redactor/i18n/gr.js +75 -0
  120. data/app/assets/javascripts/comfy/vendor/redactor/i18n/he.js +75 -0
  121. data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +76 -0
  122. data/app/assets/javascripts/comfy/vendor/redactor/i18n/hu.js +77 -0
  123. data/app/assets/javascripts/comfy/vendor/redactor/i18n/id.js +76 -0
  124. data/app/assets/javascripts/comfy/vendor/redactor/i18n/it.js +78 -0
  125. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ja.js +76 -0
  126. data/app/assets/javascripts/comfy/vendor/redactor/i18n/kn.js +75 -0
  127. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ko.js +76 -0
  128. data/app/assets/javascripts/comfy/vendor/redactor/i18n/lt.js +75 -0
  129. data/app/assets/javascripts/comfy/vendor/redactor/i18n/lv.js +75 -0
  130. data/app/assets/javascripts/comfy/vendor/redactor/i18n/mk.js +75 -0
  131. data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +75 -0
  132. data/app/assets/javascripts/comfy/vendor/redactor/i18n/nl.js +80 -0
  133. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +76 -0
  134. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt-BR.js +75 -0
  135. data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt.js +75 -0
  136. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ro.js +76 -0
  137. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ru.js +76 -0
  138. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sk.js +76 -0
  139. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sl.js +79 -0
  140. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sq.js +79 -0
  141. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-CIR.js +79 -0
  142. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-LAT.js +79 -0
  143. data/app/assets/javascripts/comfy/vendor/redactor/i18n/sv.js +74 -0
  144. data/app/assets/javascripts/comfy/vendor/redactor/i18n/th.js +74 -0
  145. data/app/assets/javascripts/comfy/vendor/redactor/i18n/tr.js +75 -0
  146. data/app/assets/javascripts/comfy/vendor/redactor/i18n/ua.js +77 -0
  147. data/app/assets/javascripts/comfy/vendor/redactor/i18n/uk.js +77 -0
  148. data/app/assets/javascripts/comfy/vendor/redactor/i18n/vi.js +74 -0
  149. data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-CN.js +75 -0
  150. data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-TW.js +75 -0
  151. data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +57 -0
  152. data/app/assets/javascripts/comfy/vendor/redactor/table.js +337 -0
  153. data/app/assets/javascripts/comfy/vendor/redactor/video.js +77 -0
  154. data/app/assets/javascripts/comfy/vendor/redactor.js +9561 -0
  155. data/app/assets/javascripts/comfy/vendor/sortable.min.js +5 -0
  156. data/app/assets/stylesheets/comfy/admin/cms/application.sass +11 -0
  157. data/app/assets/stylesheets/comfy/admin/cms/base.sass +256 -0
  158. data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +19 -0
  159. data/app/assets/stylesheets/comfy/admin/cms/custom.sass +1 -0
  160. data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +22 -0
  161. data/app/assets/stylesheets/comfy/vendor/bootstrap/_alert.scss +51 -0
  162. data/app/assets/stylesheets/comfy/vendor/bootstrap/_badge.scss +54 -0
  163. data/app/assets/stylesheets/comfy/vendor/bootstrap/_breadcrumb.scss +41 -0
  164. data/app/assets/stylesheets/comfy/vendor/bootstrap/_button-group.scss +163 -0
  165. data/app/assets/stylesheets/comfy/vendor/bootstrap/_buttons.scss +137 -0
  166. data/app/assets/stylesheets/comfy/vendor/bootstrap/_card.scss +289 -0
  167. data/app/assets/stylesheets/comfy/vendor/bootstrap/_carousel.scss +197 -0
  168. data/app/assets/stylesheets/comfy/vendor/bootstrap/_close.scss +41 -0
  169. data/app/assets/stylesheets/comfy/vendor/bootstrap/_code.scss +48 -0
  170. data/app/assets/stylesheets/comfy/vendor/bootstrap/_custom-forms.scss +507 -0
  171. data/app/assets/stylesheets/comfy/vendor/bootstrap/_dropdown.scss +191 -0
  172. data/app/assets/stylesheets/comfy/vendor/bootstrap/_forms.scss +330 -0
  173. data/app/assets/stylesheets/comfy/vendor/bootstrap/_functions.scss +86 -0
  174. data/app/assets/stylesheets/comfy/vendor/bootstrap/_grid.scss +52 -0
  175. data/app/assets/stylesheets/comfy/vendor/bootstrap/_images.scss +42 -0
  176. data/app/assets/stylesheets/comfy/vendor/bootstrap/_input-group.scss +193 -0
  177. data/app/assets/stylesheets/comfy/vendor/bootstrap/_jumbotron.scss +17 -0
  178. data/app/assets/stylesheets/comfy/vendor/bootstrap/_list-group.scss +149 -0
  179. data/app/assets/stylesheets/comfy/vendor/bootstrap/_media.scss +8 -0
  180. data/app/assets/stylesheets/comfy/vendor/bootstrap/_mixins.scss +47 -0
  181. data/app/assets/stylesheets/comfy/vendor/bootstrap/_modal.scss +229 -0
  182. data/app/assets/stylesheets/comfy/vendor/bootstrap/_nav.scss +120 -0
  183. data/app/assets/stylesheets/comfy/vendor/bootstrap/_navbar.scss +294 -0
  184. data/app/assets/stylesheets/comfy/vendor/bootstrap/_pagination.scss +73 -0
  185. data/app/assets/stylesheets/comfy/vendor/bootstrap/_popover.scss +171 -0
  186. data/app/assets/stylesheets/comfy/vendor/bootstrap/_print.scss +141 -0
  187. data/app/assets/stylesheets/comfy/vendor/bootstrap/_progress.scss +43 -0
  188. data/app/assets/stylesheets/comfy/vendor/bootstrap/_reboot.scss +483 -0
  189. data/app/assets/stylesheets/comfy/vendor/bootstrap/_root.scss +19 -0
  190. data/app/assets/stylesheets/comfy/vendor/bootstrap/_spinners.scss +55 -0
  191. data/app/assets/stylesheets/comfy/vendor/bootstrap/_tables.scss +185 -0
  192. data/app/assets/stylesheets/comfy/vendor/bootstrap/_toasts.scss +44 -0
  193. data/app/assets/stylesheets/comfy/vendor/bootstrap/_tooltip.scss +115 -0
  194. data/app/assets/stylesheets/comfy/vendor/bootstrap/_transitions.scss +20 -0
  195. data/app/assets/stylesheets/comfy/vendor/bootstrap/_type.scss +125 -0
  196. data/app/assets/stylesheets/comfy/vendor/bootstrap/_utilities.scss +17 -0
  197. data/app/assets/stylesheets/comfy/vendor/bootstrap/_variables.scss +1123 -0
  198. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-grid.scss +29 -0
  199. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-reboot.scss +12 -0
  200. data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap.scss +44 -0
  201. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_alert.scss +13 -0
  202. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_background-variant.scss +21 -0
  203. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_badge.scss +17 -0
  204. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_border-radius.scss +63 -0
  205. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_box-shadow.scss +20 -0
  206. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_breakpoints.scss +123 -0
  207. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_buttons.scss +107 -0
  208. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_caret.scss +62 -0
  209. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_clearfix.scss +7 -0
  210. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_deprecate.scss +10 -0
  211. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_float.scss +14 -0
  212. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_forms.scss +192 -0
  213. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_gradients.scss +45 -0
  214. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid-framework.scss +66 -0
  215. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid.scss +51 -0
  216. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_hover.scss +37 -0
  217. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_image.scss +36 -0
  218. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_list-group.scss +21 -0
  219. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_lists.scss +7 -0
  220. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
  221. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_pagination.scss +22 -0
  222. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_reset-text.scss +17 -0
  223. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_resize.scss +6 -0
  224. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_screen-reader.scss +33 -0
  225. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_size.scss +7 -0
  226. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_table-row.scss +39 -0
  227. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-emphasis.scss +16 -0
  228. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-hide.scss +11 -0
  229. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-truncate.scss +8 -0
  230. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_transition.scss +16 -0
  231. data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_visibility.scss +8 -0
  232. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_align.scss +8 -0
  233. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_background.scss +19 -0
  234. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_borders.scss +75 -0
  235. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_clearfix.scss +3 -0
  236. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_display.scss +26 -0
  237. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_embed.scss +39 -0
  238. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_flex.scss +51 -0
  239. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_float.scss +11 -0
  240. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_overflow.scss +5 -0
  241. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_position.scss +32 -0
  242. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_screenreaders.scss +11 -0
  243. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_shadows.scss +6 -0
  244. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_sizing.scss +20 -0
  245. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_spacing.scss +73 -0
  246. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_stretched-link.scss +19 -0
  247. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_text.scss +72 -0
  248. data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_visibility.scss +13 -0
  249. data/app/assets/stylesheets/comfy/vendor/bootstrap/vendor/_rfs.scss +204 -0
  250. data/app/assets/stylesheets/comfy/vendor/codemirror.css +346 -0
  251. data/app/assets/stylesheets/comfy/vendor/flatpickr.min.css +13 -0
  252. data/app/assets/stylesheets/comfy/vendor/fontawesome.css +343 -0
  253. data/app/assets/stylesheets/comfy/vendor/redactor.css +948 -0
  254. data/app/controllers/application_controller.rb +5 -0
  255. data/app/controllers/comfy/admin/base_controller.rb +20 -0
  256. data/app/controllers/comfy/admin/cms/base_controller.rb +54 -0
  257. data/app/controllers/comfy/admin/cms/categories_controller.rb +38 -0
  258. data/app/controllers/comfy/admin/cms/files_controller.rb +139 -0
  259. data/app/controllers/comfy/admin/cms/layouts_controller.rb +68 -0
  260. data/app/controllers/comfy/admin/cms/pages_controller.rb +163 -0
  261. data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +48 -0
  262. data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +16 -0
  263. data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +28 -0
  264. data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +16 -0
  265. data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +29 -0
  266. data/app/controllers/comfy/admin/cms/sites_controller.rb +68 -0
  267. data/app/controllers/comfy/admin/cms/snippets_controller.rb +65 -0
  268. data/app/controllers/comfy/admin/cms/translations_controller.rb +105 -0
  269. data/app/controllers/comfy/cms/assets_controller.rb +38 -0
  270. data/app/controllers/comfy/cms/base_controller.rb +26 -0
  271. data/app/controllers/comfy/cms/content_controller.rb +90 -0
  272. data/app/controllers/concerns/comfy/paginate.rb +11 -0
  273. data/app/controllers/concerns/comfy/reorder_action.rb +20 -0
  274. data/app/helpers/comfy/admin/cms_helper.rb +50 -0
  275. data/app/helpers/comfy/cms_helper.rb +71 -0
  276. data/app/models/comfy/cms/categorization.rb +14 -0
  277. data/app/models/comfy/cms/category.rb +22 -0
  278. data/app/models/comfy/cms/file.rb +65 -0
  279. data/app/models/comfy/cms/fragment.rb +58 -0
  280. data/app/models/comfy/cms/layout.rb +114 -0
  281. data/app/models/comfy/cms/page.rb +173 -0
  282. data/app/models/comfy/cms/revision.rb +10 -0
  283. data/app/models/comfy/cms/site.rb +93 -0
  284. data/app/models/comfy/cms/snippet.rb +43 -0
  285. data/app/models/comfy/cms/translation.rb +42 -0
  286. data/app/models/concerns/comfy/cms/with_categories.rb +51 -0
  287. data/app/models/concerns/comfy/cms/with_fragments.rb +123 -0
  288. data/app/views/comfy/admin/cms/categories/_categories.html.haml +4 -0
  289. data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -0
  290. data/app/views/comfy/admin/cms/categories/_form.html.haml +5 -0
  291. data/app/views/comfy/admin/cms/categories/_index.html.haml +28 -0
  292. data/app/views/comfy/admin/cms/categories/_show.html.haml +15 -0
  293. data/app/views/comfy/admin/cms/categories/create.js.erb +7 -0
  294. data/app/views/comfy/admin/cms/categories/destroy.js.erb +8 -0
  295. data/app/views/comfy/admin/cms/categories/edit.js.erb +3 -0
  296. data/app/views/comfy/admin/cms/categories/update.js.erb +6 -0
  297. data/app/views/comfy/admin/cms/files/_file.html.haml +31 -0
  298. data/app/views/comfy/admin/cms/files/_form.html.haml +26 -0
  299. data/app/views/comfy/admin/cms/files/_modal.html.haml +3 -0
  300. data/app/views/comfy/admin/cms/files/destroy.js.erb +4 -0
  301. data/app/views/comfy/admin/cms/files/edit.html.haml +5 -0
  302. data/app/views/comfy/admin/cms/files/index.html.haml +31 -0
  303. data/app/views/comfy/admin/cms/files/new.html.haml +5 -0
  304. data/app/views/comfy/admin/cms/fragments/_form_fragment_attachments.html.haml +23 -0
  305. data/app/views/comfy/admin/cms/fragments/_form_fragments.html.haml +38 -0
  306. data/app/views/comfy/admin/cms/layouts/_form.html.haml +20 -0
  307. data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +26 -0
  308. data/app/views/comfy/admin/cms/layouts/edit.html.haml +9 -0
  309. data/app/views/comfy/admin/cms/layouts/index.html.haml +10 -0
  310. data/app/views/comfy/admin/cms/layouts/new.html.haml +5 -0
  311. data/app/views/comfy/admin/cms/pages/_form.html.haml +31 -0
  312. data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +44 -0
  313. data/app/views/comfy/admin/cms/pages/edit.html.haml +10 -0
  314. data/app/views/comfy/admin/cms/pages/index.html.haml +13 -0
  315. data/app/views/comfy/admin/cms/pages/new.html.haml +5 -0
  316. data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +13 -0
  317. data/app/views/comfy/admin/cms/revisions/_sidebar.html.haml +2 -0
  318. data/app/views/comfy/admin/cms/revisions/show.html.haml +36 -0
  319. data/app/views/comfy/admin/cms/sites/_form.html.haml +15 -0
  320. data/app/views/comfy/admin/cms/sites/edit.html.haml +5 -0
  321. data/app/views/comfy/admin/cms/sites/index.html.haml +28 -0
  322. data/app/views/comfy/admin/cms/sites/new.html.haml +5 -0
  323. data/app/views/comfy/admin/cms/snippets/_form.html.haml +19 -0
  324. data/app/views/comfy/admin/cms/snippets/edit.html.haml +9 -0
  325. data/app/views/comfy/admin/cms/snippets/index.html.haml +33 -0
  326. data/app/views/comfy/admin/cms/snippets/new.html.haml +5 -0
  327. data/app/views/comfy/admin/cms/translations/_form.html.haml +20 -0
  328. data/app/views/comfy/admin/cms/translations/_sidebar.html.haml +19 -0
  329. data/app/views/comfy/admin/cms/translations/edit.html.haml +10 -0
  330. data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
  331. data/app/views/kaminari/comfy/_first_page.html.haml +3 -0
  332. data/app/views/kaminari/comfy/_gap.html.haml +2 -0
  333. data/app/views/kaminari/comfy/_last_page.html.haml +3 -0
  334. data/app/views/kaminari/comfy/_next_page.html.haml +2 -0
  335. data/app/views/kaminari/comfy/_page.html.haml +2 -0
  336. data/app/views/kaminari/comfy/_paginator.html.haml +11 -0
  337. data/app/views/kaminari/comfy/_prev_page.html.haml +2 -0
  338. data/app/views/layouts/comfy/admin/cms/_body.html.haml +14 -0
  339. data/app/views/layouts/comfy/admin/cms/_flash.html.haml +4 -0
  340. data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +6 -0
  341. data/app/views/layouts/comfy/admin/cms/_head.html.haml +19 -0
  342. data/app/views/layouts/comfy/admin/cms/_left.html.haml +46 -0
  343. data/app/views/layouts/comfy/admin/cms/_right.html.haml +5 -0
  344. data/app/views/layouts/comfy/admin/cms.html.haml +4 -0
  345. data/bin/bundle +3 -0
  346. data/bin/rails +4 -0
  347. data/bin/rake +4 -0
  348. data/bin/setup +36 -0
  349. data/bin/update +31 -0
  350. data/bin/yarn +11 -0
  351. data/comfortable_media_surfer.gemspec +37 -0
  352. data/config/application.rb +59 -0
  353. data/config/boot.rb +5 -0
  354. data/config/cable.yml +10 -0
  355. data/config/cms_routes.rb +8 -0
  356. data/config/database.yml +40 -0
  357. data/config/environment.rb +7 -0
  358. data/config/environments/development.rb +80 -0
  359. data/config/environments/production.rb +99 -0
  360. data/config/environments/test.rb +74 -0
  361. data/config/initializers/assets.rb +14 -0
  362. data/config/initializers/comfortable_media_surfer.rb +122 -0
  363. data/config/initializers/content_security_policy.rb +27 -0
  364. data/config/initializers/filter_parameter_logging.rb +10 -0
  365. data/config/initializers/inflections.rb +18 -0
  366. data/config/initializers/json.rb +9 -0
  367. data/config/initializers/new_framework_defaults_7_0.rb +144 -0
  368. data/config/initializers/new_framework_defaults_7_1.rb +225 -0
  369. data/config/initializers/permissions_policy.rb +15 -0
  370. data/config/locales/ar.yml +262 -0
  371. data/config/locales/ca.yml +262 -0
  372. data/config/locales/cs.yml +262 -0
  373. data/config/locales/da.yml +262 -0
  374. data/config/locales/de.yml +262 -0
  375. data/config/locales/en.yml +262 -0
  376. data/config/locales/es.yml +262 -0
  377. data/config/locales/fi.yml +262 -0
  378. data/config/locales/fr.yml +262 -0
  379. data/config/locales/gr.yml +262 -0
  380. data/config/locales/hr.yml +262 -0
  381. data/config/locales/it.yml +262 -0
  382. data/config/locales/ja.yml +262 -0
  383. data/config/locales/nb.yml +262 -0
  384. data/config/locales/nl.yml +262 -0
  385. data/config/locales/pl.yml +262 -0
  386. data/config/locales/pt-BR.yml +262 -0
  387. data/config/locales/ru.yml +262 -0
  388. data/config/locales/sk.yml +262 -0
  389. data/config/locales/sv.yml +262 -0
  390. data/config/locales/tr.yml +262 -0
  391. data/config/locales/uk.yml +262 -0
  392. data/config/locales/zh-CN.yml +262 -0
  393. data/config/locales/zh-TW.yml +262 -0
  394. data/config/storage.yml +35 -0
  395. data/config.ru +6 -0
  396. data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
  397. data/db/cms_seeds/sample-site/files/default.jpg +0 -0
  398. data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
  399. data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
  400. data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
  401. data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
  402. data/db/cms_seeds/sample-site/pages/index/cms logo.png +0 -0
  403. data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
  404. data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
  405. data/db/cms_seeds/sample-site/pages/index/content.html +25 -0
  406. data/db/cms_seeds/sample-site/pages/index/footer.png +0 -0
  407. data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
  408. data/db/cms_seeds/sample-site/snippets/default.html +8 -0
  409. data/db/migrate/00_create_active_storage_tables.active_storage.rb +50 -0
  410. data/db/migrate/01_create_cms.rb +143 -0
  411. data/gemfiles/6.1.gemfile +31 -0
  412. data/gemfiles/7.0.gemfile +31 -0
  413. data/gemfiles/7.1.gemfile +31 -0
  414. data/gemfiles/7.2.gemfile +31 -0
  415. data/lib/comfortable_media_surfer/access_control/admin_authentication.rb +22 -0
  416. data/lib/comfortable_media_surfer/access_control/admin_authorization.rb +10 -0
  417. data/lib/comfortable_media_surfer/access_control/public_authentication.rb +10 -0
  418. data/lib/comfortable_media_surfer/access_control/public_authorization.rb +10 -0
  419. data/lib/comfortable_media_surfer/configuration.rb +138 -0
  420. data/lib/comfortable_media_surfer/content/block.rb +12 -0
  421. data/lib/comfortable_media_surfer/content/params_parser.rb +149 -0
  422. data/lib/comfortable_media_surfer/content/renderer.rb +146 -0
  423. data/lib/comfortable_media_surfer/content/tag.rb +48 -0
  424. data/lib/comfortable_media_surfer/content/tags/asset.rb +57 -0
  425. data/lib/comfortable_media_surfer/content/tags/audio.rb +39 -0
  426. data/lib/comfortable_media_surfer/content/tags/breadcrumbs.rb +43 -0
  427. data/lib/comfortable_media_surfer/content/tags/checkbox.rb +27 -0
  428. data/lib/comfortable_media_surfer/content/tags/children.rb +52 -0
  429. data/lib/comfortable_media_surfer/content/tags/date.rb +19 -0
  430. data/lib/comfortable_media_surfer/content/tags/datetime.rb +42 -0
  431. data/lib/comfortable_media_surfer/content/tags/file.rb +70 -0
  432. data/lib/comfortable_media_surfer/content/tags/file_link.rb +58 -0
  433. data/lib/comfortable_media_surfer/content/tags/files.rb +41 -0
  434. data/lib/comfortable_media_surfer/content/tags/fragment.rb +64 -0
  435. data/lib/comfortable_media_surfer/content/tags/helper.rb +53 -0
  436. data/lib/comfortable_media_surfer/content/tags/image.rb +56 -0
  437. data/lib/comfortable_media_surfer/content/tags/markdown.rb +22 -0
  438. data/lib/comfortable_media_surfer/content/tags/mixins/file_content.rb +42 -0
  439. data/lib/comfortable_media_surfer/content/tags/number.rb +18 -0
  440. data/lib/comfortable_media_surfer/content/tags/page_file_link.rb +86 -0
  441. data/lib/comfortable_media_surfer/content/tags/partial.rb +47 -0
  442. data/lib/comfortable_media_surfer/content/tags/siblings.rb +66 -0
  443. data/lib/comfortable_media_surfer/content/tags/snippet.rb +36 -0
  444. data/lib/comfortable_media_surfer/content/tags/template.rb +42 -0
  445. data/lib/comfortable_media_surfer/content/tags/text.rb +18 -0
  446. data/lib/comfortable_media_surfer/content/tags/textarea.rb +19 -0
  447. data/lib/comfortable_media_surfer/content/tags/wysiwyg.rb +19 -0
  448. data/lib/comfortable_media_surfer/content/tags.rb +29 -0
  449. data/lib/comfortable_media_surfer/content.rb +11 -0
  450. data/lib/comfortable_media_surfer/engine.rb +29 -0
  451. data/lib/comfortable_media_surfer/error.rb +24 -0
  452. data/lib/comfortable_media_surfer/extensions/acts_as_tree.rb +114 -0
  453. data/lib/comfortable_media_surfer/extensions/has_revisions.rb +68 -0
  454. data/lib/comfortable_media_surfer/extensions.rb +8 -0
  455. data/lib/comfortable_media_surfer/form_builder.rb +43 -0
  456. data/lib/comfortable_media_surfer/render_methods.rb +106 -0
  457. data/lib/comfortable_media_surfer/routing.rb +79 -0
  458. data/lib/comfortable_media_surfer/seeds/file/exporter.rb +37 -0
  459. data/lib/comfortable_media_surfer/seeds/file/importer.rb +59 -0
  460. data/lib/comfortable_media_surfer/seeds/layout/exporter.rb +38 -0
  461. data/lib/comfortable_media_surfer/seeds/layout/importer.rb +60 -0
  462. data/lib/comfortable_media_surfer/seeds/page/exporter.rb +88 -0
  463. data/lib/comfortable_media_surfer/seeds/page/importer.rb +217 -0
  464. data/lib/comfortable_media_surfer/seeds/snippet/exporter.rb +32 -0
  465. data/lib/comfortable_media_surfer/seeds/snippet/importer.rb +47 -0
  466. data/lib/comfortable_media_surfer/seeds.rb +112 -0
  467. data/lib/comfortable_media_surfer/version.rb +5 -0
  468. data/lib/comfortable_media_surfer/view_hooks.rb +33 -0
  469. data/lib/comfortable_media_surfer.rb +56 -0
  470. data/lib/generators/comfy/cms/README +28 -0
  471. data/lib/generators/comfy/cms/assets_generator.rb +16 -0
  472. data/lib/generators/comfy/cms/cms_generator.rb +67 -0
  473. data/lib/generators/comfy/cms/controllers_generator.rb +15 -0
  474. data/lib/generators/comfy/cms/models_generator.rb +15 -0
  475. data/lib/generators/comfy/cms/views_generator.rb +15 -0
  476. data/lib/generators/comfy/scaffold/scaffold_generator.rb +79 -0
  477. data/lib/generators/comfy/scaffold/templates/controller.rb.tt +62 -0
  478. data/lib/generators/comfy/scaffold/templates/migration.rb.tt +11 -0
  479. data/lib/generators/comfy/scaffold/templates/model.rb.tt +21 -0
  480. data/lib/generators/comfy/scaffold/templates/tests/controller.rb.tt +115 -0
  481. data/lib/generators/comfy/scaffold/templates/tests/fixture.yml.tt +4 -0
  482. data/lib/generators/comfy/scaffold/templates/tests/model.rb.tt +26 -0
  483. data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
  484. data/lib/generators/comfy/scaffold/templates/views/edit.haml.tt +5 -0
  485. data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
  486. data/lib/generators/comfy/scaffold/templates/views/new.haml.tt +5 -0
  487. data/lib/generators/comfy/scaffold/templates/views/show.haml.tt +4 -0
  488. data/lib/tasks/cms_seeds.rake +40 -0
  489. data/public/favicon.ico +0 -0
  490. data/rakelib/create_release.rake +81 -0
  491. metadata +797 -0
@@ -0,0 +1,28 @@
1
+ .box.categories-widget
2
+
3
+ .read
4
+ .categories
5
+ .category
6
+ - active_class = params[:categories].blank?? "active" : nil
7
+ = link_to t('.all'), {categories: nil}, class: "btn btn-sm btn-light btn-block #{active_class}"
8
+ - @site.categories.of_type(type).each do |category|
9
+ = render "comfy/admin/cms/categories/show", category: category, read: true
10
+ %button.toggle-cat-edit.btn.btn-secondary.btn-sm.btn-block{type: "button"}
11
+ = t(".edit")
12
+
13
+ .editable
14
+ .categories
15
+ - @site.categories.of_type(type).each do |category|
16
+ = render "comfy/admin/cms/categories/show", category: category
17
+
18
+ - url = comfy_admin_cms_site_categories_path(@site)
19
+ = form_with scope: :category, url: url, html: {id: "new-category"}, local: false do |form|
20
+ = form.hidden_field :categorized_type, value: type
21
+ .input-group
22
+ = form.text_field :label, placeholder: t('.add_placeholder'), class: 'form-control form-control-sm', id: nil
23
+ .input-group-btn
24
+ %button.btn.btn-primary.btn-sm{aria: {label: "Create Category"}}
25
+ %i.fas.fa-fw.fa-plus
26
+
27
+ %button.toggle-cat-edit.btn.btn-light.btn-sm.btn-block{type: "button"}
28
+ = t(".done")
@@ -0,0 +1,15 @@
1
+ - read ||= false
2
+ - categories = [params[:categories]].flatten.compact
3
+ - active = categories.flatten.member?(category.label)
4
+
5
+ .category{id: dom_id(category)}
6
+ - if read
7
+ - active_class = active ? "active" : nil
8
+ - categories = active ? categories.reject{|c| c == category.label} : categories << category.label
9
+ - url = "?#{{categories: categories}.to_query}"
10
+ = link_to category.label, url, class: "btn btn-sm btn-light btn-block text-left text-truncate #{active_class}"
11
+ - else
12
+ .btn-group.d-flex
13
+ = link_to category.label, edit_comfy_admin_cms_site_category_path(@site, category), remote: true, class: "btn btn-sm btn-light w-100 text-left text-truncate"
14
+ = link_to comfy_admin_cms_site_category_path(@site, category), method: :delete, remote: true, data: {confirm: t('.are_you_sure')}, class: 'btn btn-sm btn-danger', aria: {label: "Delete Category"} do
15
+ %i.fas.fa-fw.fa-times
@@ -0,0 +1,7 @@
1
+ $('.categories-widget .editable .categories').append(
2
+ '<%= escape_javascript(render "show", category: @category) %>'
3
+ );
4
+ $('.categories-widget .read .categories').append(
5
+ '<%= escape_javascript(render "show", category: @category, read: true) %>'
6
+ );
7
+ $('.categories-widget .editable form#new-category input[name="category[label]"]').val('');
@@ -0,0 +1,8 @@
1
+ (() => {
2
+ const categoryElements = document.querySelectorAll('.categories .category#<%= dom_id(@category) %>');
3
+ jQuery(categoryElements).fadeOut('slow', () => {
4
+ for (const element of categoryElements) {
5
+ element.remove();
6
+ }
7
+ });
8
+ })();
@@ -0,0 +1,3 @@
1
+ $('.editable .category#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render "edit", category: @category ) %>'
3
+ );
@@ -0,0 +1,6 @@
1
+ $('.editable form#<%= dom_id(@category) %>').replaceWith(
2
+ '<%= escape_javascript(render "show", category: @category ) %>'
3
+ );
4
+ $('.read .category#<%= dom_id(@category) %>').replaceWith(
5
+ '<%= escape_javascript(render "show", category: @category, read: true) %>'
6
+ );
@@ -0,0 +1,31 @@
1
+ %li{data: {id: file.id}}
2
+ :ruby
3
+ file_tag = cms_file_link_tag(file)
4
+ thumb_url = url_for(file.attachment.representation(resize_to_limit: [200, nil])) if file.attachment.variable?
5
+ .row
6
+ .col-md-5.item
7
+ .item-controls.d-none.d-lg-block
8
+ - if !params[:categories].present? && @site.files.count > 1
9
+ .dragger
10
+ %i.fas.fa-bars
11
+ .item-content
12
+ .item-title
13
+ = link_to file.label, file.attachment, target: "_blank",
14
+ data: {cms_file_thumb_url: thumb_url, cms_file_link_tag: file_tag}
15
+ .item-meta
16
+ .content-type
17
+ = truncate(file.attachment.content_type)
18
+ .file-size
19
+ = number_to_human_size(file.attachment.byte_size)
20
+
21
+ .col-md-2.item-categories.d-flex.align-items-center
22
+ = render partial: "comfy/admin/cms/categories/categories", object: file
23
+
24
+ .col-md-2.d-flex.align-items-center
25
+ %span.file-path
26
+ = file_tag
27
+
28
+ .col-md-3.d-flex.align-items-center.justify-content-md-end
29
+ .btn-group.btn-group-sm
30
+ = link_to t(".edit"), edit_comfy_admin_cms_site_file_path(@site, file), class: "btn btn-outline-secondary"
31
+ = link_to t(".delete"), comfy_admin_cms_site_file_path(@site, file), method: :delete, remote: true, data: {confirm: t(".are_you_sure")}, class: "btn btn-danger"
@@ -0,0 +1,26 @@
1
+ = comfy_admin_partial "comfy/admin/cms/partials/file_form_before", form: form
2
+
3
+ = form.text_field :label
4
+ = form.file_field :file
5
+
6
+ - unless @file.new_record?
7
+
8
+ = form.form_group bootstrap: {label: {text: t('.current_file')}}do
9
+ - if @file.attachment.image?
10
+ .file-image
11
+ = image_tag @file.attachment
12
+ = link_to @file.attachment.filename, @file.attachment, target: '_blank'
13
+
14
+ = form.text_area :description
15
+
16
+ = render 'comfy/admin/cms/categories/form', form: form
17
+
18
+ = comfy_admin_partial 'comfy/admin/cms/partials/file_form_after', form: form
19
+
20
+ = form.form_actions do
21
+ = submit_tag t(@file.new_record? ? ".create" : ".update"), class: "btn btn-primary"
22
+
23
+ - unless @file.new_record?
24
+ = link_to t(".delete"), comfy_admin_cms_site_file_path(@site, @file), method: :delete, data: {confirm: t(".are_you_sure")}, class: "btn btn-danger"
25
+
26
+ = link_to t(".cancel"), comfy_admin_cms_site_files_path, class: "btn btn-link"
@@ -0,0 +1,3 @@
1
+ .modal.fade.cms-files-modal{'aria-hidden' => 'true', 'data-url' => comfy_admin_cms_site_files_path(@site, layout: false), role: 'dialog', tabindex: "-1"}
2
+ .modal-dialog.modal-lg
3
+ .modal-content
@@ -0,0 +1,4 @@
1
+ (() => {
2
+ const listItem = document.querySelector('li[data-id="<%= @file.id %>"]');
3
+ jQuery(listItem).fadeOut('slow', () => listItem.remove());
4
+ })();
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t(".title")
3
+
4
+ = comfy_form_with model: @file, scope: :file, url: {action: :update} do |form|
5
+ = render form
@@ -0,0 +1,31 @@
1
+ - content_for :right_column do
2
+ = render "comfy/admin/cms/categories/index", type: "Comfy::Cms::File"
3
+
4
+ :ruby
5
+ session_id = request.session_options[:id]
6
+ session_id_value = session_id.respond_to?(:public_id) ? session_id.public_id : session_id.to_s
7
+ cms_uploader_data = {
8
+ cms_uploader: {
9
+ url: comfy_admin_cms_site_files_path(@site, source: :plupload, categories: params[:categories]),
10
+ token: { name: request_forgery_protection_token, value: form_authenticity_token },
11
+ session: { name: Rails.application.config.session_options[:key], value: session_id_value }
12
+ }
13
+ }
14
+
15
+ #cms-uploader{data: cms_uploader_data}
16
+ #cms-uploader-drag-drop-target
17
+
18
+ .page-header
19
+ = link_to t('.new_link'), new_comfy_admin_cms_site_file_path(@site), class: "btn btn-secondary float-right", id: "cms-uploader-browse"
20
+ %h2= t('.title')
21
+
22
+ = comfy_admin_partial "comfy/admin/cms/partials/files_before"
23
+
24
+ = comfy_paginate @files
25
+
26
+ %ul.list.sortable.cms-uploader-filelist
27
+ = render partial: "file", collection: @files
28
+
29
+ = comfy_admin_partial "comfy/admin/cms/partials/files_after"
30
+
31
+ = comfy_paginate @files
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t(".title")
3
+
4
+ = comfy_form_with model: @file, scope: :file, url: {action: :create}, html: {multipart: true} do |form|
5
+ = render form
@@ -0,0 +1,23 @@
1
+ .fragment-attachments
2
+ - attachments.each do |attachment|
3
+ :ruby
4
+ thumb_url = if attachment.variable?
5
+ url_for(attachment.variant(combine_options: Comfy::Cms::File::VARIANT_SIZE[:thumb]))
6
+ end
7
+ filename = attachment.filename.to_s
8
+ truncated_filename = truncate(filename, length: 40, omission: "...#{filename.last(10)}")
9
+
10
+ link_data = {
11
+ cms_file_thumb_url: thumb_url,
12
+ cms_file_link_tag: cms_page_file_link_tag(
13
+ fragment_id: fragment_id,
14
+ attachment: attachment,
15
+ multiple: multiple
16
+ )
17
+ }
18
+
19
+ .fragment-attachment.btn-group.btn-group-sm.mb-1
20
+ = link_to truncated_filename, attachment, data: link_data, class: "btn btn-light text-truncate", target: "_blank"
21
+ = check_box_tag "#{object_name}[fragments_attributes][#{index}][file_ids_destroy][]", attachment.id, false, id: dom_id(attachment)
22
+ %label.btn.btn-light{for: dom_id(attachment)}
23
+ %i.fas.fa-fw.fa-times
@@ -0,0 +1,38 @@
1
+ - begin
2
+ - nodes = record.fragment_nodes
3
+ - namespace = nodes.group_by(&:namespace)
4
+
5
+ #form-fragments
6
+ - if nodes.empty?
7
+ .alert.alert-warning
8
+ - if record.layout
9
+ = link_to record.layout.label, edit_comfy_admin_cms_site_layout_path(@site, record.layout)
10
+ = t(".no_tags").html_safe
11
+
12
+ - else
13
+ .tabbable
14
+ - if namespace.size > 1
15
+ .row
16
+ .col-sm-2
17
+ .col-sm-10
18
+ %ul.nav.nav-tabs
19
+ - namespace.each_with_index do |(name, tags), index|
20
+ %li.nav-item
21
+ - active = index == 0 ? "active" : nil
22
+ - label = t("comfy.cms.content.namespace.#{name}", default: name.humanize)
23
+ = link_to label, "#ns-#{name}", class: "nav-link #{active}", data: {toggle: "tab"}
24
+
25
+ .tab-content
26
+ - frag_index = 0
27
+
28
+ - builder_opts = { builder: ComfortableMediaSurfer::FormBuilder, bootstrap: { layout: :horizontal }}
29
+ = fields scope, model: record, **builder_opts do |form|
30
+ - namespace.each_with_index do |(name, tags), index|
31
+ .tab-pane{id: "ns-#{name}", class: index == 0 ? "active" : nil}
32
+ - tags.each do |tag|
33
+ = form.fragment_field(tag, frag_index)
34
+ - frag_index += 1
35
+
36
+ - rescue ComfortableMediaSurfer::Content::Renderer::SyntaxError, ComfortableMediaSurfer::Content::Tag::Error => e
37
+ .alert.alert-danger
38
+ = e
@@ -0,0 +1,20 @@
1
+ = comfy_admin_partial "comfy/admin/cms/partials/layout_form_before", form: form
2
+
3
+ = form.text_field :label, data: {slugify: @layout.new_record?}
4
+ = form.text_field :identifier, data: {slug: true}
5
+
6
+ - if (options = Comfy::Cms::Layout.options_for_select(@site, @layout)).present?
7
+ = form.select :parent_id, [["---- #{t('.select_parent_layout')} ----", nil]] + options, bootstrap: {custom_control: true}
8
+
9
+ - if (options = Comfy::Cms::Layout.app_layouts_for_select(lookup_context.view_paths)).present?
10
+ = form.select :app_layout, [["---- #{t('.select_app_layout')} ----", nil]] + options, bootstrap: {custom_control: true}
11
+
12
+ = form.text_area :content, data: {'cms-cm-mode' => 'text/html'}
13
+ = form.text_area :css, data: {'cms-cm-mode' => 'css'}
14
+ = form.text_area :js, data: {'cms-cm-mode' => 'javascript'}
15
+
16
+ = comfy_admin_partial "comfy/admin/cms/partials/layout_form_after", form: form
17
+
18
+ = form.form_actions do
19
+ = submit_tag t(@layout.new_record? ? ".create" : ".update"), class: "btn btn-primary"
20
+ = link_to t('.cancel'), comfy_admin_cms_site_layouts_path, class: "btn btn-link"
@@ -0,0 +1,26 @@
1
+ - layout ||= index_branch
2
+ - has_siblings = layout.siblings.select{|l| l.site_id == @site.id}.size > 0
3
+
4
+ %li{data: {id: layout.id}}
5
+ .row
6
+ .col-md-8.item
7
+ .item-controls.d-none.d-md-block
8
+ - if has_siblings
9
+ .dragger
10
+ %i.fas.fa-bars
11
+
12
+ .item-content
13
+ .item-title
14
+ = link_to layout.label, edit_comfy_admin_cms_site_layout_path(@site, layout)
15
+ .item-meta
16
+ = layout.identifier
17
+
18
+ .col-md-4.d-flex.align-items-center.justify-content-md-end
19
+ .btn-group.btn-group-sm
20
+ = link_to t('.add_child_layout'), new_comfy_admin_cms_site_layout_path(@site, parent_id: layout.id), class: "btn btn-outline-secondary"
21
+ = link_to t('.edit'), edit_comfy_admin_cms_site_layout_path(@site, layout), class: "btn btn-outline-secondary"
22
+ = link_to t('.delete'), comfy_admin_cms_site_layout_path(@site, layout), method: :delete, data: {confirm: t('.are_you_sure')}, class: "btn btn-danger"
23
+
24
+ - if layout.children.present?
25
+ %ul.list.children.sortable.pl-md-3
26
+ = render partial: "index_branch", collection: layout.children.order(:position)
@@ -0,0 +1,9 @@
1
+ - content_for :right_column do
2
+ - link = comfy_admin_cms_site_layout_revisions_path(@site, @layout)
3
+ = render "comfy/admin/cms/revisions/sidebar", record: @layout, link: link
4
+
5
+ .page-header
6
+ %h2= t('.title')
7
+
8
+ = comfy_form_with model: @layout, scope: :layout, url: {action: :update} do |form|
9
+ = render form
@@ -0,0 +1,10 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_comfy_admin_cms_site_layout_path(@site), class: "btn btn-secondary float-right"
3
+ %h2= t('.title')
4
+
5
+ = comfy_admin_partial "comfy/admin/cms/partials/layouts_before"
6
+
7
+ %ul.list.sortable
8
+ = render partial: "index_branch", collection: @layouts
9
+
10
+ = comfy_admin_partial "comfy/admin/cms/partials/layouts_after"
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t(".title")
3
+
4
+ = comfy_form_with model: @layout, scope: :layout, url: {action: :create} do |form|
5
+ = render form
@@ -0,0 +1,31 @@
1
+ = comfy_admin_partial "comfy/admin/cms/partials/page_form_before", form: form
2
+
3
+ = form.text_field :label, data: { slugify: @page.new_record? }
4
+
5
+ - if @page.parent.present?
6
+ = form.text_field :slug, data: { slug: true }, prepend: @page.parent.full_path
7
+
8
+ - if (options = ::Comfy::Cms::Page.options_for_select(site: @site, current_page: @page, exclude_self: true)).present?
9
+ = form.select :parent_id, options, bootstrap: {custom_control: true}
10
+
11
+ - if (options = ::Comfy::Cms::Layout.options_for_select(@site)).present?
12
+ = form.select :layout_id, options, {bootstrap: {custom_control: true}}, {data: {url: form_fragments_comfy_admin_cms_site_page_path(@site, @page.id.to_i)}, id: "fragments-toggle"}
13
+
14
+ = comfy_admin_partial "comfy/admin/cms/partials/page_form_inner", form: form
15
+
16
+ #form-fragments-container
17
+ = render "comfy/admin/cms/fragments/form_fragments", record: @page, scope: :page
18
+
19
+ = render "comfy/admin/cms/categories/form", form: form
20
+
21
+ - if (options = ::Comfy::Cms::Page.options_for_select(site: @site, current_page: @page)).present?
22
+ = form.select :target_page_id, [["---- #{t('.select_target_page')} ----", nil]] + options, bootstrap: {custom_control: true}
23
+
24
+ = form.check_box :is_published
25
+
26
+ = comfy_admin_partial "comfy/admin/cms/partials/page_form_after", form: form
27
+
28
+ = form.form_actions do
29
+ = submit_tag t(".preview"), name: "preview", formtarget: "comfy-cms-preview", id: nil, class: "btn btn-secondary"
30
+ = submit_tag t(@page.new_record?? ".create" : ".update"), class: "btn btn-primary ml-sm-1"
31
+ = link_to t(".cancel"), comfy_admin_cms_site_pages_path, class: "btn btn-link"
@@ -0,0 +1,44 @@
1
+ - page ||= index_branch
2
+ - children = @pages_by_parent[page.id]
3
+ - siblings = @pages_by_parent[page.parent_id]
4
+ - has_children = children.present?
5
+ - has_siblings = siblings.size > 1
6
+ - branch_open = (session[:cms_page_tree] || []).member?(page.id.to_s) || page.root?
7
+ - category_view = params[:categories].present?
8
+
9
+ %li{id: dom_id(page), data: {id: page.id}}
10
+ .row
11
+
12
+ .col-md-6.item
13
+ - unless category_view
14
+ .item-controls
15
+ - if has_siblings
16
+ .dragger.d-none.d-md-block
17
+ %i.fas.fa-bars
18
+
19
+ - if has_children && !page.root?
20
+ - status = branch_open ? "open" : ""
21
+ - url = toggle_branch_comfy_admin_cms_site_page_path(@site, page)
22
+ = link_to url, remote: true, title: t(".toggle"), class: "toggle #{status}" do
23
+ %i.fas.fa-plus-square.expand
24
+ %i.fas.fa-minus-square.collapse
25
+
26
+ .item-content
27
+ .item-title
28
+ - published_css_class = page.is_published? ? "published" : "draft"
29
+ = link_to page.label, edit_comfy_admin_cms_site_page_path(@site, page), class: published_css_class
30
+ .item-meta
31
+ = link_to page.url, page.url, target: "_blank"
32
+
33
+ .col-md-2.item-categories.d-flex.align-items-center
34
+ = render "comfy/admin/cms/categories/categories", object: page
35
+
36
+ .col-md-4.d-flex.align-items-center.justify-content-md-end
37
+ .btn-group.btn-group-sm
38
+ = link_to t(".add_child_page"), new_comfy_admin_cms_site_page_path(@site, parent_id: page.id), class: "btn btn-outline-secondary"
39
+ = link_to t(".edit"), edit_comfy_admin_cms_site_page_path(@site, page), class: "btn btn-outline-secondary"
40
+ = link_to t(".delete"), comfy_admin_cms_site_page_path(@site, page), method: :delete, data: {confirm: t('.are_you_sure')}, class: "btn btn-danger"
41
+
42
+ - if !category_view && has_children && branch_open
43
+ %ul.list.children.sortable.pl-md-3
44
+ = render partial: "index_branch", collection: children
@@ -0,0 +1,10 @@
1
+ - content_for :right_column do
2
+ - link = comfy_admin_cms_site_page_revisions_path(@site, @page)
3
+ = render "comfy/admin/cms/revisions/sidebar", record: @page, link: link
4
+ = render "comfy/admin/cms/translations/sidebar"
5
+
6
+ .page-header
7
+ %h2= t('.title')
8
+
9
+ = comfy_form_with model: @page, scope: :page, url: {action: :update}, html: {multipart: true} do |form|
10
+ = render form
@@ -0,0 +1,13 @@
1
+ - content_for :right_column do
2
+ = render "comfy/admin/cms/categories/index", type: "Comfy::Cms::Page"
3
+
4
+ .page-header
5
+ = link_to t('.new_link'), new_comfy_admin_cms_site_page_path(@site), class: "btn btn-secondary float-right"
6
+ %h2= t('.title')
7
+
8
+ = comfy_admin_partial "comfy/admin/cms/partials/pages_before"
9
+
10
+ %ul.list.sortable
11
+ = render partial: "index_branch", collection: @pages
12
+
13
+ = comfy_admin_partial "comfy/admin/cms/partials/pages_after"
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_with model: @page, scope: :page, url: {action: :create}, html: {multipart: true} do |form|
5
+ = render form
@@ -0,0 +1,13 @@
1
+ // TODO: Extract this so the server only renders the HTML.
2
+ var li = $('li#comfy_cms_page_<%=@page.id%>');
3
+ li.find('.item .toggle').first().toggleClass('open');
4
+
5
+ <% if session[:cms_page_tree].member?(@page.id.to_s) %>
6
+ if(!li.find('ul.children')[0]) {
7
+ li.append('<ul class="children sortable pl-md-3"><%= escape_javascript(render partial: "index_branch", collection: @page.children) %></ul>');
8
+ CMS.sortableList.dispose();
9
+ CMS.sortableList.init();
10
+ }
11
+ <% else %>
12
+ li.find('ul.children').remove();
13
+ <% end %>
@@ -0,0 +1,2 @@
1
+ .box.revisions
2
+ = link_to t('.revision', count: record.revisions.count), link, class: "btn btn-sm btn-info d-block"
@@ -0,0 +1,36 @@
1
+ - content_for :right_column do
2
+ .box.revisions
3
+ - @record.revisions.order(created_at: :desc).each do |revision|
4
+ = active_link_to l(revision.created_at, format: :short), { id: revision.id }, class: "btn btn-sm btn-light d-block text-primary mb-1"
5
+
6
+ .page-header
7
+ %h2
8
+ = t('.title')
9
+ = @record.class.to_s.demodulize
10
+
11
+ .row.d-none.d-lg-flex
12
+ .col-lg-10.ml-auto
13
+ .row
14
+ .col-lg-6
15
+ .label= t('.previous')
16
+ .col-lg-6
17
+ .label= t('.current')
18
+
19
+ - @current_content.each do |label, content|
20
+ .row.revision
21
+ .col-lg-2.text-lg-right.bg-light
22
+ .label= label
23
+ .col-lg-10
24
+ .row
25
+ .col-lg-6
26
+ .content
27
+ = safe_join @versioned_content[label].to_s.split("\n"), raw("<br/>")
28
+ .col-lg-6.diff
29
+ .original.d-none= @versioned_content[label]
30
+ .current.d-none= content
31
+ .content
32
+
33
+ = comfy_form_with model: @revision, url: { action: :revert } do |form|
34
+ = form.form_actions do
35
+ = submit_tag t(".update"), class: "btn btn-primary"
36
+ = link_to t(".cancel"), record_path, class: "btn btn-link"
@@ -0,0 +1,15 @@
1
+ = comfy_admin_partial "comfy/admin/cms/partials/site_form_before", form: form
2
+
3
+ = form.text_field :label, data: {slugify: @site.new_record?}
4
+ = form.text_field :identifier, data: {slug: true}
5
+ = form.text_field :hostname
6
+ = form.text_field :path
7
+
8
+ - locales = ComfortableMediaSurfer.config.locales.to_a.collect{|l| ["#{l[1]} (#{l[0]})", l[0]]}
9
+ = form.select :locale, locales, bootstrap: {custom_control: true}
10
+
11
+ = comfy_admin_partial "comfy/admin/cms/partials/site_form_after", form: form
12
+
13
+ = form.form_actions do
14
+ = submit_tag t(@site.new_record? ? ".create" : ".update"), class: "btn btn-primary"
15
+ = link_to t(".cancel"), comfy_admin_cms_sites_path, class: "btn btn-link"
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t('.title')
3
+
4
+ = comfy_form_with model: @site, scope: :site, url: {action: :update} do |form|
5
+ = render form
@@ -0,0 +1,28 @@
1
+ .page-header
2
+ = link_to t('.new_link'), new_comfy_admin_cms_site_path, class: "btn btn-secondary float-right"
3
+ %h2= t('.title')
4
+
5
+ = comfy_admin_partial "comfy/admin/cms/partials/sites_before"
6
+
7
+ %ul.list
8
+ - @sites.each do |site|
9
+ %li
10
+ .row
11
+ .col-md-8.item
12
+ .item-content
13
+ .item-title
14
+ = link_to site.label, comfy_admin_cms_site_pages_path(site)
15
+ .item-meta
16
+ .identifier
17
+ = site.identifier
18
+ = "(#{site.locale})"
19
+ .host
20
+ = link_to site.url, site.url, target: '_blank'
21
+
22
+ .col-md-4.d-flex.align-items-center.justify-content-md-end
23
+ .btn-group.btn-group-sm
24
+ = link_to t('.select'), comfy_admin_cms_site_pages_path(site), class: 'btn btn-outline-secondary'
25
+ = link_to t('.edit'), edit_comfy_admin_cms_site_path(site), class: 'btn btn-outline-secondary'
26
+ = link_to t('.delete'), comfy_admin_cms_site_path(site), method: :delete, data: {confirm: t('.are_you_sure')}, class: 'btn btn-danger'
27
+
28
+ = comfy_admin_partial "comfy/admin/cms/partials/sites_after"
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t(".title")
3
+
4
+ = comfy_form_with model: @site, scope: :site, url: {action: :create} do |form|
5
+ = render form
@@ -0,0 +1,19 @@
1
+ = comfy_admin_partial "comfy/admin/cms/partials/snippet_form_before", form: form
2
+
3
+ = form.text_field :label, data: {slugify: @snippet.new_record?}
4
+ = form.text_field :identifier, data: {slug: true}
5
+ = form.check_box :markdown
6
+
7
+ - if @snippet.markdown
8
+ = form.text_area :content, data: {'cms-cm-mode' => 'text/x-markdown'}
9
+ - else
10
+ = form.text_area :content, data: {'cms-cm-mode' => 'text/html'}
11
+
12
+ = render 'comfy/admin/cms/categories/form', form: form
13
+
14
+ = comfy_admin_partial 'comfy/admin/cms/partials/snippet_form_after', form: form
15
+
16
+ = form.form_actions do
17
+ = submit_tag t(@snippet.new_record? ? ".create" : ".update"), class: "btn btn-primary"
18
+ = link_to t(".cancel"), comfy_admin_cms_site_snippets_path, class: "btn btn-link"
19
+
@@ -0,0 +1,9 @@
1
+ - content_for :right_column do
2
+ - link = comfy_admin_cms_site_snippet_revisions_path(@site, @snippet)
3
+ = render "comfy/admin/cms/revisions/sidebar", record: @snippet, link: link
4
+
5
+ .page-header
6
+ %h2= t('.title')
7
+
8
+ = comfy_form_with model: @snippet, scope: :snippet, url: {action: :update} do |form|
9
+ = render form
@@ -0,0 +1,33 @@
1
+ - content_for :right_column do
2
+ = render "comfy/admin/cms/categories/index", type: "Comfy::Cms::Snippet"
3
+
4
+ .page-header
5
+ = link_to t('.new_link'), new_comfy_admin_cms_site_snippet_path(@site), class: "btn btn-secondary float-right"
6
+ %h2= t('.title')
7
+
8
+ = comfy_admin_partial "comfy/admin/cms/partials/snippets_before"
9
+
10
+ %ul.list.sortable
11
+ - @snippets.each do |snippet|
12
+ %li{data: {id: snippet.id}}
13
+ .row
14
+ .col-md-6.item
15
+ .item-controls.d-none.d-lg-block
16
+ - if !params[:categories].present? && @site.snippets.count > 1
17
+ .dragger
18
+ %i.fas.fa-bars
19
+ .item-content
20
+ .item-title
21
+ = link_to snippet.label, edit_comfy_admin_cms_site_snippet_path(@site, snippet)
22
+ .item-meta
23
+ = snippet.identifier
24
+
25
+ .col-md-2.item-categories.d-flex.align-items-center
26
+ = render "comfy/admin/cms/categories/categories", object: snippet
27
+
28
+ .col-md-4.d-flex.align-items-center.justify-content-md-end
29
+ .btn-group.btn-group-sm
30
+ = link_to t('.edit'), edit_comfy_admin_cms_site_snippet_path(@site, snippet), class: 'btn btn-outline-secondary'
31
+ = link_to t('.delete'), comfy_admin_cms_site_snippet_path(@site, snippet), method: :delete, data: {confirm: t('.are_you_sure')}, class: 'btn btn-danger'
32
+
33
+ = comfy_admin_partial "comfy/admin/cms/partials/snippets_after"
@@ -0,0 +1,5 @@
1
+ .page-header
2
+ %h2= t(".title")
3
+
4
+ = comfy_form_with model: @snippet, scope: :snippet, url: {action: :create} do |form|
5
+ = render form