georgia 0.7.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/MIT-LICENSE +20 -0
- data/README.md +27 -0
- data/Rakefile +27 -0
- data/app/assets/fonts/georgia/signika-bold-webfont.eot +0 -0
- data/app/assets/fonts/georgia/signika-bold-webfont.svg +1711 -0
- data/app/assets/fonts/georgia/signika-bold-webfont.ttf +0 -0
- data/app/assets/fonts/georgia/signika-bold-webfont.woff +0 -0
- data/app/assets/fonts/georgia/signika-light-webfont.eot +0 -0
- data/app/assets/fonts/georgia/signika-light-webfont.svg +1680 -0
- data/app/assets/fonts/georgia/signika-light-webfont.ttf +0 -0
- data/app/assets/fonts/georgia/signika-light-webfont.woff +0 -0
- data/app/assets/fonts/georgia/signika-regular-webfont.eot +0 -0
- data/app/assets/fonts/georgia/signika-regular-webfont.svg +1746 -0
- data/app/assets/fonts/georgia/signika-regular-webfont.ttf +0 -0
- data/app/assets/fonts/georgia/signika-regular-webfont.woff +0 -0
- data/app/assets/images/georgia/bg-body-bar.jpg +0 -0
- data/app/assets/images/georgia/checkmark.png +0 -0
- data/app/assets/images/georgia/content-types/avi.jpg +0 -0
- data/app/assets/images/georgia/content-types/css.jpg +0 -0
- data/app/assets/images/georgia/content-types/csv.jpg +0 -0
- data/app/assets/images/georgia/content-types/doc.jpg +0 -0
- data/app/assets/images/georgia/content-types/docx.jpg +0 -0
- data/app/assets/images/georgia/content-types/eps.jpg +0 -0
- data/app/assets/images/georgia/content-types/gif.jpg +0 -0
- data/app/assets/images/georgia/content-types/gz.jpg +0 -0
- data/app/assets/images/georgia/content-types/html.jpg +0 -0
- data/app/assets/images/georgia/content-types/jpg.jpg +0 -0
- data/app/assets/images/georgia/content-types/mp3.jpg +0 -0
- data/app/assets/images/georgia/content-types/ods.jpg +0 -0
- data/app/assets/images/georgia/content-types/odt.jpg +0 -0
- data/app/assets/images/georgia/content-types/pdf.jpg +0 -0
- data/app/assets/images/georgia/content-types/png.jpg +0 -0
- data/app/assets/images/georgia/content-types/ppt.jpg +0 -0
- data/app/assets/images/georgia/content-types/pptx.jpg +0 -0
- data/app/assets/images/georgia/content-types/rar.jpg +0 -0
- data/app/assets/images/georgia/content-types/tar.jpg +0 -0
- data/app/assets/images/georgia/content-types/txt.jpg +0 -0
- data/app/assets/images/georgia/content-types/wav.jpg +0 -0
- data/app/assets/images/georgia/content-types/xls.jpg +0 -0
- data/app/assets/images/georgia/content-types/zip.jpg +0 -0
- data/app/assets/images/georgia/down_arrow.gif +0 -0
- data/app/assets/images/georgia/grippy_large.png +0 -0
- data/app/assets/images/georgia/indeterminate.png +0 -0
- data/app/assets/images/georgia/logo.png +0 -0
- data/app/assets/images/georgia/select2-spinner.gif +0 -0
- data/app/assets/images/georgia/select2.png +0 -0
- data/app/assets/images/georgia/select2x2.png +0 -0
- data/app/assets/images/georgia/transparent.jpg +0 -0
- data/app/assets/images/georgia/up_arrow.gif +0 -0
- data/app/assets/images/ui-bg_glass_75_ffffff_1x400.png +0 -0
- data/app/assets/javascripts/georgia/application.js +20 -0
- data/app/assets/javascripts/georgia/bootstrap-vendor.js.coffee +13 -0
- data/app/assets/javascripts/georgia/ckeditor/config.js +22 -0
- data/app/assets/javascripts/georgia/components/asset-replacer.js.coffee +25 -0
- data/app/assets/javascripts/georgia/components/asset-uploader.js.coffee +44 -0
- data/app/assets/javascripts/georgia/components/flash.js.coffee +15 -0
- data/app/assets/javascripts/georgia/components/forms/menu.js.coffee +66 -0
- data/app/assets/javascripts/georgia/components/forms/revision.js.coffee +22 -0
- data/app/assets/javascripts/georgia/components/forms/spinning.js.coffee +51 -0
- data/app/assets/javascripts/georgia/components/media-library.js.coffee +57 -0
- data/app/assets/javascripts/georgia/components/portlets/link.js.coffee +14 -0
- data/app/assets/javascripts/georgia/components/portlets/slide.js.coffee +38 -0
- data/app/assets/javascripts/georgia/components/portlets/widget.js.coffee +47 -0
- data/app/assets/javascripts/georgia/components/position_sort.js.coffee +20 -0
- data/app/assets/javascripts/georgia/components/tables/checkbox.js.coffee +123 -0
- data/app/assets/javascripts/georgia/components/tables/media.js.coffee +59 -0
- data/app/assets/javascripts/georgia/components/tables/messages.js.coffee +59 -0
- data/app/assets/javascripts/georgia/components/tables/pages.js.coffee +93 -0
- data/app/assets/javascripts/georgia/components/tags.js.coffee +36 -0
- data/app/assets/javascripts/georgia/components/widget.js.coffee +32 -0
- data/app/assets/javascripts/georgia/featured-image.js.coffee +8 -0
- data/app/assets/javascripts/georgia/keybindings.js.coffee +42 -0
- data/app/assets/javascripts/georgia/toggle.js.coffee +4 -0
- data/app/assets/javascripts/georgia/vendor/bootstrap-datetimepicker.js +28 -0
- data/app/assets/javascripts/georgia/vendor/jquery.mjs.nestedSortable.js +608 -0
- data/app/assets/javascripts/georgia/vendor/jquery.ui.touch-punch.js +160 -0
- data/app/assets/javascripts/georgia/vendor/moment.js +6 -0
- data/app/assets/stylesheets/georgia/application.css.scss +16 -0
- data/app/assets/stylesheets/georgia/components/_box.scss +29 -0
- data/app/assets/stylesheets/georgia/components/_button.scss +60 -0
- data/app/assets/stylesheets/georgia/components/_checkbox.scss +48 -0
- data/app/assets/stylesheets/georgia/components/_form.scss +8 -0
- data/app/assets/stylesheets/georgia/components/_help.scss +4 -0
- data/app/assets/stylesheets/georgia/components/_icon.scss +7 -0
- data/app/assets/stylesheets/georgia/components/_input.scss +48 -0
- data/app/assets/stylesheets/georgia/components/_label.scss +4 -0
- data/app/assets/stylesheets/georgia/components/_modal.scss +14 -0
- data/app/assets/stylesheets/georgia/components/_nav-list.scss +13 -0
- data/app/assets/stylesheets/georgia/components/_note.scss +31 -0
- data/app/assets/stylesheets/georgia/components/_portlet.scss +57 -0
- data/app/assets/stylesheets/georgia/components/_progress.scss +4 -0
- data/app/assets/stylesheets/georgia/components/_state.scss +17 -0
- data/app/assets/stylesheets/georgia/components/_table.scss +8 -0
- data/app/assets/stylesheets/georgia/components/_transparent.scss +3 -0
- data/app/assets/stylesheets/georgia/layout/_base.scss +94 -0
- data/app/assets/stylesheets/georgia/layout/_devise.scss +5 -0
- data/app/assets/stylesheets/georgia/mixins/_clearfix.scss +12 -0
- data/app/assets/stylesheets/georgia/mixins/_ellipsis.scss +8 -0
- data/app/assets/stylesheets/georgia/mixins/_inflectors.scss +1 -0
- data/app/assets/stylesheets/georgia/mixins/_opacity.scss +6 -0
- data/app/assets/stylesheets/georgia/mixins/_utilities.scss +13 -0
- data/app/assets/stylesheets/georgia/modules/_facets.scss +4 -0
- data/app/assets/stylesheets/georgia/modules/_footer.scss +9 -0
- data/app/assets/stylesheets/georgia/modules/_form_with_helpers.scss +17 -0
- data/app/assets/stylesheets/georgia/modules/_header.scss +66 -0
- data/app/assets/stylesheets/georgia/modules/_link.scss +51 -0
- data/app/assets/stylesheets/georgia/modules/_login.scss +7 -0
- data/app/assets/stylesheets/georgia/modules/_media.scss +55 -0
- data/app/assets/stylesheets/georgia/modules/_menu.scss +7 -0
- data/app/assets/stylesheets/georgia/modules/_message.scss +53 -0
- data/app/assets/stylesheets/georgia/modules/_notifications.scss +26 -0
- data/app/assets/stylesheets/georgia/modules/_pages.scss +7 -0
- data/app/assets/stylesheets/georgia/modules/_pagination.scss +41 -0
- data/app/assets/stylesheets/georgia/modules/_results.scss +46 -0
- data/app/assets/stylesheets/georgia/modules/_revision.scss +18 -0
- data/app/assets/stylesheets/georgia/modules/_sidebar.scss +71 -0
- data/app/assets/stylesheets/georgia/modules/_slide.scss +11 -0
- data/app/assets/stylesheets/georgia/modules/_subpage.scss +25 -0
- data/app/assets/stylesheets/georgia/modules/_users.scss +3 -0
- data/app/assets/stylesheets/georgia/modules/_widget.scss +45 -0
- data/app/assets/stylesheets/georgia/overrides/_select2.scss +5 -0
- data/app/assets/stylesheets/georgia/settings/_base.scss +6 -0
- data/app/assets/stylesheets/georgia/settings/_colors.scss +41 -0
- data/app/assets/stylesheets/georgia/settings/_fonts.scss +3 -0
- data/app/assets/stylesheets/georgia/settings/_z-index.scss +7 -0
- data/app/assets/stylesheets/georgia/vendor/_autocomplete.scss +50 -0
- data/app/assets/stylesheets/georgia/vendor/_bootstrap-datetimepicker.scss +174 -0
- data/app/assets/stylesheets/georgia/vendor/_select2.scss +18 -0
- data/app/assets/stylesheets/georgia/vendor/_tooltip.scss +98 -0
- data/app/controllers/georgia/api/media_controller.rb +18 -0
- data/app/controllers/georgia/api/tags_controller.rb +22 -0
- data/app/controllers/georgia/application_controller.rb +25 -0
- data/app/controllers/georgia/concerns/frontendable.rb +45 -0
- data/app/controllers/georgia/concerns/helpers.rb +28 -0
- data/app/controllers/georgia/dashboard_controller.rb +14 -0
- data/app/controllers/georgia/links_controller.rb +13 -0
- data/app/controllers/georgia/media_controller.rb +101 -0
- data/app/controllers/georgia/menus_controller.rb +80 -0
- data/app/controllers/georgia/messages_controller.rb +74 -0
- data/app/controllers/georgia/pages_controller.rb +180 -0
- data/app/controllers/georgia/revisions_controller.rb +89 -0
- data/app/controllers/georgia/slides_controller.rb +13 -0
- data/app/controllers/georgia/ui_associations_controller.rb +12 -0
- data/app/controllers/georgia/users/sessions_controller.rb +7 -0
- data/app/controllers/georgia/users_controller.rb +51 -0
- data/app/controllers/georgia/widgets_controller.rb +67 -0
- data/app/controllers/messages_controller.rb +29 -0
- data/app/decorators/ckeditor/asset_decorator.rb +13 -0
- data/app/decorators/ckeditor/assets_decorator.rb +4 -0
- data/app/decorators/ckeditor/picture_decorator.rb +9 -0
- data/app/decorators/ckeditor/pictures_decorator.rb +4 -0
- data/app/decorators/georgia/application_decorator.rb +6 -0
- data/app/decorators/georgia/link_decorator.rb +9 -0
- data/app/decorators/georgia/links_decorator.rb +4 -0
- data/app/decorators/georgia/message_decorator.rb +21 -0
- data/app/decorators/georgia/messages_decorator.rb +4 -0
- data/app/decorators/georgia/page_decorator.rb +31 -0
- data/app/decorators/georgia/pages_decorator.rb +4 -0
- data/app/decorators/georgia/revision_decorator.rb +28 -0
- data/app/decorators/georgia/slide_decorator.rb +4 -0
- data/app/decorators/georgia/widget_decorator.rb +4 -0
- data/app/decorators/pagination_decorator.rb +3 -0
- data/app/decorators/sunspot/highlighted_hit_decorator.rb +29 -0
- data/app/helpers/georgia/checkboxes_helper.rb +13 -0
- data/app/helpers/georgia/devise_helper.rb +15 -0
- data/app/helpers/georgia/facets_helper.rb +35 -0
- data/app/helpers/georgia/forms_helper.rb +68 -0
- data/app/helpers/georgia/header_helper.rb +10 -0
- data/app/helpers/georgia/internationalization_helper.rb +32 -0
- data/app/helpers/georgia/menus_helper.rb +20 -0
- data/app/helpers/georgia/messages_helper.rb +9 -0
- data/app/helpers/georgia/meta_tags_helper.rb +22 -0
- data/app/helpers/georgia/modals_helper.rb +7 -0
- data/app/helpers/georgia/pages_helper.rb +22 -0
- data/app/helpers/georgia/pagination_helper.rb +10 -0
- data/app/helpers/georgia/routes_helper.rb +25 -0
- data/app/helpers/georgia/sidebar_helper.rb +13 -0
- data/app/helpers/georgia/states_helper.rb +17 -0
- data/app/helpers/georgia/twitter_helper.rb +24 -0
- data/app/helpers/georgia/ui_helper.rb +51 -0
- data/app/mailers/georgia/notifier.rb +33 -0
- data/app/models/ability.rb +19 -0
- data/app/models/ckeditor/asset.rb +61 -0
- data/app/models/ckeditor/attachment_file.rb +7 -0
- data/app/models/ckeditor/picture.rb +15 -0
- data/app/models/georgia/clone.rb +101 -0
- data/app/models/georgia/concerns/cacheable.rb +18 -0
- data/app/models/georgia/concerns/contentable.rb +22 -0
- data/app/models/georgia/concerns/indexable.rb +67 -0
- data/app/models/georgia/concerns/orderable.rb +21 -0
- data/app/models/georgia/concerns/publishable.rb +35 -0
- data/app/models/georgia/concerns/revisionable.rb +38 -0
- data/app/models/georgia/concerns/slugable.rb +46 -0
- data/app/models/georgia/concerns/statable.rb +64 -0
- data/app/models/georgia/concerns/taggable.rb +19 -0
- data/app/models/georgia/concerns/templatable.rb +20 -0
- data/app/models/georgia/concerns/treeable.rb +26 -0
- data/app/models/georgia/content.rb +15 -0
- data/app/models/georgia/link.rb +27 -0
- data/app/models/georgia/menu.rb +13 -0
- data/app/models/georgia/message.rb +47 -0
- data/app/models/georgia/page.rb +20 -0
- data/app/models/georgia/revision.rb +22 -0
- data/app/models/georgia/role.rb +10 -0
- data/app/models/georgia/slide.rb +13 -0
- data/app/models/georgia/status.rb +29 -0
- data/app/models/georgia/ui_association.rb +27 -0
- data/app/models/georgia/ui_section.rb +12 -0
- data/app/models/georgia/user.rb +27 -0
- data/app/models/georgia/widget.rb +32 -0
- data/app/parsers/georgia/menu_ancestry_parser.rb +41 -0
- data/app/policies/georgia/policy.rb +17 -0
- data/app/policies/georgia/revision_policy.rb +53 -0
- data/app/presenters/georgia/active_facet_presenter.rb +25 -0
- data/app/presenters/georgia/facet_presenter.rb +26 -0
- data/app/presenters/georgia/link_portlet.rb +101 -0
- data/app/presenters/georgia/list_facet_presenter.rb +32 -0
- data/app/presenters/georgia/media_library_presenter.rb +44 -0
- data/app/presenters/georgia/message_actions_presenter.rb +51 -0
- data/app/presenters/georgia/page_actions_presenter.rb +94 -0
- data/app/presenters/georgia/pagination_presenter.rb +58 -0
- data/app/presenters/georgia/portlet.rb +30 -0
- data/app/presenters/georgia/presenter.rb +17 -0
- data/app/presenters/georgia/sidebar_link_presenter.rb +55 -0
- data/app/presenters/georgia/single_active_facet_presenter.rb +10 -0
- data/app/presenters/georgia/slide_portlet.rb +79 -0
- data/app/presenters/georgia/subpage_portlet.rb +36 -0
- data/app/presenters/georgia/warning_message.rb +55 -0
- data/app/presenters/georgia/widget_portlet.rb +75 -0
- data/app/sweepers/navigation_sweeper.rb +12 -0
- data/app/uploaders/ckeditor_attachment_file_uploader.rb +16 -0
- data/app/uploaders/ckeditor_picture_uploader.rb +36 -0
- data/app/uploaders/georgia/attachment_uploader.rb +16 -0
- data/app/views/georgia/api/media/pictures.html.erb +17 -0
- data/app/views/georgia/ckeditor/assets/_asset.html.erb +23 -0
- data/app/views/georgia/ckeditor/attachment_files/_attachment_file.html.erb +1 -0
- data/app/views/georgia/ckeditor/pictures/_picture.html.erb +26 -0
- data/app/views/georgia/dashboard/panels/_messages.html.erb +30 -0
- data/app/views/georgia/dashboard/panels/_reviews.html.erb +24 -0
- data/app/views/georgia/dashboard/show.html.erb +18 -0
- data/app/views/georgia/header/_dashboard.html.erb +1 -0
- data/app/views/georgia/header/_media.html.erb +3 -0
- data/app/views/georgia/header/_messages.html.erb +3 -0
- data/app/views/georgia/header/_navigation.html.erb +3 -0
- data/app/views/georgia/header/_pages.html.erb +3 -0
- data/app/views/georgia/header/_users.html.erb +3 -0
- data/app/views/georgia/header/_widgets.html.erb +3 -0
- data/app/views/georgia/links/show.html.erb +1 -0
- data/app/views/georgia/media/_header.html.erb +27 -0
- data/app/views/georgia/media/create.js.erb +1 -0
- data/app/views/georgia/media/edit.html.erb +74 -0
- data/app/views/georgia/media/search.html.erb +36 -0
- data/app/views/georgia/media/sidebar/_facets.html.erb +12 -0
- data/app/views/georgia/menus/_menu.html.erb +7 -0
- data/app/views/georgia/menus/create.js.erb +5 -0
- data/app/views/georgia/menus/edit.html.erb +37 -0
- data/app/views/georgia/menus/index.html.erb +36 -0
- data/app/views/georgia/messages/_message.html.erb +26 -0
- data/app/views/georgia/messages/destroy.js.erb +3 -0
- data/app/views/georgia/messages/search.html.erb +58 -0
- data/app/views/georgia/messages/show.html.erb +46 -0
- data/app/views/georgia/notifier/notify_admins.html.erb +10 -0
- data/app/views/georgia/notifier/notify_editors.html.erb +10 -0
- data/app/views/georgia/notifier/notify_support.html.erb +9 -0
- data/app/views/georgia/pages/_header.html.erb +22 -0
- data/app/views/georgia/pages/_page.html.erb +19 -0
- data/app/views/georgia/pages/_subpage.html.erb +1 -0
- data/app/views/georgia/pages/create.js.erb +6 -0
- data/app/views/georgia/pages/search.html.erb +32 -0
- data/app/views/georgia/pages/settings.html.erb +79 -0
- data/app/views/georgia/pages/templates/_custom.html.erb +7 -0
- data/app/views/georgia/pages/templates/_default.html.erb +7 -0
- data/app/views/georgia/pages/templates/_one-column.html.erb +7 -0
- data/app/views/georgia/pages/templates/_sidebar-left.html.erb +10 -0
- data/app/views/georgia/pages/templates/_sidebar-right.html.erb +10 -0
- data/app/views/georgia/revisions/_revision.html.erb +11 -0
- data/app/views/georgia/revisions/edit.html.erb +36 -0
- data/app/views/georgia/revisions/fields/_content.html.erb +43 -0
- data/app/views/georgia/revisions/fields/_slides.html.erb +19 -0
- data/app/views/georgia/revisions/fields/_template.html.erb +8 -0
- data/app/views/georgia/revisions/fields/_ui_section.html.erb +14 -0
- data/app/views/georgia/revisions/fields/_widgets.html.erb +11 -0
- data/app/views/georgia/revisions/index.html.erb +25 -0
- data/app/views/georgia/shared/_messages.html.erb +11 -0
- data/app/views/georgia/shared/modals/_media_library.html.erb +35 -0
- data/app/views/georgia/shared/modals/_menu.html.erb +20 -0
- data/app/views/georgia/shared/modals/_page.html.erb +20 -0
- data/app/views/georgia/shared/modals/_progress.html.erb +15 -0
- data/app/views/georgia/shared/modals/_widget.html.erb +24 -0
- data/app/views/georgia/shared/search/_messages.html.erb +4 -0
- data/app/views/georgia/slides/new.html.erb +1 -0
- data/app/views/georgia/ui_associations/new.html.erb +1 -0
- data/app/views/georgia/users/_form.html.erb +27 -0
- data/app/views/georgia/users/_user.html.erb +9 -0
- data/app/views/georgia/users/edit.html.erb +22 -0
- data/app/views/georgia/users/index.html.erb +25 -0
- data/app/views/georgia/users/new.html.erb +19 -0
- data/app/views/georgia/users/registrations/new.html.erb +20 -0
- data/app/views/georgia/users/sessions/new.html.erb +17 -0
- data/app/views/georgia/widgets/_widget.html.erb +35 -0
- data/app/views/georgia/widgets/create.js.erb +5 -0
- data/app/views/georgia/widgets/index.html.erb +31 -0
- data/app/views/layouts/georgia/_footer.html.erb +7 -0
- data/app/views/layouts/georgia/_head.html.erb +15 -0
- data/app/views/layouts/georgia/_header.html.erb +40 -0
- data/app/views/layouts/georgia/_messages.html.erb +7 -0
- data/app/views/layouts/georgia/_sidebar.html.erb +9 -0
- data/app/views/layouts/georgia/application.html.erb +16 -0
- data/app/views/layouts/georgia/devise.html.erb +11 -0
- data/app/views/menus/_dropdown_group.html.erb +10 -0
- data/app/views/menus/_dropdown_link.html.erb +3 -0
- data/app/views/menus/_dropdown_menu.html.erb +11 -0
- data/app/views/menus/_link.html.erb +1 -0
- data/app/views/menus/_menu.html.erb +7 -0
- data/app/views/messages/create.js.erb +0 -0
- data/app/workers/spam_worker.rb +12 -0
- data/config/initializers/acts_as_taggable_on.rb +19 -0
- data/config/initializers/ckeditor.rb +18 -0
- data/config/initializers/devise.rb +254 -0
- data/config/initializers/inflections.rb +3 -0
- data/config/initializers/revisions.rb +5 -0
- data/config/initializers/simple_form.rb +79 -0
- data/config/locales/georgia.en.yml +4 -0
- data/config/routes.rb +79 -0
- data/db/migrate/001_create_ckeditor_assets.rb +25 -0
- data/db/migrate/002_create_georgia_contents.rb +18 -0
- data/db/migrate/003_create_georgia_links.rb +12 -0
- data/db/migrate/004_create_georgia_menus.rb +10 -0
- data/db/migrate/005_create_georgia_messages.rb +21 -0
- data/db/migrate/006_create_georgia_pages.rb +21 -0
- data/db/migrate/007_create_georgia_revisions.rb +12 -0
- data/db/migrate/008_create_georgia_roles.rb +10 -0
- data/db/migrate/009_create_georgia_slides.rb +11 -0
- data/db/migrate/010_create_georgia_ui_associations.rb +13 -0
- data/db/migrate/011_create_georgia_ui_sections.rb +9 -0
- data/db/migrate/012_create_georgia_users.rb +24 -0
- data/db/migrate/013_create_georgia_widgets.rb +9 -0
- data/db/migrate/014_create_roles_users.rb +11 -0
- data/db/migrate/015_create_tags.rb +20 -0
- data/lib/generators/georgia/install/install_generator.rb +60 -0
- data/lib/generators/georgia/install/templates/Procfile +1 -0
- data/lib/generators/georgia/install/templates/README +14 -0
- data/lib/generators/georgia/install/templates/app/controllers/pages_controller.rb +13 -0
- data/lib/generators/georgia/install/templates/config/initializers/georgia.rb +15 -0
- data/lib/generators/georgia/upgrade/templates/add_anti_spam_to_messages.rb +12 -0
- data/lib/generators/georgia/upgrade/templates/add_contents_counter_cache_to_images.rb +15 -0
- data/lib/generators/georgia/upgrade/templates/add_public_to_georgia_pages.rb +8 -0
- data/lib/generators/georgia/upgrade/templates/add_state_to_georgia_pages.rb +13 -0
- data/lib/generators/georgia/upgrade/templates/create_georgia_revisions.rb +12 -0
- data/lib/generators/georgia/upgrade/upgrade_generator.rb +34 -0
- data/lib/georgia.rb +23 -0
- data/lib/georgia/assets.rb +8 -0
- data/lib/georgia/assets/cloud_files_connection.rb +22 -0
- data/lib/georgia/assets/transferable_picture.rb +51 -0
- data/lib/georgia/engine.rb +58 -0
- data/lib/georgia/paths.rb +22 -0
- data/lib/georgia/version.rb +3 -0
- data/lib/tasks/assets.rake +106 -0
- data/lib/tasks/georgia.rake +61 -0
- data/lib/tasks/install.rake +19 -0
- data/lib/tasks/sidekiq.rake +8 -0
- data/lib/tasks/solr.rake +30 -0
- data/lib/tasks/upgrade.rake +39 -0
- data/lib/templates/erb/scaffold/_form.html.erb +13 -0
- metadata +857 -0
@@ -0,0 +1,28 @@
|
|
1
|
+
require 'active_support/concern'
|
2
|
+
|
3
|
+
module Georgia
|
4
|
+
module Concerns
|
5
|
+
module Helpers
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
helper_method :instance_name
|
10
|
+
helper_method :model
|
11
|
+
end
|
12
|
+
|
13
|
+
def instance_name
|
14
|
+
controller_name.singularize
|
15
|
+
end
|
16
|
+
|
17
|
+
def model
|
18
|
+
begin
|
19
|
+
self.class.to_s.gsub(/Controller/,'').singularize.constantize
|
20
|
+
# If no constant is found, check if the non-namespaced one exists. i.e. Partner => Admin::PartnersController
|
21
|
+
rescue NameError
|
22
|
+
self.class.to_s.gsub(/Controller/,'').gsub(/\w+::/,'').singularize.constantize
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Georgia
|
2
|
+
class DashboardController < Georgia::ApplicationController
|
3
|
+
|
4
|
+
def show
|
5
|
+
if can?(:approve, Georgia::Revision) or can?(:review, Georgia::Revision)
|
6
|
+
@awaiting_revisions = Georgia::Revision.reviews.select{|r| r.revisionable.present?}
|
7
|
+
end
|
8
|
+
if can?(:index, Georgia::Message)
|
9
|
+
@messages = Georgia::Message.ham.latest.limit(5).decorate
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
module Georgia
|
2
|
+
class MediaController < ApplicationController
|
3
|
+
|
4
|
+
load_and_authorize_resource class: Ckeditor::Asset
|
5
|
+
# destroy's :id param is an Array and makes load_resource fails
|
6
|
+
skip_load_resource only: :destroy
|
7
|
+
|
8
|
+
def index
|
9
|
+
redirect_to action: :search
|
10
|
+
end
|
11
|
+
|
12
|
+
def search
|
13
|
+
@asset = Ckeditor::Asset.new
|
14
|
+
session[:search_params] = params
|
15
|
+
@search = Ckeditor::Asset.search do
|
16
|
+
fulltext params[:query] do
|
17
|
+
fields(:filename, :tags)
|
18
|
+
end
|
19
|
+
with(:extension, params[:e]) unless params[:e].blank?
|
20
|
+
with(:tags).any_of(params[:tg]) unless params[:tg].blank?
|
21
|
+
order_by (params[:o] || :updated_at), (params[:dir] || :desc)
|
22
|
+
paginate(page: params[:page], per_page: (params[:per] || 8))
|
23
|
+
end
|
24
|
+
@assets = Ckeditor::AssetDecorator.decorate_collection(@search.results)
|
25
|
+
end
|
26
|
+
|
27
|
+
def create
|
28
|
+
@assets = []
|
29
|
+
params[:assets].each do |asset|
|
30
|
+
klass = asset.content_type.match(/^image/) ? Ckeditor::Picture : Ckeditor::Asset
|
31
|
+
@assets << klass.create(data: asset)
|
32
|
+
end
|
33
|
+
render layout: false
|
34
|
+
end
|
35
|
+
|
36
|
+
def show
|
37
|
+
redirect_to edit_media_path(id: params[:id])
|
38
|
+
end
|
39
|
+
|
40
|
+
def edit
|
41
|
+
@asset = Ckeditor::Asset.find(params[:id])
|
42
|
+
end
|
43
|
+
|
44
|
+
def update
|
45
|
+
@asset = Ckeditor::Asset.find(params[:id])
|
46
|
+
if @asset.update_attributes(params[:asset])
|
47
|
+
respond_to do |format|
|
48
|
+
format.html { redirect_to edit_media_path(@asset), notice: "Asset was successfully updated." }
|
49
|
+
format.js { head :ok }
|
50
|
+
end
|
51
|
+
else
|
52
|
+
respond_to do |format|
|
53
|
+
format.html { redirect_to edit_media_path(@asset), alert: "Oups. Something went wrong." }
|
54
|
+
format.js { head :internal_server_error }
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# Destroy multiple assets
|
60
|
+
def destroy
|
61
|
+
@assets = Ckeditor::Asset.where(id: params[:id])
|
62
|
+
if can?(:destroy, Ckeditor::Asset) and @assets.destroy_all
|
63
|
+
respond_to do |format|
|
64
|
+
format.html { redirect_to search_media_index_path, notice: "Assets were successfully deleted." }
|
65
|
+
format.js { head :ok }
|
66
|
+
end
|
67
|
+
else
|
68
|
+
respond_to do |format|
|
69
|
+
format.html { redirect_to search_media_index_path, alert: "Oups. Something went wrong." }
|
70
|
+
format.js { head :internal_server_error }
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
|
75
|
+
# Download multiple assets as a zip file
|
76
|
+
# TODO: We could send via AJAX with jquery.fileDownload plugin
|
77
|
+
# We could then have a download spinner while the request is processing, even a progress bar
|
78
|
+
def download
|
79
|
+
ids = params[:ids].split(',')
|
80
|
+
@files = Ckeditor::Asset.find(ids)
|
81
|
+
t = Tempfile.new("tmp-zip-#{Time.now.to_i}")
|
82
|
+
Zip::OutputStream.open(t.path) do |zos|
|
83
|
+
@files.each do |file|
|
84
|
+
filename = file.filename
|
85
|
+
zos.put_next_entry(filename)
|
86
|
+
tmp_file = Tempfile.new(filename)
|
87
|
+
open(file.url) do |data|
|
88
|
+
tmp_file.write data.read.force_encoding('UTF-8')
|
89
|
+
end
|
90
|
+
zos.print IO.read(tmp_file)
|
91
|
+
tmp_file.close
|
92
|
+
end
|
93
|
+
end
|
94
|
+
filename = "#{Georgia.title.try(:parameterize) || 'georgia'}_assets_#{Time.now.strftime('%Y%m%d%H%M%S')}.zip"
|
95
|
+
t.close
|
96
|
+
|
97
|
+
send_file t.path, type: "application/zip", disposition: 'attachment', filename: filename
|
98
|
+
end
|
99
|
+
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,80 @@
|
|
1
|
+
module Georgia
|
2
|
+
class MenusController < ApplicationController
|
3
|
+
|
4
|
+
load_and_authorize_resource class: Menu
|
5
|
+
|
6
|
+
def index
|
7
|
+
@menus = Menu.scoped.page(params[:page])
|
8
|
+
end
|
9
|
+
|
10
|
+
def new
|
11
|
+
@menu = Menu.new
|
12
|
+
end
|
13
|
+
|
14
|
+
def create
|
15
|
+
@menu = Menu.new(params[:menu])
|
16
|
+
if @menu.save
|
17
|
+
respond_to do |format|
|
18
|
+
format.html { redirect_to [:edit, @menu], notice: "#{@menu.title} was successfully created." }
|
19
|
+
format.js { render layout: false }
|
20
|
+
end
|
21
|
+
else
|
22
|
+
respond_to do |format|
|
23
|
+
format.html { render :edit }
|
24
|
+
format.js { render layout: false }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
def show
|
30
|
+
redirect_to edit_menu_path(params[:id])
|
31
|
+
end
|
32
|
+
|
33
|
+
def edit
|
34
|
+
@menu = Menu.find(params[:id])
|
35
|
+
@links = @menu.links.roots
|
36
|
+
end
|
37
|
+
|
38
|
+
def update
|
39
|
+
@menu = Menu.find(params[:id])
|
40
|
+
update_links_attributes(params[:menu].delete(:ancestry))
|
41
|
+
update_links_menu_id
|
42
|
+
if @menu.update_attributes(params[:menu])
|
43
|
+
respond_to do |format|
|
44
|
+
format.html { redirect_to [:edit, @menu], notice: "#{@menu.title} was successfully updated." }
|
45
|
+
format.js { head :ok }
|
46
|
+
end
|
47
|
+
else
|
48
|
+
respond_to do |format|
|
49
|
+
format.html { render :edit, alert: "Oups. Something went wrong." }
|
50
|
+
format.js { head :internal_server_error }
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
def destroy
|
56
|
+
@menu = Menu.find(params[:id])
|
57
|
+
@menu.destroy
|
58
|
+
|
59
|
+
redirect_to menus_url
|
60
|
+
end
|
61
|
+
|
62
|
+
private
|
63
|
+
|
64
|
+
def update_links_attributes ancestry_tree
|
65
|
+
return unless ancestry_tree
|
66
|
+
ancestry_attributes(ancestry_tree).each do |k,v|
|
67
|
+
params[:menu][:links_attributes][k].merge!(v)
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
def update_links_menu_id
|
72
|
+
Link.where(id: params[:menu][:links_attributes].keys).update_all(menu_id: params[:id])
|
73
|
+
end
|
74
|
+
|
75
|
+
def ancestry_attributes(ancestry_tree)
|
76
|
+
MenuAncestryParser.new(ancestry_tree).to_hash
|
77
|
+
end
|
78
|
+
|
79
|
+
end
|
80
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Georgia
|
2
|
+
class MessagesController < ApplicationController
|
3
|
+
|
4
|
+
load_and_authorize_resource class: Georgia::Message
|
5
|
+
|
6
|
+
before_filter :prepare_search, only: [:search, :show, :spam, :ham]
|
7
|
+
|
8
|
+
|
9
|
+
def index
|
10
|
+
redirect_to action: :search
|
11
|
+
end
|
12
|
+
|
13
|
+
def search
|
14
|
+
end
|
15
|
+
|
16
|
+
# Destroy multiple assets
|
17
|
+
def destroy
|
18
|
+
ids = params[:id].split(',')
|
19
|
+
if @messages = Message.destroy(ids)
|
20
|
+
render layout: false
|
21
|
+
else
|
22
|
+
head :internal_server_error
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def destroy_all_spam
|
27
|
+
if Message.spam.destroy_all
|
28
|
+
redirect_to :back, notice: 'All spam messages have been successfully deleted.'
|
29
|
+
else
|
30
|
+
redirect_to :back, alert: 'Oups. Something went wrong.'
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def show
|
35
|
+
@message = Message.find(params[:id]).decorate
|
36
|
+
end
|
37
|
+
|
38
|
+
def spam
|
39
|
+
@message = Message.find(params[:id])
|
40
|
+
if @message.spam!
|
41
|
+
@message.update_attribute(:spam, true)
|
42
|
+
redirect_to :back, notice: 'Message successfully marked as spam.'
|
43
|
+
else
|
44
|
+
redirect_to :back, alert: 'Oups. Something went wrong.'
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def ham
|
49
|
+
@message = Message.find(params[:id])
|
50
|
+
if @message.ham! == false
|
51
|
+
@message.update_attribute(:spam, false)
|
52
|
+
redirect_to :back, notice: 'Message successfully marked as ham.'
|
53
|
+
else
|
54
|
+
redirect_to :back, alert: 'Oups. Something went wrong.'
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
private
|
59
|
+
|
60
|
+
def prepare_search
|
61
|
+
@search = Georgia::Message.search do
|
62
|
+
fulltext params[:query] do
|
63
|
+
fields(:name, :email, :message, :subject, :phone)
|
64
|
+
end
|
65
|
+
facet :spam
|
66
|
+
with(:spam, (params[:s] || 'clean'))
|
67
|
+
order_by (params[:o] || :created_at), (params[:dir] || :desc)
|
68
|
+
paginate(page: params[:page], per_page: (params[:per] || 25))
|
69
|
+
end
|
70
|
+
@messages = Georgia::MessageDecorator.decorate_collection(@search.results)
|
71
|
+
end
|
72
|
+
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
module Georgia
|
2
|
+
class PagesController < ApplicationController
|
3
|
+
|
4
|
+
include Georgia::Concerns::Helpers
|
5
|
+
|
6
|
+
# load_and_authorize_resource class: Georgia::Page
|
7
|
+
|
8
|
+
before_filter :prepare_new_page, only: [:search]
|
9
|
+
before_filter :prepare_page, only: [:show, :edit, :settings, :update, :copy, :preview, :draft]
|
10
|
+
|
11
|
+
def show
|
12
|
+
redirect_to [:edit, @page]
|
13
|
+
end
|
14
|
+
|
15
|
+
# Edit current revision
|
16
|
+
def edit
|
17
|
+
redirect_to [:edit, @page, @page.current_revision]
|
18
|
+
end
|
19
|
+
|
20
|
+
# Edit current page
|
21
|
+
def settings
|
22
|
+
end
|
23
|
+
|
24
|
+
# Create page, load first current revision and js redirect to revisions#edit
|
25
|
+
def create
|
26
|
+
@page = model.new(slug: params[:title].try(:parameterize))
|
27
|
+
if @page.save
|
28
|
+
@page.revisions.create(template: Georgia.templates.first) do |rev|
|
29
|
+
rev.contents << Georgia::Content.new(locale: I18n.default_locale, title: params[:title])
|
30
|
+
end
|
31
|
+
@page.update_attribute(:current_revision, @page.revisions.first)
|
32
|
+
respond_to do |format|
|
33
|
+
format.html { redirect_to edit_page_revision_path(@page, @page.current_revision), notice: "#{@page.title} was successfully created." }
|
34
|
+
format.js { render layout: false }
|
35
|
+
end
|
36
|
+
else
|
37
|
+
respond_to do |format|
|
38
|
+
format.html { redirect_to :back, alert: "Oups. Something went wrong." }
|
39
|
+
format.js { render layout: false }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
# Update page settings
|
45
|
+
def update
|
46
|
+
Georgia::Page.update_tree(params[:page_tree]) if params[:page_tree]
|
47
|
+
if @page.update_attributes(params[:page])
|
48
|
+
respond_to do |format|
|
49
|
+
format.html { redirect_to [:settings, @page], notice: "#{@page.title} was successfully updated." }
|
50
|
+
format.js { head :ok }
|
51
|
+
end
|
52
|
+
else
|
53
|
+
respond_to do |format|
|
54
|
+
format.html { redirect_to [:settings, @page], notice: "Oups. Something went wrong." }
|
55
|
+
format.js { head :internal_server_error }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# Creates a copy of a page and redirects to its revisions#edit
|
61
|
+
def copy
|
62
|
+
@copy = @page.copy
|
63
|
+
redirect_to edit_page_revision_path(@copy, @copy.current_revision), notice: "Do not forget to change your url"
|
64
|
+
end
|
65
|
+
|
66
|
+
# Destroys page and its revisions from page
|
67
|
+
# Also used to destroy multiple pages from table checkboxes
|
68
|
+
def destroy
|
69
|
+
back_url = url_for(controller: controller_name, action: :search)
|
70
|
+
@pages = model.where(id: params[:id])
|
71
|
+
if @pages.destroy_all
|
72
|
+
respond_to do |format|
|
73
|
+
format.html { redirect_to back_url, notice: "#{instance_name.humanize} successfully deleted." }
|
74
|
+
format.js { head :ok }
|
75
|
+
end
|
76
|
+
else
|
77
|
+
respond_to do |format|
|
78
|
+
format.html { redirect_to back_url, alert: "Oups. Something went wrong." }
|
79
|
+
format.js { head :internal_server_error }
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
# Flush cache from multiple pages
|
85
|
+
def flush_cache
|
86
|
+
@pages = model.where(id: params[:id])
|
87
|
+
@cache_keys = @pages.map(&:cache_key)
|
88
|
+
unless @cache_keys.map{|k| expire_action(k)}.include?(false)
|
89
|
+
respond_to do |format|
|
90
|
+
format.html { redirect_to :back, notice: "Cache was successfully cleared." }
|
91
|
+
format.js { head :ok }
|
92
|
+
end
|
93
|
+
else
|
94
|
+
respond_to do |format|
|
95
|
+
format.html { redirect_to :back, alert: "Oups. Either there wasn't any cache to start with or something went wrong." }
|
96
|
+
format.js { head :internal_server_error }
|
97
|
+
end
|
98
|
+
end
|
99
|
+
end
|
100
|
+
|
101
|
+
# Publishes multiple pages from table checkboxes
|
102
|
+
def publish
|
103
|
+
@pages = model.where(id: params[:id])
|
104
|
+
|
105
|
+
unless @pages.map(&:publish).include?(false)
|
106
|
+
respond_to do |format|
|
107
|
+
format.html { redirect_to :back, notice: "Successfully published." }
|
108
|
+
format.js { head :ok }
|
109
|
+
end
|
110
|
+
else
|
111
|
+
respond_to do |format|
|
112
|
+
format.html { redirect_to :back, alert: "Oups. Something went wrong." }
|
113
|
+
format.js { head :internal_server_error }
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
# Unpublishes the page
|
119
|
+
def unpublish
|
120
|
+
@pages = model.where(id: params[:id])
|
121
|
+
|
122
|
+
unless @pages.map(&:unpublish).include?(false)
|
123
|
+
respond_to do |format|
|
124
|
+
format.html { redirect_to :back, notice: "Successfully unpublished." }
|
125
|
+
format.js { head :ok }
|
126
|
+
end
|
127
|
+
else
|
128
|
+
respond_to do |format|
|
129
|
+
format.html { redirect_to :back, alert: "Oups. Something went wrong." }
|
130
|
+
format.js { head :internal_server_error }
|
131
|
+
end
|
132
|
+
end
|
133
|
+
end
|
134
|
+
|
135
|
+
# Sorts subpages/children from pages#settings
|
136
|
+
# FIXME: This should be taken care of in pages#update
|
137
|
+
def sort
|
138
|
+
if params[:page]
|
139
|
+
params[:page].each_with_index do |id, index|
|
140
|
+
model.update_all({position: index+1}, {id: id})
|
141
|
+
end
|
142
|
+
end
|
143
|
+
render nothing: true
|
144
|
+
end
|
145
|
+
|
146
|
+
def index
|
147
|
+
redirect_to search_pages_path
|
148
|
+
end
|
149
|
+
|
150
|
+
def search
|
151
|
+
session[:search_params] = params
|
152
|
+
@search = model.search do
|
153
|
+
fulltext params[:query] do
|
154
|
+
fields(:title, :excerpt, :text, :keywords, :tags, :url, :template)
|
155
|
+
end
|
156
|
+
facet :state, :template, :tag_list
|
157
|
+
# ensure pages indexed in the wrong bucket don't get displayed
|
158
|
+
with(:class_name, model.to_s)
|
159
|
+
with(:state, params[:s]) unless params[:s].blank?
|
160
|
+
with(:template, params[:t]) unless params[:t].blank?
|
161
|
+
with(:tag_list).all_of(params[:tg]) unless params[:tg].blank?
|
162
|
+
order_by (params[:o] || :updated_at), (params[:dir] || :desc)
|
163
|
+
paginate(page: params[:page], per_page: (params[:per] || 25))
|
164
|
+
instance_eval &model.extra_search_params if model.respond_to? :extra_search_params
|
165
|
+
end
|
166
|
+
@pages = Georgia::PageDecorator.decorate_collection(@search.results)
|
167
|
+
end
|
168
|
+
|
169
|
+
private
|
170
|
+
|
171
|
+
def prepare_new_page
|
172
|
+
@page = model.new
|
173
|
+
end
|
174
|
+
|
175
|
+
def prepare_page
|
176
|
+
@page = model.find(params[:id]).decorate
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
end
|