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
@@ -0,0 +1,14 @@
|
|
1
|
+
class AddFirstPublishedAtToEntries < ActiveRecord::Migration
|
2
|
+
def change
|
3
|
+
add_column :pageflow_entries, :first_published_at, :datetime
|
4
|
+
|
5
|
+
execute(<<-SQL)
|
6
|
+
UPDATE pageflow_entries SET first_published_at = (
|
7
|
+
SELECT MIN(published_at)
|
8
|
+
FROM pageflow_revisions
|
9
|
+
WHERE pageflow_revisions.entry_id = pageflow_entries.id
|
10
|
+
LIMIT 1
|
11
|
+
);
|
12
|
+
SQL
|
13
|
+
end
|
14
|
+
end
|
@@ -8,13 +8,12 @@ Pageflow.configure do |config|
|
|
8
8
|
|
9
9
|
# Page types available in the editor. Add futher page types from
|
10
10
|
# page type engines below.
|
11
|
-
config.
|
12
|
-
config.
|
13
|
-
config.
|
14
|
-
config.
|
15
|
-
config.
|
16
|
-
config.
|
17
|
-
# config.register_page_type(Pageflow::Rainbow::PageType.new)
|
11
|
+
config.page_types.register(Pageflow::BuiltInPageType.background_image)
|
12
|
+
config.page_types.register(Pageflow::BuiltInPageType.background_video)
|
13
|
+
config.page_types.register(Pageflow::BuiltInPageType.video)
|
14
|
+
config.page_types.register(Pageflow::BuiltInPageType.audio)
|
15
|
+
config.page_types.register(Pageflow::BuiltInPageType.audio_loop)
|
16
|
+
# config.page_types.register(Pageflow::Rainbow::PageType.new)
|
18
17
|
|
19
18
|
# Add custom themes by invoking the pageflow:theme generator and
|
20
19
|
# registering the theme here.
|
@@ -35,6 +34,16 @@ Pageflow.configure do |config|
|
|
35
34
|
# pageflow_filesystem_root paperclip interpolation.
|
36
35
|
config.paperclip_filesystem_root = 'tmp/attachments/production'
|
37
36
|
|
37
|
+
# How to handle https requests for URLs which will have assets in the page.
|
38
|
+
# If you wish to serve all assets over http and prevent mixed-content warnings,
|
39
|
+
# you can force a redirect to http. The inverse is also true: you can force
|
40
|
+
# a redirect to https for all http requests.
|
41
|
+
#
|
42
|
+
# config.public_https_mode = :prevent (default) # => redirects https to http
|
43
|
+
# config.public_https_mode = :enforce # => redirects http to https
|
44
|
+
# config.public_https_mode = :ignore # => does nothing
|
45
|
+
config.public_https_mode = :ignore
|
46
|
+
|
38
47
|
# Rewrite the below section to use your favorite configuration
|
39
48
|
# method: ENV variables, secrets.yml, custom yml files. If you use
|
40
49
|
# environment variables consider the dotenv gem to configure your
|
@@ -48,23 +57,23 @@ Pageflow.configure do |config|
|
|
48
57
|
# calls are allowed.
|
49
58
|
config.paperclip_s3_default_options.merge!(
|
50
59
|
:s3_credentials => {
|
51
|
-
:bucket => 'com-example-pageflow-development',
|
52
|
-
:access_key_id => 'xxx',
|
53
|
-
:secret_access_key => 'xxx',
|
54
|
-
:s3_host_name => 's3-eu-west-1.amazonaws.com'
|
60
|
+
:bucket => ENV.fetch('S3_BUCKET', 'com-example-pageflow-development'),
|
61
|
+
:access_key_id => ENV.fetch('S3_ACCESS_KEY', 'xxx'),
|
62
|
+
:secret_access_key => ENV.fetch('S3_SECRET_KEY', 'xxx'),
|
63
|
+
:s3_host_name => ENV.fetch('S3_HOST_NAME', 's3-eu-west-1.amazonaws.com')
|
55
64
|
},
|
56
|
-
:s3_host_alias => 'com-example-pageflow.s3-website-eu-west-1.amazonaws.com',
|
57
|
-
:s3_protocol => 'http'
|
65
|
+
:s3_host_alias => ENV.fetch('S3_HOST_ALIAS', 'com-example-pageflow.s3-website-eu-west-1.amazonaws.com'),
|
66
|
+
:s3_protocol => ENV.fetch('S3_PROTOCOL', 'http')
|
58
67
|
)
|
59
68
|
|
60
69
|
# Default options for paperclip attachments which are supposed to
|
61
70
|
# use filesystem storage. All options allowed in paperclip has_attached_file
|
62
71
|
# calls are allowed.
|
63
72
|
config.zencoder_options.merge!(
|
64
|
-
:api_key => 'xxx',
|
65
|
-
:output_bucket => 'com-example-pageflow-out',
|
66
|
-
:s3_host_alias => 'com-example-pageflow-out.s3-website-eu-west-1.amazonaws.com',
|
67
|
-
:s3_protocol => 'http',
|
73
|
+
:api_key => ENV.fetch('ZENCODER_API_KEY', 'xxx'),
|
74
|
+
:output_bucket => ENV.fetch('S3_OUTPUT_BUCKET', 'com-example-pageflow-out'),
|
75
|
+
:s3_host_alias => ENV.fetch('S3_OUTPUT_HOST_ALIAS', 'com-example-pageflow-out.s3-website-eu-west-1.amazonaws.com'),
|
76
|
+
:s3_protocol => ENV.fetch('S3_PROTOCOL','http'),
|
68
77
|
:attachments_version => 'v1'
|
69
78
|
)
|
70
79
|
end
|
@@ -13,9 +13,10 @@ module Pageflow
|
|
13
13
|
directory('images/pageflow/themes/default', themes_path('images', name))
|
14
14
|
|
15
15
|
template('stylesheets/pageflow/themes/default.css.scss', themes_path('stylesheets', "#{name}.css.scss")) do |content|
|
16
|
-
content.gsub!('$theme-name: "default";', %Q'$theme-name: "#{name}";')
|
17
16
|
content.gsub!('@import "./default/', %Q'@import "./#{name}/')
|
18
17
|
end
|
18
|
+
|
19
|
+
gsub_file themes_path('stylesheets', "#{name}/variables.css.scss"), '$theme-name: "default";', %Q'$theme-name: "#{name}";'
|
19
20
|
end
|
20
21
|
|
21
22
|
private
|
data/lib/pageflow.rb
CHANGED
@@ -1,52 +1,8 @@
|
|
1
1
|
require "pageflow/engine"
|
2
|
+
require "pageflow/global_config_api"
|
2
3
|
|
3
4
|
module Pageflow
|
4
|
-
|
5
|
-
unless @config
|
6
|
-
if options[:ignore_not_configured]
|
7
|
-
return Configuration.new
|
8
|
-
else
|
9
|
-
raise('Pageflow has not been configured yet')
|
10
|
-
end
|
11
|
-
end
|
12
|
-
@config
|
13
|
-
end
|
14
|
-
|
15
|
-
def self.configure(&block)
|
16
|
-
@configure_blocks ||= []
|
17
|
-
@configure_blocks << block
|
18
|
-
end
|
19
|
-
|
20
|
-
def self.configured?
|
21
|
-
!!@config
|
22
|
-
end
|
23
|
-
|
24
|
-
def self.configure!
|
25
|
-
return unless @finalized
|
26
|
-
|
27
|
-
config = Configuration.new
|
28
|
-
@configure_blocks ||= []
|
29
|
-
|
30
|
-
@configure_blocks.each do |block|
|
31
|
-
block.call(config)
|
32
|
-
end
|
33
|
-
|
34
|
-
@after_configure_blocks.each do |block|
|
35
|
-
block.call(config)
|
36
|
-
end
|
37
|
-
|
38
|
-
@config = config
|
39
|
-
end
|
40
|
-
|
41
|
-
def self.finalize!
|
42
|
-
@finalized = true
|
43
|
-
configure!
|
44
|
-
end
|
45
|
-
|
46
|
-
def self.after_configure(&block)
|
47
|
-
@after_configure_blocks ||= []
|
48
|
-
@after_configure_blocks << block
|
49
|
-
end
|
5
|
+
extend GlobalConfigApi
|
50
6
|
|
51
7
|
def self.routes(router)
|
52
8
|
router.instance_eval do
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Pageflow
|
2
|
+
module Admin
|
3
|
+
# @api private
|
4
|
+
class FormInput
|
5
|
+
attr_reader :attribute_name
|
6
|
+
|
7
|
+
def initialize(attribute_name, options)
|
8
|
+
@attribute_name = attribute_name
|
9
|
+
@options = options
|
10
|
+
end
|
11
|
+
|
12
|
+
def build(form_builder)
|
13
|
+
options = @options.respond_to?(:call) ? @options.call : @options
|
14
|
+
form_builder.input(attribute_name, options)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Pageflow
|
2
|
+
module Admin
|
3
|
+
# A registry of additional inputs for admin forms.
|
4
|
+
#
|
5
|
+
# @since 0.9
|
6
|
+
class FormInputs
|
7
|
+
def initialize
|
8
|
+
@resources = {}
|
9
|
+
end
|
10
|
+
|
11
|
+
# Register a proc which adds additional inputs to admin forms.
|
12
|
+
#
|
13
|
+
# @param resource_name [Symbol] A resource name like `:entry`,
|
14
|
+
# `:account` or `:theming`
|
15
|
+
# @param attribute_name [Symbol] The name of the additional
|
16
|
+
# attribute
|
17
|
+
# @param options [Hash] Formtastic options
|
18
|
+
def register(resource_name, attribute_name, options = {})
|
19
|
+
@resources[resource_name] ||= []
|
20
|
+
@resources[resource_name] << FormInput.new(attribute_name, options)
|
21
|
+
end
|
22
|
+
|
23
|
+
# @api private
|
24
|
+
def build(resource_name, form_builder)
|
25
|
+
find_all_for(resource_name).each do |form_input|
|
26
|
+
form_input.build(form_builder)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
# @api private
|
31
|
+
def permitted_attributes_for(resource_name)
|
32
|
+
find_all_for(resource_name).map(&:attribute_name)
|
33
|
+
end
|
34
|
+
|
35
|
+
# @api private
|
36
|
+
def find_all_for(resource_name)
|
37
|
+
@resources.fetch(resource_name, [])
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -62,10 +62,6 @@ module Pageflow
|
|
62
62
|
thumbnail_candidates: video_thumbnail_candidates)
|
63
63
|
end
|
64
64
|
|
65
|
-
def self.internal_links
|
66
|
-
new('internal_links', file_type_models: ['Pageflow::ImageFile'])
|
67
|
-
end
|
68
|
-
|
69
65
|
def self.video
|
70
66
|
new('video',
|
71
67
|
file_type_models: ['Pageflow::ImageFile', 'Pageflow::VideoFile'],
|
@@ -33,6 +33,22 @@ module Pageflow
|
|
33
33
|
# new users
|
34
34
|
attr_accessor :mailer_sender
|
35
35
|
|
36
|
+
# Extend the configuration based on feature flags set for accounts
|
37
|
+
# or entries.
|
38
|
+
#
|
39
|
+
# @example
|
40
|
+
#
|
41
|
+
# Make a page type only available if a feature flag is set on the
|
42
|
+
# entry or its account
|
43
|
+
#
|
44
|
+
# config.features.register('some_special_page_type' do |config
|
45
|
+
# config.page_types.register(Pageflow::SomeSpecial.page_type)
|
46
|
+
# end
|
47
|
+
#
|
48
|
+
# @since 0.9
|
49
|
+
# @returns [Features}
|
50
|
+
attr_reader :features
|
51
|
+
|
36
52
|
# Subscribe to hooks in order to be notified of events. Any object
|
37
53
|
# with a call method can be a subscriber
|
38
54
|
#
|
@@ -60,6 +76,11 @@ module Pageflow
|
|
60
76
|
# @return [Themes]
|
61
77
|
attr_reader :themes
|
62
78
|
|
79
|
+
# Register new types of pages.
|
80
|
+
# @return [PageTypes]
|
81
|
+
# @since 0.9
|
82
|
+
attr_reader :page_types
|
83
|
+
|
63
84
|
# List of {FileType} instances provided by page types.
|
64
85
|
# @return [FileTypes]
|
65
86
|
attr_reader :file_types
|
@@ -159,14 +180,39 @@ module Pageflow
|
|
159
180
|
#
|
160
181
|
# config.admin_resource_tabs.register(:entry, Admin::CustomTab)
|
161
182
|
#
|
162
|
-
# @return [Admin::
|
183
|
+
# @return [Admin::Tabs]
|
163
184
|
attr_reader :admin_resource_tabs
|
164
185
|
|
186
|
+
# Add custom form fields to admin forms.
|
187
|
+
#
|
188
|
+
# @example
|
189
|
+
#
|
190
|
+
# config.admin_form_inputs.register(:entry) do |form|
|
191
|
+
# form.input(:custom_field)
|
192
|
+
# end
|
193
|
+
#
|
194
|
+
# @since 0.9
|
195
|
+
# @return [Admin::FormInputs]
|
196
|
+
attr_reader :admin_form_inputs
|
197
|
+
|
165
198
|
# Array of locales which can be chosen as interface language by a
|
166
199
|
# user or for an entry. Defaults to `I18n.available_locales`.
|
167
200
|
# @since 0.7
|
168
201
|
attr_accessor :available_locales
|
169
202
|
|
203
|
+
# How to handle https requests for URLs which will have assets in the page.
|
204
|
+
# If you wish to serve all assets over http and prevent mixed-content warnings,
|
205
|
+
# you can force a redirect to http. The inverse is also true: you can force
|
206
|
+
# a redirect to https for all http requests.
|
207
|
+
#
|
208
|
+
# @example
|
209
|
+
#
|
210
|
+
# config.public_https_mode = :prevent (default) # => redirects https to http
|
211
|
+
# config.public_https_mode = :enforce # => redirects http to https
|
212
|
+
# config.public_https_mode = :ignore # => does nothing
|
213
|
+
# @since 0.9
|
214
|
+
attr_accessor :public_https_mode
|
215
|
+
|
170
216
|
def initialize
|
171
217
|
@paperclip_filesystem_default_options = {validate_media_type: false}
|
172
218
|
@paperclip_s3_default_options = {validate_media_type: false}
|
@@ -175,9 +221,11 @@ module Pageflow
|
|
175
221
|
|
176
222
|
@mailer_sender = 'pageflow@example.com'
|
177
223
|
|
224
|
+
@features = Features.new
|
178
225
|
@hooks = Hooks.new
|
179
226
|
@quotas = Quotas.new
|
180
227
|
@themes = Themes.new
|
228
|
+
@page_types = PageTypes.new
|
181
229
|
@file_types = FileTypes.new(page_types)
|
182
230
|
@widget_types = WidgetTypes.new
|
183
231
|
@help_entries = HelpEntries.new
|
@@ -192,8 +240,11 @@ module Pageflow
|
|
192
240
|
@confirm_encoding_jobs = false
|
193
241
|
|
194
242
|
@admin_resource_tabs = Pageflow::Admin::Tabs.new
|
243
|
+
@admin_form_inputs = Pageflow::Admin::FormInputs.new
|
195
244
|
|
196
245
|
@available_locales = Engine.config.i18n.available_locales
|
246
|
+
|
247
|
+
@public_https_mode = :prevent
|
197
248
|
end
|
198
249
|
|
199
250
|
# Activate a plugin.
|
@@ -204,24 +255,10 @@ module Pageflow
|
|
204
255
|
plugin.configure(self)
|
205
256
|
end
|
206
257
|
|
207
|
-
#
|
258
|
+
# @deprecated Use `config.page_types.register` instead.
|
208
259
|
def register_page_type(page_type)
|
209
|
-
page_types
|
210
|
-
|
211
|
-
@page_types_by_name ||= {}
|
212
|
-
@page_types_by_name[page_type.name] = page_type
|
213
|
-
end
|
214
|
-
|
215
|
-
def lookup_page_type(name)
|
216
|
-
@page_types_by_name.fetch(name)
|
217
|
-
end
|
218
|
-
|
219
|
-
def page_types
|
220
|
-
@page_types ||= []
|
221
|
-
end
|
222
|
-
|
223
|
-
def page_type_names
|
224
|
-
page_types.map(&:name)
|
260
|
+
ActiveSupport::Deprecation.warn('Pageflow::Configuration#register_page_type is deprecated. Use config.page_types.register instead.', caller)
|
261
|
+
page_types.register(page_type)
|
225
262
|
end
|
226
263
|
|
227
264
|
def revision_components
|
@@ -233,5 +270,24 @@ module Pageflow
|
|
233
270
|
options = public_entry_url_options
|
234
271
|
options.respond_to?(:call) ? options.call(theming) : options
|
235
272
|
end
|
273
|
+
|
274
|
+
# @api private
|
275
|
+
def enable_features(names)
|
276
|
+
features.enable(names, FeatureLevelConfiguration.new(self))
|
277
|
+
end
|
278
|
+
|
279
|
+
# @api private
|
280
|
+
def enable_all_features
|
281
|
+
features.enable_all(FeatureLevelConfiguration.new(self))
|
282
|
+
end
|
283
|
+
|
284
|
+
# Restricts the configuration interface to those parts which can
|
285
|
+
# be used from inside features.
|
286
|
+
class FeatureLevelConfiguration < Struct.new(:config)
|
287
|
+
delegate :page_types, to: :config
|
288
|
+
delegate :widget_types, to: :config
|
289
|
+
delegate :help_entries, to: :config
|
290
|
+
delegate :admin_form_inputs, to: :config
|
291
|
+
end
|
236
292
|
end
|
237
293
|
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# Represents a set of configuration changes that can be performed
|
3
|
+
# based on account or entry feature flags.
|
4
|
+
#
|
5
|
+
# @since 0.9
|
6
|
+
class Feature
|
7
|
+
# Unique identifyer of feature.
|
8
|
+
#
|
9
|
+
# @return [String]
|
10
|
+
attr_reader :name
|
11
|
+
|
12
|
+
# Create a block based feature.
|
13
|
+
#
|
14
|
+
# @param name [String] Unique identifyer of feature.
|
15
|
+
# @yieldparam config [Configuration] The configuration object to manipulate.
|
16
|
+
def initialize(name, &block)
|
17
|
+
@name = name
|
18
|
+
@block = block
|
19
|
+
end
|
20
|
+
|
21
|
+
# Perform any configuration change that is needed to activate this
|
22
|
+
# feature.
|
23
|
+
#
|
24
|
+
# @param config [Configuration]
|
25
|
+
def enable(config)
|
26
|
+
@block.call(config) if @block
|
27
|
+
end
|
28
|
+
|
29
|
+
def name_translation_key
|
30
|
+
"pageflow.#{name}.feature_name"
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,68 @@
|
|
1
|
+
module Pageflow
|
2
|
+
# A registry of [Feature} objects.
|
3
|
+
#
|
4
|
+
# @since 0.9
|
5
|
+
class Features
|
6
|
+
include Enumerable
|
7
|
+
|
8
|
+
# @api private
|
9
|
+
def initialize
|
10
|
+
@features = {}
|
11
|
+
@enabled_features = []
|
12
|
+
end
|
13
|
+
|
14
|
+
# Register a feature that can be enabled for accounts of
|
15
|
+
# entries. If the first parameter is a string, a block can be
|
16
|
+
# passed to provide the enable method. If only a string is passed,
|
17
|
+
# enabling the feature is no-op.
|
18
|
+
#
|
19
|
+
# @overload register(feature)
|
20
|
+
# @param feature [Feature]
|
21
|
+
#
|
22
|
+
# @overload register(feature)
|
23
|
+
# @param feature [String]
|
24
|
+
# @yieldparam config [Configuration] Use the block as enable
|
25
|
+
# method.
|
26
|
+
#
|
27
|
+
# @overload register(feature)
|
28
|
+
# @param feature [String]
|
29
|
+
def register(feature, &block)
|
30
|
+
if feature.is_a?(String)
|
31
|
+
return register(Feature.new(feature, &block))
|
32
|
+
end
|
33
|
+
|
34
|
+
if @features.key?(feature.name)
|
35
|
+
raise(ArgumentError, "Feature #{feature.name} is already registered.")
|
36
|
+
end
|
37
|
+
|
38
|
+
@features[feature.name] = feature
|
39
|
+
end
|
40
|
+
|
41
|
+
# Check if a feature has been enabled.
|
42
|
+
#
|
43
|
+
# @return [Boolean]
|
44
|
+
def enabled?(name)
|
45
|
+
@enabled_features.include?(name)
|
46
|
+
end
|
47
|
+
|
48
|
+
# @api private
|
49
|
+
def enable(names, config)
|
50
|
+
@enabled_features = names
|
51
|
+
|
52
|
+
names.each do |name|
|
53
|
+
raise(ArgumentError, "Cannot enable unknown feature #{name}.") unless @features.key?(name)
|
54
|
+
|
55
|
+
@features[name].enable(config)
|
56
|
+
end
|
57
|
+
end
|
58
|
+
|
59
|
+
# @api private
|
60
|
+
def enable_all(config)
|
61
|
+
enable(@features.keys, config)
|
62
|
+
end
|
63
|
+
|
64
|
+
def each(&block)
|
65
|
+
@features.values.each(&block)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|