comfortable_media_surfer 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.codeclimate.yml +4 -0
- data/.gitattributes +2 -0
- data/.github/issue_template.md +19 -0
- data/.github/pull_request_template.md +6 -0
- data/.github/workflows/coveralls.yml +40 -0
- data/.github/workflows/rubyonrails.yml +51 -0
- data/.gitignore +21 -0
- data/.rubocop.yml +75 -0
- data/.travis.yml +44 -0
- data/CONTRIBUTING.md +35 -0
- data/Gemfile +38 -0
- data/LICENSE +20 -0
- data/README.md +109 -0
- data/Rakefile +5 -0
- data/app/assets/config/manifest.js +0 -0
- data/app/assets/fonts/comfy/admin/cms/lib/redactor-font.eot +0 -0
- data/app/assets/javascripts/comfy/admin/cms/application.js +39 -0
- data/app/assets/javascripts/comfy/admin/cms/base.js +46 -0
- data/app/assets/javascripts/comfy/admin/cms/categories.js +17 -0
- data/app/assets/javascripts/comfy/admin/cms/codemirror.js +31 -0
- data/app/assets/javascripts/comfy/admin/cms/custom.js +1 -0
- data/app/assets/javascripts/comfy/admin/cms/diff.js +10 -0
- data/app/assets/javascripts/comfy/admin/cms/file_link.js +67 -0
- data/app/assets/javascripts/comfy/admin/cms/file_upload.js +194 -0
- data/app/assets/javascripts/comfy/admin/cms/files_modal.js +40 -0
- data/app/assets/javascripts/comfy/admin/cms/page_fragments.js +22 -0
- data/app/assets/javascripts/comfy/admin/cms/slugify.js +34 -0
- data/app/assets/javascripts/comfy/admin/cms/sortable_list.js +40 -0
- data/app/assets/javascripts/comfy/admin/cms/timepicker.js +30 -0
- data/app/assets/javascripts/comfy/admin/cms/wysiwyg.js +72 -0
- data/app/assets/javascripts/comfy/vendor/Moxie.swf +0 -0
- data/app/assets/javascripts/comfy/vendor/Moxie.xap +0 -0
- data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js +7 -0
- data/app/assets/javascripts/comfy/vendor/bootstrap.bundle.min.js.map +1 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/addon/edit/closetag.js +169 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/css/css.js +832 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/javascript/javascript.js +875 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/markdown/markdown.js +861 -0
- data/app/assets/javascripts/comfy/vendor/codemirror/mode/xml/xml.js +394 -0
- data/app/assets/javascripts/comfy/vendor/codemirror.js +9653 -0
- data/app/assets/javascripts/comfy/vendor/diff/diff_match_patch.min.js +49 -0
- data/app/assets/javascripts/comfy/vendor/diff/pretty_text_diff.js +76 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ar.js +52 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bg.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/bn.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ca.js +83 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cs.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/cy.js +92 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/da.js +71 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/de.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/default.js +80 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/eo.js +73 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/es.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/et.js +73 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fa.js +68 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fi.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/fr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/gr.js +74 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/he.js +57 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hi.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hr.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/hu.js +72 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/id.js +61 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/it.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ja.js +57 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ko.js +60 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lt.js +72 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/lv.js +67 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mk.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/mn.js +67 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ms.js +68 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/my.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/nl.js +75 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/no.js +73 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pa.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pl.js +68 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt-BR.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/pt.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ro.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/ru.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/si.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sk.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sl.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sq.js +65 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sr.js +69 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/sv.js +70 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/th.js +72 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/tr.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/uk.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/vn.js +66 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-CN.js +61 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr/i18n/zh-TW.js +61 -0
- data/app/assets/javascripts/comfy/vendor/flatpickr.min.js +2 -0
- data/app/assets/javascripts/comfy/vendor/fontawesome.js +5 -0
- data/app/assets/javascripts/comfy/vendor/moxie.min.js +16 -0
- data/app/assets/javascripts/comfy/vendor/plupload.dev.js +2497 -0
- data/app/assets/javascripts/comfy/vendor/redactor/definedlinks.js +53 -0
- data/app/assets/javascripts/comfy/vendor/redactor/filemanager.js +64 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ar.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/az.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ba.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/bg.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/by.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ca.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/cs.js +87 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/da.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/de.js +80 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/el.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/en.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/eo.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/es.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/es_AR.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fa.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fi.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/fr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ge.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/gr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/he.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/hr.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/hu.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/id.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/it.js +78 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ja.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/kn.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ko.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/lt.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/lv.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/mk.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/nb.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/nl.js +80 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pl.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt-BR.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/pt.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ro.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ru.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sk.js +76 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sl.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sq.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-CIR.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sr-LAT.js +79 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/sv.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/th.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/tr.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/ua.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/uk.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/vi.js +74 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-CN.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/i18n/zh-TW.js +75 -0
- data/app/assets/javascripts/comfy/vendor/redactor/imagemanager.js +57 -0
- data/app/assets/javascripts/comfy/vendor/redactor/table.js +337 -0
- data/app/assets/javascripts/comfy/vendor/redactor/video.js +77 -0
- data/app/assets/javascripts/comfy/vendor/redactor.js +9561 -0
- data/app/assets/javascripts/comfy/vendor/sortable.min.js +5 -0
- data/app/assets/stylesheets/comfy/admin/cms/application.sass +11 -0
- data/app/assets/stylesheets/comfy/admin/cms/base.sass +256 -0
- data/app/assets/stylesheets/comfy/admin/cms/codemirror_overrides.sass +19 -0
- data/app/assets/stylesheets/comfy/admin/cms/custom.sass +1 -0
- data/app/assets/stylesheets/comfy/admin/cms/redactor_overrides.sass +22 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_alert.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_badge.scss +54 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_breadcrumb.scss +41 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_button-group.scss +163 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_buttons.scss +137 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_card.scss +289 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_carousel.scss +197 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_close.scss +41 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_code.scss +48 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_custom-forms.scss +507 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_dropdown.scss +191 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_forms.scss +330 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_functions.scss +86 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_grid.scss +52 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_images.scss +42 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_input-group.scss +193 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_jumbotron.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_list-group.scss +149 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_media.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_mixins.scss +47 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_modal.scss +229 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_nav.scss +120 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_navbar.scss +294 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_pagination.scss +73 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_popover.scss +171 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_print.scss +141 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_progress.scss +43 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_reboot.scss +483 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_root.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_spinners.scss +55 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_tables.scss +185 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_toasts.scss +44 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_tooltip.scss +115 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_transitions.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_type.scss +125 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_utilities.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/_variables.scss +1123 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-grid.scss +29 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap-reboot.scss +12 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/bootstrap.scss +44 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_alert.scss +13 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_background-variant.scss +21 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_badge.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_border-radius.scss +63 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_box-shadow.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_breakpoints.scss +123 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_buttons.scss +107 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_caret.scss +62 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_clearfix.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_deprecate.scss +10 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_float.scss +14 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_forms.scss +192 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_gradients.scss +45 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid-framework.scss +66 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_grid.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_hover.scss +37 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_image.scss +36 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_list-group.scss +21 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_lists.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_pagination.scss +22 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_reset-text.scss +17 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_resize.scss +6 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_screen-reader.scss +33 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_size.scss +7 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_table-row.scss +39 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-emphasis.scss +16 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-hide.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_text-truncate.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_transition.scss +16 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/mixins/_visibility.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_align.scss +8 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_background.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_borders.scss +75 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_clearfix.scss +3 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_display.scss +26 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_embed.scss +39 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_flex.scss +51 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_float.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_overflow.scss +5 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_position.scss +32 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_screenreaders.scss +11 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_shadows.scss +6 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_sizing.scss +20 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_spacing.scss +73 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_stretched-link.scss +19 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_text.scss +72 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/utilities/_visibility.scss +13 -0
- data/app/assets/stylesheets/comfy/vendor/bootstrap/vendor/_rfs.scss +204 -0
- data/app/assets/stylesheets/comfy/vendor/codemirror.css +346 -0
- data/app/assets/stylesheets/comfy/vendor/flatpickr.min.css +13 -0
- data/app/assets/stylesheets/comfy/vendor/fontawesome.css +343 -0
- data/app/assets/stylesheets/comfy/vendor/redactor.css +948 -0
- data/app/controllers/application_controller.rb +5 -0
- data/app/controllers/comfy/admin/base_controller.rb +20 -0
- data/app/controllers/comfy/admin/cms/base_controller.rb +54 -0
- data/app/controllers/comfy/admin/cms/categories_controller.rb +38 -0
- data/app/controllers/comfy/admin/cms/files_controller.rb +139 -0
- data/app/controllers/comfy/admin/cms/layouts_controller.rb +68 -0
- data/app/controllers/comfy/admin/cms/pages_controller.rb +163 -0
- data/app/controllers/comfy/admin/cms/revisions/base_controller.rb +48 -0
- data/app/controllers/comfy/admin/cms/revisions/layout_controller.rb +16 -0
- data/app/controllers/comfy/admin/cms/revisions/page_controller.rb +28 -0
- data/app/controllers/comfy/admin/cms/revisions/snippet_controller.rb +16 -0
- data/app/controllers/comfy/admin/cms/revisions/translation_controller.rb +29 -0
- data/app/controllers/comfy/admin/cms/sites_controller.rb +68 -0
- data/app/controllers/comfy/admin/cms/snippets_controller.rb +65 -0
- data/app/controllers/comfy/admin/cms/translations_controller.rb +105 -0
- data/app/controllers/comfy/cms/assets_controller.rb +38 -0
- data/app/controllers/comfy/cms/base_controller.rb +26 -0
- data/app/controllers/comfy/cms/content_controller.rb +90 -0
- data/app/controllers/concerns/comfy/paginate.rb +11 -0
- data/app/controllers/concerns/comfy/reorder_action.rb +20 -0
- data/app/helpers/comfy/admin/cms_helper.rb +50 -0
- data/app/helpers/comfy/cms_helper.rb +71 -0
- data/app/models/comfy/cms/categorization.rb +14 -0
- data/app/models/comfy/cms/category.rb +22 -0
- data/app/models/comfy/cms/file.rb +65 -0
- data/app/models/comfy/cms/fragment.rb +58 -0
- data/app/models/comfy/cms/layout.rb +114 -0
- data/app/models/comfy/cms/page.rb +173 -0
- data/app/models/comfy/cms/revision.rb +10 -0
- data/app/models/comfy/cms/site.rb +93 -0
- data/app/models/comfy/cms/snippet.rb +43 -0
- data/app/models/comfy/cms/translation.rb +42 -0
- data/app/models/concerns/comfy/cms/with_categories.rb +51 -0
- data/app/models/concerns/comfy/cms/with_fragments.rb +123 -0
- data/app/views/comfy/admin/cms/categories/_categories.html.haml +4 -0
- data/app/views/comfy/admin/cms/categories/_edit.html.haml +7 -0
- data/app/views/comfy/admin/cms/categories/_form.html.haml +5 -0
- data/app/views/comfy/admin/cms/categories/_index.html.haml +28 -0
- data/app/views/comfy/admin/cms/categories/_show.html.haml +15 -0
- data/app/views/comfy/admin/cms/categories/create.js.erb +7 -0
- data/app/views/comfy/admin/cms/categories/destroy.js.erb +8 -0
- data/app/views/comfy/admin/cms/categories/edit.js.erb +3 -0
- data/app/views/comfy/admin/cms/categories/update.js.erb +6 -0
- data/app/views/comfy/admin/cms/files/_file.html.haml +31 -0
- data/app/views/comfy/admin/cms/files/_form.html.haml +26 -0
- data/app/views/comfy/admin/cms/files/_modal.html.haml +3 -0
- data/app/views/comfy/admin/cms/files/destroy.js.erb +4 -0
- data/app/views/comfy/admin/cms/files/edit.html.haml +5 -0
- data/app/views/comfy/admin/cms/files/index.html.haml +31 -0
- data/app/views/comfy/admin/cms/files/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/fragments/_form_fragment_attachments.html.haml +23 -0
- data/app/views/comfy/admin/cms/fragments/_form_fragments.html.haml +38 -0
- data/app/views/comfy/admin/cms/layouts/_form.html.haml +20 -0
- data/app/views/comfy/admin/cms/layouts/_index_branch.html.haml +26 -0
- data/app/views/comfy/admin/cms/layouts/edit.html.haml +9 -0
- data/app/views/comfy/admin/cms/layouts/index.html.haml +10 -0
- data/app/views/comfy/admin/cms/layouts/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/pages/_form.html.haml +31 -0
- data/app/views/comfy/admin/cms/pages/_index_branch.html.haml +44 -0
- data/app/views/comfy/admin/cms/pages/edit.html.haml +10 -0
- data/app/views/comfy/admin/cms/pages/index.html.haml +13 -0
- data/app/views/comfy/admin/cms/pages/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/pages/toggle_branch.js.erb +13 -0
- data/app/views/comfy/admin/cms/revisions/_sidebar.html.haml +2 -0
- data/app/views/comfy/admin/cms/revisions/show.html.haml +36 -0
- data/app/views/comfy/admin/cms/sites/_form.html.haml +15 -0
- data/app/views/comfy/admin/cms/sites/edit.html.haml +5 -0
- data/app/views/comfy/admin/cms/sites/index.html.haml +28 -0
- data/app/views/comfy/admin/cms/sites/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/snippets/_form.html.haml +19 -0
- data/app/views/comfy/admin/cms/snippets/edit.html.haml +9 -0
- data/app/views/comfy/admin/cms/snippets/index.html.haml +33 -0
- data/app/views/comfy/admin/cms/snippets/new.html.haml +5 -0
- data/app/views/comfy/admin/cms/translations/_form.html.haml +20 -0
- data/app/views/comfy/admin/cms/translations/_sidebar.html.haml +19 -0
- data/app/views/comfy/admin/cms/translations/edit.html.haml +10 -0
- data/app/views/comfy/admin/cms/translations/new.html.haml +5 -0
- data/app/views/kaminari/comfy/_first_page.html.haml +3 -0
- data/app/views/kaminari/comfy/_gap.html.haml +2 -0
- data/app/views/kaminari/comfy/_last_page.html.haml +3 -0
- data/app/views/kaminari/comfy/_next_page.html.haml +2 -0
- data/app/views/kaminari/comfy/_page.html.haml +2 -0
- data/app/views/kaminari/comfy/_paginator.html.haml +11 -0
- data/app/views/kaminari/comfy/_prev_page.html.haml +2 -0
- data/app/views/layouts/comfy/admin/cms/_body.html.haml +14 -0
- data/app/views/layouts/comfy/admin/cms/_flash.html.haml +4 -0
- data/app/views/layouts/comfy/admin/cms/_footer_js.html.haml +6 -0
- data/app/views/layouts/comfy/admin/cms/_head.html.haml +19 -0
- data/app/views/layouts/comfy/admin/cms/_left.html.haml +46 -0
- data/app/views/layouts/comfy/admin/cms/_right.html.haml +5 -0
- data/app/views/layouts/comfy/admin/cms.html.haml +4 -0
- data/bin/bundle +3 -0
- data/bin/rails +4 -0
- data/bin/rake +4 -0
- data/bin/setup +36 -0
- data/bin/update +31 -0
- data/bin/yarn +11 -0
- data/comfortable_media_surfer.gemspec +37 -0
- data/config/application.rb +59 -0
- data/config/boot.rb +5 -0
- data/config/cable.yml +10 -0
- data/config/cms_routes.rb +8 -0
- data/config/database.yml +40 -0
- data/config/environment.rb +7 -0
- data/config/environments/development.rb +80 -0
- data/config/environments/production.rb +99 -0
- data/config/environments/test.rb +74 -0
- data/config/initializers/assets.rb +14 -0
- data/config/initializers/comfortable_media_surfer.rb +122 -0
- data/config/initializers/content_security_policy.rb +27 -0
- data/config/initializers/filter_parameter_logging.rb +10 -0
- data/config/initializers/inflections.rb +18 -0
- data/config/initializers/json.rb +9 -0
- data/config/initializers/new_framework_defaults_7_0.rb +144 -0
- data/config/initializers/new_framework_defaults_7_1.rb +225 -0
- data/config/initializers/permissions_policy.rb +15 -0
- data/config/locales/ar.yml +262 -0
- data/config/locales/ca.yml +262 -0
- data/config/locales/cs.yml +262 -0
- data/config/locales/da.yml +262 -0
- data/config/locales/de.yml +262 -0
- data/config/locales/en.yml +262 -0
- data/config/locales/es.yml +262 -0
- data/config/locales/fi.yml +262 -0
- data/config/locales/fr.yml +262 -0
- data/config/locales/gr.yml +262 -0
- data/config/locales/hr.yml +262 -0
- data/config/locales/it.yml +262 -0
- data/config/locales/ja.yml +262 -0
- data/config/locales/nb.yml +262 -0
- data/config/locales/nl.yml +262 -0
- data/config/locales/pl.yml +262 -0
- data/config/locales/pt-BR.yml +262 -0
- data/config/locales/ru.yml +262 -0
- data/config/locales/sk.yml +262 -0
- data/config/locales/sv.yml +262 -0
- data/config/locales/tr.yml +262 -0
- data/config/locales/uk.yml +262 -0
- data/config/locales/zh-CN.yml +262 -0
- data/config/locales/zh-TW.yml +262 -0
- data/config/storage.yml +35 -0
- data/config.ru +6 -0
- data/db/cms_seeds/sample-site/files/_default.jpg.yml +5 -0
- data/db/cms_seeds/sample-site/files/default.jpg +0 -0
- data/db/cms_seeds/sample-site/layouts/default/content.html +16 -0
- data/db/cms_seeds/sample-site/layouts/default/nested/content.html +14 -0
- data/db/cms_seeds/sample-site/pages/index/child_a/content.html +7 -0
- data/db/cms_seeds/sample-site/pages/index/child_b/content.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/cms logo.png +0 -0
- data/db/cms_seeds/sample-site/pages/index/content.es.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/content.fr.html +6 -0
- data/db/cms_seeds/sample-site/pages/index/content.html +25 -0
- data/db/cms_seeds/sample-site/pages/index/footer.png +0 -0
- data/db/cms_seeds/sample-site/pages/index/header.png +0 -0
- data/db/cms_seeds/sample-site/snippets/default.html +8 -0
- data/db/migrate/00_create_active_storage_tables.active_storage.rb +50 -0
- data/db/migrate/01_create_cms.rb +143 -0
- data/gemfiles/6.1.gemfile +31 -0
- data/gemfiles/7.0.gemfile +31 -0
- data/gemfiles/7.1.gemfile +31 -0
- data/gemfiles/7.2.gemfile +31 -0
- data/lib/comfortable_media_surfer/access_control/admin_authentication.rb +22 -0
- data/lib/comfortable_media_surfer/access_control/admin_authorization.rb +10 -0
- data/lib/comfortable_media_surfer/access_control/public_authentication.rb +10 -0
- data/lib/comfortable_media_surfer/access_control/public_authorization.rb +10 -0
- data/lib/comfortable_media_surfer/configuration.rb +138 -0
- data/lib/comfortable_media_surfer/content/block.rb +12 -0
- data/lib/comfortable_media_surfer/content/params_parser.rb +149 -0
- data/lib/comfortable_media_surfer/content/renderer.rb +146 -0
- data/lib/comfortable_media_surfer/content/tag.rb +48 -0
- data/lib/comfortable_media_surfer/content/tags/asset.rb +57 -0
- data/lib/comfortable_media_surfer/content/tags/audio.rb +39 -0
- data/lib/comfortable_media_surfer/content/tags/breadcrumbs.rb +43 -0
- data/lib/comfortable_media_surfer/content/tags/checkbox.rb +27 -0
- data/lib/comfortable_media_surfer/content/tags/children.rb +52 -0
- data/lib/comfortable_media_surfer/content/tags/date.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags/datetime.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/file.rb +70 -0
- data/lib/comfortable_media_surfer/content/tags/file_link.rb +58 -0
- data/lib/comfortable_media_surfer/content/tags/files.rb +41 -0
- data/lib/comfortable_media_surfer/content/tags/fragment.rb +64 -0
- data/lib/comfortable_media_surfer/content/tags/helper.rb +53 -0
- data/lib/comfortable_media_surfer/content/tags/image.rb +56 -0
- data/lib/comfortable_media_surfer/content/tags/markdown.rb +22 -0
- data/lib/comfortable_media_surfer/content/tags/mixins/file_content.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/number.rb +18 -0
- data/lib/comfortable_media_surfer/content/tags/page_file_link.rb +86 -0
- data/lib/comfortable_media_surfer/content/tags/partial.rb +47 -0
- data/lib/comfortable_media_surfer/content/tags/siblings.rb +66 -0
- data/lib/comfortable_media_surfer/content/tags/snippet.rb +36 -0
- data/lib/comfortable_media_surfer/content/tags/template.rb +42 -0
- data/lib/comfortable_media_surfer/content/tags/text.rb +18 -0
- data/lib/comfortable_media_surfer/content/tags/textarea.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags/wysiwyg.rb +19 -0
- data/lib/comfortable_media_surfer/content/tags.rb +29 -0
- data/lib/comfortable_media_surfer/content.rb +11 -0
- data/lib/comfortable_media_surfer/engine.rb +29 -0
- data/lib/comfortable_media_surfer/error.rb +24 -0
- data/lib/comfortable_media_surfer/extensions/acts_as_tree.rb +114 -0
- data/lib/comfortable_media_surfer/extensions/has_revisions.rb +68 -0
- data/lib/comfortable_media_surfer/extensions.rb +8 -0
- data/lib/comfortable_media_surfer/form_builder.rb +43 -0
- data/lib/comfortable_media_surfer/render_methods.rb +106 -0
- data/lib/comfortable_media_surfer/routing.rb +79 -0
- data/lib/comfortable_media_surfer/seeds/file/exporter.rb +37 -0
- data/lib/comfortable_media_surfer/seeds/file/importer.rb +59 -0
- data/lib/comfortable_media_surfer/seeds/layout/exporter.rb +38 -0
- data/lib/comfortable_media_surfer/seeds/layout/importer.rb +60 -0
- data/lib/comfortable_media_surfer/seeds/page/exporter.rb +88 -0
- data/lib/comfortable_media_surfer/seeds/page/importer.rb +217 -0
- data/lib/comfortable_media_surfer/seeds/snippet/exporter.rb +32 -0
- data/lib/comfortable_media_surfer/seeds/snippet/importer.rb +47 -0
- data/lib/comfortable_media_surfer/seeds.rb +112 -0
- data/lib/comfortable_media_surfer/version.rb +5 -0
- data/lib/comfortable_media_surfer/view_hooks.rb +33 -0
- data/lib/comfortable_media_surfer.rb +56 -0
- data/lib/generators/comfy/cms/README +28 -0
- data/lib/generators/comfy/cms/assets_generator.rb +16 -0
- data/lib/generators/comfy/cms/cms_generator.rb +67 -0
- data/lib/generators/comfy/cms/controllers_generator.rb +15 -0
- data/lib/generators/comfy/cms/models_generator.rb +15 -0
- data/lib/generators/comfy/cms/views_generator.rb +15 -0
- data/lib/generators/comfy/scaffold/scaffold_generator.rb +79 -0
- data/lib/generators/comfy/scaffold/templates/controller.rb.tt +62 -0
- data/lib/generators/comfy/scaffold/templates/migration.rb.tt +11 -0
- data/lib/generators/comfy/scaffold/templates/model.rb.tt +21 -0
- data/lib/generators/comfy/scaffold/templates/tests/controller.rb.tt +115 -0
- data/lib/generators/comfy/scaffold/templates/tests/fixture.yml.tt +4 -0
- data/lib/generators/comfy/scaffold/templates/tests/model.rb.tt +26 -0
- data/lib/generators/comfy/scaffold/templates/views/_form.haml.tt +7 -0
- data/lib/generators/comfy/scaffold/templates/views/edit.haml.tt +5 -0
- data/lib/generators/comfy/scaffold/templates/views/index.haml.tt +21 -0
- data/lib/generators/comfy/scaffold/templates/views/new.haml.tt +5 -0
- data/lib/generators/comfy/scaffold/templates/views/show.haml.tt +4 -0
- data/lib/tasks/cms_seeds.rake +40 -0
- data/public/favicon.ico +0 -0
- data/rakelib/create_release.rake +81 -0
- metadata +797 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 5ebf4f5ffb32f8c4e6aa359c897a5d35aead15a9c3839fc7e41af49db4f44676
|
4
|
+
data.tar.gz: cec761f797bc01265e44d5f64f9426a59eb5940e722ab2f149b29e8d7dec818f
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: c301e8f8152f0eaeadda3f7560f0926370987fda15647218701751953d712891e97aeedda19d462cbf054c50d2a9e56a85c8381640a5200dd623cd6b1a744760
|
7
|
+
data.tar.gz: 2aa71081385b605f87e1f9d4642f0ca4f3f92a9fd91e9b927562ec289adb3f3f71111d05f15ebb2e61f62491c61e1a2f7655bf9ca53787dd852678f091361e72
|
data/.codeclimate.yml
ADDED
data/.gitattributes
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
### Expected behavior
|
2
|
+
Tell us what should happen
|
3
|
+
|
4
|
+
### Actual behavior
|
5
|
+
Tell us what does happen
|
6
|
+
|
7
|
+
### Steps to reproduce
|
8
|
+
Things that help:
|
9
|
+
|
10
|
+
* Describe the issue in detail.
|
11
|
+
* Add relevant code snippets.
|
12
|
+
* Create a failing test case.
|
13
|
+
|
14
|
+
### System configuration
|
15
|
+
**Rails version**:
|
16
|
+
|
17
|
+
**CMS version**:
|
18
|
+
|
19
|
+
**Ruby version**:
|
@@ -0,0 +1,40 @@
|
|
1
|
+
name: "Coveralls"
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- main
|
6
|
+
pull_request:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
coveralls:
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby-version:
|
13
|
+
- "3.3"
|
14
|
+
rails-version:
|
15
|
+
- "7.1"
|
16
|
+
continue-on-error: [true]
|
17
|
+
name: ${{ format('Coverage (Ruby {0}, Rails {1})', matrix.ruby-version, matrix.rails-version) }}
|
18
|
+
runs-on: ubuntu-latest
|
19
|
+
continue-on-error: ${{ matrix.continue-on-error }}
|
20
|
+
env:
|
21
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.rails-version }}.gemfile
|
22
|
+
RAILS_ENV: test
|
23
|
+
COVERALLS_REPO_TOKEN: ${{ secrets.COVERALLS_REPO_TOKEN }}
|
24
|
+
|
25
|
+
steps:
|
26
|
+
- name: Checkout source
|
27
|
+
uses: actions/checkout@v2
|
28
|
+
|
29
|
+
- name: Install Ruby ${{ matrix.ruby-version }}
|
30
|
+
uses: ruby/setup-ruby@v1
|
31
|
+
with:
|
32
|
+
ruby-version: ${{ matrix.ruby-version }}
|
33
|
+
|
34
|
+
- name: Run tests, report coverage
|
35
|
+
run: |
|
36
|
+
bin/bundle install --retry 3 --quiet
|
37
|
+
bin/bundle exec rails db:drop
|
38
|
+
bin/bundle exec rails db:create
|
39
|
+
bin/bundle exec rails db:migrate
|
40
|
+
bin/bundle exec rails test:db
|
@@ -0,0 +1,51 @@
|
|
1
|
+
name: "Rails CI"
|
2
|
+
on:
|
3
|
+
push:
|
4
|
+
branches:
|
5
|
+
- main
|
6
|
+
pull_request:
|
7
|
+
|
8
|
+
jobs:
|
9
|
+
build_test_lint_audit:
|
10
|
+
strategy:
|
11
|
+
matrix:
|
12
|
+
ruby-version:
|
13
|
+
- "3.1"
|
14
|
+
- "3.2"
|
15
|
+
- "3.3"
|
16
|
+
rails-version:
|
17
|
+
- "6.1"
|
18
|
+
- "7.1"
|
19
|
+
- "7.2"
|
20
|
+
continue-on-error: [true]
|
21
|
+
name: ${{ format('Tests (Ruby {0}, Rails {1})', matrix.ruby-version, matrix.rails-version) }}
|
22
|
+
runs-on: ubuntu-latest
|
23
|
+
continue-on-error: ${{ matrix.continue-on-error }}
|
24
|
+
env:
|
25
|
+
BUNDLE_GEMFILE: ${{ github.workspace }}/gemfiles/${{ matrix.rails-version }}.gemfile
|
26
|
+
RAILS_ENV: test
|
27
|
+
SKIP_COV: true
|
28
|
+
steps:
|
29
|
+
- name: Checkout source
|
30
|
+
uses: actions/checkout@v2
|
31
|
+
|
32
|
+
- name: Install Ruby ${{ matrix.ruby-version }}
|
33
|
+
uses: ruby/setup-ruby@v1
|
34
|
+
with:
|
35
|
+
ruby-version: ${{ matrix.ruby-version }}
|
36
|
+
|
37
|
+
- name: Run tests
|
38
|
+
run: |
|
39
|
+
bin/bundle install --retry 3 --quiet
|
40
|
+
bin/bundle exec rails db:drop
|
41
|
+
bin/bundle exec rails db:create
|
42
|
+
bin/bundle exec rails db:migrate
|
43
|
+
bin/bundle exec rails test:db
|
44
|
+
|
45
|
+
- name: Lint the code
|
46
|
+
run: bin/bundle exec rubocop --parallel
|
47
|
+
|
48
|
+
- name: Audit for security
|
49
|
+
run: |
|
50
|
+
bin/bundle exec brakeman -q -w3
|
51
|
+
bin/bundle exec bundler-audit --update --gemfile-lock gemfiles/${{ matrix.rails-version }}.gemfile.lock
|
data/.gitignore
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
.bundle
|
2
|
+
db/*.sqlite3*
|
3
|
+
log/*
|
4
|
+
tmp/**/*
|
5
|
+
.DS_Store
|
6
|
+
db/schema.rb
|
7
|
+
db/development_structure.sql
|
8
|
+
db/test.sqlite3-journal
|
9
|
+
pkg
|
10
|
+
rdoc
|
11
|
+
/tmp
|
12
|
+
public/system/
|
13
|
+
Gemfile.lock
|
14
|
+
.rvmrc
|
15
|
+
.ruby-version
|
16
|
+
.ruby-gemset
|
17
|
+
/.sass-cache
|
18
|
+
coverage/
|
19
|
+
/storage
|
20
|
+
db/cms_fixtures/test-site/
|
21
|
+
.idea
|
data/.rubocop.yml
ADDED
@@ -0,0 +1,75 @@
|
|
1
|
+
require:
|
2
|
+
# - rubocop-rails
|
3
|
+
# - rubocop-minitest
|
4
|
+
|
5
|
+
AllCops:
|
6
|
+
TargetRubyVersion: 3.0
|
7
|
+
NewCops: enable
|
8
|
+
Exclude:
|
9
|
+
- bin/*
|
10
|
+
- db/schema.rb
|
11
|
+
- db/migrate/**/*
|
12
|
+
- test/fixtures/**/*
|
13
|
+
- tmp/**/*
|
14
|
+
- vendor/bundle/**/*
|
15
|
+
|
16
|
+
# -- Layout --------------------------------------------------------------------
|
17
|
+
Layout/FirstArrayElementIndentation:
|
18
|
+
EnforcedStyle: consistent
|
19
|
+
|
20
|
+
Layout/LineLength:
|
21
|
+
Max: 148
|
22
|
+
|
23
|
+
Layout/MultilineMethodCallIndentation:
|
24
|
+
EnforcedStyle: indented
|
25
|
+
|
26
|
+
Layout/AccessModifierIndentation:
|
27
|
+
EnforcedStyle: outdent
|
28
|
+
|
29
|
+
# -- Metrics -------------------------------------------------------------------
|
30
|
+
Metrics/AbcSize:
|
31
|
+
Enabled: false
|
32
|
+
|
33
|
+
Metrics/BlockLength:
|
34
|
+
Max: 45
|
35
|
+
|
36
|
+
Metrics/ClassLength:
|
37
|
+
Enabled: false
|
38
|
+
|
39
|
+
Metrics/CyclomaticComplexity:
|
40
|
+
Max: 12
|
41
|
+
|
42
|
+
Metrics/MethodLength:
|
43
|
+
Enabled: false
|
44
|
+
|
45
|
+
Metrics/PerceivedComplexity:
|
46
|
+
Max: 15
|
47
|
+
|
48
|
+
# -- Naming --------------------------------------------------------------------
|
49
|
+
Naming/MethodParameterName:
|
50
|
+
Enabled: false
|
51
|
+
|
52
|
+
# -- Style ---------------------------------------------------------------------
|
53
|
+
Style/ClassAndModuleChildren:
|
54
|
+
Enabled: false
|
55
|
+
|
56
|
+
Style/Documentation:
|
57
|
+
Enabled: false
|
58
|
+
|
59
|
+
Style/DocumentDynamicEvalDefinition:
|
60
|
+
Enabled: false
|
61
|
+
|
62
|
+
Style/IfUnlessModifier:
|
63
|
+
Enabled: false
|
64
|
+
|
65
|
+
Style/Lambda:
|
66
|
+
EnforcedStyle: literal
|
67
|
+
|
68
|
+
Style/OptionalBooleanParameter:
|
69
|
+
Enabled: false
|
70
|
+
|
71
|
+
Style/SafeNavigation:
|
72
|
+
Enabled: false
|
73
|
+
|
74
|
+
Style/RegexpLiteral:
|
75
|
+
EnforcedStyle: percent_r
|
data/.travis.yml
ADDED
@@ -0,0 +1,44 @@
|
|
1
|
+
dist: xenial
|
2
|
+
services:
|
3
|
+
- xvfb
|
4
|
+
addons:
|
5
|
+
sources:
|
6
|
+
- google-chrome
|
7
|
+
apt:
|
8
|
+
packages:
|
9
|
+
- google-chrome-stable
|
10
|
+
|
11
|
+
language: ruby
|
12
|
+
rvm:
|
13
|
+
- 2.3.8
|
14
|
+
- 2.4.9
|
15
|
+
- 2.5.7
|
16
|
+
- 2.6.5
|
17
|
+
gemfile:
|
18
|
+
- test/gemfiles/5.2.gemfile
|
19
|
+
jobs:
|
20
|
+
include:
|
21
|
+
- rvm: 2.5.7
|
22
|
+
gemfile: test/gemfiles/6.0.gemfile
|
23
|
+
- rvm: 2.6.5
|
24
|
+
gemfile: test/gemfiles/6.0.gemfile
|
25
|
+
branches:
|
26
|
+
only:
|
27
|
+
- master
|
28
|
+
before_install:
|
29
|
+
- gem update --system
|
30
|
+
- gem update bundler
|
31
|
+
before_script:
|
32
|
+
- wget http://chromedriver.storage.googleapis.com/2.36/chromedriver_linux64.zip
|
33
|
+
- unzip chromedriver_linux64.zip
|
34
|
+
- sudo apt-get install libnss3
|
35
|
+
- sudo apt-get --only-upgrade install google-chrome-stable
|
36
|
+
- sudo cp chromedriver /usr/local/bin/.
|
37
|
+
- sudo chmod +x /usr/local/bin/chromedriver
|
38
|
+
- export DISPLAY=:99.0
|
39
|
+
- sleep 3
|
40
|
+
script:
|
41
|
+
- bundle exec rake db:migrate
|
42
|
+
- bundle exec rake test
|
43
|
+
- SKIP_COV=true bundle exec rake test:system
|
44
|
+
- bundle exec rubocop
|
data/CONTRIBUTING.md
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
# Contributing
|
2
|
+
|
3
|
+
Contribute your code to ComfortableMediaSurfer in 5 easy steps:
|
4
|
+
|
5
|
+
### 1. Fork it
|
6
|
+
|
7
|
+
Fork the project. Optionally, create a branch you want to work on.
|
8
|
+
|
9
|
+
### 2. Get it running locally
|
10
|
+
|
11
|
+
- Install gem dependencies with `bundle install`
|
12
|
+
- There's nothing to configure, by default database is SQLite so it will be
|
13
|
+
created for you. Just run `bundle exec rake db:migrate`
|
14
|
+
- Make sure that existing tests are passing by running `bundle exec rake test`
|
15
|
+
- There are system tests that can be run with `bundle exec rake test:system`.
|
16
|
+
You need to have `chromedriver` installed for that.
|
17
|
+
- You should be able to start the app via `bin/rails s` and navigate to http://localhost:3000/admin
|
18
|
+
|
19
|
+
### 3. Hack away
|
20
|
+
|
21
|
+
- Create a few small pull requests instead of a humoungous one. I can merge small stuff faster.
|
22
|
+
- When adding new code just make sure it follows the same slyle as the existing code.
|
23
|
+
- Avoid adding 3rd party dependencies if you can.
|
24
|
+
- Tests please, but nothing complicated. UnitTest / Fixtures all the way. Make sure all tests pass.
|
25
|
+
- Run `bundle exec rubocop` and fix any issues raised.
|
26
|
+
|
27
|
+
### 4. Make a pull request
|
28
|
+
|
29
|
+
- If you never done it before read this: https://help.github.com/articles/using-pull-requests
|
30
|
+
- When PR is submitted check if TravisCI ran all tests successfully and Rubocop didn't raise any issues
|
31
|
+
|
32
|
+
### 5. Done!
|
33
|
+
|
34
|
+
If everything is good your changes will be merged into master branch. Eventually
|
35
|
+
a new version of gem will be published.
|
data/Gemfile
ADDED
@@ -0,0 +1,38 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
source 'https://rubygems.org'
|
4
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
5
|
+
|
6
|
+
gemspec
|
7
|
+
|
8
|
+
gem 'rails', '~> 7.2'
|
9
|
+
|
10
|
+
group :development, :test do
|
11
|
+
gem 'autoprefixer-rails', '~> 10.4.16.0'
|
12
|
+
gem 'byebug', '~> 11.1.0', platforms: %i[mri mingw x64_mingw]
|
13
|
+
gem 'image_processing', '>= 1.12.0'
|
14
|
+
gem 'sqlite3', '~> 1.6.7'
|
15
|
+
# gem 'mysql2', '~> 0.5'
|
16
|
+
# gem 'pg', '~> 1.5.4'
|
17
|
+
end
|
18
|
+
|
19
|
+
group :development do
|
20
|
+
gem 'listen', '~> 3.9.0'
|
21
|
+
gem 'web-console', '~> 4.2'
|
22
|
+
end
|
23
|
+
|
24
|
+
group :test do
|
25
|
+
gem 'brakeman', '~> 6.1.2'
|
26
|
+
gem 'bundler-audit', '~> 0.9.1'
|
27
|
+
gem 'coveralls_reborn', '~> 0.28.0', require: false
|
28
|
+
gem 'cuprite', '>= 0.15'
|
29
|
+
gem 'equivalent-xml', '~> 0.6.0'
|
30
|
+
gem 'minitest', '>= 5.23.0'
|
31
|
+
gem 'minitest-reporters', '>= 1.6.1'
|
32
|
+
gem 'mocha', '>= 2.3.0', require: false
|
33
|
+
gem 'rails-controller-testing', '~> 1.0.5'
|
34
|
+
gem 'rubocop', '~> 1.63.0', require: false
|
35
|
+
gem 'rubocop-minitest'
|
36
|
+
gem 'rubocop-rails'
|
37
|
+
gem 'simplecov', '~> 0.22.0', require: false
|
38
|
+
end
|
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2010-2019 Oleg Khabarov, (c) 2024 Shakacode LLC
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
# ComfortableMediaSurfer
|
2
|
+
|
3
|
+
ComfortableMediaSurfer is a powerful Ruby 6.1+ CMS (Content Management System) Engine, picking up where [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) left off.
|
4
|
+
|
5
|
+
## Features
|
6
|
+
|
7
|
+
* Simple drop-in integration with Rails 6.1+ apps with minimal configuration
|
8
|
+
* The CMS keeps clear from the rest of your application
|
9
|
+
* Powerful page templating capability using [Content Tags](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Content-Tags)
|
10
|
+
* [Multiple Sites](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Sites) from a single installation
|
11
|
+
* Multi-Language Support (i18n) (ca, cs, da, de, en, es, fi, fr, gr, hr, it, ja, nb, nl, pl, pt-BR, ru, sv, tr, uk, zh-CN, zh-TW) and page localization.
|
12
|
+
* [CMS Seeds](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-CMS-Seeds) for initial content population
|
13
|
+
* [Revision History](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Revisions) to revert changes
|
14
|
+
* [Extendable Admin Area](https://github.com/comfy/comfortable-mexican-sofa/wiki/HowTo:-Reusing-Admin-Area) built with [Bootstrap 4](http://getbootstrap.com) (responsive design). Using [CodeMirror](http://codemirror.net) for HTML and Markdown highlighing and [Redactor](http://imperavi.com/redactor) as the WYSIWYG editor.
|
15
|
+
|
16
|
+
## Dependencies
|
17
|
+
|
18
|
+
* File attachments are handled by [ActiveStorage](https://github.com/rails/rails/tree/master/activestorage). Make sure that you can run appropriate migrations by running: `rails active_storage:install`
|
19
|
+
* Image resizing is done with with [ImageMagick](http://www.imagemagick.org/script/download.php), so make sure it's installed.
|
20
|
+
* Pagination is handled by [kaminari](https://github.com/amatsuda/kaminari) or [will_paginate](https://github.com/mislav/will_paginate). Please add one of those to your Gemfile.
|
21
|
+
|
22
|
+
## Compatibility
|
23
|
+
|
24
|
+
- Ruby >= 3.0 with Rails >= 6.1
|
25
|
+
- On Ruby 3.x, Rails 7.x + is recommended, since performance is noticably better than on 6.x
|
26
|
+
|
27
|
+
## Installation
|
28
|
+
|
29
|
+
Add gem definition to your Gemfile:
|
30
|
+
|
31
|
+
```ruby
|
32
|
+
gem "comfortable_media_surfer", "~> 3.0.0"
|
33
|
+
```
|
34
|
+
|
35
|
+
Then from the Rails project's root run:
|
36
|
+
|
37
|
+
bundle install
|
38
|
+
rails generate comfy:cms
|
39
|
+
rake db:migrate
|
40
|
+
|
41
|
+
Now take a look inside your `config/routes.rb` file. You'll see where routes attach for the admin area and content serving. Make sure that content serving route appears as a very last item or it will make all other routes to be inaccessible.
|
42
|
+
|
43
|
+
```ruby
|
44
|
+
comfy_route :cms_admin, path: "/admin"
|
45
|
+
comfy_route :cms, path: "/"
|
46
|
+
```
|
47
|
+
|
48
|
+
## Quick Start Guide
|
49
|
+
|
50
|
+
After finishing installation you should be able to navigate to http://localhost:3000/admin
|
51
|
+
|
52
|
+
Default username and password is 'user' and 'pass'. You probably want to change it right away. Admin credentials (among other things) can be found and changed in the cms initializer: [/config/initializers/comfortable\_media\_surfer.rb](https://github.com/shakacode/comfortable-media-surfer/blob/master/config/initializers/comfortable_media_surfer.rb)
|
53
|
+
|
54
|
+
Before creating pages and populating them with content we need to create a Site. Site defines a hostname, content path and its language.
|
55
|
+
|
56
|
+
After creating a Site, you need to make a Layout. Layout is the template of your pages; it defines some reusable content (like header and footer, for example) and places where the content goes. A very simple layout can look like this:
|
57
|
+
|
58
|
+
```html
|
59
|
+
<html>
|
60
|
+
<body>
|
61
|
+
<h1>{{ cms:text title }}</h1>
|
62
|
+
{{ cms:wysiwyg content }}
|
63
|
+
</body>
|
64
|
+
</html>
|
65
|
+
```
|
66
|
+
|
67
|
+
Once you have a layout, you may start creating pages and populating content. It's that easy.
|
68
|
+
|
69
|
+
## Documentation
|
70
|
+
|
71
|
+
For more information on how to use this CMS please refer to the [Wiki](https://github.com/comfy/comfortable-mexican-sofa/wiki). Section that might be of interest is the entry
|
72
|
+
on [Content Tags](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Content-Tags).
|
73
|
+
|
74
|
+
[Comfy Demo App](https://github.com/comfy/comfy-demo) also can be used as an
|
75
|
+
example of a default Rails app with CMS installed.
|
76
|
+
|
77
|
+
## Add-ons
|
78
|
+
|
79
|
+
If you want to add a Blog functionality to your app take a look at
|
80
|
+
[ComfyBlog](https://github.com/comfy/comfy-blog).
|
81
|
+
|
82
|
+
![Admin Area Preview](doc/preview.jpg)
|
83
|
+
|
84
|
+
#### Old Versions
|
85
|
+
|
86
|
+
[CHANGELOG](//github.com/comfy/comfortable-mexican-sofa/releases) is documented
|
87
|
+
in Github releases.
|
88
|
+
|
89
|
+
#### Contributing
|
90
|
+
|
91
|
+
ComfortableMediaSurfer repository can be ran like a regular Rails application in
|
92
|
+
development environment. It's as easy to work on as any other Rails app out there.
|
93
|
+
For more detail take a look at [CONTRIBUTING](CONTRIBUTING.md)
|
94
|
+
|
95
|
+
#### Testing
|
96
|
+
|
97
|
+
- `bin/rails db:migrate RAILS_ENV=test`
|
98
|
+
- `rake db:test:prepare`
|
99
|
+
- `rake test`
|
100
|
+
|
101
|
+
#### Acknowledgements
|
102
|
+
|
103
|
+
- to [Oleg Khabarov](https://github.com/GBH), the creator of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa)
|
104
|
+
- to [Roman Almeida](https://github.com/nasmorn) for contributing OEM License for [Redactor Text Editor](http://imperavi.com/redactor)
|
105
|
+
|
106
|
+
---
|
107
|
+
|
108
|
+
Copyright 2010-2019 Oleg Khabarov, 2024 ShakaCode LLC
|
109
|
+
Released under the [MIT license](LICENSE)
|
data/Rakefile
ADDED
File without changes
|
Binary file
|
@@ -0,0 +1,39 @@
|
|
1
|
+
//= require rails-ujs
|
2
|
+
//= require jquery3
|
3
|
+
|
4
|
+
//= require comfy/vendor/codemirror
|
5
|
+
//= require comfy/vendor/codemirror/mode/css/css
|
6
|
+
//= require comfy/vendor/codemirror/mode/htmlmixed/htmlmixed
|
7
|
+
//= require comfy/vendor/codemirror/mode/javascript/javascript
|
8
|
+
//= require comfy/vendor/codemirror/mode/markdown/markdown
|
9
|
+
//= require comfy/vendor/codemirror/mode/xml/xml
|
10
|
+
//= require comfy/vendor/codemirror/addon/edit/closetag
|
11
|
+
//= require comfy/vendor/sortable.min
|
12
|
+
//= require comfy/vendor/bootstrap.bundle.min
|
13
|
+
//= require comfy/vendor/diff/diff_match_patch.min
|
14
|
+
//= require comfy/vendor/diff/pretty_text_diff
|
15
|
+
//= require comfy/vendor/fontawesome
|
16
|
+
//= require comfy/vendor/redactor
|
17
|
+
//= require comfy/vendor/redactor/filemanager
|
18
|
+
//= require comfy/vendor/redactor/imagemanager
|
19
|
+
//= require comfy/vendor/redactor/definedlinks
|
20
|
+
//= require comfy/vendor/redactor/table
|
21
|
+
//= require comfy/vendor/redactor/video
|
22
|
+
//= require_directory ../../vendor/redactor/i18n/
|
23
|
+
//= require comfy/vendor/flatpickr.min
|
24
|
+
//= require_directory ../../vendor/flatpickr/i18n/
|
25
|
+
|
26
|
+
//= require comfy/admin/cms/base
|
27
|
+
//= require comfy/admin/cms/categories
|
28
|
+
//= require comfy/admin/cms/codemirror
|
29
|
+
//= require comfy/admin/cms/diff
|
30
|
+
//= require comfy/admin/cms/file_link
|
31
|
+
//= require comfy/admin/cms/file_upload
|
32
|
+
//= require comfy/admin/cms/files_modal
|
33
|
+
//= require comfy/admin/cms/page_fragments
|
34
|
+
//= require comfy/admin/cms/sortable_list
|
35
|
+
//= require comfy/admin/cms/slugify
|
36
|
+
//= require comfy/admin/cms/timepicker
|
37
|
+
//= require comfy/admin/cms/wysiwyg
|
38
|
+
|
39
|
+
//= require comfy/admin/cms/custom
|
@@ -0,0 +1,46 @@
|
|
1
|
+
(() => {
|
2
|
+
if (!window.CMS) window.CMS = {};
|
3
|
+
const CMS = window.CMS;
|
4
|
+
|
5
|
+
// TODO(glebm): Use the battle-tested universal onPageLoad code and enable Turbolinks+async in the demo app.
|
6
|
+
// See: https://gist.github.com/glebm/2496daf445877055447a6fac46509d9a
|
7
|
+
const isTurbolinks = 'Turbolinks' in window && window.Turbolinks.supported;
|
8
|
+
if (isTurbolinks) {
|
9
|
+
document.addEventListener('turbolinks:load', () => {
|
10
|
+
window.CMS.init();
|
11
|
+
});
|
12
|
+
document.addEventListener('turbolinks:before-cache', () => {
|
13
|
+
window.CMS.dispose();
|
14
|
+
});
|
15
|
+
} else {
|
16
|
+
document.addEventListener('DOMContentLoaded', () => {
|
17
|
+
window.CMS.init();
|
18
|
+
});
|
19
|
+
}
|
20
|
+
|
21
|
+
CMS.init = () => {
|
22
|
+
CMS.current_path = window.location.pathname;
|
23
|
+
CMS.slugify();
|
24
|
+
CMS.codemirror.init();
|
25
|
+
CMS.wysiwyg.init();
|
26
|
+
CMS.sortableList.init();
|
27
|
+
CMS.timepicker.init();
|
28
|
+
CMS.pageFragments();
|
29
|
+
CMS.categories();
|
30
|
+
CMS.files.init();
|
31
|
+
CMS.fileLinks();
|
32
|
+
CMS.fileUpload.init();
|
33
|
+
CMS.diff();
|
34
|
+
};
|
35
|
+
|
36
|
+
CMS.dispose = () => {
|
37
|
+
CMS.codemirror.dispose();
|
38
|
+
CMS.wysiwyg.dispose();
|
39
|
+
CMS.files.dispose();
|
40
|
+
CMS.fileUpload.dispose();
|
41
|
+
CMS.sortableList.dispose();
|
42
|
+
CMS.timepicker.dispose();
|
43
|
+
};
|
44
|
+
|
45
|
+
CMS.getLocale = () => document.querySelector('meta[name="cms-locale"]').content;
|
46
|
+
})();
|
@@ -0,0 +1,17 @@
|
|
1
|
+
(() => {
|
2
|
+
window.CMS.categories = (root = document) => {
|
3
|
+
const widget = root.querySelector('.categories-widget');
|
4
|
+
if (widget === null) return;
|
5
|
+
const readSection = widget.querySelector('.read');
|
6
|
+
const editSection = widget.querySelector('.editable');
|
7
|
+
widget.querySelector('.read button.toggle-cat-edit').addEventListener('click', () => {
|
8
|
+
readSection.style.display = 'none';
|
9
|
+
editSection.style.display = 'block';
|
10
|
+
});
|
11
|
+
widget.querySelector('.editable button.toggle-cat-edit').addEventListener('click', () => {
|
12
|
+
editSection.style.display = 'none';
|
13
|
+
readSection.style.display = 'block';
|
14
|
+
});
|
15
|
+
};
|
16
|
+
})();
|
17
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
(() => {
|
2
|
+
const codeMirrorInstances = [];
|
3
|
+
window.CMS.codemirror = {
|
4
|
+
init(root = document) {
|
5
|
+
for (const textarea of root.querySelectorAll('textarea[data-cms-cm-mode]')) {
|
6
|
+
const codemirror = CodeMirror.fromTextArea(textarea, {
|
7
|
+
mode: textarea.dataset.cmsCmMode,
|
8
|
+
tabSize: 2,
|
9
|
+
lineWrapping: true,
|
10
|
+
autoCloseTags: true,
|
11
|
+
lineNumbers: true,
|
12
|
+
viewportMargin: Infinity
|
13
|
+
});
|
14
|
+
codeMirrorInstances.push(codemirror);
|
15
|
+
}
|
16
|
+
|
17
|
+
const tabsRoot = root.id === 'form-fragments' ? root : root.querySelector('#form-fragments');
|
18
|
+
jQuery(tabsRoot).find('a[data-toggle="tab"]').on('shown.bs.tab', () => {
|
19
|
+
for (const codemirror of codeMirrorInstances) {
|
20
|
+
codemirror.refresh();
|
21
|
+
}
|
22
|
+
});
|
23
|
+
},
|
24
|
+
dispose() {
|
25
|
+
for (const codemirror of codeMirrorInstances) {
|
26
|
+
codemirror.toTextArea();
|
27
|
+
}
|
28
|
+
codeMirrorInstances.length = 0;
|
29
|
+
}
|
30
|
+
}
|
31
|
+
})();
|
@@ -0,0 +1 @@
|
|
1
|
+
// Custom JS for the admin area
|