pageflow 0.8.2 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +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
|
@@ -1,5 +1,10 @@
|
|
|
1
1
|
module Pageflow
|
|
2
2
|
class Entry < ActiveRecord::Base
|
|
3
|
+
class PasswordMissingError < StandardError
|
|
4
|
+
end
|
|
5
|
+
|
|
6
|
+
include FeatureTarget
|
|
7
|
+
|
|
3
8
|
extend FriendlyId
|
|
4
9
|
friendly_id :slug_candidates, :use => [:finders, :slugged]
|
|
5
10
|
|
|
@@ -24,13 +29,17 @@ module Pageflow
|
|
|
24
29
|
|
|
25
30
|
has_one :edit_lock, :dependent => :destroy
|
|
26
31
|
|
|
32
|
+
has_secure_password validations: false
|
|
33
|
+
|
|
27
34
|
validates :account, :theming, :presence => true
|
|
28
35
|
validate :folder_belongs_to_same_account
|
|
29
36
|
|
|
30
37
|
scope :published, -> { joins(:published_revision) }
|
|
31
38
|
scope :editing, -> { joins(:edit_lock).merge(Pageflow::EditLock.active) }
|
|
32
39
|
|
|
33
|
-
|
|
40
|
+
attr_accessor :skip_draft_creation
|
|
41
|
+
|
|
42
|
+
after_create unless: :skip_draft_creation do
|
|
34
43
|
create_draft!(home_button_enabled: theming.home_button_enabled_by_default)
|
|
35
44
|
theming.widgets.copy_all_to(draft)
|
|
36
45
|
end
|
|
@@ -39,15 +48,25 @@ module Pageflow
|
|
|
39
48
|
super || EditLock::Null.new(self)
|
|
40
49
|
end
|
|
41
50
|
|
|
42
|
-
def
|
|
43
|
-
|
|
44
|
-
|
|
51
|
+
def feature_state(name)
|
|
52
|
+
super(name) || account.feature_state(name)
|
|
53
|
+
end
|
|
45
54
|
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
55
|
+
def publish(options = {})
|
|
56
|
+
ActiveRecord::Base.transaction do
|
|
57
|
+
self.first_published_at ||= Time.now
|
|
58
|
+
update_password!(options.slice(:password, :password_protected))
|
|
59
|
+
|
|
60
|
+
revisions.depublish_all
|
|
61
|
+
association(:published_revision).reset
|
|
62
|
+
|
|
63
|
+
draft.copy do |revision|
|
|
64
|
+
revision.creator = options[:creator]
|
|
65
|
+
revision.frozen_at = Time.now
|
|
66
|
+
revision.published_at = Time.now
|
|
67
|
+
revision.published_until = options[:published_until]
|
|
68
|
+
revision.password_protected = options[:password_protected]
|
|
69
|
+
end
|
|
51
70
|
end
|
|
52
71
|
end
|
|
53
72
|
|
|
@@ -68,9 +87,14 @@ module Pageflow
|
|
|
68
87
|
revision.frozen_at = nil
|
|
69
88
|
revision.published_at = nil
|
|
70
89
|
revision.published_until = nil
|
|
90
|
+
revision.password_protected = nil
|
|
71
91
|
end
|
|
72
92
|
end
|
|
73
93
|
|
|
94
|
+
def duplicate
|
|
95
|
+
EntryDuplicate.of(self).create!
|
|
96
|
+
end
|
|
97
|
+
|
|
74
98
|
def published?
|
|
75
99
|
published_revision.present?
|
|
76
100
|
end
|
|
@@ -92,5 +116,19 @@ module Pageflow
|
|
|
92
116
|
def folder_belongs_to_same_account
|
|
93
117
|
errors.add(:folder, :must_be_same_account) if folder.present? && folder.account_id != account_id
|
|
94
118
|
end
|
|
119
|
+
|
|
120
|
+
def update_password!(options)
|
|
121
|
+
if options[:password].present?
|
|
122
|
+
self.password = options[:password]
|
|
123
|
+
end
|
|
124
|
+
|
|
125
|
+
if options[:password_protected]
|
|
126
|
+
raise PasswordMissingError if password_digest.blank?
|
|
127
|
+
else
|
|
128
|
+
self.password_digest = nil
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
save!
|
|
132
|
+
end
|
|
95
133
|
end
|
|
96
134
|
end
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
module Pageflow
|
|
2
|
+
class EntryDuplicate < Struct.new(:original_entry)
|
|
3
|
+
def create!
|
|
4
|
+
create_entry
|
|
5
|
+
|
|
6
|
+
copy_draft
|
|
7
|
+
copy_memberships
|
|
8
|
+
|
|
9
|
+
new_entry
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
def self.of(entry)
|
|
13
|
+
new(entry)
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
private
|
|
17
|
+
|
|
18
|
+
attr_reader :new_entry
|
|
19
|
+
|
|
20
|
+
def create_entry
|
|
21
|
+
@new_entry = Entry.create!(new_attributes)
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
def copy_draft
|
|
25
|
+
original_entry.draft.copy do |revision|
|
|
26
|
+
revision.entry = new_entry
|
|
27
|
+
end
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def copy_memberships
|
|
31
|
+
original_entry.users.each do |member|
|
|
32
|
+
new_entry.memberships.create(user: member)
|
|
33
|
+
end
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
def new_attributes
|
|
37
|
+
{
|
|
38
|
+
title: new_title,
|
|
39
|
+
account: original_entry.account,
|
|
40
|
+
theming: original_entry.theming,
|
|
41
|
+
features_configuration: original_entry.features_configuration,
|
|
42
|
+
|
|
43
|
+
skip_draft_creation: true
|
|
44
|
+
}
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def new_title
|
|
48
|
+
I18n.t('pageflow.entry.duplicated_title', title: original_entry.title)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
51
|
+
end
|
|
@@ -3,19 +3,33 @@ module Pageflow
|
|
|
3
3
|
include ImageFileStateMachine
|
|
4
4
|
include UploadedFile
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
6
|
+
STYLES = lambda do |attachment|
|
|
7
|
+
panorama_format = File.extname(attachment.original_filename) == '.png' ? :PNG : :JPG
|
|
8
|
+
|
|
9
|
+
Pageflow.config.thumbnail_styles
|
|
10
|
+
.merge(print: ['300x300>', :JPG],
|
|
11
|
+
medium: ['1024x1024>', :JPG],
|
|
12
|
+
large: ['1920x1920>', :JPG],
|
|
13
|
+
panorama_medium: ['1024x1024^', panorama_format],
|
|
14
|
+
panorama_large: ['1920x1080^', panorama_format])
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
CONVERT_OPTIONS = {
|
|
18
|
+
print: '-quality 10 -interlace Plane',
|
|
19
|
+
medium: '-quality 70 -interlace Plane',
|
|
20
|
+
large: '-quality 70 -interlace Plane',
|
|
21
|
+
panorama_medium: '-quality 70 -interlace Plane',
|
|
22
|
+
panorama_large: '-quality 70 -interlace Plane'
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
has_attached_file(:unprocessed_attachment,
|
|
26
|
+
Pageflow.config.paperclip_s3_default_options)
|
|
27
|
+
|
|
28
|
+
has_attached_file(:processed_attachment,
|
|
29
|
+
Pageflow.config.paperclip_s3_default_options
|
|
30
|
+
.merge(default_url: ':pageflow_placeholder',
|
|
31
|
+
styles: STYLES,
|
|
32
|
+
convert_options: CONVERT_OPTIONS))
|
|
19
33
|
|
|
20
34
|
do_not_validate_attachment_file_type(:unprocessed_attachment)
|
|
21
35
|
do_not_validate_attachment_file_type(:processed_attachment)
|
|
@@ -40,6 +54,12 @@ module Pageflow
|
|
|
40
54
|
end
|
|
41
55
|
end
|
|
42
56
|
|
|
57
|
+
def panorama_url
|
|
58
|
+
if processed_attachment.present?
|
|
59
|
+
attachment.url(:panorama_large)
|
|
60
|
+
end
|
|
61
|
+
end
|
|
62
|
+
|
|
43
63
|
private
|
|
44
64
|
|
|
45
65
|
def save_image_dimensions
|
data/app/models/pageflow/page.rb
CHANGED
|
@@ -4,7 +4,7 @@ module Pageflow
|
|
|
4
4
|
|
|
5
5
|
attr_accessor :is_first
|
|
6
6
|
|
|
7
|
-
validates_inclusion_of :template, :in => ->(_) { Pageflow.config.
|
|
7
|
+
validates_inclusion_of :template, :in => ->(_) { Pageflow.config.page_types.names }
|
|
8
8
|
|
|
9
9
|
serialize :configuration, JSON
|
|
10
10
|
|
|
@@ -25,7 +25,7 @@ module Pageflow
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def page_type
|
|
28
|
-
Pageflow.config.
|
|
28
|
+
Pageflow.config.page_types.find_by_name!(template)
|
|
29
29
|
end
|
|
30
30
|
|
|
31
31
|
def configuration
|
|
@@ -6,7 +6,12 @@ module Pageflow
|
|
|
6
6
|
attr_reader :entry, :revision
|
|
7
7
|
attr_accessor :share_target
|
|
8
8
|
|
|
9
|
-
delegate(:id,
|
|
9
|
+
delegate(:id,
|
|
10
|
+
:account, :theming,
|
|
11
|
+
:enabled_feature_names,
|
|
12
|
+
:to_model, :to_key, :persisted?,
|
|
13
|
+
:authenticate,
|
|
14
|
+
:to => :entry)
|
|
10
15
|
|
|
11
16
|
delegate(:widgets, :chapters, :pages, :files,
|
|
12
17
|
:image_files, :video_files, :audio_files,
|
|
@@ -15,6 +20,7 @@ module Pageflow
|
|
|
15
20
|
:emphasize_new_pages,
|
|
16
21
|
:share_image_id, :share_image_x, :share_image_y,
|
|
17
22
|
:locale,
|
|
23
|
+
:password_protected?,
|
|
18
24
|
:to => :revision)
|
|
19
25
|
|
|
20
26
|
def initialize(entry, revision = nil)
|
|
@@ -1,7 +1,13 @@
|
|
|
1
1
|
<%= semantic_form_for [:admin, resource] do |f| %>
|
|
2
|
+
<% account_config = Pageflow.config_for(f.object) %>
|
|
3
|
+
|
|
2
4
|
<%= f.inputs do %>
|
|
3
5
|
<%= f.input :name %>
|
|
4
6
|
<%= f.input :default_file_rights %>
|
|
7
|
+
|
|
8
|
+
<% account_config.admin_form_inputs.find_all_for(:account).each do |form_input| %>
|
|
9
|
+
<%= form_input.build(f) %>
|
|
10
|
+
<% end %>
|
|
5
11
|
<% end %>
|
|
6
12
|
|
|
7
13
|
<%= f.semantic_fields_for :default_theming do |theming| %>
|
|
@@ -18,13 +24,17 @@
|
|
|
18
24
|
<%= theming.input :copyright_link_label %>
|
|
19
25
|
<%= theming.input :copyright_link_url %>
|
|
20
26
|
|
|
27
|
+
<% account_config.admin_form_inputs.find_all_for(:theming).each do |form_input| %>
|
|
28
|
+
<%= form_input.build(theming) %>
|
|
29
|
+
<% end %>
|
|
30
|
+
|
|
21
31
|
<% theming.object.widgets.resolve(:include_placeholders => true).each do |widget| %>
|
|
22
32
|
<%= f.semantic_fields_for(widget) do |w| %>
|
|
23
33
|
<%= w.input(:type_name,
|
|
24
34
|
:label => t(widget.role, :scope => 'pageflow.widgets.roles'),
|
|
25
35
|
:input_html => {:name => "widgets[#{widget.role}]"},
|
|
26
36
|
:include_blank => t('pageflow.widgets.none'),
|
|
27
|
-
:collection => widget_types_collection_for_role(widget.role)) %>
|
|
37
|
+
:collection => widget_types_collection_for_role(account_config, widget.role)) %>
|
|
28
38
|
<% end %>
|
|
29
39
|
<% end %>
|
|
30
40
|
<% end %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<%= semantic_form_for [:admin, resource], html: {class: 'features'} do |f| %>
|
|
2
|
+
<%= hidden_field_tag('tab', params[:tab]) %>
|
|
3
|
+
|
|
4
|
+
<%= f.inputs do %>
|
|
5
|
+
<% Pageflow.config.features.each do |feature| %>
|
|
6
|
+
<li>
|
|
7
|
+
<%= label_tag(feature_state_input_name(resource, feature.name),
|
|
8
|
+
t(feature.name_translation_key)) %>
|
|
9
|
+
<%= feature_state_select_tag(resource, feature.name) %>
|
|
10
|
+
</li>
|
|
11
|
+
<% end %>
|
|
12
|
+
<% end %>
|
|
13
|
+
<%= f.actions do %>
|
|
14
|
+
<%= f.action(:submit) %>
|
|
15
|
+
<% end %>
|
|
16
|
+
<% end %>
|
|
@@ -32,6 +32,10 @@ module Pageflow
|
|
|
32
32
|
column :created_with do |revision|
|
|
33
33
|
span(I18n.t(revision.created_with, :scope => 'pageflow.admin.entries.revision_created_with'),
|
|
34
34
|
:title => I18n.t(revision.created_with, :scope => 'pageflow.admin.entries.revision_created_with_hint'))
|
|
35
|
+
|
|
36
|
+
if revision.password_protected?
|
|
37
|
+
span('', :class => 'password_protected', :title => t('pageflow.admin.entries.password_protected'))
|
|
38
|
+
end
|
|
35
39
|
end
|
|
36
40
|
column do |revision|
|
|
37
41
|
text_node(link_to(t('pageflow.admin.entries.show'), pageflow.revision_path(revision), :class => 'show'))
|
|
@@ -17,9 +17,9 @@
|
|
|
17
17
|
|
|
18
18
|
<%= render 'layouts/pageflow/ie_include_tags' %>
|
|
19
19
|
</head>
|
|
20
|
-
<%= content_tag :body, :class => [@body_class, '
|
|
20
|
+
<%= content_tag :body, :class => [@body_class, 'load_all_images has_no_mobile_platform non_js'].compact.flatten.join(' ') do %>
|
|
21
21
|
<script>
|
|
22
|
-
jQuery('body').removeClass('
|
|
22
|
+
jQuery('body').removeClass('load_all_images');
|
|
23
23
|
jQuery("body").removeClass('non_js').addClass('js');
|
|
24
24
|
</script>
|
|
25
25
|
<%= yield %>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
json.(account, :name)
|
|
@@ -1,9 +1,10 @@
|
|
|
1
|
-
json.(entry, :id, :published_until, :slug)
|
|
1
|
+
json.(entry, :id, :published_until, :slug, :enabled_feature_names)
|
|
2
2
|
|
|
3
3
|
json.pretty_url pretty_entry_url(entry)
|
|
4
4
|
|
|
5
5
|
json.default_file_rights entry.account.default_file_rights
|
|
6
6
|
json.published(entry.published?)
|
|
7
|
+
json.password_protected(entry.password_digest.present?)
|
|
7
8
|
|
|
8
9
|
json.configuration do
|
|
9
10
|
json.(entry, :title, :summary, :credits, :manual_start, :emphasize_chapter_beginning, :emphasize_new_pages, :share_image_id, :share_image_x, :share_image_y, :locale)
|
|
@@ -8,7 +8,8 @@
|
|
|
8
8
|
|
|
9
9
|
"files": <%= files_json_seeds(@entry) %>,
|
|
10
10
|
|
|
11
|
+
"account": <%= render_json_seed(@entry.account) %>,
|
|
11
12
|
"theming": <%= render_json_seed(@entry.theming) %>,
|
|
12
|
-
"widget_types": <%= widget_types_json_seeds %>,
|
|
13
|
-
"page_types": <%= page_type_json_seeds %>
|
|
13
|
+
"widget_types": <%= widget_types_json_seeds(@entry_config) %>,
|
|
14
|
+
"page_types": <%= page_type_json_seeds(@entry_config) %>
|
|
14
15
|
}
|
|
@@ -5,6 +5,7 @@ end
|
|
|
5
5
|
json.entry do
|
|
6
6
|
json.(@entry_publication.entry, :published_until)
|
|
7
7
|
json.published(@entry_publication.entry.published?)
|
|
8
|
+
json.password_protected(@entry_publication.entry.password_digest.present?)
|
|
8
9
|
end
|
|
9
10
|
json.exhausted_html(render_html_partial('pageflow/editor/quotas/published_entries_exhausted',
|
|
10
11
|
entry: @entry_publication.entry,
|
|
@@ -1,2 +1,6 @@
|
|
|
1
1
|
json.pretty_url pretty_theming_url(theming)
|
|
2
2
|
json.home_button theming.theme.has_home_button?
|
|
3
|
+
json.page_change_by_scrolling theming.theme.page_change_by_scrolling?
|
|
4
|
+
json.hide_text_on_swipe theming.theme.hide_text_on_swipe?
|
|
5
|
+
json.emphasized_pages theming.theme.supports_emphasized_pages?
|
|
6
|
+
json.scroll_indicator_modes theming.theme.supports_scroll_indicator_modes?
|