occams 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.codeclimate.yml +4 -0
- data/.gitattributes +2 -0
- data/.github/issue_template.md +22 -0
- data/.github/pull_request_template.md +6 -0
- data/.gitignore +21 -0
- data/.rubocop.yml +87 -0
- data/.travis.yml +44 -0
- data/CHANGELOG.md +7 -0
- data/CONTRIBUTING.md +35 -0
- data/Gemfile +30 -0
- data/LICENSE +20 -0
- data/LICENSE.comfy +20 -0
- data/README.md +121 -0
- data/Rakefile +5 -0
- data/app/assets/config/manifest.js +0 -0
- data/app/assets/fonts/occams/admin/cms/lib/redactor-font.eot +0 -0
- data/app/assets/javascripts/occams/admin/cms/application.js +39 -0
- data/app/assets/javascripts/occams/admin/cms/base.js +46 -0
- data/app/assets/javascripts/occams/admin/cms/categories.js +17 -0
- data/app/assets/javascripts/occams/admin/cms/codemirror.js +31 -0
- data/app/assets/javascripts/occams/admin/cms/custom.js +1 -0
- data/app/assets/javascripts/occams/admin/cms/diff.js +10 -0
- data/app/assets/javascripts/occams/admin/cms/file_link.js +67 -0
- data/app/assets/javascripts/occams/admin/cms/file_upload.js +194 -0
- data/app/assets/javascripts/occams/admin/cms/files_modal.js +40 -0
- data/app/assets/javascripts/occams/admin/cms/page_fragments.js +22 -0
- data/app/assets/javascripts/occams/admin/cms/slugify.js +34 -0
- data/app/assets/javascripts/occams/admin/cms/sortable_list.js +40 -0
- data/app/assets/javascripts/occams/admin/cms/timepicker.js +30 -0
- data/app/assets/javascripts/occams/admin/cms/wysiwyg.js +72 -0
- data/app/assets/javascripts/occams/vendor/Moxie.swf +0 -0
- data/app/assets/javascripts/occams/vendor/Moxie.xap +0 -0
- data/app/assets/javascripts/occams/vendor/bootstrap.bundle.min.js +7 -0
- data/app/assets/javascripts/occams/vendor/bootstrap.bundle.min.js.map +1 -0
- data/app/assets/javascripts/occams/vendor/codemirror/addon/edit/closetag.js +169 -0
- data/app/assets/javascripts/occams/vendor/codemirror/mode/css/css.js +832 -0
- data/app/assets/javascripts/occams/vendor/codemirror/mode/htmlmixed/htmlmixed.js +152 -0
- data/app/assets/javascripts/occams/vendor/codemirror/mode/javascript/javascript.js +875 -0
- data/app/assets/javascripts/occams/vendor/codemirror/mode/markdown/markdown.js +861 -0
- data/app/assets/javascripts/occams/vendor/codemirror/mode/xml/xml.js +394 -0
- data/app/assets/javascripts/occams/vendor/codemirror.js +9653 -0
- data/app/assets/javascripts/occams/vendor/diff/diff_match_patch.min.js +49 -0
- data/app/assets/javascripts/occams/vendor/diff/pretty_text_diff.js +76 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ar.js +52 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/bg.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/bn.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ca.js +83 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/cs.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/cy.js +92 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/da.js +71 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/de.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/default.js +80 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/eo.js +73 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/es.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/et.js +73 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/fa.js +68 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/fi.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/fr.js +75 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/gr.js +74 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/he.js +57 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/hi.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/hr.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/hu.js +72 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/id.js +61 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/it.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ja.js +57 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ko.js +60 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/lt.js +72 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/lv.js +67 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/mk.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/mn.js +67 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ms.js +68 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/my.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/nl.js +75 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/no.js +73 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/pa.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/pl.js +68 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/pt-BR.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/pt.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ro.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/ru.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/si.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/sk.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/sl.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/sq.js +65 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/sr.js +69 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/sv.js +70 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/th.js +72 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/tr.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/uk.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/vn.js +66 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/zh-CN.js +61 -0
- data/app/assets/javascripts/occams/vendor/flatpickr/i18n/zh-TW.js +61 -0
- data/app/assets/javascripts/occams/vendor/flatpickr.min.js +2 -0
- data/app/assets/javascripts/occams/vendor/fontawesome.js +5 -0
- data/app/assets/javascripts/occams/vendor/moxie.min.js +16 -0
- data/app/assets/javascripts/occams/vendor/plupload.dev.js +2497 -0
- data/app/assets/javascripts/occams/vendor/redactor/definedlinks.js +53 -0
- data/app/assets/javascripts/occams/vendor/redactor/filemanager.js +64 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ar.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/az.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ba.js +79 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/bg.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/by.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ca.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/cs.js +87 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/da.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/de.js +80 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/el.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/en.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/eo.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/es.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/es_AR.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/fa.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/fi.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/fr.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ge.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/gr.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/he.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/hr.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/hu.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/id.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/it.js +78 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ja.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/kn.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ko.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/lt.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/lv.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/mk.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/nb.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/nl.js +80 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/pl.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/pt-BR.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/pt.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ro.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ru.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sk.js +76 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sl.js +79 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sq.js +79 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sr-CIR.js +79 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sr-LAT.js +79 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/sv.js +74 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/th.js +74 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/tr.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/ua.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/uk.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/vi.js +74 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/zh-CN.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/i18n/zh-TW.js +75 -0
- data/app/assets/javascripts/occams/vendor/redactor/imagemanager.js +57 -0
- data/app/assets/javascripts/occams/vendor/redactor/table.js +337 -0
- data/app/assets/javascripts/occams/vendor/redactor/video.js +77 -0
- data/app/assets/javascripts/occams/vendor/redactor.js +9561 -0
- data/app/assets/javascripts/occams/vendor/sortable.min.js +5 -0
- data/app/assets/stylesheets/occams/admin/cms/application.sass +11 -0
- data/app/assets/stylesheets/occams/admin/cms/base.sass +256 -0
- data/app/assets/stylesheets/occams/admin/cms/codemirror_overrides.sass +19 -0
- data/app/assets/stylesheets/occams/admin/cms/custom.sass +1 -0
- data/app/assets/stylesheets/occams/admin/cms/redactor_overrides.sass +22 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_alert.scss +51 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_badge.scss +54 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_breadcrumb.scss +41 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_button-group.scss +163 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_buttons.scss +137 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_card.scss +289 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_carousel.scss +197 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_close.scss +41 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_code.scss +48 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_custom-forms.scss +507 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_dropdown.scss +191 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_forms.scss +330 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_functions.scss +86 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_grid.scss +52 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_images.scss +42 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_input-group.scss +193 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_jumbotron.scss +17 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_list-group.scss +149 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_media.scss +8 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_mixins.scss +47 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_modal.scss +229 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_nav.scss +120 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_navbar.scss +294 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_pagination.scss +73 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_popover.scss +171 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_print.scss +141 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_progress.scss +43 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_reboot.scss +483 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_root.scss +19 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_spinners.scss +55 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_tables.scss +185 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_toasts.scss +44 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_tooltip.scss +115 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_transitions.scss +20 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_type.scss +125 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_utilities.scss +17 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/_variables.scss +1123 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/bootstrap-grid.scss +29 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/bootstrap-reboot.scss +12 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/bootstrap.scss +44 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_alert.scss +13 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_background-variant.scss +21 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_badge.scss +17 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_border-radius.scss +63 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_box-shadow.scss +20 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_breakpoints.scss +123 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_buttons.scss +107 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_caret.scss +62 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_clearfix.scss +7 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_deprecate.scss +10 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_float.scss +14 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_forms.scss +192 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_gradients.scss +45 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_grid-framework.scss +66 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_grid.scss +51 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_hover.scss +37 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_image.scss +36 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_list-group.scss +21 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_lists.scss +7 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_nav-divider.scss +10 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_pagination.scss +22 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_reset-text.scss +17 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_resize.scss +6 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_screen-reader.scss +33 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_size.scss +7 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_table-row.scss +39 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_text-emphasis.scss +16 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_text-hide.scss +11 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_text-truncate.scss +8 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_transition.scss +16 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/mixins/_visibility.scss +8 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_align.scss +8 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_background.scss +19 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_borders.scss +75 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_clearfix.scss +3 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_display.scss +26 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_embed.scss +39 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_flex.scss +51 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_float.scss +11 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_overflow.scss +5 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_position.scss +32 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_screenreaders.scss +11 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_shadows.scss +6 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_sizing.scss +20 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_spacing.scss +73 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_stretched-link.scss +19 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_text.scss +72 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/utilities/_visibility.scss +13 -0
- data/app/assets/stylesheets/occams/vendor/bootstrap/vendor/_rfs.scss +204 -0
- data/app/assets/stylesheets/occams/vendor/codemirror.css +346 -0
- data/app/assets/stylesheets/occams/vendor/flatpickr.min.css +13 -0
- data/app/assets/stylesheets/occams/vendor/fontawesome.css +343 -0
- data/app/assets/stylesheets/occams/vendor/redactor.css +948 -0
- data/app/controllers/application_controller.rb +7 -0
- data/app/controllers/concerns/occams/paginate.rb +16 -0
- data/app/controllers/concerns/occams/reorder_action.rb +19 -0
- data/app/controllers/occams/admin/base_controller.rb +22 -0
- data/app/controllers/occams/admin/cms/base_controller.rb +55 -0
- data/app/controllers/occams/admin/cms/categories_controller.rb +40 -0
- data/app/controllers/occams/admin/cms/files_controller.rb +142 -0
- data/app/controllers/occams/admin/cms/layouts_controller.rb +69 -0
- data/app/controllers/occams/admin/cms/pages_controller.rb +156 -0
- data/app/controllers/occams/admin/cms/revisions/base_controller.rb +50 -0
- data/app/controllers/occams/admin/cms/revisions/layout_controller.rb +18 -0
- data/app/controllers/occams/admin/cms/revisions/page_controller.rb +30 -0
- data/app/controllers/occams/admin/cms/revisions/snippet_controller.rb +18 -0
- data/app/controllers/occams/admin/cms/revisions/translation_controller.rb +31 -0
- data/app/controllers/occams/admin/cms/sites_controller.rb +69 -0
- data/app/controllers/occams/admin/cms/snippets_controller.rb +66 -0
- data/app/controllers/occams/admin/cms/translations_controller.rb +107 -0
- data/app/controllers/occams/cms/assets_controller.rb +40 -0
- data/app/controllers/occams/cms/base_controller.rb +33 -0
- data/app/controllers/occams/cms/content_controller.rb +87 -0
- data/app/helpers/occams/admin/cms_helper.rb +49 -0
- data/app/helpers/occams/cms_helper.rb +73 -0
- data/app/models/concerns/occams/cms/with_categories.rb +53 -0
- data/app/models/concerns/occams/cms/with_fragments.rb +125 -0
- data/app/models/occams/cms/categorization.rb +16 -0
- data/app/models/occams/cms/category.rb +24 -0
- data/app/models/occams/cms/file.rb +70 -0
- data/app/models/occams/cms/fragment.rb +63 -0
- data/app/models/occams/cms/layout.rb +113 -0
- data/app/models/occams/cms/page.rb +170 -0
- data/app/models/occams/cms/revision.rb +12 -0
- data/app/models/occams/cms/site.rb +94 -0
- data/app/models/occams/cms/snippet.rb +45 -0
- data/app/models/occams/cms/translation.rb +43 -0
- data/app/views/kaminari/occams/_first_page.html.haml +3 -0
- data/app/views/kaminari/occams/_gap.html.haml +2 -0
- data/app/views/kaminari/occams/_last_page.html.haml +3 -0
- data/app/views/kaminari/occams/_next_page.html.haml +2 -0
- data/app/views/kaminari/occams/_page.html.haml +2 -0
- data/app/views/kaminari/occams/_paginator.html.haml +11 -0
- data/app/views/kaminari/occams/_prev_page.html.haml +2 -0
- data/app/views/layouts/occams/admin/cms/_body.html.haml +14 -0
- data/app/views/layouts/occams/admin/cms/_flash.html.haml +4 -0
- data/app/views/layouts/occams/admin/cms/_footer_js.html.haml +6 -0
- data/app/views/layouts/occams/admin/cms/_head.html.haml +19 -0
- data/app/views/layouts/occams/admin/cms/_left.html.haml +39 -0
- data/app/views/layouts/occams/admin/cms/_right.html.haml +5 -0
- data/app/views/layouts/occams/admin/cms.html.haml +4 -0
- data/app/views/occams/admin/cms/categories/_categories.html.haml +4 -0
- data/app/views/occams/admin/cms/categories/_edit.html.haml +7 -0
- data/app/views/occams/admin/cms/categories/_form.html.haml +5 -0
- data/app/views/occams/admin/cms/categories/_index.html.haml +28 -0
- data/app/views/occams/admin/cms/categories/_show.html.haml +15 -0
- data/app/views/occams/admin/cms/categories/create.js.erb +7 -0
- data/app/views/occams/admin/cms/categories/destroy.js.erb +8 -0
- data/app/views/occams/admin/cms/categories/edit.js.erb +3 -0
- data/app/views/occams/admin/cms/categories/update.js.erb +6 -0
- data/app/views/occams/admin/cms/files/_file.html.haml +31 -0
- data/app/views/occams/admin/cms/files/_form.html.haml +26 -0
- data/app/views/occams/admin/cms/files/_modal.html.haml +3 -0
- data/app/views/occams/admin/cms/files/destroy.js.erb +4 -0
- data/app/views/occams/admin/cms/files/edit.html.haml +5 -0
- data/app/views/occams/admin/cms/files/index.html.haml +31 -0
- data/app/views/occams/admin/cms/files/new.html.haml +5 -0
- data/app/views/occams/admin/cms/fragments/_form_fragment_attachments.html.haml +23 -0
- data/app/views/occams/admin/cms/fragments/_form_fragments.html.haml +38 -0
- data/app/views/occams/admin/cms/layouts/_form.html.haml +20 -0
- data/app/views/occams/admin/cms/layouts/_index_branch.html.haml +26 -0
- data/app/views/occams/admin/cms/layouts/edit.html.haml +9 -0
- data/app/views/occams/admin/cms/layouts/index.html.haml +10 -0
- data/app/views/occams/admin/cms/layouts/new.html.haml +5 -0
- data/app/views/occams/admin/cms/pages/_form.html.haml +31 -0
- data/app/views/occams/admin/cms/pages/_index_branch.html.haml +44 -0
- data/app/views/occams/admin/cms/pages/edit.html.haml +10 -0
- data/app/views/occams/admin/cms/pages/index.html.haml +13 -0
- data/app/views/occams/admin/cms/pages/new.html.haml +5 -0
- data/app/views/occams/admin/cms/pages/toggle_branch.js.erb +13 -0
- data/app/views/occams/admin/cms/revisions/_sidebar.html.haml +2 -0
- data/app/views/occams/admin/cms/revisions/show.html.haml +36 -0
- data/app/views/occams/admin/cms/sites/_form.html.haml +15 -0
- data/app/views/occams/admin/cms/sites/edit.html.haml +5 -0
- data/app/views/occams/admin/cms/sites/index.html.haml +28 -0
- data/app/views/occams/admin/cms/sites/new.html.haml +5 -0
- data/app/views/occams/admin/cms/snippets/_form.html.haml +18 -0
- data/app/views/occams/admin/cms/snippets/edit.html.haml +9 -0
- data/app/views/occams/admin/cms/snippets/index.html.haml +33 -0
- data/app/views/occams/admin/cms/snippets/new.html.haml +5 -0
- data/app/views/occams/admin/cms/translations/_form.html.haml +20 -0
- data/app/views/occams/admin/cms/translations/_sidebar.html.haml +19 -0
- data/app/views/occams/admin/cms/translations/edit.html.haml +10 -0
- data/app/views/occams/admin/cms/translations/new.html.haml +5 -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/config/application.rb +39 -0
- data/config/boot.rb +7 -0
- data/config/cms_routes.rb +8 -0
- data/config/database.yml +11 -0
- data/config/environment.rb +7 -0
- data/config/environments/development.rb +59 -0
- data/config/environments/test.rb +50 -0
- data/config/initializers/occams.rb +122 -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.rb +34 -0
- data/db/migrate/01_create_cms.rb +143 -0
- data/lib/generators/occams/cms/README +17 -0
- data/lib/generators/occams/cms/assets_generator.rb +18 -0
- data/lib/generators/occams/cms/cms_generator.rb +69 -0
- data/lib/generators/occams/cms/controllers_generator.rb +17 -0
- data/lib/generators/occams/cms/models_generator.rb +17 -0
- data/lib/generators/occams/cms/views_generator.rb +17 -0
- data/lib/generators/occams/scaffold/scaffold_generator.rb +80 -0
- data/lib/generators/occams/scaffold/templates/controller.rb.tt +62 -0
- data/lib/generators/occams/scaffold/templates/migration.rb.tt +11 -0
- data/lib/generators/occams/scaffold/templates/model.rb.tt +21 -0
- data/lib/generators/occams/scaffold/templates/tests/controller.rb.tt +115 -0
- data/lib/generators/occams/scaffold/templates/tests/fixture.yml.tt +4 -0
- data/lib/generators/occams/scaffold/templates/tests/model.rb.tt +26 -0
- data/lib/generators/occams/scaffold/templates/views/_form.haml.tt +7 -0
- data/lib/generators/occams/scaffold/templates/views/edit.haml.tt +5 -0
- data/lib/generators/occams/scaffold/templates/views/index.haml.tt +21 -0
- data/lib/generators/occams/scaffold/templates/views/new.haml.tt +5 -0
- data/lib/generators/occams/scaffold/templates/views/show.haml.tt +4 -0
- data/lib/occams/access_control/admin_authentication.rb +24 -0
- data/lib/occams/access_control/admin_authorization.rb +12 -0
- data/lib/occams/access_control/public_authentication.rb +12 -0
- data/lib/occams/access_control/public_authorization.rb +12 -0
- data/lib/occams/configuration.rb +140 -0
- data/lib/occams/content/block.rb +14 -0
- data/lib/occams/content/params_parser.rb +151 -0
- data/lib/occams/content/renderer.rb +149 -0
- data/lib/occams/content/tag.rb +50 -0
- data/lib/occams/content/tags/asset.rb +59 -0
- data/lib/occams/content/tags/checkbox.rb +29 -0
- data/lib/occams/content/tags/date.rb +21 -0
- data/lib/occams/content/tags/datetime.rb +44 -0
- data/lib/occams/content/tags/file.rb +72 -0
- data/lib/occams/content/tags/file_link.rb +63 -0
- data/lib/occams/content/tags/files.rb +43 -0
- data/lib/occams/content/tags/fragment.rb +66 -0
- data/lib/occams/content/tags/helper.rb +55 -0
- data/lib/occams/content/tags/markdown.rb +24 -0
- data/lib/occams/content/tags/mixins/file_content.rb +43 -0
- data/lib/occams/content/tags/number.rb +20 -0
- data/lib/occams/content/tags/page_file_link.rb +84 -0
- data/lib/occams/content/tags/partial.rb +49 -0
- data/lib/occams/content/tags/snippet.rb +38 -0
- data/lib/occams/content/tags/template.rb +44 -0
- data/lib/occams/content/tags/text.rb +20 -0
- data/lib/occams/content/tags/textarea.rb +20 -0
- data/lib/occams/content/tags/wysiwyg.rb +21 -0
- data/lib/occams/content.rb +31 -0
- data/lib/occams/engine.rb +31 -0
- data/lib/occams/error.rb +32 -0
- data/lib/occams/extensions/acts_as_tree.rb +120 -0
- data/lib/occams/extensions/has_revisions.rb +72 -0
- data/lib/occams/form_builder.rb +47 -0
- data/lib/occams/render_methods.rb +112 -0
- data/lib/occams/routes/cms.rb +18 -0
- data/lib/occams/routes/cms_admin.rb +58 -0
- data/lib/occams/routing.rb +12 -0
- data/lib/occams/seeds/file/exporter.rb +43 -0
- data/lib/occams/seeds/file/importer.rb +63 -0
- data/lib/occams/seeds/layout/exporter.rb +40 -0
- data/lib/occams/seeds/layout/importer.rb +62 -0
- data/lib/occams/seeds/page/exporter.rb +92 -0
- data/lib/occams/seeds/page/importer.rb +219 -0
- data/lib/occams/seeds/snippet/exporter.rb +34 -0
- data/lib/occams/seeds/snippet/importer.rb +51 -0
- data/lib/occams/seeds.rb +118 -0
- data/lib/occams/version.rb +7 -0
- data/lib/occams/view_hooks.rb +35 -0
- data/lib/occams.rb +60 -0
- data/lib/tasks/cms_seeds.rake +40 -0
- data/occams.gemspec +33 -0
- data/public/favicon.ico +0 -0
- metadata +666 -0
checksums.yaml
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
---
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: 8dcda75b6239c3fb7e71b35c45c3b5674373bd96d9c14457776af68ff8b1a391
|
|
4
|
+
data.tar.gz: 003f1604af55a848c28214b6fcccbb2863ec797adad4515580d933ddb9078c79
|
|
5
|
+
SHA512:
|
|
6
|
+
metadata.gz: 6a7f7f9b4317cefb3961cd916b75f4df6bd8247686f80224926bc5cde93f255e840b567cf506e03112c069e755ffa9810840eff605905fe39ec65471a9c17658
|
|
7
|
+
data.tar.gz: 68ed2b0e79500d11ac2c940f4b89c33a894a388b26eec05cfec13d6c28198bc61ec945ad49367df83546d7d40e0b36dab379e6dd4fa6bfca7f206b35424ce964
|
data/.codeclimate.yml
ADDED
data/.gitattributes
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
*Note:* For general questions and feature requests please leave a message
|
|
2
|
+
on Gitter: https://gitter.im/comfy/comfortable-mexican-sofa
|
|
3
|
+
|
|
4
|
+
### Expected behavior
|
|
5
|
+
Tell us what should happen
|
|
6
|
+
|
|
7
|
+
### Actual behavior
|
|
8
|
+
Tell us what happens instead
|
|
9
|
+
|
|
10
|
+
### Steps to reproduce
|
|
11
|
+
Things that help:
|
|
12
|
+
|
|
13
|
+
* Describe issue in detail.
|
|
14
|
+
* Add relevant code snippets.
|
|
15
|
+
* Create a failing test case.
|
|
16
|
+
|
|
17
|
+
### System configuration
|
|
18
|
+
**Rails version**:
|
|
19
|
+
|
|
20
|
+
**CMS version**:
|
|
21
|
+
|
|
22
|
+
**Ruby version**:
|
data/.gitignore
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
.bundle
|
|
2
|
+
db/*.sqlite3
|
|
3
|
+
log/*.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,87 @@
|
|
|
1
|
+
AllCops:
|
|
2
|
+
TargetRubyVersion: 2.7
|
|
3
|
+
Exclude:
|
|
4
|
+
- bin/*
|
|
5
|
+
- db/schema.rb
|
|
6
|
+
- db/migrate/**/*
|
|
7
|
+
- test/fixtures/**/*
|
|
8
|
+
- tmp/**/*
|
|
9
|
+
|
|
10
|
+
# -- Layout --------------------------------------------------------------------
|
|
11
|
+
Layout/FirstArrayElementIndentation:
|
|
12
|
+
EnforcedStyle: consistent
|
|
13
|
+
|
|
14
|
+
Layout/MultilineHashBraceLayout:
|
|
15
|
+
Enabled: false
|
|
16
|
+
|
|
17
|
+
Layout/MultilineMethodCallIndentation:
|
|
18
|
+
EnforcedStyle: indented
|
|
19
|
+
|
|
20
|
+
Layout/MultilineOperationIndentation:
|
|
21
|
+
Enabled: false
|
|
22
|
+
|
|
23
|
+
Layout/ParameterAlignment:
|
|
24
|
+
Enabled: false
|
|
25
|
+
|
|
26
|
+
Layout/AccessModifierIndentation:
|
|
27
|
+
EnforcedStyle: outdent
|
|
28
|
+
|
|
29
|
+
# -- Metrics -------------------------------------------------------------------
|
|
30
|
+
Metrics/PerceivedComplexity:
|
|
31
|
+
Enabled: false
|
|
32
|
+
|
|
33
|
+
Metrics/MethodLength:
|
|
34
|
+
Enabled: false
|
|
35
|
+
|
|
36
|
+
Metrics/MethodLength:
|
|
37
|
+
Enabled: false
|
|
38
|
+
|
|
39
|
+
Metrics/ParameterLists:
|
|
40
|
+
Enabled: false
|
|
41
|
+
|
|
42
|
+
Metrics/LineLength:
|
|
43
|
+
Max: 120
|
|
44
|
+
|
|
45
|
+
Metrics/CyclomaticComplexity:
|
|
46
|
+
Enabled: false
|
|
47
|
+
|
|
48
|
+
Metrics/ClassLength:
|
|
49
|
+
Enabled: false
|
|
50
|
+
|
|
51
|
+
Metrics/BlockLength:
|
|
52
|
+
Enabled: false
|
|
53
|
+
|
|
54
|
+
Metrics/AbcSize:
|
|
55
|
+
Enabled: false
|
|
56
|
+
|
|
57
|
+
# -- Naming --------------------------------------------------------------------
|
|
58
|
+
Naming/MethodParameterName:
|
|
59
|
+
Enabled: false
|
|
60
|
+
|
|
61
|
+
# -- Style ---------------------------------------------------------------------
|
|
62
|
+
Style/StringLiterals:
|
|
63
|
+
EnforcedStyle: double_quotes
|
|
64
|
+
|
|
65
|
+
Style/RegexpLiteral:
|
|
66
|
+
EnforcedStyle: percent_r
|
|
67
|
+
|
|
68
|
+
Style/Lambda:
|
|
69
|
+
EnforcedStyle: literal
|
|
70
|
+
|
|
71
|
+
Style/IfUnlessModifier:
|
|
72
|
+
Enabled: false
|
|
73
|
+
|
|
74
|
+
Style/GuardClause:
|
|
75
|
+
Enabled: false
|
|
76
|
+
|
|
77
|
+
Style/Documentation:
|
|
78
|
+
Enabled: false
|
|
79
|
+
|
|
80
|
+
Style/DateTime:
|
|
81
|
+
Enabled: false
|
|
82
|
+
|
|
83
|
+
Style/ClassAndModuleChildren:
|
|
84
|
+
Enabled: false
|
|
85
|
+
|
|
86
|
+
Style/AsciiComments:
|
|
87
|
+
Enabled: false
|
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/CHANGELOG.md
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
## v1.0.0 - 8/5/2023
|
|
4
|
+
|
|
5
|
+
- Copies the original [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa)
|
|
6
|
+
- Adds the changes from [Restarone's fork](https://github.com/restarone/comfortable-mexican-sofa) (23 commits)
|
|
7
|
+
- Adds the ability to write snippets in Markdown
|
data/CONTRIBUTING.md
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Contribute your code to Occams 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,30 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
source "http://rubygems.org"
|
|
4
|
+
|
|
5
|
+
gemspec
|
|
6
|
+
|
|
7
|
+
group :development, :test do
|
|
8
|
+
gem "autoprefixer-rails", "~> 8.1.0"
|
|
9
|
+
gem "byebug", "~> 10.0.0", platforms: %i[mri mingw x64_mingw]
|
|
10
|
+
gem "capybara", "~> 3.39.0"
|
|
11
|
+
gem "image_processing", ">= 1.2"
|
|
12
|
+
gem "kaminari", "~> 1.1.1"
|
|
13
|
+
gem "puma", "~> 3.12.2"
|
|
14
|
+
gem "rubocop", "~> 0.55.0", require: false
|
|
15
|
+
gem "selenium-webdriver", "~> 4.9.0"
|
|
16
|
+
gem "sqlite3", "~> 1.4.2"
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
group :development do
|
|
20
|
+
gem "listen", "~> 3.8.0"
|
|
21
|
+
gem "web-console", "~> 3.5.1"
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
group :test do
|
|
25
|
+
gem "coveralls", "~> 0.8.21", require: false
|
|
26
|
+
gem "diffy", "~> 3.2.0"
|
|
27
|
+
gem "equivalent-xml", "~> 0.6.0"
|
|
28
|
+
gem "mocha", "~> 1.3.0", require: false
|
|
29
|
+
gem "rails-controller-testing", "~> 1.0.2"
|
|
30
|
+
end
|
data/LICENSE
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2023 Andrew vonderLuft
|
|
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/LICENSE.comfy
ADDED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
Copyright (c) 2010-2019 Oleg Khabarov
|
|
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,121 @@
|
|
|
1
|
+
# ocCaM'S
|
|
2
|
+
|
|
3
|
+
Prefer Simplicity
|
|
4
|
+
|
|
5
|
+
## Raison d'etre
|
|
6
|
+
|
|
7
|
+
ocCaM'S is a revival of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa), with all due thanks and acknowledgements to [Oleg Khabarov](https://github.com/GBH), et al. 'Comfy' was the simplest and cleanest Rails-based CMS that I had used. Its last commit was in 2020, and I simply did not want to see it die on the vine as [RadiantCMS](https://github.com/radiant/radiant) did some years ago.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
____ __ __ _ ____
|
|
11
|
+
___ ___ / ___|__ _| \/ ( ) ___|
|
|
12
|
+
/ _ \ / __| | / _` | |\/| |/\___ \
|
|
13
|
+
| (_) | (__| |__| (_| | | | | ___) |
|
|
14
|
+
\___/ \___|\____\__,_|_| |_| |____/
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
## The name
|
|
19
|
+
|
|
20
|
+
ocCaM'S, pronounced "AH-kums" is a nod to [Occam's Razor](https://en.wikipedia.org/wiki/Occam%27s_razor) - for this Rails-based Content Management System endeavors to follow the principle that the preferred solution is that which is simplest and built with the smallest possible set of components.
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
* Simple drop-in integration with Rails 6.0+ apps with minimal configuration
|
|
25
|
+
* CMS stays away from the rest of your application
|
|
26
|
+
|
|
27
|
+
Referring to the [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) documentation, substituting 'Occams' for 'ComfortableMexicanSofa' where appropriate.
|
|
28
|
+
|
|
29
|
+
* Powerful page templating capability using [Content Tags](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Content-Tags)
|
|
30
|
+
* [Multiple Sites](https://github.com/ocms/comfortable-mexican-sofa/wiki/Docs:-Sites) from a single installation
|
|
31
|
+
* 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.
|
|
32
|
+
* [CMS Seeds](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-CMS-Seeds) for initial content population
|
|
33
|
+
* [Revision History](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Revisions) to revert changes
|
|
34
|
+
* [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.
|
|
35
|
+
|
|
36
|
+
## Dependencies
|
|
37
|
+
|
|
38
|
+
* 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` and then `rake db:migrate`
|
|
39
|
+
* Image resizing is done with with [ImageMagick](http://www.imagemagick.org/script/download.php), so make sure it's installed.
|
|
40
|
+
* 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.
|
|
41
|
+
|
|
42
|
+
## Compatibility
|
|
43
|
+
|
|
44
|
+
- Install and basic functionality validated on Ruby 3.2.2. with Rails 6.1.7.4 and 7.0.6
|
|
45
|
+
- >= Rails 7 is recommended, since performance is noticably better
|
|
46
|
+
|
|
47
|
+
## Installation
|
|
48
|
+
|
|
49
|
+
Add gem definition to your Gemfile:
|
|
50
|
+
|
|
51
|
+
```ruby
|
|
52
|
+
gem "occams"
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
* From the Rails project's root run:
|
|
56
|
+
`bundle install`
|
|
57
|
+
* Then add the CMS:
|
|
58
|
+
`rails generate occams:cms`
|
|
59
|
+
* If you want to store files in your CMS with Active Storage:
|
|
60
|
+
`rails active_storage:install`
|
|
61
|
+
* Set up the database:
|
|
62
|
+
`rails db:migrate`
|
|
63
|
+
|
|
64
|
+
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.
|
|
65
|
+
|
|
66
|
+
```ruby
|
|
67
|
+
occams_route :cms_admin, path: "/admin"
|
|
68
|
+
occams_route :cms, path: "/"
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Quick Start Guide
|
|
72
|
+
|
|
73
|
+
After finishing installation you should be able to navigate to http://localhost:3000/admin
|
|
74
|
+
|
|
75
|
+
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/occams.rb](https://github.com/avonderluft/occams/blob/main/config/initializers/occams.rb)
|
|
76
|
+
|
|
77
|
+
Before creating pages and populating them with content we need to create a Site. Site defines a hostname, content path and its language.
|
|
78
|
+
|
|
79
|
+
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:
|
|
80
|
+
|
|
81
|
+
```html
|
|
82
|
+
<html>
|
|
83
|
+
<body>
|
|
84
|
+
<h1>{{ cms:text title }}</h1>
|
|
85
|
+
{{ cms:wysiwyg content }}
|
|
86
|
+
</body>
|
|
87
|
+
</html>
|
|
88
|
+
```
|
|
89
|
+
|
|
90
|
+
Once you have a layout, you may start creating pages and populating content. It's that easy.
|
|
91
|
+
|
|
92
|
+
## ToDos
|
|
93
|
+
|
|
94
|
+
- Linting via current version of rubocop
|
|
95
|
+
- Image file thumbnail hover not working on Rails 7
|
|
96
|
+
- get the original [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) tests working
|
|
97
|
+
- add documentation to Occams to replace ComfortableMexicanSofa
|
|
98
|
+
|
|
99
|
+
## Documentation
|
|
100
|
+
|
|
101
|
+
Refer to the [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) documentation, substituting 'Occams' for 'Comfy' where appropriate.
|
|
102
|
+
|
|
103
|
+
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
|
|
104
|
+
on [Content Tags](https://github.com/comfy/comfortable-mexican-sofa/wiki/Docs:-Content-Tags).
|
|
105
|
+
|
|
106
|
+
[Ocms Demo App](https://github.com/comfy/comfy-demo) also can be used as an
|
|
107
|
+
example of a default Rails app with CMS installed.
|
|
108
|
+
|
|
109
|
+
#### Contributing
|
|
110
|
+
|
|
111
|
+
The Occams repository can run like any Rails application in development. It's as easy to work on as any other Rails app.
|
|
112
|
+
For more detail see [CONTRIBUTING](CONTRIBUTING.md)
|
|
113
|
+
|
|
114
|
+
#### Acknowledgements
|
|
115
|
+
|
|
116
|
+
- Obviously to Oleg Khabarov, the creator of [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa). This is his work, with just a few updates and additions.
|
|
117
|
+
- Thanks to [Roman Almeida](https://github.com/nasmorn) for contributing OEM License for [Redactor Text Editor](http://imperavi.com/redactor)
|
|
118
|
+
|
|
119
|
+
---
|
|
120
|
+
- [ComfortableMexicanSofa](https://github.com/comfy/comfortable-mexican-sofa) Copyright 2010-2019 Oleg Khabarov. Released under the [MIT license](LICENSE)
|
|
121
|
+
- [Occams](https://github.com/avonderluft/occams) follows suit, being also 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 occams/vendor/codemirror
|
|
5
|
+
//= require occams/vendor/codemirror/mode/css/css
|
|
6
|
+
//= require occams/vendor/codemirror/mode/htmlmixed/htmlmixed
|
|
7
|
+
//= require occams/vendor/codemirror/mode/javascript/javascript
|
|
8
|
+
//= require occams/vendor/codemirror/mode/markdown/markdown
|
|
9
|
+
//= require occams/vendor/codemirror/mode/xml/xml
|
|
10
|
+
//= require occams/vendor/codemirror/addon/edit/closetag
|
|
11
|
+
//= require occams/vendor/sortable.min
|
|
12
|
+
//= require occams/vendor/bootstrap.bundle.min
|
|
13
|
+
//= require occams/vendor/diff/diff_match_patch.min
|
|
14
|
+
//= require occams/vendor/diff/pretty_text_diff
|
|
15
|
+
//= require occams/vendor/fontawesome
|
|
16
|
+
//= require occams/vendor/redactor
|
|
17
|
+
//= require occams/vendor/redactor/filemanager
|
|
18
|
+
//= require occams/vendor/redactor/imagemanager
|
|
19
|
+
//= require occams/vendor/redactor/definedlinks
|
|
20
|
+
//= require occams/vendor/redactor/table
|
|
21
|
+
//= require occams/vendor/redactor/video
|
|
22
|
+
//= require_directory ../../vendor/redactor/i18n/
|
|
23
|
+
//= require occams/vendor/flatpickr.min
|
|
24
|
+
//= require_directory ../../vendor/flatpickr/i18n/
|
|
25
|
+
|
|
26
|
+
//= require occams/admin/cms/base
|
|
27
|
+
//= require occams/admin/cms/categories
|
|
28
|
+
//= require occams/admin/cms/codemirror
|
|
29
|
+
//= require occams/admin/cms/diff
|
|
30
|
+
//= require occams/admin/cms/file_link
|
|
31
|
+
//= require occams/admin/cms/file_upload
|
|
32
|
+
//= require occams/admin/cms/files_modal
|
|
33
|
+
//= require occams/admin/cms/page_fragments
|
|
34
|
+
//= require occams/admin/cms/sortable_list
|
|
35
|
+
//= require occams/admin/cms/slugify
|
|
36
|
+
//= require occams/admin/cms/timepicker
|
|
37
|
+
//= require occams/admin/cms/wysiwyg
|
|
38
|
+
|
|
39
|
+
//= require occams/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
|