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.
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
@@ -0,0 +1,49 @@
1
+ (function($) {
2
+ var creatingMethods = ['reinit', 'reactivate', 'activate', 'activateAsLandingPage', 'prepare', 'linkedPages'];
3
+ var ignoredMethods = ['cleanup', 'refreshScroller', 'resize', 'preload', 'deactivate', 'unprepare'];
4
+
5
+ var prototype = {
6
+ _create: function() {
7
+ this.configuration = this.element.data('configuration') || this.options.configuration;
8
+ },
9
+
10
+ _ensureCreated: function() {
11
+ this.created = true;
12
+ this.element.nonLazyPage(this.options);
13
+ },
14
+
15
+ _delegateToInner: function(method, args) {
16
+ return this.element.nonLazyPage.apply(this.element, [method].concat([].slice.call(args)));
17
+ },
18
+
19
+ getConfiguration: function() {
20
+ return this.configuration;
21
+ },
22
+
23
+ update: function(configuration) {
24
+ if (this.created) {
25
+ this._delegateToInner('update', arguments);
26
+ }
27
+ else {
28
+ _.extend(this.configuration, configuration.attributes);
29
+ }
30
+ }
31
+ };
32
+
33
+ _(creatingMethods).each(function(method) {
34
+ prototype[method] = function() {
35
+ this._ensureCreated();
36
+ return this._delegateToInner(method, arguments);
37
+ };
38
+ });
39
+
40
+ _(ignoredMethods).each(function(method) {
41
+ prototype[method] = function() {
42
+ if (this.created) {
43
+ return this._delegateToInner(method, arguments);
44
+ }
45
+ };
46
+ });
47
+
48
+ $.widget('pageflow.page', prototype);
49
+ }(jQuery));
@@ -1,24 +1,39 @@
1
1
  (function($) {
2
- $.widget('pageflow.page', {
2
+ $.widget('pageflow.nonLazyPage', {
3
+ widgetEventPrefix: 'page',
3
4
  _create: function() {
4
5
  this.configuration = this.element.data('configuration') || this.options.configuration;
5
6
  this.index = this.options.index;
6
7
 
7
- this.element.addClass(this.configuration.transition || "fade");
8
-
9
8
  this.preloaded = false;
10
9
  this.reinit();
11
10
  },
12
11
 
12
+ getPermaId: function() {
13
+ return parseInt(this.element.attr('id'), 10);
14
+ },
15
+
16
+ getConfiguration: function() {
17
+ return this.configuration;
18
+ },
19
+
20
+ update: function(configuration) {
21
+ _.extend(this.configuration, configuration.attributes);
22
+ this.pageType.update(this.element, configuration);
23
+ },
24
+
13
25
  reinit: function() {
14
26
  this.pageType = pageflow.pageType.get(this.element.data('template'));
15
27
  this.element.data('pageType', this.pageType);
16
28
 
17
29
  this.content = this.element.find('.scroller');
18
- this.content.scroller();
19
- this.content.hideTextOnSwipe();
30
+ this.content.scroller(this.pageType.scrollerOptions || {});
31
+ this.pageType.scroller = this.content.scroller('instance');
32
+
33
+ this._setupHideTextOnSwipe();
20
34
 
21
35
  this._triggerPageTypeHook('enhance');
36
+ this._trigger('enhanced');
22
37
  },
23
38
 
24
39
  reactivate: function() {
@@ -55,18 +70,24 @@
55
70
  this._trigger('activate', null, {page: this});
56
71
  this._triggerPageTypeHook('activating');
57
72
  this._triggerDelayedPageTypeHook('activated');
58
-
59
- this.prepareTimeout = setTimeout(_.bind(this.triggerPrepareNextPage, this), this.prepareNextPageTimeout());
60
73
  },
61
74
 
62
75
  prepare: function() {
63
76
  this._triggerPageTypeHook('prepare');
64
77
  },
65
78
 
79
+ unprepare: function() {
80
+ this._triggerPageTypeHook('unprepare');
81
+ },
82
+
66
83
  prepareNextPageTimeout: function() {
67
84
  return this.pageType.prepareNextPageTimeout;
68
85
  },
69
86
 
87
+ linkedPages: function() {
88
+ return this._triggerPageTypeHook('linkedPages');
89
+ },
90
+
70
91
  preload: function() {
71
92
  var page = this;
72
93
 
@@ -82,44 +103,56 @@
82
103
  activate: function(options) {
83
104
  options = options || {};
84
105
 
85
- this.element
86
- .removeClass('animate-out-forwards animate-out-backwards')
87
- .addClass('animate-in-' + options.direction);
88
-
89
106
  setTimeout(_.bind(function() {
90
107
  this.element.addClass('active');
91
- }, this), 5);
108
+ }, this), 0);
92
109
 
93
- setTimeout(_.bind(function() {
110
+ var duration = this.animateTransition('in', options, function() {
94
111
  this.content.scroller('enable');
95
112
  this.content.scroller('afterAnimationHook');
96
- this.element.removeClass('animate-in-forwards animate-in-backwards');
97
113
 
98
114
  this._triggerDelayedPageTypeHook('activated');
99
- }, this), 1100);
115
+ });
100
116
 
101
117
  this.content.scroller('resetPosition', {position: options.position});
102
118
  this._trigger('activate', null, {page: this});
103
119
  this._triggerPageTypeHook('activating');
104
120
 
105
- this.prepareTimeout = setTimeout(_.bind(this.triggerPrepareNextPage, this), this.prepareNextPageTimeout());
121
+ return duration;
106
122
  },
107
123
 
108
124
  deactivate: function(options) {
109
- this.element
110
- .removeClass('active animate-in-forwards animate-in-backwards')
111
- .addClass('animate-out-' + options.direction);
125
+ options = options || {};
112
126
 
113
- setTimeout(_.bind(function() {
114
- this.element.removeClass('animate-out-forwards animate-out-backwards');
127
+ this.element.removeClass('active');
128
+
129
+ var duration = this.animateTransition('out', options, function() {
115
130
  this._triggerPageTypeHook('deactivated');
116
- }, this), 1100);
131
+ });
117
132
 
118
133
  this.content.scroller('disable');
119
134
  this._trigger('deactivate');
120
135
  this._triggerPageTypeHook('deactivating');
121
136
 
122
- clearTimeout(this.prepareTimeout);
137
+ return duration;
138
+ },
139
+
140
+ animateTransition: function(destination, options, callback) {
141
+ var otherDestination = destination === 'in' ? 'out' : 'in';
142
+ var transition = options.transition || this.configuration.transition || 'fade';
143
+ var duration = pageflow.pageTransitions.get(transition).duration;
144
+ var animateClass = transition + ' animate-' + destination + '-' + options.direction;
145
+
146
+ this.element
147
+ .removeClass('animate-' + otherDestination + '-forwards animate-' + otherDestination + '-backwards')
148
+ .addClass(animateClass);
149
+
150
+ setTimeout(_.bind(function() {
151
+ this.element.removeClass(animateClass);
152
+ callback.call(this);
153
+ }, this), duration);
154
+
155
+ return duration;
123
156
  },
124
157
 
125
158
  _triggerDelayedPageTypeHook: function(name) {
@@ -137,9 +170,10 @@
137
170
  return this.pageType[name](this.element, this.configuration);
138
171
  },
139
172
 
140
- triggerPrepareNextPage: function() {
141
- if($(this.element).next(".page").length > 0) {
142
- $(this.element).next(".page").page('prepare', {});
173
+ _setupHideTextOnSwipe: function() {
174
+ if (pageflow.entryData.getThemingOption('hide_text_on_swipe') &&
175
+ !this.pageType.noHideTextOnSwipe) {
176
+ this.content.hideTextOnSwipe();
143
177
  }
144
178
  }
145
179
  });
@@ -1,7 +1,7 @@
1
1
  pageflow.ProgressivePreload = function() {
2
2
  var run = null;
3
3
 
4
- function Run(page) {
4
+ function Run(page, maxPreloadedPages) {
5
5
  var cancelled = false;
6
6
 
7
7
  this.cancel = function() {
@@ -9,17 +9,26 @@ pageflow.ProgressivePreload = function() {
9
9
  };
10
10
 
11
11
  this.start = function() {
12
- return preload(page);
12
+ preload(page, 0);
13
13
  };
14
14
 
15
- function preload(page) {
16
- return $.when(page.page('preload')).pipe(function() {
15
+ function preload(page, counter) {
16
+ $.when(page.page('preload'), tick()).then(function() {
17
17
  var nextPage = page.next('.page');
18
- if (!cancelled && nextPage.length) {
19
- return preload(nextPage);
18
+ if (!cancelled && nextPage.length && counter < maxPreloadedPages) {
19
+ preload(nextPage, counter + 1);
20
20
  }
21
21
  });
22
22
  }
23
+
24
+ // prevent stack level from becoming to deep
25
+ function tick() {
26
+ return new $.Deferred(function(deferred) {
27
+ setTimeout(function() {
28
+ deferred.resolve();
29
+ }, 1);
30
+ }).promise();
31
+ }
23
32
  }
24
33
 
25
34
  this.start = function(page) {
@@ -27,7 +36,7 @@ pageflow.ProgressivePreload = function() {
27
36
  run.cancel();
28
37
  }
29
38
 
30
- run = new Run(page);
39
+ run = new Run(page, 10);
31
40
  run.start();
32
41
  };
33
42
  };
@@ -1,36 +1,66 @@
1
1
  (function($) {
2
+ var boundaries = {
3
+ up: 'top',
4
+ down: 'bottom'
5
+ };
6
+
2
7
  $.widget('pageflow.scrollIndicator', {
3
8
  _create: function() {
4
9
  var parent = this.options.parent,
5
- that = this;
10
+ direction = this.element.data('direction'),
11
+ boundary = boundaries[direction],
12
+ that = this;
6
13
 
7
- parent.on('pageactivate', function(event) {
8
- var page = $(event.target);
14
+ function update(page) {
9
15
  var invertIndicator = page.data('invertIndicator');
10
16
 
11
17
  if (typeof invertIndicator === 'undefined') {
12
18
  invertIndicator = page.hasClass('invert');
13
19
  }
14
20
 
21
+ if (page.hasClass('scroll_indicator_mode_non') ||
22
+ (page.hasClass('scroll_indicator_mode_only_next') && direction === 'up') ||
23
+ (page.hasClass('scroll_indicator_mode_only_back') && direction === 'down')) {
24
+
25
+ that.element.hide();
26
+ }
27
+ else {
28
+ that.element.show();
29
+ }
30
+
15
31
  that.element.toggleClass('invert', invertIndicator);
32
+ that.element.toggleClass('horizontal', page.hasClass('scroll_indicator_orientation_horizontal'));
33
+ that.element.toggleClass('available', targetPageExists());
34
+ }
35
+
36
+ function targetPageExists() {
37
+ return direction === 'down' ? parent.nextPageExists() : parent.previousPageExists();
38
+ }
39
+
40
+ parent.on('pageactivate', function(event) {
41
+ update($(event.target));
42
+ });
43
+
44
+ pageflow.events.on('page:update', function() {
45
+ update(parent.currentPage());
16
46
  });
17
47
 
18
- parent.on('scrollerhintdown', function() {
48
+ parent.on('scrollerhint' + direction, function() {
19
49
  that.element.addClass('animate');
20
50
  setTimeout(function() {
21
51
  that.element.removeClass('animate');
22
52
  }, 500);
23
53
  });
24
54
 
25
- parent.on('scrollernearbottom', function(event) {
55
+ parent.on('scrollernear' + boundary, function(event) {
26
56
  var page = $(event.target).parents('section');
27
57
 
28
58
  if (page.hasClass('active')) {
29
- that.element.toggleClass('visible', parent.nextPageExists());
59
+ that.element.toggleClass('visible', targetPageExists());
30
60
  }
31
61
  });
32
62
 
33
- parent.on('scrollernotnearbottom slideshowchangepage', function() {
63
+ parent.on('scrollernotnear' + boundary +' slideshowchangepage', function() {
34
64
  that.element.removeClass('visible');
35
65
  });
36
66
 
@@ -43,6 +73,14 @@
43
73
  }, 3000);
44
74
  });
45
75
 
76
+ this.element.on('click', function() {
77
+ if (direction === 'down') {
78
+ parent.next();
79
+ }
80
+ else {
81
+ parent.back();
82
+ }
83
+ });
46
84
  }
47
85
  });
48
86
  }(jQuery));
@@ -11,24 +11,29 @@
11
11
  doubleBumpThreshold: 500,
12
12
 
13
13
  _create: function() {
14
- this.iscroll = new IScroll(this.element[0], {
14
+ this.iscroll = new IScroll(this.element[0], _.extend({
15
15
  mouseWheel: true,
16
16
  bounce: false,
17
17
  keyBindings: true,
18
18
  probeType: 2,
19
19
  preventDefault: false
20
- });
20
+ }, _.pick(this.options, 'freeScroll', 'scrollX', 'noMouseWheelScrollX')));
21
21
 
22
22
  this.iscroll.disable();
23
23
 
24
- this._initMousewheelBump('up');
25
- this._initMousewheelBump('down');
24
+ if (pageflow.entryData.getThemingOption('page_change_by_scrolling')) {
25
+ this._initMousewheelBump('up');
26
+ this._initMousewheelBump('down');
27
+ this._initDragGestureBump();
28
+ }
29
+
26
30
  this._initKeyboardBump('up');
27
31
  this._initKeyboardBump('down');
28
- this._initDragGestureBump();
29
32
  this._initNearBottomEvents();
30
33
  this._initNearTopEvents();
31
34
  this._initMoveEvents();
35
+
36
+ this._onScrollEndCallbacks = new $.Callbacks();
32
37
  },
33
38
 
34
39
  enable: function() {
@@ -49,6 +54,25 @@
49
54
  }
50
55
  },
51
56
 
57
+ scrollBy: function(deltaX, deltaY, time, easing) {
58
+ this.scrollTo(
59
+ this.iscroll.x + deltaX,
60
+ this.iscroll.y + deltaY,
61
+ time,
62
+ easing
63
+ );
64
+ },
65
+
66
+ scrollTo: function(x, y, time, easing) {
67
+ this.iscroll.scrollTo(
68
+ Math.max(Math.min(x, 0), this.iscroll.maxScrollX),
69
+ Math.max(Math.min(y, 0), this.iscroll.maxScrollY),
70
+ time,
71
+ easing
72
+ );
73
+ this._onScrollEndCallbacks.fire();
74
+ },
75
+
52
76
  refresh: function() {
53
77
  this.iscroll.refresh();
54
78
  },
@@ -61,16 +85,29 @@
61
85
  this.iscroll.disable();
62
86
  },
63
87
 
88
+ positionX: function() {
89
+ return this.iscroll.x;
90
+ },
91
+
64
92
  positionY: function() {
65
93
  return this.iscroll.y;
66
94
  },
67
95
 
96
+ maxX: function() {
97
+ return this.iscroll.maxScrollX;
98
+ },
99
+
100
+ maxY: function() {
101
+ return this.iscroll.maxScrollY;
102
+ },
103
+
68
104
  onScroll: function(callback) {
69
105
  this.iscroll.on('scroll', callback);
70
106
  },
71
107
 
72
108
  onScrollEnd: function(callback) {
73
109
  this.iscroll.on('scrollEnd', callback);
110
+ this._onScrollEndCallbacks.add(callback);
74
111
  },
75
112
 
76
113
  _initMoveEvents: function() {
@@ -8,6 +8,7 @@
8
8
  //= require ./ui/renderer
9
9
  //= require ./ui/object
10
10
 
11
+ //= require_tree ./ui/utils
11
12
  //= require_tree ./ui/views/mixins
12
13
  //= require ./ui/views/inputs/select_input_view
13
14
  //= require_tree ./ui/views
@@ -1,14 +1,5 @@
1
- (function() {
2
- // Class-y constructor by github.com/opensas
3
- // https://github.com/jashkenas/backbone/issues/2601
1
+ // pageflow.Object is now part of pageflow/base.js and no longer needs
2
+ // to be required by Pageflow extensions. Keep this file for backwards
3
+ // compatibility.
4
4
 
5
- pageflow.Object = function(options) {
6
- this.initialize.apply(this, arguments);
7
- };
8
- _.extend(pageflow.Object.prototype, Backbone.Events, {
9
- initialize: function(options) {}
10
- });
11
-
12
- // The self-propagating extend function that Backbone classes use.
13
- pageflow.Object.extend = Backbone.Model.extend;
14
- }());
5
+ //= require pageflow/object