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,23 @@
|
|
1
|
+
pageflow.i18nUtils = {
|
2
|
+
findTranslation: function(keys, options) {
|
3
|
+
options = options || {};
|
4
|
+
|
5
|
+
return _.chain(keys).reverse().reduce(function(result, key) {
|
6
|
+
return I18n.t(key, {defaultValue: result});
|
7
|
+
}, options.defaultValue).value();
|
8
|
+
},
|
9
|
+
|
10
|
+
findKeyWithTranslation: function(keys) {
|
11
|
+
var missing = '_not_translated';
|
12
|
+
|
13
|
+
return _(keys).detect(function(key) {
|
14
|
+
return I18n.t(key, {defaultValue: missing}) !== missing;
|
15
|
+
}) || _.first(keys);
|
16
|
+
},
|
17
|
+
|
18
|
+
translationKeysWithSuffix: function(keys, suffix) {
|
19
|
+
return _.chain(keys).map(function(key) {
|
20
|
+
return [key + '_' + suffix, key];
|
21
|
+
}).flatten().value();
|
22
|
+
}
|
23
|
+
};
|
@@ -16,6 +16,7 @@ pageflow.CollectionView = Backbone.Marionette.View.extend({
|
|
16
16
|
});
|
17
17
|
this.listenTo(this.collection, 'sync', function() {
|
18
18
|
this.loading = false;
|
19
|
+
this.togglePlaceHolder();
|
19
20
|
});
|
20
21
|
}
|
21
22
|
},
|
@@ -109,13 +110,16 @@ pageflow.CollectionView = Backbone.Marionette.View.extend({
|
|
109
110
|
},
|
110
111
|
|
111
112
|
togglePlaceHolder: function() {
|
112
|
-
var
|
113
|
+
var lastPlaceholderConstructor = this.placeHolderConstructor;
|
114
|
+
this.placeHolderConstructor = this.getPlaceHolderConstructor();
|
113
115
|
|
114
|
-
if (this.itemViews.length || !placeHolderConstructor) {
|
116
|
+
if (this.itemViews.length || !this.placeHolderConstructor) {
|
115
117
|
this.closePlaceHolderView();
|
116
118
|
}
|
117
|
-
else if(!this.placeHolderView) {
|
118
|
-
this.
|
119
|
+
else if(!this.placeHolderView || lastPlaceholderConstructor !== this.placeHolderConstructor) {
|
120
|
+
this.closePlaceHolderView();
|
121
|
+
|
122
|
+
this.placeHolderView = new this.placeHolderConstructor();
|
119
123
|
this.$el.append(this.placeHolderView.render().el);
|
120
124
|
}
|
121
125
|
},
|
@@ -8,7 +8,8 @@ pageflow.ConfigurationEditorTabView = Backbone.Marionette.View.extend({
|
|
8
8
|
input: function(propertyName, view, options) {
|
9
9
|
this.view(view, _.extend({
|
10
10
|
placeholderModel: this.options.placeholderModel,
|
11
|
-
propertyName: propertyName
|
11
|
+
propertyName: propertyName,
|
12
|
+
attributeTranslationKeyPrefixes: this.options.attributeTranslationKeyPrefixes
|
12
13
|
}, options || {}));
|
13
14
|
},
|
14
15
|
|
@@ -20,8 +21,8 @@ pageflow.ConfigurationEditorTabView = Backbone.Marionette.View.extend({
|
|
20
21
|
}, options || {})));
|
21
22
|
},
|
22
23
|
|
23
|
-
group: function(name) {
|
24
|
-
this.groups.apply(name, this);
|
24
|
+
group: function(name, options) {
|
25
|
+
this.groups.apply(name, this, options);
|
25
26
|
},
|
26
27
|
|
27
28
|
render: function() {
|
@@ -50,12 +51,12 @@ pageflow.ConfigurationEditorTabView.Groups = function() {
|
|
50
51
|
groups[name] = fn;
|
51
52
|
};
|
52
53
|
|
53
|
-
this.apply = function(name, context) {
|
54
|
+
this.apply = function(name, context, options) {
|
54
55
|
if (!(name in groups)) {
|
55
56
|
throw 'Undefined group named "' + name + '".';
|
56
57
|
}
|
57
58
|
|
58
|
-
groups[name].call(context);
|
59
|
+
groups[name].call(context, options || {});
|
59
60
|
};
|
60
61
|
};
|
61
62
|
|
@@ -16,7 +16,8 @@ pageflow.ConfigurationEditorView = Backbone.Marionette.View.extend({
|
|
16
16
|
var tabView = new pageflow.ConfigurationEditorTabView({
|
17
17
|
model: this.model,
|
18
18
|
placeholderModel: this.options.placeholderModel,
|
19
|
-
tab: name
|
19
|
+
tab: name,
|
20
|
+
attributeTranslationKeyPrefixes: this.options.attributeTranslationKeyPrefixes
|
20
21
|
});
|
21
22
|
|
22
23
|
callback.call(tabView);
|
@@ -34,15 +35,5 @@ _.extend(pageflow.ConfigurationEditorView, {
|
|
34
35
|
repository: {},
|
35
36
|
register: function(pageTypeName, prototype) {
|
36
37
|
this.repository[pageTypeName] = pageflow.ConfigurationEditorView.extend(prototype);
|
37
|
-
},
|
38
|
-
|
39
|
-
create: function(pageTypeName, options) {
|
40
|
-
if (!this.repository.hasOwnProperty(pageTypeName)) {
|
41
|
-
throw 'No configuration editor registered for page type "' + pageTypeName + '".';
|
42
|
-
}
|
43
|
-
|
44
|
-
options.pageType = pageflow.Page.typesByName[pageTypeName];
|
45
|
-
|
46
|
-
return new this.repository[pageTypeName](options);
|
47
38
|
}
|
48
39
|
});
|
@@ -33,8 +33,13 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
|
|
33
33
|
|
34
34
|
if (!this.options.texts) {
|
35
35
|
if (!this.options.translationKeys) {
|
36
|
+
var translationKeyPrefix = this.options.translationKeyPrefix ||
|
37
|
+
pageflow.i18nUtils.findKeyWithTranslation(this.attributeTranslationKeys('values', {
|
38
|
+
fallbackPrefix: 'activerecord.values'
|
39
|
+
}));
|
40
|
+
|
36
41
|
this.options.translationKeys = _.map(this.options.values, function(value) {
|
37
|
-
return
|
42
|
+
return translationKeyPrefix + '.' + value;
|
38
43
|
}, this);
|
39
44
|
}
|
40
45
|
|
@@ -1,9 +1,135 @@
|
|
1
|
+
/**
|
2
|
+
* Mixin for input views handling common concerns like labels,
|
3
|
+
* inline help, visiblity and disabling.
|
4
|
+
*
|
5
|
+
* ## Label and Inline Help Translations
|
6
|
+
*
|
7
|
+
* By default `#labelText` and `#inlineHelpText` are defined through
|
8
|
+
* translations. If no `attributeTranslationKeyPrefixes` are given,
|
9
|
+
* translation keys for labels and inline help are constructed from
|
10
|
+
* the `i18nKey` of the model and the given `propertyName`
|
11
|
+
* option. Suppose the model's `i18nKey` is "page" and the
|
12
|
+
* `propertyName` option is "title". Then the key
|
13
|
+
*
|
14
|
+
* activerecord.attributes.page.title
|
15
|
+
*
|
16
|
+
* will be used for the label. And the key
|
17
|
+
*
|
18
|
+
* pageflow.ui.inline_help.page.title
|
19
|
+
*
|
20
|
+
* will be used for the inline help.
|
21
|
+
*
|
22
|
+
* ### Attribute Translation Key Prefixes
|
23
|
+
*
|
24
|
+
* The `attributeTranslationKeyPrefixes` option can be used to supply
|
25
|
+
* an array of scopes in which label and inline help translations
|
26
|
+
* shall be looked up based on the `propertyName` option.
|
27
|
+
*
|
28
|
+
* Suppose the array `['some.attributes', 'fallback.attributes']` is
|
29
|
+
* given as `attributeTranslationKeyPrefixes` option. Then, in the
|
30
|
+
* example above, the first existing translation key is used as label:
|
31
|
+
*
|
32
|
+
* some.attributes.title.label
|
33
|
+
* fallback.attributes.title.label
|
34
|
+
* activerecord.attributes.post.title
|
35
|
+
*
|
36
|
+
* Accordingly, for the inline help:
|
37
|
+
*
|
38
|
+
* some.attributes.title.inline_help
|
39
|
+
* fallback.attributes.title.inline_help
|
40
|
+
* pageflow.ui.inline_help.post.title
|
41
|
+
*
|
42
|
+
* This setup allows to keep all translation keys for an attribute
|
43
|
+
* to share a common prefix:
|
44
|
+
*
|
45
|
+
* some:
|
46
|
+
* attributes:
|
47
|
+
* title:
|
48
|
+
* label: "Label"
|
49
|
+
* inline_help: "..."
|
50
|
+
* inline_help_disabled: "..."
|
51
|
+
*
|
52
|
+
* ### Inline Help for Disabled Inputs
|
53
|
+
*
|
54
|
+
* For each inline help translation key, a separate key with an
|
55
|
+
* `"_disbaled"` suffix can be supplied, which provides a help string
|
56
|
+
* that shall be displayed when the input is disabled. More specific
|
57
|
+
* attribute translation key prefixes take precedence over suffixed
|
58
|
+
* keys:
|
59
|
+
*
|
60
|
+
* some.attributes.title.inline_help
|
61
|
+
* some.attributes.title.inline_help_disabled
|
62
|
+
* fallback.attributes.title.inline_help
|
63
|
+
* fallback.attributes.title.inline_help_disabled
|
64
|
+
* pageflow.ui.inline_help.post.title
|
65
|
+
* pageflow.ui.inline_help.post.title_disabled
|
66
|
+
*
|
67
|
+
* @option propertyName [String]
|
68
|
+
* Name of the attribute on the model to display and edit.
|
69
|
+
*
|
70
|
+
* @option label [String]
|
71
|
+
* Label text for the input.
|
72
|
+
*
|
73
|
+
* @option attributeTranslationKeyPrefixes [Array<String>]
|
74
|
+
* An array of prefixes to lookup translations for labels and
|
75
|
+
* inline help texts based on attribute names.
|
76
|
+
*
|
77
|
+
* @option disabled [Boolean]
|
78
|
+
* Render input as disabled.
|
79
|
+
*
|
80
|
+
* @option visibleBinding [String]
|
81
|
+
* Name of an attribute to control whether the input is visible. If
|
82
|
+
* the `visible` and `visibleBindingValue` options are not set,
|
83
|
+
* input will be visible whenever this attribute as a truthy value.
|
84
|
+
*
|
85
|
+
* @option visible [Function|Boolean]
|
86
|
+
* A Function taking the value of the `visibleBinding` attribute as
|
87
|
+
* parameter. Input will be visible only if function returns `true`.
|
88
|
+
*
|
89
|
+
* @option visibleBindingValue [Any]
|
90
|
+
* Input will be visible whenever the value of the `visibleBinding`
|
91
|
+
* attribute equals the value of this option.
|
92
|
+
*/
|
1
93
|
pageflow.inputView = {
|
2
94
|
ui: {
|
3
95
|
labelText: 'label .name',
|
4
96
|
inlineHelp: 'label .inline_help'
|
5
97
|
},
|
6
98
|
|
99
|
+
/**
|
100
|
+
* Returns an array of translation keys based on the propertyName
|
101
|
+
* options and the given prefixes.
|
102
|
+
*
|
103
|
+
* @param keyName [String]
|
104
|
+
* Suffix to append to prefixes.
|
105
|
+
*
|
106
|
+
* @option attributeTranslationKeyPrefixes [Array<String>]
|
107
|
+
* An array of strings to use as prefixes to constructs
|
108
|
+
* translation keys.
|
109
|
+
*
|
110
|
+
* @option fallbackPrefix [String]
|
111
|
+
* Optional additional prefix to form a model based translation
|
112
|
+
* key of the form `prefix.modelI18nKey.propertyName.keyName
|
113
|
+
*
|
114
|
+
* @api edge
|
115
|
+
*/
|
116
|
+
attributeTranslationKeys: function(keyName, options) {
|
117
|
+
var result = [];
|
118
|
+
|
119
|
+
if (this.options.attributeTranslationKeyPrefixes) {
|
120
|
+
result = result.concat(_(this.options.attributeTranslationKeyPrefixes).map(function(prefix) {
|
121
|
+
return prefix + '.' + this.options.propertyName + '.' + keyName;
|
122
|
+
}, this));
|
123
|
+
}
|
124
|
+
|
125
|
+
if (options && options.fallbackPrefix) {
|
126
|
+
result.push(options.fallbackPrefix + '.' + this.model.i18nKey + '.' + this.options.propertyName);
|
127
|
+
}
|
128
|
+
|
129
|
+
return result;
|
130
|
+
},
|
131
|
+
|
132
|
+
/** @private */
|
7
133
|
onRender: function() {
|
8
134
|
this.$el.addClass(this.model.modelName + '_' + this.options.propertyName);
|
9
135
|
this.ui.labelText.text(this.labelText());
|
@@ -23,26 +149,27 @@ pageflow.inputView = {
|
|
23
149
|
},
|
24
150
|
|
25
151
|
localizedAttributeName: function() {
|
26
|
-
return
|
152
|
+
return pageflow.i18nUtils.findTranslation(this.attributeTranslationKeys('label', {fallbackPrefix: 'activerecord.attributes'}));
|
27
153
|
},
|
28
154
|
|
29
155
|
inlineHelpText: function() {
|
30
|
-
var
|
31
|
-
var text = I18n.t(key, {defaultValue: ''});
|
156
|
+
var keys = this.attributeTranslationKeys('inline_help', {fallbackPrefix: 'pageflow.ui.inline_help'});
|
32
157
|
|
33
158
|
if (this.options.disabled) {
|
34
|
-
|
159
|
+
keys = pageflow.i18nUtils.translationKeysWithSuffix(keys, 'disabled');
|
35
160
|
}
|
36
161
|
|
37
|
-
return
|
162
|
+
return pageflow.i18nUtils.findTranslation(keys, {defaultValue: ''});
|
38
163
|
},
|
39
164
|
|
165
|
+
/** @private */
|
40
166
|
updateDisabled: function() {
|
41
167
|
if (this.ui.input) {
|
42
168
|
this.updateDisabledAttribute(this.ui.input);
|
43
169
|
}
|
44
170
|
},
|
45
171
|
|
172
|
+
/** @private */
|
46
173
|
updateDisabledAttribute: function(element) {
|
47
174
|
if (this.options.disabled) {
|
48
175
|
element.attr('disabled', true);
|
@@ -52,6 +179,7 @@ pageflow.inputView = {
|
|
52
179
|
}
|
53
180
|
},
|
54
181
|
|
182
|
+
/** @private */
|
55
183
|
setupVisibleBinding: function() {
|
56
184
|
var view = this;
|
57
185
|
|
@@ -61,7 +189,22 @@ pageflow.inputView = {
|
|
61
189
|
}
|
62
190
|
|
63
191
|
function updateVisible(model, value) {
|
64
|
-
view.$el.toggle(
|
192
|
+
view.$el.toggle(isVisible(value));
|
193
|
+
}
|
194
|
+
|
195
|
+
function isVisible(value) {
|
196
|
+
if (view.options.visibleBindingValue) {
|
197
|
+
return value === view.options.visibleBindingValue;
|
198
|
+
}
|
199
|
+
else if (typeof view.options.visible === 'function') {
|
200
|
+
return !!view.options.visible(value);
|
201
|
+
}
|
202
|
+
else if ('visible' in view.options) {
|
203
|
+
return !!view.options.visible;
|
204
|
+
}
|
205
|
+
else {
|
206
|
+
return !!value;
|
207
|
+
}
|
65
208
|
}
|
66
209
|
}
|
67
210
|
};
|
@@ -1,4 +1,7 @@
|
|
1
|
+
//= require ./media_player
|
2
|
+
|
1
3
|
//= require_self
|
4
|
+
|
2
5
|
//= require ./video_player/media_events
|
3
6
|
//= require ./video_player/prebuffering
|
4
7
|
//= require ./video_player/buffer_underrun_waiting
|
@@ -25,5 +28,7 @@ pageflow.VideoPlayer = function(element, options) {
|
|
25
28
|
pageflow.VideoPlayer.bufferUnderrunWaiting(player);
|
26
29
|
}
|
27
30
|
|
31
|
+
pageflow.mediaPlayer.enhance(player, options);
|
32
|
+
|
28
33
|
return player;
|
29
34
|
};
|
@@ -56,7 +56,7 @@ pageflow.VideoPlayer.bufferUnderrunWaiting = function(player) {
|
|
56
56
|
player.off('progress', pauseAndPreloadOnUnderrun);
|
57
57
|
}
|
58
58
|
|
59
|
-
if (pageflow.
|
59
|
+
if (pageflow.browser.has('buffer underrun waiting support')) {
|
60
60
|
player.on('play', function() {
|
61
61
|
player.on('progress', pauseAndPreloadOnUnderrun);
|
62
62
|
});
|
@@ -25,8 +25,12 @@ pageflow.VideoPlayer.Lazy = function(template, options) {
|
|
25
25
|
}
|
26
26
|
};
|
27
27
|
|
28
|
+
this.isPresent = function() {
|
29
|
+
return videoTag && !disposeTimeout;
|
30
|
+
};
|
31
|
+
|
28
32
|
this.dispose = function() {
|
29
|
-
if (videoTag && !pageflow.
|
33
|
+
if (videoTag && !pageflow.browser.has('mobile platform')) {
|
30
34
|
this.setEmptySrc();
|
31
35
|
|
32
36
|
$(videoPlayer.el()).replaceWith(placeholder);
|
@@ -82,7 +86,7 @@ pageflow.VideoPlayer.Lazy = function(template, options) {
|
|
82
86
|
return videoPlayer ? videoPlayer.srcFromOptions() : null;
|
83
87
|
};
|
84
88
|
|
85
|
-
_.each(['play', 'pause', 'prebuffer', 'src', 'on', 'load'], function(method) {
|
89
|
+
_.each(['play', 'playAndFadeIn', 'pause', 'fadeOutAndPause', 'prebuffer', 'src', 'on', 'load', 'currentTime'], function(method) {
|
86
90
|
that[method] = function(/* args */) {
|
87
91
|
var args = arguments;
|
88
92
|
|
@@ -109,10 +113,10 @@ pageflow.VideoPlayer.Lazy = function(template, options) {
|
|
109
113
|
|
110
114
|
var element = $(htmlWithPreload);
|
111
115
|
|
112
|
-
if (pageflow.
|
116
|
+
if (pageflow.browser.has('mobile platform') && element.attr('data-mobile-poster')) {
|
113
117
|
element.attr('poster', element.attr('data-mobile-poster'));
|
114
118
|
}
|
115
|
-
else if (pageflow.
|
119
|
+
else if (pageflow.browser.has('high bandwidth') && !pageflow.browser.has('mobile platform')) {
|
116
120
|
element.attr('poster', element.attr('data-large-poster'));
|
117
121
|
|
118
122
|
element.find('source').each(function() {
|
@@ -6,7 +6,7 @@ pageflow.VideoPlayer.mediaEvents = function(player, context) {
|
|
6
6
|
currentTime: player.currentTime(),
|
7
7
|
duration: player.duration(),
|
8
8
|
volume: player.volume(),
|
9
|
-
bitrate: pageflow.
|
9
|
+
bitrate: pageflow.browser.has('high bandwidth') ? 3500000 : 2000000
|
10
10
|
});
|
11
11
|
}
|
12
12
|
|
@@ -30,7 +30,7 @@ pageflow.VideoPlayer.prebuffering = function(player) {
|
|
30
30
|
var deferred = $.Deferred();
|
31
31
|
var timeout;
|
32
32
|
|
33
|
-
if (pageflow.
|
33
|
+
if (pageflow.browser.has('prebuffering support')) {
|
34
34
|
if (!player.isBufferedAhead(delta) && !player.prebufferDeferred) {
|
35
35
|
pageflow.log('prebuffering video ' + player.srcFromOptions());
|
36
36
|
|