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.

Files changed (293) hide show
  1. checksums.yaml +8 -8
  2. data/CHANGELOG.md +810 -0
  3. data/README.md +179 -0
  4. data/admins/pageflow/accounts.rb +46 -3
  5. data/admins/pageflow/entry.rb +35 -7
  6. data/app/assets/javascripts/pageflow/audio.js +62 -0
  7. data/app/assets/javascripts/pageflow/audio/multi_player.js +127 -0
  8. data/app/assets/javascripts/pageflow/audio/player_pool.js +15 -0
  9. data/app/assets/javascripts/pageflow/audio_player.js +23 -1
  10. data/app/assets/javascripts/pageflow/audio_player/null.js +37 -0
  11. data/app/assets/javascripts/pageflow/audio_player/pause_in_background.js +34 -0
  12. data/app/assets/javascripts/pageflow/audio_player/rewind_method.js +17 -0
  13. data/app/assets/javascripts/pageflow/audio_player/seek_with_invalid_state_handling.js +41 -0
  14. data/app/assets/javascripts/pageflow/base.js +10 -0
  15. data/app/assets/javascripts/pageflow/browser.js +123 -0
  16. data/app/assets/javascripts/pageflow/{features → browser}/hashchange_support.js +1 -1
  17. data/app/assets/javascripts/pageflow/{features → browser}/high_bandwidth.js +1 -1
  18. data/app/assets/javascripts/pageflow/{features → browser}/ie_platform.js +1 -1
  19. data/app/assets/javascripts/pageflow/browser/ios_platform.js +6 -0
  20. data/app/assets/javascripts/pageflow/{features → browser}/mobile_platform.js +1 -1
  21. data/app/assets/javascripts/pageflow/{features → browser}/phone_platform.js +1 -1
  22. data/app/assets/javascripts/pageflow/browser/pushstate_support.js +3 -0
  23. data/app/assets/javascripts/pageflow/{features → browser}/touch_support.js +1 -1
  24. data/app/assets/javascripts/pageflow/browser/video.js +16 -0
  25. data/app/assets/javascripts/pageflow/browser/volume_control_support.js +3 -0
  26. data/app/assets/javascripts/pageflow/chapter_filter.js +56 -0
  27. data/app/assets/javascripts/pageflow/editor/api.js +29 -0
  28. data/app/assets/javascripts/pageflow/editor/api/page_type.js +42 -0
  29. data/app/assets/javascripts/pageflow/editor/api/page_types.js +47 -0
  30. data/app/assets/javascripts/pageflow/editor/base.js +7 -1
  31. data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +5 -1
  32. data/app/assets/javascripts/pageflow/editor/initializers/boot.js +10 -2
  33. data/app/assets/javascripts/pageflow/editor/initializers/setup_audio.js +8 -0
  34. data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +7 -0
  35. data/app/assets/javascripts/pageflow/editor/initializers/setup_features.js +3 -0
  36. data/app/assets/javascripts/pageflow/editor/initializers/setup_hotkeys.js +20 -0
  37. data/app/assets/javascripts/pageflow/editor/initializers/setup_page_types.js +1 -6
  38. data/app/assets/javascripts/pageflow/editor/models/audio_file.js +8 -0
  39. data/app/assets/javascripts/pageflow/editor/models/chapter.js +23 -4
  40. data/app/assets/javascripts/pageflow/editor/models/chapter_configuration.js +7 -0
  41. data/app/assets/javascripts/pageflow/editor/models/configuration.js +5 -3
  42. data/app/assets/javascripts/pageflow/editor/models/entry.js +6 -4
  43. data/app/assets/javascripts/pageflow/editor/models/mixins/delayed_destroying.js +1 -1
  44. data/app/assets/javascripts/pageflow/editor/models/mixins/stage_provider.js +3 -2
  45. data/app/assets/javascripts/pageflow/editor/models/page.js +11 -4
  46. data/app/assets/javascripts/pageflow/editor/models/preview_entry_data.js +31 -0
  47. data/app/assets/javascripts/pageflow/editor/models/theming.js +8 -0
  48. data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +8 -0
  49. data/app/assets/javascripts/pageflow/editor/templates/drop_down_button.jst.ejs +6 -0
  50. data/app/assets/javascripts/pageflow/editor/templates/drop_down_button_item.jst.ejs +1 -0
  51. data/app/assets/javascripts/pageflow/editor/templates/files_explorer.jst.ejs +2 -2
  52. data/app/assets/javascripts/pageflow/editor/templates/inputs/reference.jst.ejs +7 -0
  53. data/app/assets/javascripts/pageflow/editor/templates/list.jst.ejs +5 -0
  54. data/app/assets/javascripts/pageflow/editor/templates/list_blank_slate.jst.ejs +1 -0
  55. data/app/assets/javascripts/pageflow/editor/templates/list_item.jst.ejs +11 -0
  56. data/app/assets/javascripts/pageflow/editor/templates/loading.jst.ejs +7 -1
  57. data/app/assets/javascripts/pageflow/editor/templates/other_entries_blank_slate.jst.ejs +1 -1
  58. data/app/assets/javascripts/pageflow/editor/templates/page_link_item.jst.ejs +7 -0
  59. data/app/assets/javascripts/pageflow/editor/templates/page_links.jst.ejs +6 -0
  60. data/app/assets/javascripts/pageflow/editor/templates/page_selection.jst.ejs +12 -0
  61. data/app/assets/javascripts/pageflow/editor/templates/publish_entry.jst.ejs +44 -8
  62. data/app/assets/javascripts/pageflow/editor/views/chapter_item_view.js +3 -1
  63. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +1 -1
  64. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/options.js +34 -2
  65. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/page_transitions.js +6 -0
  66. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +6 -1
  67. data/app/assets/javascripts/pageflow/editor/views/disabled_atmo_indicator_view.js +27 -0
  68. data/app/assets/javascripts/pageflow/editor/views/drop_down_button_item_view.js +33 -0
  69. data/app/assets/javascripts/pageflow/editor/views/drop_down_button_view.js +80 -0
  70. data/app/assets/javascripts/pageflow/editor/views/edit_chapter_view.js +25 -5
  71. data/app/assets/javascripts/pageflow/editor/views/edit_entry_view.js +9 -1
  72. data/app/assets/javascripts/pageflow/editor/views/edit_page_view.js +7 -5
  73. data/app/assets/javascripts/pageflow/editor/views/edit_widget_view.js +1 -1
  74. data/app/assets/javascripts/pageflow/editor/views/embedded/background_image_embedded_view.js +4 -1
  75. data/app/assets/javascripts/pageflow/editor/views/embedded/lazy_video_embedded_view.js +41 -0
  76. data/app/assets/javascripts/pageflow/editor/views/entry_preview_view.js +6 -6
  77. data/app/assets/javascripts/pageflow/editor/views/inputs/page_link_input_view.js +9 -0
  78. data/app/assets/javascripts/pageflow/editor/views/inputs/reference_input_view.js +66 -0
  79. data/app/assets/javascripts/pageflow/editor/views/list_item_view.js +95 -0
  80. data/app/assets/javascripts/pageflow/editor/views/list_view.js +59 -0
  81. data/app/assets/javascripts/pageflow/editor/views/loading_view.js +5 -0
  82. data/app/assets/javascripts/pageflow/editor/views/model_thumbnail_view.js +37 -0
  83. data/app/assets/javascripts/pageflow/editor/views/navigatable_page_item_view.js +1 -0
  84. data/app/assets/javascripts/pageflow/editor/views/other_entries_collection_view.js +4 -4
  85. data/app/assets/javascripts/pageflow/editor/views/other_entry_item_view.js +2 -1
  86. data/app/assets/javascripts/pageflow/editor/views/page_item_view.js +2 -2
  87. data/app/assets/javascripts/pageflow/editor/views/page_link_item_view.js +51 -0
  88. data/app/assets/javascripts/pageflow/editor/views/page_links_view.js +45 -0
  89. data/app/assets/javascripts/pageflow/editor/views/page_preview_view.js +24 -16
  90. data/app/assets/javascripts/pageflow/editor/views/page_selection_view.js +46 -0
  91. data/app/assets/javascripts/pageflow/editor/views/page_thumbnail_view.js +2 -29
  92. data/app/assets/javascripts/pageflow/editor/views/publish_entry_view.js +95 -10
  93. data/app/assets/javascripts/pageflow/editor/views/scrolling_view.js +24 -0
  94. data/app/assets/javascripts/pageflow/entry_data.js +35 -0
  95. data/app/assets/javascripts/pageflow/features.js +68 -98
  96. data/app/assets/javascripts/pageflow/fullscreen.js +24 -0
  97. data/app/assets/javascripts/pageflow/highlighted_page.js +48 -0
  98. data/app/assets/javascripts/pageflow/history.js +50 -18
  99. data/app/assets/javascripts/pageflow/history/hash_adapter.js +36 -0
  100. data/app/assets/javascripts/pageflow/history/push_state_adapter.js +37 -0
  101. data/app/assets/javascripts/pageflow/history/simulated_adapter.js +44 -0
  102. data/app/assets/javascripts/pageflow/media_player.js +25 -0
  103. data/app/assets/javascripts/pageflow/media_player/async_play.js +54 -0
  104. data/app/assets/javascripts/pageflow/media_player/hooks.js +24 -0
  105. data/app/assets/javascripts/pageflow/media_player/load_waiting.js +11 -0
  106. data/app/assets/javascripts/pageflow/media_player/volume_binding.js +72 -0
  107. data/app/assets/javascripts/pageflow/media_player/volume_fading.js +62 -0
  108. data/app/assets/javascripts/pageflow/multimedia_alert.js +13 -0
  109. data/app/assets/javascripts/pageflow/object.js +14 -0
  110. data/app/assets/javascripts/pageflow/page_transitions.js +27 -0
  111. data/app/assets/javascripts/pageflow/page_type.js +6 -0
  112. data/app/assets/javascripts/pageflow/page_types/audio.js +17 -21
  113. data/app/assets/javascripts/pageflow/page_types/background_video.js +18 -17
  114. data/app/assets/javascripts/pageflow/page_types/mixins/common_page_css_classes.js +29 -4
  115. data/app/assets/javascripts/pageflow/page_types/video.js +73 -36
  116. data/app/assets/javascripts/pageflow/preload.js +9 -6
  117. data/app/assets/javascripts/pageflow/ready.js +18 -14
  118. data/app/assets/javascripts/pageflow/seed_entry_data.js +43 -0
  119. data/app/assets/javascripts/pageflow/settings.js +17 -4
  120. data/app/assets/javascripts/pageflow/slideshow.js +103 -23
  121. data/app/assets/javascripts/pageflow/slideshow/adjacent_pages.js +26 -0
  122. data/app/assets/javascripts/pageflow/slideshow/adjacent_preparer.js +44 -0
  123. data/app/assets/javascripts/pageflow/slideshow/atmo.js +105 -0
  124. data/app/assets/javascripts/pageflow/slideshow/dom_order_scroll_navigator.js +29 -0
  125. data/app/assets/javascripts/pageflow/slideshow/lazy_page_widget.js +49 -0
  126. data/app/assets/javascripts/pageflow/slideshow/page_widget.js +60 -26
  127. data/app/assets/javascripts/pageflow/slideshow/progressive_preload.js +16 -7
  128. data/app/assets/javascripts/pageflow/slideshow/scroll_indicator_widget.js +45 -7
  129. data/app/assets/javascripts/pageflow/slideshow/scroller_widget.js +42 -5
  130. data/app/assets/javascripts/pageflow/ui.js +1 -0
  131. data/app/assets/javascripts/pageflow/ui/object.js +4 -13
  132. data/app/assets/javascripts/pageflow/ui/utils/i18n_utils.js +23 -0
  133. data/app/assets/javascripts/pageflow/ui/views/collection_view.js +8 -4
  134. data/app/assets/javascripts/pageflow/ui/views/configuration_editor_tab_view.js +6 -5
  135. data/app/assets/javascripts/pageflow/ui/views/configuration_editor_view.js +2 -11
  136. data/app/assets/javascripts/pageflow/ui/views/inputs/select_input_view.js +6 -1
  137. data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +4 -0
  138. data/app/assets/javascripts/pageflow/ui/views/mixins/input_view.js +149 -6
  139. data/app/assets/javascripts/pageflow/ui/views/mixins/subview_container.js +4 -0
  140. data/app/assets/javascripts/pageflow/video_player.js +5 -0
  141. data/app/assets/javascripts/pageflow/video_player/buffer_underrun_waiting.js +1 -1
  142. data/app/assets/javascripts/pageflow/video_player/lazy.js +8 -4
  143. data/app/assets/javascripts/pageflow/video_player/media_events.js +1 -1
  144. data/app/assets/javascripts/pageflow/video_player/play_button_patch.js +1 -1
  145. data/app/assets/javascripts/pageflow/video_player/prebuffering.js +1 -1
  146. data/app/assets/javascripts/pageflow/widgets/fullscreen_button.js +26 -0
  147. data/app/assets/javascripts/pageflow/widgets/multimedia_alert.js +21 -5
  148. data/app/assets/javascripts/pageflow/widgets/mute_button.js +42 -0
  149. data/app/assets/javascripts/pageflow/widgets/navigation.js +5 -78
  150. data/app/assets/javascripts/pageflow/widgets/navigation_mobile.js +4 -0
  151. data/app/assets/javascripts/pageflow/widgets/page_navigation_list.js +28 -34
  152. data/app/assets/javascripts/pageflow/widgets/parent_page_button.js +27 -0
  153. data/app/assets/javascripts/pageflow/widgets/skip_page_button.js +22 -0
  154. data/app/assets/javascripts/pageflow/widgets/top_button.js +6 -7
  155. data/app/assets/javascripts/pageflow/widgets/volume_slider.js +62 -0
  156. data/app/assets/stylesheets/pageflow/admin/entries.css.scss +10 -0
  157. data/app/assets/stylesheets/pageflow/animations.css.scss +1 -0
  158. data/app/assets/stylesheets/pageflow/animations/loading.css.scss +8 -0
  159. data/app/assets/stylesheets/pageflow/animations/scroll.css.scss +18 -0
  160. data/app/assets/stylesheets/pageflow/base.css.scss +3 -1
  161. data/app/assets/stylesheets/pageflow/delayed_text_fade_in.css.scss +49 -0
  162. data/app/assets/stylesheets/pageflow/editor/base.css.scss +15 -2
  163. data/app/assets/stylesheets/pageflow/editor/disabled_atmo_indicator.css.scss +13 -0
  164. data/app/assets/stylesheets/pageflow/editor/drop_down_button.css.scss +54 -0
  165. data/app/assets/stylesheets/pageflow/editor/files_explorer.css.scss +6 -0
  166. data/app/assets/stylesheets/pageflow/editor/indicators.css.scss +5 -0
  167. data/app/assets/stylesheets/pageflow/editor/inputs.css.scss +1 -0
  168. data/app/assets/stylesheets/pageflow/editor/inputs/reference.css.scss +51 -0
  169. data/app/assets/stylesheets/pageflow/editor/list.css.scss +108 -0
  170. data/app/assets/stylesheets/pageflow/editor/loading.css.scss +31 -0
  171. data/app/assets/stylesheets/pageflow/editor/outline.css.scss +7 -5
  172. data/app/assets/stylesheets/pageflow/editor/page_links.css.scss +58 -0
  173. data/app/assets/stylesheets/pageflow/editor/page_selection.css.scss +39 -0
  174. data/app/assets/stylesheets/pageflow/editor/publish_entry.css.scss +38 -1
  175. data/app/assets/stylesheets/pageflow/entries.css.scss +17 -9
  176. data/app/assets/stylesheets/pageflow/navigation_bar.css.scss +4 -0
  177. data/app/assets/stylesheets/pageflow/page_transitions.css.scss +10 -0
  178. data/app/assets/stylesheets/pageflow/page_transitions/crossfade.css.scss +29 -0
  179. data/app/assets/stylesheets/pageflow/page_transitions/cut.css.scss +23 -0
  180. data/app/assets/stylesheets/pageflow/page_transitions/fade.css.scss +78 -0
  181. data/app/assets/stylesheets/pageflow/page_transitions/fade_to_black.css.scss +107 -0
  182. data/app/assets/stylesheets/pageflow/page_transitions/scroll.css.scss +20 -0
  183. data/app/assets/stylesheets/pageflow/page_transitions/scroll_in.css.scss +66 -0
  184. data/app/assets/stylesheets/pageflow/page_transitions/scroll_in_right.css.scss +68 -0
  185. data/app/assets/stylesheets/pageflow/page_transitions/scroll_left.css.scss +20 -0
  186. data/app/assets/stylesheets/pageflow/page_transitions/scroll_right.css.scss +20 -0
  187. data/app/assets/stylesheets/pageflow/page_types.css.scss +1 -3
  188. data/app/assets/stylesheets/pageflow/page_types/video.css.scss +0 -4
  189. data/app/assets/stylesheets/pageflow/slideshow.css.scss +0 -145
  190. data/app/assets/stylesheets/pageflow/text_variants.css.scss +0 -4
  191. data/app/assets/stylesheets/pageflow/themes/default/navigation.css.scss +0 -3
  192. data/app/controllers/concerns/pageflow/public_https_mode.rb +13 -0
  193. data/app/controllers/pageflow/application_controller.rb +0 -6
  194. data/app/controllers/pageflow/chapters_controller.rb +2 -1
  195. data/app/controllers/pageflow/editor/entries_controller.rb +2 -0
  196. data/app/controllers/pageflow/editor/entry_publications_controller.rb +3 -1
  197. data/app/controllers/pageflow/entries_controller.rb +16 -3
  198. data/app/controllers/pageflow/files_controller.rb +3 -1
  199. data/app/helpers/pageflow/admin/features_helper.rb +25 -0
  200. data/app/helpers/pageflow/background_image_helper.rb +40 -9
  201. data/app/helpers/pageflow/entries_helper.rb +10 -11
  202. data/app/helpers/pageflow/entry_json_seed_helper.rb +44 -0
  203. data/app/helpers/pageflow/help_entries_helper.rb +4 -4
  204. data/app/helpers/pageflow/page_types_helper.rb +4 -2
  205. data/app/helpers/pageflow/pages_helper.rb +20 -27
  206. data/app/helpers/pageflow/widgets_helper.rb +4 -4
  207. data/app/models/concerns/pageflow/feature_target.rb +37 -0
  208. data/app/models/pageflow/account.rb +2 -0
  209. data/app/models/pageflow/chapter.rb +6 -0
  210. data/app/models/pageflow/draft_entry.rb +2 -0
  211. data/app/models/pageflow/entry.rb +47 -9
  212. data/app/models/pageflow/entry_duplicate.rb +51 -0
  213. data/app/models/pageflow/image_file.rb +33 -13
  214. data/app/models/pageflow/page.rb +2 -2
  215. data/app/models/pageflow/published_entry.rb +7 -1
  216. data/app/views/admin/accounts/_form.html.erb +11 -1
  217. data/app/views/admin/features/_form.html.erb +16 -0
  218. data/app/views/components/pageflow/admin/features_tab.rb +10 -0
  219. data/app/views/components/pageflow/admin/revisions_tab.rb +4 -0
  220. data/app/views/layouts/pageflow/_meta_tags.html.erb +1 -1
  221. data/app/views/layouts/pageflow/application.html.erb +2 -2
  222. data/app/views/pageflow/editor/accounts/_account.json.jbuilder +1 -0
  223. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +2 -1
  224. data/app/views/pageflow/editor/entries/_help_entries_seed.html.erb +2 -2
  225. data/app/views/pageflow/editor/entries/_indicators_seed.html.erb +3 -0
  226. data/app/views/pageflow/editor/entries/seed.json.erb +3 -2
  227. data/app/views/pageflow/editor/entry_publications/check.json.jbuilder +1 -0
  228. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -1
  229. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +4 -0
  230. data/app/views/pageflow/editor/video_files/_video_file.json.jbuilder +1 -0
  231. data/app/views/pageflow/entries/_entry.html.erb +4 -3
  232. data/app/views/pageflow/entries/_indicators.html.erb +13 -0
  233. data/app/views/pageflow/entries/_mobile_navigation.html.erb +3 -15
  234. data/app/views/pageflow/entries/edit.html.erb +9 -1
  235. data/app/views/pageflow/entries/navigation/_bar_top.html.erb +3 -15
  236. data/app/views/pageflow/entries/share_menu/_facebook_link.html.erb +12 -0
  237. data/app/views/pageflow/entries/share_menu/_google_link.html.erb +12 -0
  238. data/app/views/pageflow/entries/share_menu/_twitter_link.html.erb +12 -0
  239. data/app/views/pageflow/entries/show.css.erb +12 -2
  240. data/app/views/pageflow/entries/show.html.erb +5 -1
  241. data/app/views/pageflow/page_types/_page_type.json.jbuilder +7 -1
  242. data/app/views/pageflow/pages/_page.html.erb +2 -2
  243. data/app/views/pageflow/pages/templates/_audio.html.erb +10 -0
  244. data/config/initializers/admin_resource_tabs.rb +1 -0
  245. data/config/initializers/features.rb +9 -0
  246. data/config/initializers/page_type_helpers.rb +1 -1
  247. data/config/initializers/paperclip.rb +1 -1
  248. data/config/initializers/zencoder.rb +1 -1
  249. data/config/locales/de.yml +132 -71
  250. data/config/locales/en.yml +118 -191
  251. data/db/migrate/20141211110226_add_configuration_to_chapters.rb +5 -0
  252. data/db/migrate/20150115175116_add_features_configuration_to_accounts.rb +5 -0
  253. data/db/migrate/20150115175207_add_features_configuration_to_entries.rb +5 -0
  254. data/db/migrate/20150603091823_add_password_attributes_to_revisions.rb +6 -0
  255. data/db/migrate/20151022080518_add_first_published_at_to_entries.rb +14 -0
  256. data/lib/generators/pageflow/initializer/templates/pageflow.rb +26 -17
  257. data/lib/generators/pageflow/theme/theme_generator.rb +2 -1
  258. data/lib/pageflow.rb +2 -46
  259. data/lib/pageflow/admin/form_input.rb +18 -0
  260. data/lib/pageflow/admin/form_inputs.rb +41 -0
  261. data/lib/pageflow/built_in_page_type.rb +0 -4
  262. data/lib/pageflow/configuration.rb +74 -18
  263. data/lib/pageflow/feature.rb +33 -0
  264. data/lib/pageflow/features.rb +68 -0
  265. data/lib/pageflow/global_config_api.rb +118 -0
  266. data/lib/pageflow/page_type_feature.rb +21 -0
  267. data/lib/pageflow/page_types.rb +29 -0
  268. data/lib/pageflow/theme.rb +20 -0
  269. data/lib/pageflow/themes.rb +26 -0
  270. data/lib/pageflow/version.rb +1 -1
  271. data/spec/factories/entries.rb +6 -0
  272. data/spec/factories/feature_targets.rb +4 -0
  273. data/spec/fixtures/image.gif +0 -0
  274. data/spec/fixtures/video.mp4 +0 -0
  275. data/vendor/assets/javascripts/audio5.min.js +12 -8
  276. data/vendor/assets/javascripts/iscroll.js +1 -1
  277. metadata +144 -24
  278. data/app/assets/images/pageflow/internal_links_pictogram.png +0 -0
  279. data/app/assets/images/pageflow/internal_links_pictogram_small.png +0 -0
  280. data/app/assets/images/pageflow/internal_links_sprite.png +0 -0
  281. data/app/assets/images/pageflow/ov-internal_links.png +0 -0
  282. data/app/assets/images/pageflow/themes/default/internal_links_sprite.png +0 -0
  283. data/app/assets/javascripts/pageflow/editor/templates/embedded/page_link.jst.ejs +0 -3
  284. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/internal_links.js +0 -24
  285. data/app/assets/javascripts/pageflow/editor/views/draggable_page_item_view.js +0 -31
  286. data/app/assets/javascripts/pageflow/editor/views/embedded/page_link_embedded_view.js +0 -176
  287. data/app/assets/javascripts/pageflow/features/video.js +0 -16
  288. data/app/assets/javascripts/pageflow/page_types/internal_links.js +0 -55
  289. data/app/assets/javascripts/pageflow/ui/templates/inputs/page_reference.jst.ejs +0 -6
  290. data/app/assets/javascripts/pageflow/ui/views/inputs/page_reference_input_view.js +0 -44
  291. data/app/assets/stylesheets/pageflow/editor/embedded.css.scss +0 -104
  292. data/app/assets/stylesheets/pageflow/page_types/internal_links.css.scss +0 -222
  293. data/app/views/pageflow/pages/templates/_internal_links.html.erb +0 -31
