storytime 1.2.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.gitignore +10 -0
- data/.rspec +1 -0
- data/.ruby-gemset +1 -0
- data/.ruby-version +1 -0
- data/Gemfile +17 -0
- data/Gemfile.lock +448 -0
- data/Guardfile +24 -0
- data/MIT-LICENSE +1 -1
- data/README.md +160 -0
- data/app/assets/{javascripts/storytime/subscriptions.js → images/storytime/.keep} +0 -0
- data/app/assets/images/storytime/storytime-logo-nav-light.png +0 -0
- data/app/assets/images/storytime/storytime-logo-nav.png +0 -0
- data/app/assets/images/storytime/storytime-logo.png +0 -0
- data/app/assets/javascripts/storytime/application.js +11 -3
- data/app/assets/javascripts/storytime/base.js.coffee +44 -6
- data/app/assets/javascripts/storytime/blog_posts.js.coffee +16 -0
- data/app/assets/javascripts/storytime/blogs.js.coffee +18 -0
- data/app/assets/javascripts/storytime/character_counter.js.coffee +26 -0
- data/app/assets/javascripts/storytime/contenteditable.js.coffee +15 -0
- data/app/assets/javascripts/storytime/custom_posts.js.coffee +16 -0
- data/app/assets/javascripts/storytime/editor.js.coffee +50 -134
- data/app/assets/javascripts/storytime/media.js.coffee +91 -22
- data/app/assets/javascripts/storytime/pages.js.coffee +16 -0
- data/app/assets/javascripts/storytime/posts.js.coffee +28 -1
- data/app/assets/javascripts/storytime/sites.js.coffee +1 -16
- data/app/assets/javascripts/storytime/snippets.js.coffee +6 -3
- data/app/assets/javascripts/storytime/tags.js.coffee +17 -0
- data/app/assets/javascripts/storytime/users.js.coffee +10 -0
- data/app/assets/javascripts/storytime/wysiwyg.js.coffee +183 -0
- data/app/assets/stylesheets/storytime/_buttons.scss +70 -0
- data/app/assets/stylesheets/storytime/_dropdowns.scss +5 -0
- data/app/assets/stylesheets/storytime/_forms.scss +3 -0
- data/app/assets/stylesheets/storytime/_list-group.scss +13 -0
- data/app/assets/stylesheets/storytime/_pagination.scss +14 -0
- data/app/assets/stylesheets/storytime/_panels.scss +8 -0
- data/app/assets/stylesheets/storytime/_tabs.scss +38 -0
- data/app/assets/stylesheets/storytime/_type.scss +13 -0
- data/app/assets/stylesheets/storytime/_wells.scss +14 -0
- data/app/assets/stylesheets/storytime/admin.scss +42 -0
- data/app/assets/stylesheets/storytime/application.scss +75 -0
- data/app/assets/stylesheets/storytime/{comments.css.scss → comments.scss} +0 -0
- data/app/assets/stylesheets/storytime/icons.scss +79 -0
- data/app/assets/stylesheets/storytime/layout.scss +21 -0
- data/app/assets/stylesheets/storytime/media.scss +65 -0
- data/app/assets/stylesheets/storytime/modals.scss +46 -0
- data/app/assets/stylesheets/storytime/navigation.scss +137 -0
- data/app/assets/stylesheets/storytime/posts.scss +76 -0
- data/app/assets/stylesheets/storytime/scroll-panels.scss +19 -0
- data/app/assets/stylesheets/storytime/snippets.scss +11 -0
- data/app/assets/stylesheets/storytime/{sites.css.scss → subscriptions.scss} +0 -0
- data/app/assets/stylesheets/storytime/versions.scss +21 -0
- data/app/controllers/storytime/application_controller.rb +36 -16
- data/app/controllers/storytime/blog_homepage_controller.rb +10 -0
- data/app/controllers/storytime/blogs_controller.rb +56 -0
- data/app/controllers/storytime/comments_controller.rb +5 -1
- data/app/controllers/storytime/dashboard/autosaves_controller.rb +7 -3
- data/app/controllers/storytime/dashboard/blog_posts_controller.rb +60 -0
- data/app/controllers/storytime/dashboard/blogs_controller.rb +66 -0
- data/app/controllers/storytime/dashboard/custom_posts_controller.rb +51 -0
- data/app/controllers/storytime/dashboard/media_controller.rb +9 -7
- data/app/controllers/storytime/dashboard/memberships_controller.rb +49 -0
- data/app/controllers/storytime/dashboard/pages_controller.rb +24 -0
- data/app/controllers/storytime/dashboard/posts_controller.rb +29 -38
- data/app/controllers/storytime/dashboard/roles_controller.rb +16 -2
- data/app/controllers/storytime/dashboard/sites_controller.rb +25 -11
- data/app/controllers/storytime/dashboard/snippets_controller.rb +19 -14
- data/app/controllers/storytime/dashboard/subscriptions_controller.rb +9 -5
- data/app/controllers/storytime/dashboard/users_controller.rb +24 -22
- data/app/controllers/storytime/dashboard_controller.rb +9 -3
- data/app/controllers/storytime/homepage_controller.rb +10 -0
- data/app/controllers/storytime/pages_controller.rb +30 -13
- data/app/controllers/storytime/posts_controller.rb +22 -53
- data/app/controllers/storytime/subscriptions_controller.rb +5 -4
- data/app/helpers/storytime/application_helper.rb +28 -7
- data/app/helpers/storytime/dashboard/sites_helper.rb +2 -5
- data/app/helpers/storytime/subscriptions_helper.rb +0 -7
- data/app/inputs/date_time_picker_input.rb +1 -1
- data/app/mailers/storytime/subscription_mailer.rb +1 -3
- data/app/models/concerns/storytime/post_comments.rb +17 -0
- data/app/models/concerns/storytime/post_excerpt.rb +14 -0
- data/app/models/concerns/storytime/post_featured_images.rb +8 -0
- data/app/models/concerns/storytime/post_partial_inheritance.rb +29 -0
- data/app/models/concerns/storytime/post_tags.rb +41 -0
- data/app/models/concerns/storytime/scoped_to_site.rb +11 -0
- data/app/models/storytime/action.rb +1 -0
- data/app/models/storytime/autosave.rb +7 -1
- data/app/models/storytime/blog.rb +16 -0
- data/app/models/storytime/blog_post.rb +12 -1
- data/app/models/storytime/comment.rb +4 -1
- data/app/models/storytime/media.rb +2 -0
- data/app/models/storytime/membership.rb +17 -0
- data/app/models/storytime/page.rb +0 -5
- data/app/models/storytime/permission.rb +26 -20
- data/app/models/storytime/post.rb +29 -82
- data/app/models/storytime/role.rb +12 -0
- data/app/models/storytime/site.rb +42 -12
- data/app/models/storytime/snippet.rb +3 -0
- data/app/models/storytime/subscription.rb +2 -1
- data/app/models/storytime/tag.rb +5 -1
- data/app/models/storytime/tagging.rb +1 -0
- data/app/models/storytime/version.rb +1 -0
- data/app/policies/admin_policy.rb +30 -0
- data/app/policies/storytime/comment_policy.rb +5 -1
- data/app/policies/storytime/membership_policy.rb +32 -0
- data/app/policies/storytime/post_policy.rb +6 -4
- data/app/policies/storytime/site_policy.rb +7 -2
- data/app/policies/storytime/snippet_policy.rb +3 -2
- data/app/policies/storytime/subscription_policy.rb +3 -2
- data/app/policies/user_policy.rb +2 -5
- data/app/views/kaminari/_first_page.html.erb +13 -0
- data/app/views/kaminari/_gap.html.erb +8 -0
- data/app/views/kaminari/_last_page.html.erb +13 -0
- data/app/views/kaminari/_next_page.html.erb +13 -0
- data/app/views/kaminari/_page.html.erb +12 -0
- data/app/views/kaminari/_paginator.html.erb +24 -0
- data/app/views/kaminari/_prev_page.html.erb +13 -0
- data/app/views/layouts/storytime/application.html.erb +1 -1
- data/app/views/layouts/storytime/dashboard.html.erb +22 -6
- data/app/views/storytime/application/storytime/_disqus_comment_counts.html.erb +14 -0
- data/app/views/storytime/application/storytime/_header.html.erb +3 -4
- data/app/views/storytime/application/storytime/_navigation.html.erb +14 -1
- data/app/views/storytime/blogs/_tags.html.erb +3 -0
- data/app/views/storytime/{posts/index.atom.builder → blogs/show.atom.builder} +1 -1
- data/app/views/storytime/{posts/index.html.erb → blogs/show.html.erb} +1 -1
- data/app/views/storytime/comments/_discourse.html.erb +18 -0
- data/app/views/storytime/comments/_disqus.html.erb +2 -2
- data/app/views/storytime/comments/_form.html.erb +2 -2
- data/app/views/storytime/dashboard/_navigation.html.erb +109 -41
- data/app/views/storytime/dashboard/_settings_tabs.html.erb +32 -0
- data/app/views/storytime/dashboard/autosaves/_autosave_info.html.erb +7 -4
- data/app/views/storytime/dashboard/blog_posts/_form.html.erb +157 -0
- data/app/views/storytime/dashboard/blog_posts/edit.html.erb +55 -0
- data/app/views/storytime/dashboard/blog_posts/new.html.erb +31 -0
- data/app/views/storytime/dashboard/blogs/_blog.html.erb +3 -0
- data/app/views/storytime/dashboard/blogs/_form.html.erb +25 -0
- data/app/views/storytime/dashboard/blogs/edit.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/blogs/index.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/blogs/new.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/media/_form.html.erb +3 -3
- data/app/views/storytime/dashboard/media/{_gallery.html → _gallery.html.erb} +7 -4
- data/app/views/storytime/dashboard/media/_media.html.erb +6 -13
- data/app/views/storytime/dashboard/media/_modal.html.erb +3 -3
- data/app/views/storytime/dashboard/media/index.html.erb +15 -5
- data/app/views/storytime/dashboard/memberships/_form.html.erb +12 -0
- data/app/views/storytime/dashboard/memberships/_index.html.erb +39 -0
- data/app/views/storytime/dashboard/memberships/_membership.html.erb +12 -0
- data/app/views/storytime/dashboard/memberships/index.json.jbuilder +2 -0
- data/app/views/storytime/dashboard/memberships/save.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/pages/_form.html.erb +88 -0
- data/app/views/storytime/dashboard/pages/_index_title.html.erb +1 -0
- data/app/views/storytime/dashboard/pages/_new_button.html.erb +1 -0
- data/app/views/storytime/dashboard/pages/edit.html.erb +49 -0
- data/app/views/storytime/dashboard/pages/new.html.erb +28 -0
- data/app/views/storytime/dashboard/posts/_form.html.erb +128 -122
- data/app/views/storytime/dashboard/posts/_image_toolbar.html.erb +32 -0
- data/app/views/storytime/dashboard/posts/_index_title.html.erb +1 -0
- data/app/views/storytime/dashboard/posts/_list.html.erb +23 -24
- data/app/views/storytime/dashboard/posts/_new_button.html.erb +10 -0
- data/app/views/storytime/dashboard/posts/edit.html.erb +56 -13
- data/app/views/storytime/dashboard/posts/index.html.erb +56 -7
- data/app/views/storytime/dashboard/posts/new.html.erb +29 -8
- data/app/views/storytime/dashboard/roles/_form.html.erb +41 -0
- data/app/views/storytime/dashboard/roles/edit.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/sites/_form.html.erb +31 -15
- data/app/views/storytime/dashboard/sites/new.html.erb +21 -8
- data/app/views/storytime/dashboard/sites/site.json.jbuilder +2 -0
- data/app/views/storytime/dashboard/snippets/_form.html.erb +26 -12
- data/app/views/storytime/dashboard/snippets/_index.html.erb +17 -0
- data/app/views/storytime/dashboard/snippets/_snippet.html.erb +12 -0
- data/app/views/storytime/dashboard/snippets/edit.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/snippets/index.json.jbuilder +4 -0
- data/app/views/storytime/dashboard/snippets/new.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/subscriptions/_form.html.erb +19 -0
- data/app/views/storytime/dashboard/subscriptions/_index.html.erb +19 -0
- data/app/views/storytime/dashboard/subscriptions/_subscription.html.erb +9 -10
- data/app/views/storytime/dashboard/subscriptions/form.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/subscriptions/index.json.jbuilder +1 -0
- data/app/views/storytime/dashboard/users/_edit.html.erb +26 -0
- data/app/views/storytime/dashboard/users/_new.html.erb +25 -0
- data/app/views/storytime/dashboard/users/edit.json.jbuilder +2 -0
- data/app/views/storytime/dashboard/users/new.json.jbuilder +2 -0
- data/app/views/storytime/dashboard/versions/_version.html.erb +14 -0
- data/app/views/storytime/dashboard/versions/_versions_info.html.erb +1 -16
- data/app/views/storytime/pages/show.html.erb +1 -1
- data/app/views/storytime/posts/_post.html.erb +8 -0
- data/app/views/storytime/posts/_tags.html.erb +1 -1
- data/app/views/storytime/posts/show.html.erb +1 -1
- data/app/views/storytime/sites/_google_analytics_code.html.erb +2 -2
- data/app/views/storytime/snippets/_snippet.html.erb +9 -0
- data/app/views/storytime/subscription_mailer/new_post_email.html.erb +2 -2
- data/app/views/storytime/subscription_mailer/new_post_email.text.erb +2 -2
- data/app/views/storytime/subscriptions/_form.html.erb +0 -1
- data/app/views/storytime/subscriptions/_modal.html.erb +18 -10
- data/bin/rails +12 -0
- data/bin/storytime +4 -0
- data/circle.yml +3 -0
- data/config/initializers/storytime_admin.rb +3 -0
- data/config/initializers/url_for_patch.rb +2 -37
- data/config/locales/en.yml +33 -13
- data/config/routes.rb +47 -19
- data/db/migrate/20150128185746_seed_new_actions_and_permissions.rb +9 -0
- data/db/migrate/20150206201847_add_site_id_to_storytime_post.rb +7 -0
- data/db/migrate/20150206201919_add_site_id_to_storytime_snippet.rb +7 -0
- data/db/migrate/20150206201931_add_site_id_to_storytime_tag.rb +7 -0
- data/db/migrate/20150206205256_add_notification_fields_to_storytime_post.rb +6 -0
- data/db/migrate/20150216211257_add_subdomain_to_storytime_sites.rb +5 -0
- data/db/migrate/20150216225045_add_site_to_storytime_media.rb +6 -0
- data/db/migrate/20150219210528_remove_root_page_content_from_storytime_sites.rb +12 -0
- data/db/migrate/20150220184902_add_blog_id_to_posts.rb +6 -0
- data/db/migrate/20150224192138_add_homepage_path_to_storytime_sites.rb +5 -0
- data/db/migrate/20150224193151_add_subscription_email_from_to_storytime_sites.rb +5 -0
- data/db/migrate/20150224193551_add_layout_to_storytime_sites.rb +5 -0
- data/db/migrate/20150224194559_add_disqus_forum_shortname_to_storytime_sites.rb +5 -0
- data/db/migrate/20150224212453_remove_homepage_path_from_storytime_sites.rb +5 -0
- data/db/migrate/20150225143516_add_site_id_to_storytime_autosaves.rb +6 -0
- data/db/migrate/20150225143826_add_site_id_to_storytime_comments.rb +6 -0
- data/db/migrate/20150225145119_add_site_id_to_storytime_versions.rb +6 -0
- data/db/migrate/20150225145316_add_site_id_to_storytime_taggings.rb +6 -0
- data/db/migrate/20150225145608_update_storytime_site_id_columns.rb +11 -0
- data/db/migrate/20150225164232_add_site_id_to_storytime_permissions.rb +6 -0
- data/db/migrate/20150225212917_create_storytime_memberships.rb +11 -0
- data/db/migrate/20150225213535_create_memberships_for_storytime_users.rb +8 -0
- data/db/migrate/20150226201739_add_custom_domain_to_storytime_sites.rb +5 -0
- data/db/migrate/20150302171500_add_site_id_to_storytime_media.rb +8 -0
- data/db/migrate/20150302171722_set_site_layout.rb +8 -0
- data/db/migrate/20150302185138_remove_storytime_role_id_from_users.rb +5 -0
- data/db/migrate/20150302192525_transfer_posts_to_blogs.rb +8 -0
- data/db/migrate/20150302192759_seed_permissions.rb +9 -0
- data/db/migrate/20150331162329_add_discourse_name_to_storytime_sites.rb +5 -0
- data/db/migrate/20150402161427_remove_subdomain_from_storytime_site.rb +5 -0
- data/lib/generators/storytime/install_generator.rb +17 -0
- data/lib/generators/storytime/views_generator.rb +21 -9
- data/lib/generators/templates/storytime.rb +70 -27
- data/lib/storytime/cli/install.rb +274 -0
- data/lib/storytime/cli.rb +28 -0
- data/lib/storytime/concerns/current_site.rb +10 -0
- data/lib/storytime/concerns/has_versions.rb +22 -3
- data/lib/storytime/concerns/storytime_user.rb +31 -7
- data/lib/storytime/constraints/blog_constraint.rb +11 -0
- data/lib/storytime/constraints/blog_homepage_constraint.rb +11 -0
- data/lib/storytime/constraints/page_constraint.rb +13 -0
- data/lib/storytime/constraints/page_homepage_constraint.rb +11 -0
- data/lib/storytime/engine.rb +43 -14
- data/lib/storytime/generators/initializer.rb +45 -0
- data/lib/storytime/migrators/v1.rb +122 -0
- data/lib/storytime/post_notifier.rb +19 -0
- data/lib/storytime/post_url_handler.rb +47 -0
- data/lib/storytime/storytime_helpers.rb +12 -0
- data/lib/storytime/version.rb +1 -1
- data/lib/storytime.rb +57 -56
- data/screenshots/admin.png +0 -0
- data/screenshots/media.png +0 -0
- data/screenshots/page-list.png +0 -0
- data/screenshots/post-editor.png +0 -0
- data/screenshots/site-settings.png +0 -0
- data/screenshots/text-snippets.png +0 -0
- data/screenshots/user-management.png +0 -0
- data/spec/controllers/dashboard_controller_spec.rb +3 -1
- data/{app/assets/stylesheets/storytime/subscriptions.css.scss → spec/dummy/app/assets/images/.keep} +0 -0
- data/spec/dummy/app/assets/javascripts/application.js +3 -0
- data/spec/dummy/app/controllers/application_controller.rb +5 -1
- data/spec/dummy/app/controllers/concerns/.keep +0 -0
- data/spec/dummy/app/controllers/storytime_admin/widgets_controller.rb +5 -0
- data/spec/dummy/app/mailers/.keep +0 -0
- data/spec/dummy/app/models/.keep +0 -0
- data/spec/dummy/app/models/concerns/.keep +0 -0
- data/spec/dummy/app/models/user.rb +5 -1
- data/spec/dummy/app/models/video_post.rb +2 -0
- data/spec/dummy/app/models/widget.rb +3 -0
- data/spec/dummy/app/views/layouts/application.html.erb +1 -1
- data/spec/dummy/app/views/storytime/dashboard/posts/_video_post_fields.html.erb +1 -0
- data/spec/dummy/app/views/widgets/storytime/dashboard/admin/_headers.html.erb +1 -0
- data/spec/dummy/app/views/widgets/storytime/dashboard/admin/_row.html.erb +1 -0
- data/spec/dummy/config/database.yml +9 -5
- data/spec/dummy/config/environments/test.rb +1 -0
- data/spec/dummy/config/initializers/devise.rb +1 -1
- data/spec/dummy/config/initializers/session_store.rb +1 -1
- data/spec/dummy/config/initializers/storytime.rb +7 -14
- data/spec/dummy/db/development.sqlite3 +0 -0
- data/spec/dummy/db/migrate/20150127172846_create_widgets.rb +9 -0
- data/spec/dummy/db/migrate/20150206203824_add_video_url_to_storytime_posts.rb +5 -0
- data/spec/dummy/db/schema.rb +76 -21
- data/spec/dummy/db/test.sqlite3 +0 -0
- data/spec/dummy/lib/assets/.keep +0 -0
- data/spec/dummy/log/.keep +0 -0
- data/spec/factories/comment_factories.rb +1 -0
- data/spec/factories/membership_factories.rb +7 -0
- data/spec/factories/site_factories.rb +3 -2
- data/spec/factories/user_factories.rb +3 -3
- data/spec/factories/widget_factories.rb +5 -0
- data/spec/features/blogs_spec.rb +28 -0
- data/spec/features/comments_spec.rb +8 -9
- data/spec/features/dashboard/media_spec.rb +14 -30
- data/spec/features/dashboard/memberships_spec.rb +58 -0
- data/spec/features/dashboard/pages_spec.rb +67 -44
- data/spec/features/dashboard/posts_spec.rb +84 -62
- data/spec/features/dashboard/sites_spec.rb +28 -23
- data/spec/features/dashboard/snippets_spec.rb +44 -44
- data/spec/features/dashboard/subscription_spec.rb +36 -28
- data/spec/features/dashboard/users_spec.rb +48 -29
- data/spec/features/pages_spec.rb +2 -2
- data/spec/features/posts_spec.rb +2 -20
- data/spec/features/subscription_spec.rb +4 -4
- data/spec/models/post_spec.rb +26 -17
- data/spec/policies/comment_policy_spec.rb +22 -6
- data/spec/policies/post_policy_spec.rb +21 -3
- data/spec/requests/routings_spec.rb +27 -17
- data/spec/spec_helper.rb +12 -1
- data/spec/support/database_cleaner.rb +5 -5
- data/spec/support/domains.rb +18 -0
- data/spec/support/feature_macros.rb +18 -9
- data/storytime.gemspec +59 -0
- data/vendor/assets/javascripts/.DS_Store +0 -0
- data/vendor/assets/javascripts/codemirror/modes/css.js +717 -0
- data/vendor/assets/javascripts/codemirror/modes/htmlmixed.js +120 -0
- data/vendor/assets/javascripts/codemirror/modes/javascript.js +686 -0
- data/vendor/assets/javascripts/codemirror/modes/liquid.js +40 -0
- data/vendor/assets/javascripts/codemirror/modes/overlay.js +85 -0
- data/vendor/assets/javascripts/codemirror/{xml.js → modes/xml.js} +2 -2
- data/vendor/assets/javascripts/medium-editor.min.js +2450 -0
- data/vendor/assets/javascripts/phantom_js_bind_polyfill.js +24 -0
- data/vendor/assets/javascripts/tidy.js +30 -0
- data/vendor/assets/stylesheets/.DS_Store +0 -0
- data/vendor/assets/stylesheets/chosen-bootstrap-3.css +148 -0
- data/vendor/assets/stylesheets/{chosen.css.scss → chosen.scss} +1 -1
- data/vendor/assets/stylesheets/disable-transitions-for-test-env.css +7 -0
- data/vendor/assets/stylesheets/medium-editor-default.min.css +1 -0
- data/vendor/assets/stylesheets/medium-editor.min.css +1 -0
- metadata +297 -47
- data/app/assets/stylesheets/storytime/admin.css.scss +0 -121
- data/app/assets/stylesheets/storytime/application.css.scss +0 -22
- data/app/assets/stylesheets/storytime/layout.css.scss +0 -17
- data/app/assets/stylesheets/storytime/media.css.scss +0 -68
- data/app/assets/stylesheets/storytime/pagination.css.scss +0 -4
- data/app/assets/stylesheets/storytime/posts.css.scss +0 -30
- data/app/assets/stylesheets/storytime/versions.css.scss +0 -21
- data/app/helpers/storytime/dashboard/posts_helper.rb +0 -21
- data/app/views/storytime/blog_posts/_blog_post.html.erb +0 -8
- data/app/views/storytime/dashboard/posts/_basic_new_post_button.html.erb +0 -3
- data/app/views/storytime/dashboard/posts/_new_post_dropdown_button.html.erb +0 -10
- data/app/views/storytime/dashboard/sites/edit.html.erb +0 -25
- data/app/views/storytime/dashboard/snippets/_list.html.erb +0 -21
- data/app/views/storytime/dashboard/snippets/edit.html.erb +0 -13
- data/app/views/storytime/dashboard/snippets/index.html.erb +0 -13
- data/app/views/storytime/dashboard/snippets/new.html.erb +0 -12
- data/app/views/storytime/dashboard/subscriptions/edit.html.erb +0 -10
- data/app/views/storytime/dashboard/subscriptions/index.html.erb +0 -19
- data/app/views/storytime/dashboard/subscriptions/new.html.erb +0 -9
- data/app/views/storytime/dashboard/users/_user.html.erb +0 -11
- data/app/views/storytime/dashboard/users/edit.html.erb +0 -10
- data/app/views/storytime/dashboard/users/index.html.erb +0 -22
- data/app/views/storytime/dashboard/users/new.html.erb +0 -11
- data/spec/lib/storytime_spec.rb +0 -23
- data/vendor/assets/javascripts/codemirror/codemirror.js +0 -7831
- data/vendor/assets/javascripts/summernote.js +0 -5338
- data/vendor/assets/stylesheets/codemirror/codemirror.css +0 -309
- data/vendor/assets/stylesheets/codemirror/monokai.css +0 -31
- data/vendor/assets/stylesheets/summernote.css +0 -1
@@ -0,0 +1,51 @@
|
|
1
|
+
module Storytime
|
2
|
+
module Dashboard
|
3
|
+
class CustomPostsController < BlogPostsController
|
4
|
+
|
5
|
+
def new
|
6
|
+
@post = current_post_type.new
|
7
|
+
@post.blog = Storytime::Blog.friendly.find(params[:blog_id])
|
8
|
+
@post.user = current_user
|
9
|
+
authorize @post
|
10
|
+
end
|
11
|
+
|
12
|
+
def create
|
13
|
+
@post = current_post_type.new(post_params)
|
14
|
+
@post.blog = Storytime::Blog.friendly.find(params[:blog_id])
|
15
|
+
@post.user = current_user
|
16
|
+
@post.draft_user_id = current_user.id
|
17
|
+
|
18
|
+
authorize @post
|
19
|
+
|
20
|
+
if @post.save
|
21
|
+
@post.create_autosave(post_params.slice(:draft_content)) if params[:preview] == "true"
|
22
|
+
|
23
|
+
send_subscriber_notifications if @post.published? && post_params[:notifications_enabled] == "1"
|
24
|
+
|
25
|
+
opts = params[:preview] == "true" ? { preview: true } : {}
|
26
|
+
|
27
|
+
redirect_to [:edit, :dashboard, @post, opts], notice: I18n.t('flash.posts.create.success')
|
28
|
+
else
|
29
|
+
load_media
|
30
|
+
render :new
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
def current_post_type
|
36
|
+
@current_post_type ||= request.path.split("/")[4].classify.constantize
|
37
|
+
end
|
38
|
+
helper_method :current_post_type
|
39
|
+
|
40
|
+
def load_posts
|
41
|
+
@posts = policy_scope(Storytime::Post).page(params[:page_number]).per(10).where(type: current_post_type)
|
42
|
+
|
43
|
+
@posts = if params[:published].present? && params[:published] == 'true'
|
44
|
+
@posts.published.order(published_at: :desc)
|
45
|
+
else
|
46
|
+
@posts.draft.order(updated_at: :desc)
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -17,14 +17,16 @@ module Storytime
|
|
17
17
|
end
|
18
18
|
|
19
19
|
def create
|
20
|
-
@
|
21
|
-
@
|
20
|
+
@upload_media = Media.new(media_params)
|
21
|
+
@upload_media.user = current_user
|
22
22
|
|
23
|
-
authorize @
|
24
|
-
@
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
authorize @upload_media
|
24
|
+
@upload_media.save
|
25
|
+
|
26
|
+
@media = Media.order("created_at DESC").page(params[:page]).per(10)
|
27
|
+
@large_gallery = false
|
28
|
+
|
29
|
+
render partial: "gallery", content_type: Mime::HTML
|
28
30
|
end
|
29
31
|
|
30
32
|
def destroy
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module Storytime
|
2
|
+
module Dashboard
|
3
|
+
class MembershipsController < DashboardController
|
4
|
+
before_action :load_memberships, only: :index
|
5
|
+
before_action :load_membership, only: [:destroy]
|
6
|
+
respond_to :json
|
7
|
+
|
8
|
+
def index
|
9
|
+
authorize @memberships
|
10
|
+
respond_with @memberships
|
11
|
+
end
|
12
|
+
|
13
|
+
def create
|
14
|
+
@membership = Membership.new(membership_params)
|
15
|
+
authorize @membership
|
16
|
+
|
17
|
+
respond_with @membership do |format|
|
18
|
+
load_memberships
|
19
|
+
if @membership.save
|
20
|
+
format.json { render :save }
|
21
|
+
else
|
22
|
+
format.json { render :save, status: :unprocessable_entity }
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def destroy
|
28
|
+
authorize @membership
|
29
|
+
@membership.destroy
|
30
|
+
respond_with @membership
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def membership_params
|
36
|
+
permitted_attrs = policy(@membership || Storytime::Membership.new).permitted_attributes
|
37
|
+
params.require(:membership).permit(*permitted_attrs)
|
38
|
+
end
|
39
|
+
|
40
|
+
def load_membership
|
41
|
+
@membership = Storytime::Membership.find(params[:id])
|
42
|
+
end
|
43
|
+
|
44
|
+
def load_memberships
|
45
|
+
@memberships = current_storytime_site.memberships.includes(:user).page(params[:page]).per(20)
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Storytime
|
2
|
+
module Dashboard
|
3
|
+
class PagesController < PostsController
|
4
|
+
|
5
|
+
|
6
|
+
private
|
7
|
+
def current_post_type
|
8
|
+
@current_post_type ||= Storytime::Page
|
9
|
+
end
|
10
|
+
helper_method :current_post_type
|
11
|
+
|
12
|
+
def load_posts
|
13
|
+
@posts = policy_scope(Storytime::Post).page(params[:page_number]).per(10)
|
14
|
+
@posts = @posts.where(type: "Storytime::Page")
|
15
|
+
|
16
|
+
@posts = if params[:published].present? && params[:published] == 'true'
|
17
|
+
@posts.published.order(published_at: :desc)
|
18
|
+
else
|
19
|
+
@posts.draft.order(updated_at: :desc)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -3,13 +3,16 @@ require_dependency "storytime/application_controller"
|
|
3
3
|
module Storytime
|
4
4
|
module Dashboard
|
5
5
|
class PostsController < DashboardController
|
6
|
+
before_action :hide_nav, only: [:new, :create, :edit, :update]
|
6
7
|
before_action :set_post, only: [:edit, :update, :destroy]
|
7
|
-
before_action :load_posts
|
8
|
+
before_action :load_posts, only: :index
|
8
9
|
before_action :load_media, only: [:new, :edit]
|
9
10
|
|
10
11
|
respond_to :json, only: :destroy
|
11
12
|
respond_to :html, only: :destroy
|
12
13
|
|
14
|
+
set_tab :blog_posts
|
15
|
+
|
13
16
|
def index
|
14
17
|
authorize @posts
|
15
18
|
end
|
@@ -26,7 +29,7 @@ module Storytime
|
|
26
29
|
if @post.autosave
|
27
30
|
@post.draft_content = @post.autosave.content
|
28
31
|
else
|
29
|
-
redirect_to
|
32
|
+
redirect_to [:edit, :dashboard, @post]
|
30
33
|
end
|
31
34
|
end
|
32
35
|
end
|
@@ -39,11 +42,11 @@ module Storytime
|
|
39
42
|
if @post.save
|
40
43
|
@post.create_autosave(post_params.slice(:draft_content)) if params[:preview] == "true"
|
41
44
|
|
42
|
-
|
45
|
+
send_subscriber_notifications if @post.published? && post_params[:notifications_enabled] == "1"
|
43
46
|
|
44
47
|
opts = params[:preview] == "true" ? { preview: true } : {}
|
45
48
|
|
46
|
-
redirect_to
|
49
|
+
redirect_to [:edit, :dashboard, @post, opts], notice: I18n.t('flash.posts.create.success')
|
47
50
|
else
|
48
51
|
load_media
|
49
52
|
render :new
|
@@ -53,11 +56,11 @@ module Storytime
|
|
53
56
|
def update
|
54
57
|
authorize @post
|
55
58
|
@post.draft_user_id = current_user.id
|
56
|
-
|
57
|
-
if @post.
|
59
|
+
|
60
|
+
if @post.update_attributes(post_params)
|
58
61
|
@post.autosave.destroy unless @post.autosave.nil?
|
59
62
|
|
60
|
-
|
63
|
+
send_subscriber_notifications if @post.published? && post_params[:notifications_enabled] == "1"
|
61
64
|
|
62
65
|
redirect_to [:edit, :dashboard, @post], notice: I18n.t('flash.posts.update.success')
|
63
66
|
else
|
@@ -72,11 +75,24 @@ module Storytime
|
|
72
75
|
flash[:notice] = I18n.t('flash.posts.destroy.success') unless request.xhr?
|
73
76
|
|
74
77
|
respond_with [:dashboard, @post] do |format|
|
75
|
-
format.html{ redirect_to [:dashboard,
|
78
|
+
format.html{ redirect_to [:dashboard, current_post_type], type: @post.type_name }
|
76
79
|
end
|
77
80
|
end
|
78
81
|
|
79
82
|
private
|
83
|
+
def hide_nav
|
84
|
+
@hide_nav = true
|
85
|
+
end
|
86
|
+
|
87
|
+
def load_posts
|
88
|
+
@blog = Blog.friendly.find(params[:blog_id])
|
89
|
+
@posts = @blog.posts.page(params[:page_number]).per(10)
|
90
|
+
if params[:published].present? && params[:published] == "true"
|
91
|
+
@posts = @posts.published.order(created_at: :desc)
|
92
|
+
else
|
93
|
+
@posts = @posts.draft.order(updated_at: :desc)
|
94
|
+
end
|
95
|
+
end
|
80
96
|
|
81
97
|
def set_post
|
82
98
|
@post = Storytime::Post.friendly.find(params[:id])
|
@@ -98,41 +114,16 @@ module Storytime
|
|
98
114
|
post = @post || current_post_type.new(user: current_user)
|
99
115
|
permitted_attrs = policy(post).permitted_attributes
|
100
116
|
permitted_attrs = permitted_attrs.append(storytime_post_param_additions) if respond_to?(:storytime_post_param_additions)
|
101
|
-
params.require(
|
117
|
+
params.require(current_post_type.type_name.tableize.singularize.to_sym).permit(*permitted_attrs)
|
102
118
|
end
|
103
119
|
|
104
|
-
def
|
105
|
-
|
106
|
-
@post.
|
107
|
-
|
108
|
-
if post_params[:send_subscriber_email] == "1"
|
109
|
-
@site.active_email_subscriptions.each do |subscription|
|
110
|
-
Storytime::SubscriptionMailer.new_post_email(@post, subscription).deliver
|
111
|
-
end
|
112
|
-
end
|
113
|
-
end
|
114
|
-
end
|
115
|
-
|
116
|
-
def current_post_type
|
117
|
-
@current_post_type ||= begin
|
118
|
-
type_param = params[:type] || (params[:post] && params[:post].delete(:type))
|
119
|
-
matching_type = Storytime.post_types.find{|post_type| post_type.constantize.type_name == type_param }
|
120
|
-
matching_type.nil? ? Storytime::BlogPost : matching_type.constantize
|
121
|
-
end
|
122
|
-
end
|
123
|
-
helper_method :current_post_type
|
124
|
-
|
125
|
-
def load_posts
|
126
|
-
@posts = policy_scope(Storytime::Post).order(created_at: :desc).page(params[:page_number]).per(10)
|
127
|
-
|
128
|
-
@posts = if current_post_type.included_in_primary_feed?
|
129
|
-
@posts.primary_feed
|
120
|
+
def send_subscriber_notifications
|
121
|
+
if Storytime.on_publish_with_notifications.nil?
|
122
|
+
Storytime::PostNotifier.send_notifications_for(@post.id) if @post.published_at <= Time.now
|
130
123
|
else
|
131
|
-
|
124
|
+
Storytime.on_publish_with_notifications.call(@post)
|
132
125
|
end
|
133
126
|
end
|
134
|
-
|
135
|
-
|
136
127
|
end
|
137
128
|
end
|
138
129
|
end
|
@@ -3,10 +3,24 @@ require_dependency "storytime/application_controller"
|
|
3
3
|
module Storytime
|
4
4
|
module Dashboard
|
5
5
|
class RolesController < DashboardController
|
6
|
+
before_action :load_roles
|
7
|
+
respond_to :json
|
8
|
+
|
9
|
+
def edit_multiple
|
10
|
+
authorize @current_storytime_site, :update?
|
11
|
+
render :edit
|
12
|
+
end
|
13
|
+
|
6
14
|
def update_multiple
|
7
|
-
authorize @
|
15
|
+
authorize @current_storytime_site, :update?
|
8
16
|
@roles = Storytime::Role.update(params[:roles].keys, params[:roles].values)
|
9
|
-
|
17
|
+
render :edit
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
def load_roles
|
22
|
+
@roles = Storytime::Role.all
|
23
|
+
@actions = Storytime::Action.all
|
10
24
|
end
|
11
25
|
end
|
12
26
|
end
|
@@ -3,9 +3,13 @@ require_dependency "storytime/application_controller"
|
|
3
3
|
module Storytime
|
4
4
|
module Dashboard
|
5
5
|
class SitesController < DashboardController
|
6
|
-
|
7
|
-
|
8
|
-
|
6
|
+
skip_before_action :ensure_site_exists, only: [:new, :create]
|
7
|
+
skip_around_action :scope_current_site, only: [:new, :create]
|
8
|
+
around_action :scope_current_site, unless: :skip_scope_current_site?
|
9
|
+
|
10
|
+
before_action :set_site, only: [:edit, :update, :destroy]
|
11
|
+
respond_to :json, only: [:edit, :update]
|
12
|
+
|
9
13
|
def new
|
10
14
|
@site = Site.new
|
11
15
|
authorize @site
|
@@ -13,6 +17,7 @@ module Storytime
|
|
13
17
|
|
14
18
|
def edit
|
15
19
|
authorize @site
|
20
|
+
render :site
|
16
21
|
end
|
17
22
|
|
18
23
|
def create
|
@@ -20,7 +25,7 @@ module Storytime
|
|
20
25
|
authorize @site
|
21
26
|
|
22
27
|
if @site.save_with_seeds(current_user)
|
23
|
-
redirect_to
|
28
|
+
redirect_to storytime.dashboard_url(host: @site.custom_domain), notice: I18n.t('flash.sites.create.success')
|
24
29
|
else
|
25
30
|
render :new
|
26
31
|
end
|
@@ -28,11 +33,24 @@ module Storytime
|
|
28
33
|
|
29
34
|
def update
|
30
35
|
authorize @site
|
31
|
-
|
32
|
-
|
36
|
+
if @site.update(site_params)
|
37
|
+
render :site
|
38
|
+
else
|
39
|
+
render :site, status: 422
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def destroy
|
44
|
+
authorize @site
|
45
|
+
@site.destroy
|
46
|
+
redirect_to storytime.dashboard_url(host: Storytime::Site.first.custom_domain), notice: t('flash.sites.destroy.success')
|
33
47
|
end
|
34
48
|
|
35
49
|
private
|
50
|
+
def skip_scope_current_site?
|
51
|
+
%w[new create].include?(params[:action]) && Storytime::Site.count == 0
|
52
|
+
end
|
53
|
+
|
36
54
|
# Use callbacks to share common setup or constraints between actions.
|
37
55
|
def set_site
|
38
56
|
@site = Site.find(params[:id])
|
@@ -40,11 +58,7 @@ module Storytime
|
|
40
58
|
|
41
59
|
# Only allow a trusted parameter "white list" through.
|
42
60
|
def site_params
|
43
|
-
params.require(:site).permit(:title, :post_slug_style, :ga_tracking_id, :
|
44
|
-
end
|
45
|
-
|
46
|
-
def redirect_if_site_exists
|
47
|
-
redirect_to edit_dashboard_site_url(Site.first) if Site.first
|
61
|
+
params.require(:site).permit(:title, :post_slug_style, :ga_tracking_id, :root_post_id, :custom_domain, :subscription_email_from, :layout, :disqus_forum_shortname, :discourse_name)
|
48
62
|
end
|
49
63
|
|
50
64
|
end
|
@@ -5,44 +5,49 @@ module Storytime
|
|
5
5
|
class SnippetsController < DashboardController
|
6
6
|
before_action :set_snippet, only: [:edit, :update, :destroy]
|
7
7
|
before_action :load_snippets
|
8
|
-
before_action :load_media, only: [:new, :edit]
|
8
|
+
before_action :load_media, only: [:new, :edit, :update, :create]
|
9
9
|
|
10
|
-
respond_to :json
|
10
|
+
respond_to :json
|
11
11
|
respond_to :html, only: :destroy
|
12
12
|
|
13
13
|
def index
|
14
14
|
authorize @snippets
|
15
|
+
respond_with @snippets
|
15
16
|
end
|
16
17
|
|
17
18
|
def new
|
18
19
|
@snippet = Storytime::Snippet.new
|
19
20
|
authorize @snippet
|
21
|
+
respond_with @snippet
|
20
22
|
end
|
21
23
|
|
22
24
|
def edit
|
23
25
|
authorize @snippet
|
26
|
+
respond_with @snippet
|
24
27
|
end
|
25
28
|
|
26
29
|
def create
|
27
30
|
@snippet = Storytime::Snippet.new(snippet_params)
|
28
31
|
authorize @snippet
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
33
|
+
respond_with @snippet do |format|
|
34
|
+
if @snippet.save
|
35
|
+
format.json { render :index }
|
36
|
+
else
|
37
|
+
format.json { render :new, status: :unprocessable_entity }
|
38
|
+
end
|
35
39
|
end
|
36
40
|
end
|
37
41
|
|
38
42
|
def update
|
39
43
|
authorize @snippet
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
|
45
|
+
respond_with @snippet do |format|
|
46
|
+
if @snippet.update(snippet_params)
|
47
|
+
format.json { render :index }
|
48
|
+
else
|
49
|
+
format.json { render :edit, status: :unprocessable_entity }
|
50
|
+
end
|
46
51
|
end
|
47
52
|
end
|
48
53
|
|
@@ -68,7 +73,7 @@ module Storytime
|
|
68
73
|
end
|
69
74
|
|
70
75
|
def load_snippets
|
71
|
-
@snippets = Storytime::Snippet.order(created_at: :desc).page(params[:page_number]).per(
|
76
|
+
@snippets = Storytime::Snippet.order(created_at: :desc).page(params[:page_number]).per(20)
|
72
77
|
end
|
73
78
|
|
74
79
|
end
|
@@ -11,7 +11,7 @@ module Storytime
|
|
11
11
|
|
12
12
|
skip_after_action :verify_authorized, only: [:unsubscribe]
|
13
13
|
|
14
|
-
respond_to :json, only: :destroy
|
14
|
+
respond_to :json, only: [:index, :new, :create, :edit, :update, :destroy]
|
15
15
|
|
16
16
|
def index
|
17
17
|
authorize @subscriptions
|
@@ -20,6 +20,7 @@ module Storytime
|
|
20
20
|
def new
|
21
21
|
@subscription = Storytime::Subscription.new
|
22
22
|
authorize @subscription
|
23
|
+
render :form
|
23
24
|
end
|
24
25
|
|
25
26
|
def create
|
@@ -27,23 +28,26 @@ module Storytime
|
|
27
28
|
authorize @subscription
|
28
29
|
|
29
30
|
if @subscription.save
|
30
|
-
|
31
|
+
load_subscriptions
|
32
|
+
render :index
|
31
33
|
else
|
32
|
-
render :
|
34
|
+
render :form, status: 422
|
33
35
|
end
|
34
36
|
end
|
35
37
|
|
36
38
|
def edit
|
37
39
|
authorize @subscription
|
40
|
+
render :form
|
38
41
|
end
|
39
42
|
|
40
43
|
def update
|
41
44
|
authorize @subscription
|
42
45
|
|
43
46
|
if @subscription.update(subscription_params)
|
44
|
-
|
47
|
+
load_subscriptions
|
48
|
+
render :index
|
45
49
|
else
|
46
|
-
render :
|
50
|
+
render :form, status: 422
|
47
51
|
end
|
48
52
|
end
|
49
53
|
|
@@ -3,53 +3,55 @@ require_dependency "storytime/application_controller"
|
|
3
3
|
module Storytime
|
4
4
|
module Dashboard
|
5
5
|
class UsersController < DashboardController
|
6
|
-
before_action :load_user, only: [:edit, :update
|
6
|
+
before_action :load_user, only: [:edit, :update]
|
7
7
|
|
8
|
-
respond_to :json
|
9
|
-
|
10
|
-
def index
|
11
|
-
@users = Storytime.user_class.page(params[:page]).per(20)
|
12
|
-
authorize @users
|
13
|
-
end
|
8
|
+
respond_to :json
|
14
9
|
|
15
10
|
def new
|
16
11
|
@user = Storytime.user_class.new
|
12
|
+
@membership = @user.storytime_memberships.new
|
17
13
|
authorize @user
|
14
|
+
respond_with @user
|
18
15
|
end
|
19
16
|
|
20
17
|
def create
|
18
|
+
membership_attrs = params[:user].delete(:storytime_memberships_attributes)["0"]
|
21
19
|
@user = Storytime.user_class.new(user_params)
|
22
20
|
authorize @user
|
23
21
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
22
|
+
respond_to do |format|
|
23
|
+
if @user.save
|
24
|
+
@user.storytime_memberships.create(storytime_role_id: membership_attrs[:storytime_role_id])
|
25
|
+
@memberships = current_storytime_site.memberships.includes(:user).page(params[:page]).per(20)
|
26
|
+
format.json { render "storytime/dashboard/memberships/index" }
|
27
|
+
else
|
28
|
+
@membership = @user.storytime_memberships.new
|
29
|
+
format.json { render :new, status: :unprocessable_entity }
|
30
|
+
end
|
28
31
|
end
|
29
32
|
end
|
30
33
|
|
31
34
|
def edit
|
32
35
|
authorize @user
|
36
|
+
respond_with @user
|
33
37
|
end
|
34
38
|
|
35
39
|
def update
|
36
40
|
authorize @user
|
37
|
-
if @user.update(user_params)
|
38
|
-
redirect_to dashboard_users_path, notice: I18n.t('flash.users.update.success')
|
39
|
-
else
|
40
|
-
render :edit
|
41
|
-
end
|
42
|
-
end
|
43
41
|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
42
|
+
respond_with @user do |format|
|
43
|
+
if @user.update(user_params)
|
44
|
+
load_user
|
45
|
+
format.json { render :index }
|
46
|
+
else
|
47
|
+
format.json { render :edit, status: :unprocessable_entity }
|
48
|
+
end
|
49
|
+
end
|
48
50
|
end
|
49
51
|
|
50
52
|
private
|
51
53
|
def user_params
|
52
|
-
params.require(Storytime.user_class_symbol).permit(:email, :
|
54
|
+
params.require(Storytime.user_class_symbol).permit(:email, :storytime_name, :password, :password_confirmation, memberships_attributes: [:id, :storytime_role_id, :_destroy])
|
53
55
|
end
|
54
56
|
|
55
57
|
def load_user
|
@@ -4,15 +4,14 @@ module Storytime
|
|
4
4
|
class DashboardController < ApplicationController
|
5
5
|
before_action :authenticate_user!
|
6
6
|
before_action :verify_storytime_user, unless: ->{ Storytime::Site.count == 0 }
|
7
|
-
before_action :ensure_site, unless: ->{ params[:controller] == "storytime/dashboard/sites" }
|
8
7
|
layout "storytime/dashboard"
|
9
8
|
|
10
|
-
after_action :verify_authorized
|
9
|
+
after_action :verify_authorized, unless: :admin_controller?
|
11
10
|
|
12
11
|
private
|
13
12
|
|
14
13
|
def verify_storytime_user
|
15
|
-
raise Pundit::NotAuthorizedError if current_user.
|
14
|
+
raise Pundit::NotAuthorizedError if current_user.storytime_memberships.count == 0
|
16
15
|
end
|
17
16
|
|
18
17
|
def load_media
|
@@ -20,5 +19,12 @@ module Storytime
|
|
20
19
|
@large_gallery = false
|
21
20
|
end
|
22
21
|
|
22
|
+
def dashboard_controller
|
23
|
+
true
|
24
|
+
end
|
25
|
+
|
26
|
+
def admin_controller?
|
27
|
+
false
|
28
|
+
end
|
23
29
|
end
|
24
30
|
end
|
@@ -2,26 +2,43 @@ require_dependency "storytime/application_controller"
|
|
2
2
|
|
3
3
|
module Storytime
|
4
4
|
class PagesController < ApplicationController
|
5
|
-
before_action :
|
5
|
+
before_action :load_page
|
6
6
|
|
7
7
|
def show
|
8
|
-
@page
|
9
|
-
|
10
|
-
|
11
|
-
|
8
|
+
if params[:preview].nil? && @page && ((params[:id] != @page.slug) && (request.path != "/"))
|
9
|
+
return redirect_to @page, :status => :moved_permanently
|
10
|
+
end
|
11
|
+
|
12
|
+
#allow overriding in the host app
|
13
|
+
slug = @page.nil? ? ActionController::Base.helpers.sanitize(params[:id]) : @page.slug
|
14
|
+
|
15
|
+
potential_templates = [
|
16
|
+
"storytime/#{@current_storytime_site.custom_view_path}/pages/#{slug}",
|
17
|
+
"storytime/#{@current_storytime_site.custom_view_path}/pages/show",
|
18
|
+
"storytime/pages/#{slug}",
|
19
|
+
"storytime/pages/show",
|
20
|
+
].each do |template|
|
21
|
+
if lookup_context.template_exists?(template)
|
22
|
+
render template
|
23
|
+
return
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def load_page
|
31
|
+
@page = if params[:preview]
|
32
|
+
page = Post.find_preview(params[:id])
|
12
33
|
page.content = page.autosave.content
|
13
34
|
page.preview = true
|
14
35
|
page
|
36
|
+
elsif Post.friendly.exists? params[:id]
|
37
|
+
Post.published.friendly.find(params[:id])
|
15
38
|
else
|
16
|
-
|
39
|
+
nil
|
17
40
|
end
|
18
|
-
|
19
|
-
if params[:preview].nil? && ((params[:id] != @page.slug) && (request.path != "/"))
|
20
|
-
return redirect_to @page, :status => :moved_permanently
|
21
|
-
end
|
22
|
-
|
23
|
-
#allow overriding in the host app
|
24
|
-
render @page.slug if lookup_context.template_exists?("storytime/pages/#{@page.slug}")
|
41
|
+
redirect_to "/", status: :moved_permanently if @page == current_storytime_site(request).homepage
|
25
42
|
end
|
26
43
|
end
|
27
44
|
end
|