pageflow 0.8.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of pageflow might be problematic. Click here for more details.
- checksums.yaml +8 -8
- data/CHANGELOG.md +810 -0
- data/README.md +179 -0
- data/admins/pageflow/accounts.rb +46 -3
- data/admins/pageflow/entry.rb +35 -7
- data/app/assets/javascripts/pageflow/audio.js +62 -0
- data/app/assets/javascripts/pageflow/audio/multi_player.js +127 -0
- data/app/assets/javascripts/pageflow/audio/player_pool.js +15 -0
- data/app/assets/javascripts/pageflow/audio_player.js +23 -1
- data/app/assets/javascripts/pageflow/audio_player/null.js +37 -0
- data/app/assets/javascripts/pageflow/audio_player/pause_in_background.js +34 -0
- data/app/assets/javascripts/pageflow/audio_player/rewind_method.js +17 -0
- data/app/assets/javascripts/pageflow/audio_player/seek_with_invalid_state_handling.js +41 -0
- data/app/assets/javascripts/pageflow/base.js +10 -0
- data/app/assets/javascripts/pageflow/browser.js +123 -0
- data/app/assets/javascripts/pageflow/{features → browser}/hashchange_support.js +1 -1
- data/app/assets/javascripts/pageflow/{features → browser}/high_bandwidth.js +1 -1
- data/app/assets/javascripts/pageflow/{features → browser}/ie_platform.js +1 -1
- data/app/assets/javascripts/pageflow/browser/ios_platform.js +6 -0
- data/app/assets/javascripts/pageflow/{features → browser}/mobile_platform.js +1 -1
- data/app/assets/javascripts/pageflow/{features → browser}/phone_platform.js +1 -1
- data/app/assets/javascripts/pageflow/browser/pushstate_support.js +3 -0
- data/app/assets/javascripts/pageflow/{features → browser}/touch_support.js +1 -1
- data/app/assets/javascripts/pageflow/browser/video.js +16 -0
- data/app/assets/javascripts/pageflow/browser/volume_control_support.js +3 -0
- data/app/assets/javascripts/pageflow/chapter_filter.js +56 -0
- data/app/assets/javascripts/pageflow/editor/api.js +29 -0
- data/app/assets/javascripts/pageflow/editor/api/page_type.js +42 -0
- data/app/assets/javascripts/pageflow/editor/api/page_types.js +47 -0
- data/app/assets/javascripts/pageflow/editor/base.js +7 -1
- data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +5 -1
- data/app/assets/javascripts/pageflow/editor/initializers/boot.js +10 -2
- data/app/assets/javascripts/pageflow/editor/initializers/setup_audio.js +8 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +7 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_features.js +3 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_hotkeys.js +20 -0
- data/app/assets/javascripts/pageflow/editor/initializers/setup_page_types.js +1 -6
- data/app/assets/javascripts/pageflow/editor/models/audio_file.js +8 -0
- data/app/assets/javascripts/pageflow/editor/models/chapter.js +23 -4
- data/app/assets/javascripts/pageflow/editor/models/chapter_configuration.js +7 -0
- data/app/assets/javascripts/pageflow/editor/models/configuration.js +5 -3
- data/app/assets/javascripts/pageflow/editor/models/entry.js +6 -4
- data/app/assets/javascripts/pageflow/editor/models/mixins/delayed_destroying.js +1 -1
- data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +3 -2
- data/app/assets/javascripts/pageflow/editor/models/page.js +11 -4
- data/app/assets/javascripts/pageflow/editor/models/preview_entry_data.js +31 -0
- data/app/assets/javascripts/pageflow/editor/models/theming.js +8 -0
- data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +8 -0
- data/app/assets/javascripts/pageflow/editor/templates/drop_down_button.jst.ejs +6 -0
- data/app/assets/javascripts/pageflow/editor/templates/drop_down_button_item.jst.ejs +1 -0
- data/app/assets/javascripts/pageflow/editor/templates/files_explorer.jst.ejs +2 -2
- data/app/assets/javascripts/pageflow/editor/templates/inputs/reference.jst.ejs +7 -0
- data/app/assets/javascripts/pageflow/editor/templates/list.jst.ejs +5 -0
- data/app/assets/javascripts/pageflow/editor/templates/list_blank_slate.jst.ejs +1 -0
- data/app/assets/javascripts/pageflow/editor/templates/list_item.jst.ejs +11 -0
- data/app/assets/javascripts/pageflow/editor/templates/loading.jst.ejs +7 -1
- data/app/assets/javascripts/pageflow/editor/templates/other_entries_blank_slate.jst.ejs +1 -1
- data/app/assets/javascripts/pageflow/editor/templates/page_link_item.jst.ejs +7 -0
- data/app/assets/javascripts/pageflow/editor/templates/page_links.jst.ejs +6 -0
- data/app/assets/javascripts/pageflow/editor/templates/page_selection.jst.ejs +12 -0
- data/app/assets/javascripts/pageflow/editor/templates/publish_entry.jst.ejs +44 -8
- data/app/assets/javascripts/pageflow/editor/views/chapter_item_view.js +3 -1
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/options.js +34 -2
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/page_transitions.js +6 -0
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +6 -1
- data/app/assets/javascripts/pageflow/editor/views/disabled_atmo_indicator_view.js +27 -0
- data/app/assets/javascripts/pageflow/editor/views/drop_down_button_item_view.js +33 -0
- data/app/assets/javascripts/pageflow/editor/views/drop_down_button_view.js +80 -0
- data/app/assets/javascripts/pageflow/editor/views/edit_chapter_view.js +25 -5
- data/app/assets/javascripts/pageflow/editor/views/edit_entry_view.js +9 -1
- data/app/assets/javascripts/pageflow/editor/views/edit_page_view.js +7 -5
- data/app/assets/javascripts/pageflow/editor/views/edit_widget_view.js +1 -1
- data/app/assets/javascripts/pageflow/editor/views/embedded/background_image_embedded_view.js +4 -1
- data/app/assets/javascripts/pageflow/editor/views/embedded/lazy_video_embedded_view.js +41 -0
- data/app/assets/javascripts/pageflow/editor/views/entry_preview_view.js +6 -6
- data/app/assets/javascripts/pageflow/editor/views/inputs/page_link_input_view.js +9 -0
- data/app/assets/javascripts/pageflow/editor/views/inputs/reference_input_view.js +66 -0
- data/app/assets/javascripts/pageflow/editor/views/list_item_view.js +95 -0
- data/app/assets/javascripts/pageflow/editor/views/list_view.js +59 -0
- data/app/assets/javascripts/pageflow/editor/views/loading_view.js +5 -0
- data/app/assets/javascripts/pageflow/editor/views/model_thumbnail_view.js +37 -0
- data/app/assets/javascripts/pageflow/editor/views/navigatable_page_item_view.js +1 -0
- data/app/assets/javascripts/pageflow/editor/views/other_entries_collection_view.js +4 -4
- data/app/assets/javascripts/pageflow/editor/views/other_entry_item_view.js +2 -1
- data/app/assets/javascripts/pageflow/editor/views/page_item_view.js +2 -2
- data/app/assets/javascripts/pageflow/editor/views/page_link_item_view.js +51 -0
- data/app/assets/javascripts/pageflow/editor/views/page_links_view.js +45 -0
- data/app/assets/javascripts/pageflow/editor/views/page_preview_view.js +24 -16
- data/app/assets/javascripts/pageflow/editor/views/page_selection_view.js +46 -0
- data/app/assets/javascripts/pageflow/editor/views/page_thumbnail_view.js +2 -29
- data/app/assets/javascripts/pageflow/editor/views/publish_entry_view.js +95 -10
- data/app/assets/javascripts/pageflow/editor/views/scrolling_view.js +24 -0
- data/app/assets/javascripts/pageflow/entry_data.js +35 -0
- data/app/assets/javascripts/pageflow/features.js +68 -98
- data/app/assets/javascripts/pageflow/fullscreen.js +24 -0
- data/app/assets/javascripts/pageflow/highlighted_page.js +48 -0
- data/app/assets/javascripts/pageflow/history.js +50 -18
- data/app/assets/javascripts/pageflow/history/hash_adapter.js +36 -0
- data/app/assets/javascripts/pageflow/history/push_state_adapter.js +37 -0
- data/app/assets/javascripts/pageflow/history/simulated_adapter.js +44 -0
- data/app/assets/javascripts/pageflow/media_player.js +25 -0
- data/app/assets/javascripts/pageflow/media_player/async_play.js +54 -0
- data/app/assets/javascripts/pageflow/media_player/hooks.js +24 -0
- data/app/assets/javascripts/pageflow/media_player/load_waiting.js +11 -0
- data/app/assets/javascripts/pageflow/media_player/volume_binding.js +72 -0
- data/app/assets/javascripts/pageflow/media_player/volume_fading.js +62 -0
- data/app/assets/javascripts/pageflow/multimedia_alert.js +13 -0
- data/app/assets/javascripts/pageflow/object.js +14 -0
- data/app/assets/javascripts/pageflow/page_transitions.js +27 -0
- data/app/assets/javascripts/pageflow/page_type.js +6 -0
- data/app/assets/javascripts/pageflow/page_types/audio.js +17 -21
- data/app/assets/javascripts/pageflow/page_types/background_video.js +18 -17
- data/app/assets/javascripts/pageflow/page_types/mixins/common_page_css_classes.js +29 -4
- data/app/assets/javascripts/pageflow/page_types/video.js +73 -36
- data/app/assets/javascripts/pageflow/preload.js +9 -6
- data/app/assets/javascripts/pageflow/ready.js +18 -14
- data/app/assets/javascripts/pageflow/seed_entry_data.js +43 -0
- data/app/assets/javascripts/pageflow/settings.js +17 -4
- data/app/assets/javascripts/pageflow/slideshow.js +103 -23
- data/app/assets/javascripts/pageflow/slideshow/adjacent_pages.js +26 -0
- data/app/assets/javascripts/pageflow/slideshow/adjacent_preparer.js +44 -0
- data/app/assets/javascripts/pageflow/slideshow/atmo.js +105 -0
- data/app/assets/javascripts/pageflow/slideshow/dom_order_scroll_navigator.js +29 -0
- data/app/assets/javascripts/pageflow/slideshow/lazy_page_widget.js +49 -0
- data/app/assets/javascripts/pageflow/slideshow/page_widget.js +60 -26
- data/app/assets/javascripts/pageflow/slideshow/progressive_preload.js +16 -7
- data/app/assets/javascripts/pageflow/slideshow/scroll_indicator_widget.js +45 -7
- data/app/assets/javascripts/pageflow/slideshow/scroller_widget.js +42 -5
- data/app/assets/javascripts/pageflow/ui.js +1 -0
- data/app/assets/javascripts/pageflow/ui/object.js +4 -13
- data/app/assets/javascripts/pageflow/ui/utils/i18n_utils.js +23 -0
- data/app/assets/javascripts/pageflow/ui/views/collection_view.js +8 -4
- data/app/assets/javascripts/pageflow/ui/views/configuration_editor_tab_view.js +6 -5
- data/app/assets/javascripts/pageflow/ui/views/configuration_editor_view.js +2 -11
- data/app/assets/javascripts/pageflow/ui/views/inputs/select_input_view.js +6 -1
- data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +4 -0
- data/app/assets/javascripts/pageflow/ui/views/mixins/input_view.js +149 -6
- data/app/assets/javascripts/pageflow/ui/views/mixins/subview_container.js +4 -0
- data/app/assets/javascripts/pageflow/video_player.js +5 -0
- data/app/assets/javascripts/pageflow/video_player/buffer_underrun_waiting.js +1 -1
- data/app/assets/javascripts/pageflow/video_player/lazy.js +8 -4
- data/app/assets/javascripts/pageflow/video_player/media_events.js +1 -1
- data/app/assets/javascripts/pageflow/video_player/play_button_patch.js +1 -1
- data/app/assets/javascripts/pageflow/video_player/prebuffering.js +1 -1
- data/app/assets/javascripts/pageflow/widgets/fullscreen_button.js +26 -0
- data/app/assets/javascripts/pageflow/widgets/multimedia_alert.js +21 -5
- data/app/assets/javascripts/pageflow/widgets/mute_button.js +42 -0
- data/app/assets/javascripts/pageflow/widgets/navigation.js +5 -78
- data/app/assets/javascripts/pageflow/widgets/navigation_mobile.js +4 -0
- data/app/assets/javascripts/pageflow/widgets/page_navigation_list.js +28 -34
- data/app/assets/javascripts/pageflow/widgets/parent_page_button.js +27 -0
- data/app/assets/javascripts/pageflow/widgets/skip_page_button.js +22 -0
- data/app/assets/javascripts/pageflow/widgets/top_button.js +6 -7
- data/app/assets/javascripts/pageflow/widgets/volume_slider.js +62 -0
- data/app/assets/stylesheets/pageflow/admin/entries.css.scss +10 -0
- data/app/assets/stylesheets/pageflow/animations.css.scss +1 -0
- data/app/assets/stylesheets/pageflow/animations/loading.css.scss +8 -0
- data/app/assets/stylesheets/pageflow/animations/scroll.css.scss +18 -0
- data/app/assets/stylesheets/pageflow/base.css.scss +3 -1
- data/app/assets/stylesheets/pageflow/delayed_text_fade_in.css.scss +49 -0
- data/app/assets/stylesheets/pageflow/editor/base.css.scss +15 -2
- data/app/assets/stylesheets/pageflow/editor/disabled_atmo_indicator.css.scss +13 -0
- data/app/assets/stylesheets/pageflow/editor/drop_down_button.css.scss +54 -0
- data/app/assets/stylesheets/pageflow/editor/files_explorer.css.scss +6 -0
- data/app/assets/stylesheets/pageflow/editor/indicators.css.scss +5 -0
- data/app/assets/stylesheets/pageflow/editor/inputs.css.scss +1 -0
- data/app/assets/stylesheets/pageflow/editor/inputs/reference.css.scss +51 -0
- data/app/assets/stylesheets/pageflow/editor/list.css.scss +108 -0
- data/app/assets/stylesheets/pageflow/editor/loading.css.scss +31 -0
- data/app/assets/stylesheets/pageflow/editor/outline.css.scss +7 -5
- data/app/assets/stylesheets/pageflow/editor/page_links.css.scss +58 -0
- data/app/assets/stylesheets/pageflow/editor/page_selection.css.scss +39 -0
- data/app/assets/stylesheets/pageflow/editor/publish_entry.css.scss +38 -1
- data/app/assets/stylesheets/pageflow/entries.css.scss +17 -9
- data/app/assets/stylesheets/pageflow/navigation_bar.css.scss +4 -0
- data/app/assets/stylesheets/pageflow/page_transitions.css.scss +10 -0
- data/app/assets/stylesheets/pageflow/page_transitions/crossfade.css.scss +29 -0
- data/app/assets/stylesheets/pageflow/page_transitions/cut.css.scss +23 -0
- data/app/assets/stylesheets/pageflow/page_transitions/fade.css.scss +78 -0
- data/app/assets/stylesheets/pageflow/page_transitions/fade_to_black.css.scss +107 -0
- data/app/assets/stylesheets/pageflow/page_transitions/scroll.css.scss +20 -0
- data/app/assets/stylesheets/pageflow/page_transitions/scroll_in.css.scss +66 -0
- data/app/assets/stylesheets/pageflow/page_transitions/scroll_in_right.css.scss +68 -0
- data/app/assets/stylesheets/pageflow/page_transitions/scroll_left.css.scss +20 -0
- data/app/assets/stylesheets/pageflow/page_transitions/scroll_right.css.scss +20 -0
- data/app/assets/stylesheets/pageflow/page_types.css.scss +1 -3
- data/app/assets/stylesheets/pageflow/page_types/video.css.scss +0 -4
- data/app/assets/stylesheets/pageflow/slideshow.css.scss +0 -145
- data/app/assets/stylesheets/pageflow/text_variants.css.scss +0 -4
- data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +0 -3
- data/app/controllers/concerns/pageflow/public_https_mode.rb +13 -0
- data/app/controllers/pageflow/application_controller.rb +0 -6
- data/app/controllers/pageflow/chapters_controller.rb +2 -1
- data/app/controllers/pageflow/editor/entries_controller.rb +2 -0
- data/app/controllers/pageflow/editor/entry_publications_controller.rb +3 -1
- data/app/controllers/pageflow/entries_controller.rb +16 -3
- data/app/controllers/pageflow/files_controller.rb +3 -1
- data/app/helpers/pageflow/admin/features_helper.rb +25 -0
- data/app/helpers/pageflow/background_image_helper.rb +40 -9
- data/app/helpers/pageflow/entries_helper.rb +10 -11
- data/app/helpers/pageflow/entry_json_seed_helper.rb +44 -0
- data/app/helpers/pageflow/help_entries_helper.rb +4 -4
- data/app/helpers/pageflow/page_types_helper.rb +4 -2
- data/app/helpers/pageflow/pages_helper.rb +20 -27
- data/app/helpers/pageflow/widgets_helper.rb +4 -4
- data/app/models/concerns/pageflow/feature_target.rb +37 -0
- data/app/models/pageflow/account.rb +2 -0
- data/app/models/pageflow/chapter.rb +6 -0
- data/app/models/pageflow/draft_entry.rb +2 -0
- data/app/models/pageflow/entry.rb +47 -9
- data/app/models/pageflow/entry_duplicate.rb +51 -0
- data/app/models/pageflow/image_file.rb +33 -13
- data/app/models/pageflow/page.rb +2 -2
- data/app/models/pageflow/published_entry.rb +7 -1
- data/app/views/admin/accounts/_form.html.erb +11 -1
- data/app/views/admin/features/_form.html.erb +16 -0
- data/app/views/components/pageflow/admin/features_tab.rb +10 -0
- data/app/views/components/pageflow/admin/revisions_tab.rb +4 -0
- data/app/views/layouts/pageflow/_meta_tags.html.erb +1 -1
- data/app/views/layouts/pageflow/application.html.erb +2 -2
- data/app/views/pageflow/editor/accounts/_account.json.jbuilder +1 -0
- data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
- data/app/views/pageflow/editor/entries/_help_entries_seed.html.erb +2 -2
- data/app/views/pageflow/editor/entries/_indicators_seed.html.erb +3 -0
- data/app/views/pageflow/editor/entries/seed.json.erb +3 -2
- data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +1 -0
- data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -1
- data/app/views/pageflow/editor/themings/_theming.json.jbuilder +4 -0
- data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +1 -0
- data/app/views/pageflow/entries/_entry.html.erb +4 -3
- data/app/views/pageflow/entries/_indicators.html.erb +13 -0
- data/app/views/pageflow/entries/_mobile_navigation.html.erb +3 -15
- data/app/views/pageflow/entries/edit.html.erb +9 -1
- data/app/views/pageflow/entries/navigation/_bar_top.html.erb +3 -15
- data/app/views/pageflow/entries/share_menu/_facebook_link.html.erb +12 -0
- data/app/views/pageflow/entries/share_menu/_google_link.html.erb +12 -0
- data/app/views/pageflow/entries/share_menu/_twitter_link.html.erb +12 -0
- data/app/views/pageflow/entries/show.css.erb +12 -2
- data/app/views/pageflow/entries/show.html.erb +5 -1
- data/app/views/pageflow/page_types/_page_type.json.jbuilder +7 -1
- data/app/views/pageflow/pages/_page.html.erb +2 -2
- data/app/views/pageflow/pages/templates/_audio.html.erb +10 -0
- data/config/initializers/admin_resource_tabs.rb +1 -0
- data/config/initializers/features.rb +9 -0
- data/config/initializers/page_type_helpers.rb +1 -1
- data/config/initializers/paperclip.rb +1 -1
- data/config/initializers/zencoder.rb +1 -1
- data/config/locales/de.yml +132 -71
- data/config/locales/en.yml +118 -191
- data/db/migrate/20141211110226_add_configuration_to_chapters.rb +5 -0
- data/db/migrate/20150115175116_add_features_configuration_to_accounts.rb +5 -0
- data/db/migrate/20150115175207_add_features_configuration_to_entries.rb +5 -0
- data/db/migrate/20150603091823_add_password_attributes_to_revisions.rb +6 -0
- data/db/migrate/20151022080518_add_first_published_at_to_entries.rb +14 -0
- data/lib/generators/pageflow/initializer/templates/pageflow.rb +26 -17
- data/lib/generators/pageflow/theme/theme_generator.rb +2 -1
- data/lib/pageflow.rb +2 -46
- data/lib/pageflow/admin/form_input.rb +18 -0
- data/lib/pageflow/admin/form_inputs.rb +41 -0
- data/lib/pageflow/built_in_page_type.rb +0 -4
- data/lib/pageflow/configuration.rb +74 -18
- data/lib/pageflow/feature.rb +33 -0
- data/lib/pageflow/features.rb +68 -0
- data/lib/pageflow/global_config_api.rb +118 -0
- data/lib/pageflow/page_type_feature.rb +21 -0
- data/lib/pageflow/page_types.rb +29 -0
- data/lib/pageflow/theme.rb +20 -0
- data/lib/pageflow/themes.rb +26 -0
- data/lib/pageflow/version.rb +1 -1
- data/spec/factories/entries.rb +6 -0
- data/spec/factories/feature_targets.rb +4 -0
- data/spec/fixtures/image.gif +0 -0
- data/spec/fixtures/video.mp4 +0 -0
- data/vendor/assets/javascripts/audio5.min.js +12 -8
- data/vendor/assets/javascripts/iscroll.js +1 -1
- metadata +144 -24
- data/app/assets/images/pageflow/internal_links_pictogram.png +0 -0
- data/app/assets/images/pageflow/internal_links_pictogram_small.png +0 -0
- data/app/assets/images/pageflow/internal_links_sprite.png +0 -0
- data/app/assets/images/pageflow/ov-internal_links.png +0 -0
- data/app/assets/images/pageflow/themes/default/internal_links_sprite.png +0 -0
- data/app/assets/javascripts/pageflow/editor/templates/embedded/page_link.jst.ejs +0 -3
- data/app/assets/javascripts/pageflow/editor/views/configuration_editors/internal_links.js +0 -24
- data/app/assets/javascripts/pageflow/editor/views/draggable_page_item_view.js +0 -31
- data/app/assets/javascripts/pageflow/editor/views/embedded/page_link_embedded_view.js +0 -176
- data/app/assets/javascripts/pageflow/features/video.js +0 -16
- data/app/assets/javascripts/pageflow/page_types/internal_links.js +0 -55
- data/app/assets/javascripts/pageflow/ui/templates/inputs/page_reference.jst.ejs +0 -6
- data/app/assets/javascripts/pageflow/ui/views/inputs/page_reference_input_view.js +0 -44
- data/app/assets/stylesheets/pageflow/editor/embedded.css.scss +0 -104
- data/app/assets/stylesheets/pageflow/page_types/internal_links.css.scss +0 -222
- data/app/views/pageflow/pages/templates/_internal_links.html.erb +0 -31
@@ -17,6 +17,8 @@ module Pageflow
|
|
17
17
|
render(action: :check)
|
18
18
|
rescue Quota::ExceededError
|
19
19
|
render(action: :check, status: :forbidden)
|
20
|
+
rescue Entry::PasswordMissingError
|
21
|
+
head(:bad_request)
|
20
22
|
end
|
21
23
|
|
22
24
|
def check
|
@@ -37,7 +39,7 @@ module Pageflow
|
|
37
39
|
end
|
38
40
|
|
39
41
|
def entry_publication_params
|
40
|
-
params.fetch(:entry_publication, {}).permit(:published_until)
|
42
|
+
params.fetch(:entry_publication, {}).permit(:published_until, :password, :password_protected)
|
41
43
|
end
|
42
44
|
|
43
45
|
def published_entries_quota
|
@@ -1,8 +1,10 @@
|
|
1
1
|
module Pageflow
|
2
2
|
class EntriesController < Pageflow::ApplicationController
|
3
|
+
include PublicHttpsMode
|
4
|
+
|
3
5
|
before_filter :authenticate_user!, :except => [:index, :show, :page]
|
4
6
|
|
5
|
-
before_filter :
|
7
|
+
before_filter :check_public_https_mode, only: [:index, :show], unless: lambda { |controller| controller.request.format.json? }
|
6
8
|
|
7
9
|
helper_method :render_to_string
|
8
10
|
|
@@ -22,12 +24,15 @@ module Pageflow
|
|
22
24
|
@entry = PublishedEntry.find(params[:id], entry_request_scope)
|
23
25
|
I18n.locale = @entry.locale
|
24
26
|
|
27
|
+
if request.format.html? && @entry.password_protected?
|
28
|
+
check_entry_password(@entry)
|
29
|
+
end
|
30
|
+
|
25
31
|
if params[:page].present?
|
26
|
-
@entry.share_target =
|
32
|
+
@entry.share_target = @entry.pages.find_by_perma_id(params[:page])
|
27
33
|
else
|
28
34
|
@entry.share_target = @entry
|
29
35
|
end
|
30
|
-
|
31
36
|
end
|
32
37
|
format.json do
|
33
38
|
authenticate_user!
|
@@ -61,6 +66,8 @@ module Pageflow
|
|
61
66
|
def edit
|
62
67
|
@entry = DraftEntry.find(params[:id])
|
63
68
|
authorize!(:edit, @entry.to_model)
|
69
|
+
|
70
|
+
@entry_config = Pageflow.config_for(@entry)
|
64
71
|
end
|
65
72
|
|
66
73
|
def update
|
@@ -83,5 +90,11 @@ module Pageflow
|
|
83
90
|
def entry_request_scope
|
84
91
|
Pageflow.config.public_entry_request_scope.call(Entry, request)
|
85
92
|
end
|
93
|
+
|
94
|
+
def check_entry_password(entry)
|
95
|
+
authenticate_or_request_with_http_basic('Pageflow') do |_, password|
|
96
|
+
entry.authenticate(password)
|
97
|
+
end
|
98
|
+
end
|
86
99
|
end
|
87
100
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Pageflow
|
2
|
+
module Admin
|
3
|
+
module FeaturesHelper
|
4
|
+
def feature_state_select_tag(feature_target, feature_name)
|
5
|
+
value = FeatureTarget::STATE_MAPPING[feature_target.feature_state(feature_name)]
|
6
|
+
|
7
|
+
select_tag(feature_state_input_name(feature_target, feature_name),
|
8
|
+
options_for_select(feature_states_collection, value))
|
9
|
+
end
|
10
|
+
|
11
|
+
def feature_state_input_name(feature_target, feature_name)
|
12
|
+
param_key = feature_target.class.model_name.param_key
|
13
|
+
"#{param_key}[feature_states][#{feature_name}]"
|
14
|
+
end
|
15
|
+
|
16
|
+
def feature_states_collection
|
17
|
+
{
|
18
|
+
I18n.t('pageflow.admin.features.states.undefined') => nil,
|
19
|
+
I18n.t('pageflow.admin.features.states.enabled') => FeatureTarget::STATE_MAPPING[true],
|
20
|
+
I18n.t('pageflow.admin.features.states.disabled') => FeatureTarget::STATE_MAPPING[false]
|
21
|
+
}
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -16,7 +16,17 @@ module Pageflow
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
+
def background_image_lazy_loading_css_class(prefix, model)
|
20
|
+
css_class = [prefix, model.id].join('_')
|
21
|
+
".load_all_images .#{css_class}, .load_image.#{css_class}"
|
22
|
+
end
|
23
|
+
|
19
24
|
class Div
|
25
|
+
FILE_TYPE_CSS_CLASS_PREFIXES = {
|
26
|
+
'image_file' => 'image',
|
27
|
+
'video_file' => 'video_poster',
|
28
|
+
}
|
29
|
+
|
20
30
|
attr_reader :configuration, :property_base_name, :options
|
21
31
|
|
22
32
|
delegate :content_tag, :to => :@template
|
@@ -35,9 +45,10 @@ module Pageflow
|
|
35
45
|
protected
|
36
46
|
|
37
47
|
def data_attributes
|
48
|
+
options.slice(:style_group)
|
38
49
|
end
|
39
50
|
|
40
|
-
def
|
51
|
+
def file_id
|
41
52
|
configuration["#{property_base_name}_id"]
|
42
53
|
end
|
43
54
|
|
@@ -48,7 +59,15 @@ module Pageflow
|
|
48
59
|
private
|
49
60
|
|
50
61
|
def css_class
|
51
|
-
["background background_image
|
62
|
+
["background background_image #{image_css_class}", options[:class]].compact.join(' ')
|
63
|
+
end
|
64
|
+
|
65
|
+
def image_css_class
|
66
|
+
[image_css_class_prefix, options[:style_group], file_id || 'none'].compact.join('_')
|
67
|
+
end
|
68
|
+
|
69
|
+
def image_css_class_prefix
|
70
|
+
FILE_TYPE_CSS_CLASS_PREFIXES.fetch(options.fetch(:file_type, 'image_file'))
|
52
71
|
end
|
53
72
|
|
54
73
|
def background_position(coord)
|
@@ -59,8 +78,10 @@ module Pageflow
|
|
59
78
|
|
60
79
|
class DivWithSizeAttributes < Div
|
61
80
|
def data_attributes
|
62
|
-
if
|
63
|
-
|
81
|
+
if file
|
82
|
+
super.merge(:width => file.width, :height => file.height)
|
83
|
+
else
|
84
|
+
super
|
64
85
|
end
|
65
86
|
end
|
66
87
|
|
@@ -72,17 +93,27 @@ module Pageflow
|
|
72
93
|
end
|
73
94
|
end
|
74
95
|
|
96
|
+
private
|
97
|
+
|
75
98
|
def padding_top
|
76
|
-
if
|
77
|
-
|
99
|
+
if file
|
100
|
+
file.height / file.width.to_f * 100
|
78
101
|
else
|
79
102
|
0
|
80
103
|
end
|
81
104
|
end
|
82
105
|
|
83
|
-
def
|
84
|
-
@
|
85
|
-
@
|
106
|
+
def file
|
107
|
+
@file ||= (find_file || :none)
|
108
|
+
@file == :none ? nil : @file
|
109
|
+
end
|
110
|
+
|
111
|
+
def find_file
|
112
|
+
file_type.model.find_by_id(file_id)
|
113
|
+
end
|
114
|
+
|
115
|
+
def file_type
|
116
|
+
Pageflow.config.file_types.find_by_collection_name!(options.fetch(:file_type, 'image_file').pluralize)
|
86
117
|
end
|
87
118
|
end
|
88
119
|
end
|
@@ -1,17 +1,15 @@
|
|
1
1
|
module Pageflow
|
2
2
|
module EntriesHelper
|
3
|
-
include RenderJsonHelper
|
4
|
-
|
5
3
|
def pretty_entry_url(entry)
|
6
4
|
pageflow.short_entry_url(entry.to_model, Pageflow.config.theming_url_options(entry.theming))
|
7
5
|
end
|
8
6
|
|
9
7
|
def entry_file_rights(entry)
|
10
|
-
rights =
|
11
|
-
entry.
|
12
|
-
file.rights.presence || entry.account.default_file_rights
|
8
|
+
rights = Pageflow.config.file_types.map do |file_type|
|
9
|
+
entry.files(file_type.model).map do |file|
|
10
|
+
file.rights.presence || entry.account.default_file_rights.presence
|
13
11
|
end
|
14
|
-
end.flatten.sort.uniq
|
12
|
+
end.flatten.compact.sort.uniq
|
15
13
|
|
16
14
|
if rights.any?
|
17
15
|
content_tag :p, class: 'rights' do
|
@@ -43,7 +41,12 @@ module Pageflow
|
|
43
41
|
end
|
44
42
|
|
45
43
|
def entry_stylesheet_link_tag(entry)
|
46
|
-
|
44
|
+
url = polymorphic_path(entry.stylesheet_model,
|
45
|
+
v: entry.stylesheet_cache_key,
|
46
|
+
p: Pageflow::VERSION,
|
47
|
+
format: 'css')
|
48
|
+
|
49
|
+
stylesheet_link_tag(url, media: 'all')
|
47
50
|
end
|
48
51
|
|
49
52
|
def entry_mobile_navigation_pages(entry)
|
@@ -73,9 +76,5 @@ module Pageflow
|
|
73
76
|
return '' if entry.summary.blank?
|
74
77
|
strip_tags(entry.summary.gsub(/<br ?\/?>/, ' ').squish)
|
75
78
|
end
|
76
|
-
|
77
|
-
def entry_pages_json_seed(entry)
|
78
|
-
sanitize_json(entry.pages.to_json(only: [:id, :perma_id, :configuration])).html_safe
|
79
|
-
end
|
80
79
|
end
|
81
80
|
end
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# Render seed data for published entries.
|
3
|
+
#
|
4
|
+
# @api private
|
5
|
+
module EntryJsonSeedHelper
|
6
|
+
include RenderJsonHelper
|
7
|
+
|
8
|
+
def entry_json_seed(entry)
|
9
|
+
seed = {
|
10
|
+
theming: entry_theming_seed(entry),
|
11
|
+
chapter_configurations: entry_chapter_configurations_seed(entry),
|
12
|
+
pages: entry_pages_seed(entry)
|
13
|
+
}
|
14
|
+
|
15
|
+
sanitize_json(seed.to_json).html_safe
|
16
|
+
end
|
17
|
+
|
18
|
+
def entry_theming_seed(entry)
|
19
|
+
{
|
20
|
+
page_change_by_scrolling: entry.theming.theme.page_change_by_scrolling?,
|
21
|
+
hide_text_on_swipe: entry.theming.theme.hide_text_on_swipe?
|
22
|
+
}
|
23
|
+
end
|
24
|
+
|
25
|
+
def entry_chapter_configurations_seed(entry)
|
26
|
+
entry.chapters.each_with_object({}) do |chapter, result|
|
27
|
+
result[chapter.id] = chapter.configuration
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def entry_pages_seed(entry)
|
32
|
+
attributes = [:id, :perma_id, :chapter_id, :configuration]
|
33
|
+
entry.pages.as_json(only: attributes)
|
34
|
+
end
|
35
|
+
|
36
|
+
def entry_audio_files_json_seed(entry)
|
37
|
+
seed = entry.audio_files.each_with_object({}) do |audio_file, result|
|
38
|
+
result[audio_file.id] = audio_file_sources(audio_file)
|
39
|
+
end
|
40
|
+
|
41
|
+
sanitize_json(seed.to_json).html_safe
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -1,14 +1,14 @@
|
|
1
1
|
module Pageflow
|
2
2
|
# @api private
|
3
3
|
module HelpEntriesHelper
|
4
|
-
def help_entry_sections
|
4
|
+
def help_entry_sections(config)
|
5
5
|
render(partial: 'pageflow/help_entries/section',
|
6
|
-
collection:
|
6
|
+
collection: config.help_entries.flat,
|
7
7
|
as: :help_entry)
|
8
8
|
end
|
9
9
|
|
10
|
-
def help_entries_menu
|
11
|
-
render('pageflow/help_entries/menu', help_entries:
|
10
|
+
def help_entries_menu(config)
|
11
|
+
render('pageflow/help_entries/menu', help_entries: config.help_entries)
|
12
12
|
end
|
13
13
|
|
14
14
|
def help_entry_li(help_entry, &block)
|
@@ -2,8 +2,10 @@ module Pageflow
|
|
2
2
|
module PageTypesHelper
|
3
3
|
include RenderJsonHelper
|
4
4
|
|
5
|
-
def page_type_json_seeds
|
6
|
-
render_json_partial('pageflow/page_types/page_type',
|
5
|
+
def page_type_json_seeds(config)
|
6
|
+
render_json_partial('pageflow/page_types/page_type',
|
7
|
+
collection: config.page_types,
|
8
|
+
as: :page_type)
|
7
9
|
end
|
8
10
|
|
9
11
|
def page_type_templates
|
@@ -5,13 +5,29 @@ module Pageflow
|
|
5
5
|
classes << 'invert' if page.configuration['invert']
|
6
6
|
classes << 'hide_title' if page.configuration['hide_title']
|
7
7
|
classes << "text_position_#{page.configuration['text_position']}" if page.configuration['text_position'].present?
|
8
|
+
classes << "scroll_indicator_mode_#{page.configuration['scroll_indicator_mode']}" if page.configuration['scroll_indicator_mode'].present?
|
9
|
+
classes << "scroll_indicator_orientation_#{page.configuration['scroll_indicator_orientation']}" if page.configuration['scroll_indicator_orientation'].present?
|
10
|
+
classes << "delayed_text_fade_in_#{page.configuration['delayed_text_fade_in']}" if page.configuration['delayed_text_fade_in'].present?
|
8
11
|
classes << 'chapter_beginning' if page.position == 0
|
12
|
+
classes << 'no_text_content' if !page_has_content(page)
|
9
13
|
classes.join(' ')
|
10
14
|
end
|
11
15
|
|
16
|
+
# @api private
|
17
|
+
def page_has_content(page)
|
18
|
+
has_title = ['title','subtitle','tagline'].any? do |attribute|
|
19
|
+
page.configuration[attribute].present?
|
20
|
+
end
|
21
|
+
|
22
|
+
has_text = strip_tags(page.configuration['text']).present?
|
23
|
+
|
24
|
+
(has_title && !page.configuration['hide_title']) || has_text
|
25
|
+
end
|
26
|
+
|
12
27
|
def page_navigation_css_class(page)
|
13
28
|
classes = [page.template]
|
14
29
|
classes << 'chapter_beginning' if page.position == 0
|
30
|
+
classes << 'emphasized' if page.configuration['emphasize_in_navigation']
|
15
31
|
classes << "chapter_#{page.chapter.position}"
|
16
32
|
page.chapter.position % 2 == 0 ? classes << 'chapter_even' : classes << 'chapter_odd'
|
17
33
|
classes.join(' ')
|
@@ -19,7 +35,9 @@ module Pageflow
|
|
19
35
|
|
20
36
|
def shadow_div(options = {})
|
21
37
|
style = options[:opacity] ? "opacity: #{options[:opacity] / 100.0};" : nil
|
22
|
-
content_tag(:div, '', :class => '
|
38
|
+
content_tag(:div, '', :class => 'shadow_wrapper') do
|
39
|
+
content_tag(:div, '', :class => 'shadow', :style => style)
|
40
|
+
end
|
23
41
|
end
|
24
42
|
|
25
43
|
def mobile_poster_image_div(config = {})
|
@@ -124,33 +142,8 @@ module Pageflow
|
|
124
142
|
}
|
125
143
|
end
|
126
144
|
|
127
|
-
def page_thumbnail_item(page_ids, index, layout_name)
|
128
|
-
page_ids ||= {}
|
129
|
-
page = @entry.pages.find_by_perma_id(page_ids[index.to_s])
|
130
|
-
|
131
|
-
content_tag(:li,
|
132
|
-
page ? page_thumbnail_link(page, page_thumbnail_hero?(index, layout_name)) : '',
|
133
|
-
:data => {:reference_key => index},
|
134
|
-
:class => page ? 'title_hover' : 'title_hover empty')
|
135
|
-
end
|
136
|
-
|
137
|
-
def page_thumbnail_hero?(index, layout_name)
|
138
|
-
index == {
|
139
|
-
'hero_top_left' => 1,
|
140
|
-
'hero_top_right' => 1
|
141
|
-
}[layout_name]
|
142
|
-
end
|
143
|
-
|
144
|
-
def page_thumbnail_link(page, hero = false)
|
145
|
-
link_to(content_tag(:span, raw(page.configuration['description']), :class => 'title'),
|
146
|
-
"##{page.perma_id}",
|
147
|
-
:title => page.title,
|
148
|
-
:data => {:page => page.id},
|
149
|
-
:class => ['thumbnail', page_thumbnail_image_class(page, hero)] * ' ')
|
150
|
-
end
|
151
|
-
|
152
145
|
def page_thumbnail_image_class(page, hero)
|
153
|
-
file_thumbnail_css_class(page.thumbnail_file, hero ? :
|
146
|
+
file_thumbnail_css_class(page.thumbnail_file, hero ? :link_thumbnail_large : :link_thumbnail)
|
154
147
|
end
|
155
148
|
|
156
149
|
CSS_RENDERED_THUMBNAIL_STYLES = [:link_thumbnail, :link_thumbnail_large]
|
@@ -22,8 +22,8 @@ module Pageflow
|
|
22
22
|
end.join(' ')
|
23
23
|
end
|
24
24
|
|
25
|
-
def widget_types_json_seeds
|
26
|
-
|
25
|
+
def widget_types_json_seeds(config)
|
26
|
+
config.widget_types.each_with_object({}) do |widget_type, result|
|
27
27
|
widget_type.roles.each do |role|
|
28
28
|
result[role] ||= []
|
29
29
|
result[role] << {
|
@@ -34,8 +34,8 @@ module Pageflow
|
|
34
34
|
end.to_json.html_safe
|
35
35
|
end
|
36
36
|
|
37
|
-
def widget_types_collection_for_role(role)
|
38
|
-
|
37
|
+
def widget_types_collection_for_role(config, role)
|
38
|
+
config.widget_types.find_all_by_role(role).each_with_object({}) do |widget_type, result|
|
39
39
|
result[I18n.t(widget_type.translation_key)] = widget_type.name
|
40
40
|
end
|
41
41
|
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# @api private
|
3
|
+
module FeatureTarget
|
4
|
+
STATE_MAPPING = {
|
5
|
+
true => 'enabled',
|
6
|
+
false => 'disabled'
|
7
|
+
}
|
8
|
+
|
9
|
+
extend ActiveSupport::Concern
|
10
|
+
|
11
|
+
included do
|
12
|
+
serialize :features_configuration, JSON
|
13
|
+
end
|
14
|
+
|
15
|
+
def enabled_feature_names
|
16
|
+
Pageflow.config.features.select do |feature|
|
17
|
+
feature_state(feature.name) == true
|
18
|
+
end.map(&:name)
|
19
|
+
end
|
20
|
+
|
21
|
+
def feature_state(name)
|
22
|
+
features_configuration[name]
|
23
|
+
end
|
24
|
+
|
25
|
+
def feature_states=(states)
|
26
|
+
boolean_states = states.each_with_object({}) do |(key, value), result|
|
27
|
+
result[key] = (value == true || value == STATE_MAPPING[true])
|
28
|
+
end
|
29
|
+
|
30
|
+
self.features_configuration = features_configuration.merge(boolean_states)
|
31
|
+
end
|
32
|
+
|
33
|
+
def features_configuration
|
34
|
+
super || {}
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|