@@ -4,10 +4,12 @@ pageflow.Settings = Backbone.Model.extend({
4
4
  },
5
5
 
6
6
  initialize: function() {
7
- if (window.localStorage) {
8
- if (localStorage['pageflow.settings']) {
7
+ var storage = this.getLocalStorage();
8
+
9
+ if (storage) {
10
+ if (storage['pageflow.settings']) {
9
11
  try {
10
- this.set(JSON.parse(localStorage['pageflow.settings']));
12
+ this.set(JSON.parse(storage['pageflow.settings']));
11
13
  }
12
14
  catch(e) {
13
15
  pageflow.log(e);
@@ -15,9 +17,20 @@ pageflow.Settings = Backbone.Model.extend({
15
17
  }
16
18
 
17
19
  this.on('change', function() {
18
- localStorage['pageflow.settings'] = JSON.stringify(this);
20
+ storage['pageflow.settings'] = JSON.stringify(this);
19
21
  });
20
22
  }
23
+ },
24
+
25
+ getLocalStorage: function() {
26
+ try {
27
+ return window.localStorage;
28
+ }
29
+ catch(e) {
30
+ // Safari throws SecurityError when accessing window.localStorage
31
+ // if cookies/website data are disabled.
32
+ return null;
33
+ }
21
34
  }
22
35
  });
23
36
 
@@ -1,18 +1,23 @@
1
+ //=require ./slideshow/atmo
2
+ //=require ./slideshow/lazy_page_widget
1
3
  //=require ./slideshow/page_widget
2
4
  //=require ./slideshow/scroller_widget
3
5
  //=require ./slideshow/scroll_indicator_widget
4
6
  //=require ./slideshow/hidden_text_indicator_widget
5
7
  //=require ./slideshow/progressive_preload
8
+ //=require ./slideshow/adjacent_preparer
6
9
  //=require ./slideshow/swipe_gesture
7
10
  //=require ./slideshow/hide_text
8
11
  //=require ./slideshow/hide_text_on_swipe
12
+ //=require ./slideshow/dom_order_scroll_navigator
9
13
 
10
14
  pageflow.Slideshow = function($el, configurations) {
11
- var transitionDuration = 1000,
12
- transitioning = false,
15
+ var transitioning = false,
13
16
  preload = new pageflow.ProgressivePreload(),
14
17
  currentPage = $(),
15
- currentPageIndex, pages;
18
+ pages = $(),
19
+ that = this,
20
+ currentPageIndex;
16
21
 
17
22
  configurations = configurations || {};
18
23
 
@@ -20,7 +25,7 @@ pageflow.Slideshow = function($el, configurations) {
20
25
  if (transitioning) { return; }
21
26
  transitioning = true;
22
27
 
23
- fn.call(context);
28
+ var transitionDuration = fn.call(context);
24
29
 
25
30
  setTimeout(function() {
26
31
  transitioning = false;
@@ -37,25 +42,49 @@ pageflow.Slideshow = function($el, configurations) {
37
42
  return result;
38
43
  }
39
44
 
45
+ function currentPagePermaId() {
46
+ return parseInt(currentPage.attr('id'), 10);
47
+ }
48
+
40
49
  this.nextPageExists = function() {
41
- return (!currentPage.is(pages.last()));
50
+ return this.scrollNavigator.nextPageExists(currentPage, pages);
51
+ };
52
+
53
+ this.previousPageExists = function() {
54
+ return this.scrollNavigator.previousPageExists(currentPage, pages);
55
+ };
56
+
57
+ this.isOnLandingPage = function() {
58
+ return currentPage.is(this.scrollNavigator.getLandingPage(pages));
59
+ };
60
+
61
+ this.goToLandingPage = function() {
62
+ this.goTo(this.scrollNavigator.getLandingPage(pages));
42
63
  };
43
64
 
44
65
  this.back = function() {
45
- this.goTo(currentPage.prev('.page'), {position: 'bottom'});
66
+ this.scrollNavigator.back(currentPage);
46
67
  };
47
68
 
48
69
  this.next = function() {
49
- this.goTo(currentPage.next('.page'));
70
+ this.scrollNavigator.next(currentPage);
50
71
  };
51
72
 
52
- this.goToById = function(id) {
53
- this.goTo($el.find('[data-id=' + id + ']'));
73
+ this.parentPageExists = function() {
74
+ return !!pageflow.entryData.getParentPagePermaIdByPagePermaId(currentPagePermaId());
54
75
  };
55
76
 
56
- this.goToByPermaId = function(permaId) {
77
+ this.goToParentPage = function() {
78
+ this.goToByPermaId(pageflow.entryData.getParentPagePermaIdByPagePermaId(currentPagePermaId()));
79
+ };
80
+
81
+ this.goToById = function(id, options) {
82
+ return this.goTo($el.find('[data-id=' + id + ']'), options);
83
+ };
84
+
85
+ this.goToByPermaId = function(permaId, options) {
57
86
  if (permaId) {
58
- this.goTo($el.find('#' + permaId));
87
+ return this.goTo($el.find('#' + permaId), options);
59
88
  }
60
89
  };
61
90
 
@@ -68,19 +97,31 @@ pageflow.Slideshow = function($el, configurations) {
68
97
  currentPage = page;
69
98
  currentPageIndex = currentPage.index();
70
99
 
71
- var direction = currentPageIndex > previousPage.index() ? 'forwards' : 'backwards';
100
+ var direction = this.scrollNavigator.getTransitionDirection(previousPage, currentPage, options);
72
101
 
73
- previousPage.page('deactivate', {direction: direction});
74
- currentPage.page('activate', {direction: direction, position: options.position});
102
+ var outDuration = previousPage.page('deactivate', {
103
+ direction: direction,
104
+ transition: options.transition
105
+ });
106
+
107
+ var inDuration = currentPage.page('activate', {
108
+ direction: direction,
109
+ position: options.position,
110
+ transition: options.transition
111
+ });
75
112
 
76
113
  preload.start(currentPage);
77
- $el.trigger('slideshowchangepage');
114
+ $el.trigger('slideshowchangepage', [options]);
115
+
116
+ return Math.max(outDuration, inDuration);
78
117
  }, this);
118
+
119
+ return true;
79
120
  }
80
121
  };
81
122
 
82
123
  this.goToFirstPage = function() {
83
- this.goTo(pages.first());
124
+ return this.goTo(pages.first());
84
125
  };
85
126
 
86
127
  this.update = function() {
@@ -102,6 +143,10 @@ pageflow.Slideshow = function($el, configurations) {
102
143
  return currentPage;
103
144
  };
104
145
 
146
+ this.currentPageConfiguration = function() {
147
+ return currentPage.page('getConfiguration');
148
+ };
149
+
105
150
  function ensureCurrentPage() {
106
151
  var newCurrentPage = findNewCurrentPage();
107
152
 
@@ -116,7 +161,7 @@ pageflow.Slideshow = function($el, configurations) {
116
161
 
117
162
  function findNewCurrentPage() {
118
163
  if (!currentPage.length) {
119
- return pages.first();
164
+ return that.scrollNavigator.getLandingPage(pages);
120
165
  }
121
166
  else if (!currentPage.parent().length) {
122
167
  return nearestPage(currentPageIndex);
@@ -140,7 +185,7 @@ pageflow.Slideshow = function($el, configurations) {
140
185
  }, this));
141
186
 
142
187
  $el.on('click', 'a.to_top', _.bind(function() {
143
- this.goToFirstPage();
188
+ this.goToLandingPage();
144
189
  }, this));
145
190
 
146
191
  $(window).on('resize', this.triggerResizeHooks);
@@ -155,9 +200,44 @@ pageflow.Slideshow = function($el, configurations) {
155
200
  pageflow.hideText.deactivate();
156
201
  });
157
202
 
158
- var scrollIndicator = $el.find('.scroll_indicator');
159
- scrollIndicator.scrollIndicator({parent : this});
160
- scrollIndicator.on('click', _.bind(function(event) {
161
- this.next();
162
- }, this));
203
+ $el.find('.scroll_indicator').scrollIndicator({parent: this});
204
+
205
+ this.scrollNavigator = new pageflow.DomOrderScrollNavigator(this);
206
+ this.preparer = pageflow.AdjacentPreparer.create(function() { return pages; }, this.scrollNavigator).attach(pageflow.events);
207
+ };
208
+
209
+ pageflow.Slideshow.setup = function(options) {
210
+ function configurationsById(pages) {
211
+ return _.reduce(pages, function(memo, page) {
212
+ memo[page.id] = page.configuration;
213
+ return memo;
214
+ }, {});
215
+ }
216
+
217
+ pageflow.slides = new pageflow.Slideshow(
218
+ options.element,
219
+ configurationsById(options.pages)
220
+ );
221
+
222
+ pageflow.features.enable('slideshow', options.enabledFeatureNames || []);
223
+
224
+ pageflow.atmo = pageflow.Atmo.create(
225
+ pageflow.slides,
226
+ pageflow.events,
227
+ pageflow.audio
228
+ );
229
+
230
+ pageflow.history = pageflow.History.create(
231
+ pageflow.slides,
232
+ {simulate: options.simulateHistory}
233
+ );
234
+
235
+ if (options.beforeFirstUpdate) {
236
+ options.beforeFirstUpdate();
237
+ }
238
+
239
+ pageflow.slides.update();
240
+ pageflow.history.start();
241
+
242
+ return pageflow.slides;
163
243
  };
@@ -0,0 +1,26 @@
1
+ pageflow.AdjacentPages = pageflow.Object.extend({
2
+ initialize: function(pages, scrollNavigator) {
3
+ this.pages = pages;
4
+ this.scrollNavigator = scrollNavigator;
5
+ },
6
+
7
+ of: function(page) {
8
+ var result = [];
9
+ var pages = this.pages();
10
+ var nextPage = this.scrollNavigator.getNextPage(page.element, pages);
11
+
12
+ if (nextPage.length) {
13
+ result.push(nextPage.page('instance'));
14
+ }
15
+
16
+ _(page.linkedPages()).each(function(permaId) {
17
+ var linkedPage = pages.filter('#' + permaId);
18
+
19
+ if (linkedPage.length) {
20
+ result.push(linkedPage.page('instance'));
21
+ }
22
+ }, this);
23
+
24
+ return result;
25
+ }
26
+ });
@@ -0,0 +1,44 @@
1
+ //= require ./adjacent_pages
2
+
3
+ pageflow.AdjacentPreparer = pageflow.Object.extend({
4
+ initialize: function(adjacentPages) {
5
+ this.adjacentPages = adjacentPages;
6
+ },
7
+
8
+ attach: function(events) {
9
+ this.listenTo(events, 'page:change', this.schedule);
10
+ },
11
+
12
+ schedule: function(page) {
13
+ clearTimeout(this.scheduleTimeout);
14
+
15
+ var prepare = _.bind(this.prepareAdjacent, this, page.element.page('instance'));
16
+ this.scheduleTimeout = setTimeout(prepare, page.prepareNextPageTimeout());
17
+ },
18
+
19
+ prepareAdjacent: function(page) {
20
+ var adjacentPages = this.adjacentPages.of(page);
21
+ var noLongerAdjacentPages = _.difference(this.lastAdjacentPages, adjacentPages, [page]);
22
+ var newAdjacentPages = _.difference(adjacentPages, this.lastAdjacentPages);
23
+
24
+ _(noLongerAdjacentPages).each(function(page) {
25
+ page.unprepare();
26
+ });
27
+
28
+ _(newAdjacentPages).each(function(adjacentPage) {
29
+ adjacentPage.prepare();
30
+ adjacentPage.preload();
31
+ });
32
+
33
+ this.lastAdjacentPages = adjacentPages;
34
+ }
35
+ });
36
+
37
+ pageflow.AdjacentPreparer.create = function(pages, scrollNavigator) {
38
+ return new pageflow.AdjacentPreparer(
39
+ new pageflow.AdjacentPages(
40
+ pages,
41
+ scrollNavigator
42
+ )
43
+ );
44
+ };
@@ -0,0 +1,105 @@
1
+ (function() {
2
+ var attributeName = 'atmo_audio_file_id';
3
+
4
+ pageflow.Atmo = pageflow.Object.extend({
5
+ initialize: function(slideshow, events, multiPlayer) {
6
+ this.slideshow = slideshow;
7
+ this.multiPlayer = multiPlayer;
8
+ this.disabled = false;
9
+
10
+ this.listenTo(events, 'page:change page:update', function() {
11
+ this.update();
12
+ });
13
+ },
14
+
15
+ disable: function() {
16
+ this.disabled = true;
17
+ this.multiPlayer.fadeOutAndPause();
18
+
19
+ pageflow.events.trigger('atmo:disabled');
20
+ },
21
+
22
+ enable: function() {
23
+ this.disabled = false;
24
+ this.update();
25
+
26
+ pageflow.events.trigger('atmo:enabled');
27
+ },
28
+
29
+ pause: function() {
30
+ if (pageflow.browser.has('volume control support')) {
31
+ return this.multiPlayer.fadeOutAndPause();
32
+ }
33
+ else {
34
+ this.multiPlayer.pause();
35
+ }
36
+ },
37
+
38
+ turnDown: function() {
39
+ if (pageflow.browser.has('volume control support')) {
40
+ return this.multiPlayer.changeVolumeFactor(0.2);
41
+ }
42
+ else {
43
+ this.multiPlayer.pause();
44
+ }
45
+ },
46
+
47
+ resume: function() {
48
+ if (this.multiPlayer.paused()) {
49
+ if (this.disabled) {
50
+ return new $.Deferred().resolve().promise();
51
+ }
52
+ else {
53
+ return this.multiPlayer.resumeAndFadeIn();
54
+ }
55
+ }
56
+ else {
57
+ return this.multiPlayer.changeVolumeFactor(1);
58
+ }
59
+ },
60
+
61
+ update: function() {
62
+ var configuration = this.slideshow.currentPageConfiguration();
63
+
64
+ if (!this.disabled) {
65
+ this.multiPlayer.fadeTo(configuration[attributeName]);
66
+ }
67
+ },
68
+
69
+ createMediaPlayerHooks: function(configuration) {
70
+ var atmo = this;
71
+
72
+ return {
73
+ before: function() {
74
+ if (configuration.atmo_during_playback === 'mute') {
75
+ atmo.pause();
76
+ }
77
+ else if (configuration.atmo_during_playback === 'turn_down') {
78
+ atmo.turnDown();
79
+ }
80
+ },
81
+
82
+ after: function() {
83
+ atmo.resume();
84
+ }
85
+ };
86
+ }
87
+ });
88
+
89
+ pageflow.Atmo.create = function(slideshow, events, audio) {
90
+ return new pageflow.Atmo(
91
+ slideshow,
92
+ events,
93
+ audio.createMultiPlayer({
94
+ loop: true,
95
+ fadeDuration: 500,
96
+ crossFade: true,
97
+ playFromBeginning: false,
98
+ rewindOnChange: true,
99
+ pauseInBackground: true
100
+ })
101
+ );
102
+ };
103
+
104
+ pageflow.Atmo.duringPlaybackModes = ['play', 'mute', 'turn_down'];
105
+ }());
@@ -0,0 +1,29 @@
1
+ pageflow.DomOrderScrollNavigator = function(slideshow) {
2
+ this.getLandingPage = function(pages) {
3
+ return pages.first();
4
+ };
5
+
6
+ this.back = function(currentPage) {
7
+ slideshow.goTo(currentPage.prev('.page'), {position: 'bottom'});
8
+ };
9
+
10
+ this.next = function(currentPage) {
11
+ slideshow.goTo(currentPage.next('.page'));
12
+ };
13
+
14
+ this.nextPageExists = function(currentPage, pages) {
15
+ return !currentPage.is(pages.last());
16
+ };
17
+
18
+ this.previousPageExists = function(currentPage, pages) {
19
+ return !currentPage.is(pages.first());
20
+ };
21
+
22
+ this.getNextPage = function(currentPage, pages) {
23
+ return currentPage.next('.page');
24
+ };
25
+
26
+ this.getTransitionDirection = function(previousPage, currentPage, options) {
27
+ return (currentPage.index() > previousPage.index() ? 'forwards' : 'backwards');
28
+ };
29
+ };