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
@@ -10,14 +10,34 @@ pageflow.EditChapterView = Backbone.Marionette.Layout.extend({
10
10
 
11
11
  events: {
12
12
  'click a.back': 'goBack',
13
- 'click a.destroy': 'destroy',
13
+ 'click a.destroy': 'destroy'
14
14
  },
15
15
 
16
16
  onRender: function() {
17
- this.formContainer.show(new pageflow.TextInputView({
18
- model: this.model,
19
- propertyName: 'title'
20
- }));
17
+ var configurationEditor = new pageflow.ConfigurationEditorView({
18
+ model: this.model.configuration
19
+ });
20
+
21
+ this.configure(configurationEditor);
22
+ this.formContainer.show(configurationEditor);
23
+ },
24
+
25
+ configure: function(configurationEditor) {
26
+ var view = this;
27
+
28
+ configurationEditor.tab('general', function() {
29
+ this.input('title', pageflow.TextInputView, {
30
+ model: view.model
31
+ });
32
+
33
+ if (pageflow.features.isEnabled('chapter_hierachy')) {
34
+ this.input('parent_page_perma_id', pageflow.PageLinkInputView);
35
+ this.input('display_parent_page_button', pageflow.CheckBoxInputView);
36
+ this.input('navigation_bar_mode', pageflow.SelectInputView, {
37
+ values: pageflow.ChapterFilter.strategies
38
+ });
39
+ }
40
+ });
21
41
  },
22
42
 
23
43
  destroy: function() {
@@ -38,6 +38,7 @@ pageflow.EditEntryView = Backbone.Marionette.ItemView.extend({
38
38
  collection: this.model.chapters,
39
39
  itemViewConstructor: pageflow.NavigatableChapterItemView,
40
40
  itemViewOptions: {
41
+ sortable: true,
41
42
  pageItemViewOptions: {
42
43
  displayInNavigationHint: true
43
44
  }
@@ -52,9 +53,16 @@ pageflow.EditEntryView = Backbone.Marionette.ItemView.extend({
52
53
  var item = $('<li><a href="#"></a></li>');
53
54
  var link = item.find('a');
54
55
 
55
- link.data('path', options.path);
56
+ if (options.path) {
57
+ link.data('path', options.path);
58
+ }
56
59
  link.text(I18n.t(options.translationKey));
57
60
 
61
+ if (options.click) {
62
+ $(link).click(options.click);
63
+ }
64
+
65
+
58
66
  view.ui.menu.append(item);
59
67
  });
60
68
  }
@@ -22,8 +22,7 @@ pageflow.EditPageView = Backbone.Marionette.Layout.extend({
22
22
  this.pageTypeContainer.show(new pageflow.ExtendedSelectInputView({
23
23
  model: this.model,
24
24
  propertyName: 'template',
25
-
26
- collection: pageflow.Page.types,
25
+ collection: pageflow.editor.pageTypes.pluck('seed'),
27
26
  valueProperty: 'name',
28
27
  translationKeyProperty: 'translation_key',
29
28
  groupTranslationKeyProperty: 'category_translation_key',
@@ -32,7 +31,8 @@ pageflow.EditPageView = Backbone.Marionette.Layout.extend({
32
31
  pictogramClass: 'type_pictogram',
33
32
 
34
33
  helpLinkClicked: function(value) {
35
- pageflow.app.trigger('toggle-help', pageflow.Page.typesByName[value].help_entry_translation_key);
34
+ var pageType = pageflow.editor.pageTypes.findByName(value);
35
+ pageflow.app.trigger('toggle-help', pageType.seed.help_entry_translation_key);
36
36
  }
37
37
  }));
38
38
 
@@ -41,10 +41,12 @@ pageflow.EditPageView = Backbone.Marionette.Layout.extend({
41
41
  },
42
42
 
43
43
  load: function() {
44
- this.configurationContainer.show(pageflow.ConfigurationEditorView.create(this.model.get('template'), {
44
+ var configurationEditor = this.model.pageType().createConfigurationEditorView({
45
45
  model: this.model.configuration,
46
46
  tab: this.options.tab
47
- }));
47
+ });
48
+
49
+ this.configurationContainer.show(configurationEditor);
48
50
  },
49
51
 
50
52
  destroy: function() {
@@ -12,7 +12,7 @@ pageflow.EditWidgetView = Backbone.Marionette.Layout.extend({
12
12
  },
13
13
 
14
14
  onRender: function() {
15
- var widgetTypes = this.options.widgetTypes[this.model.role()];
15
+ var widgetTypes = this.options.widgetTypes[this.model.role()] || [];
16
16
 
17
17
  this.widgetTypeContainer.show(new pageflow.SelectInputView({
18
18
  model: this.model,
@@ -31,7 +31,10 @@ pageflow.BackgroundImageEmbeddedView = Backbone.Marionette.View.extend({
31
31
  },
32
32
 
33
33
  imageValue: function() {
34
- var url = this.model.getImageFileUrl(this.options.propertyName);
34
+ var url = this.model.getImageFileUrl(this.options.propertyName, {
35
+ styleGroup: this.$el.data('styleGroup')
36
+ });
37
+
35
38
  return url ? 'url("' + url + '")' : 'none';
36
39
  }
37
40
  });
@@ -0,0 +1,41 @@
1
+ pageflow.LazyVideoEmbeddedView = Backbone.Marionette.View.extend({
2
+ modelEvents: {
3
+ 'change': 'update'
4
+ },
5
+
6
+ render: function() {
7
+ this.videoPlayer = this.$el.data('videoPlayer');
8
+
9
+ this.videoPlayer.ready(_.bind(function() {
10
+ this.videoPlayer.src(this.model.getVideoFileSources(this.options.propertyName));
11
+ }, this));
12
+
13
+ this.update();
14
+ return this;
15
+ },
16
+
17
+ update: function() {
18
+ if (this.videoPlayer.isPresent() && this.model.hasChanged(this.options.propertyName)) {
19
+ var paused = this.videoPlayer.paused();
20
+
21
+ this.videoPlayer.src(this.model.getVideoFileSources(this.options.propertyName));
22
+
23
+ if (!paused) {
24
+ this.videoPlayer.play();
25
+ }
26
+ }
27
+
28
+ if (this.options.dataSizeAttributes) {
29
+ var videoFile = this.model.getVideoFile(this.options.propertyName);
30
+
31
+ if (videoFile && videoFile.isReady()) {
32
+ this.$el.attr('data-width', videoFile.get('width'));
33
+ this.$el.attr('data-height', videoFile.get('height'));
34
+ }
35
+ else {
36
+ this.$el.attr('data-width', '16');
37
+ this.$el.attr('data-height', '9');
38
+ }
39
+ }
40
+ }
41
+ });
@@ -20,10 +20,7 @@ pageflow.EntryPreviewView = Backbone.Marionette.ItemView.extend({
20
20
  blankSlateViewConstructor: pageflow.BlankEntryView
21
21
  }));
22
22
 
23
- this.ui.entry.append($('<div class="scroll_indicator indicator">' +
24
- I18n.t('pageflow.editor.views.entry_preview_view.scroll_hint',
25
- {locale: this.model.configuration.get('locale') }) +
26
- '</div>'));
23
+ this.ui.entry.append($('#indicators_seed > *'));
27
24
 
28
25
  this.update();
29
26
 
@@ -41,8 +38,11 @@ pageflow.EntryPreviewView = Backbone.Marionette.ItemView.extend({
41
38
  },
42
39
 
43
40
  onShow: function() {
44
- var slideshow = pageflow.slides = new pageflow.Slideshow(this.ui.entry);
45
- slideshow.update();
41
+ var slideshow = pageflow.Slideshow.setup({
42
+ element: this.ui.entry,
43
+ enabledFeatureNames: pageflow.entry.get('enabled_feature_names'),
44
+ simulateHistory: true
45
+ });
46
46
 
47
47
  this.listenTo(this.model.pages, 'add', function() {
48
48
  slideshow.update();
@@ -0,0 +1,9 @@
1
+ pageflow.PageLinkInputView = pageflow.ReferenceInputView.extend({
2
+ choose: function() {
3
+ return pageflow.editor.selectPage();
4
+ },
5
+
6
+ getTarget: function(permaId) {
7
+ return pageflow.pages.getByPermaId(permaId);
8
+ }
9
+ });
@@ -0,0 +1,66 @@
1
+ pageflow.ReferenceInputView = Backbone.Marionette.ItemView.extend({
2
+ mixins: [pageflow.inputView],
3
+
4
+ template: 'pageflow/editor/templates/inputs/reference',
5
+ className: 'reference_input',
6
+
7
+ ui: {
8
+ title: '.title',
9
+ unsetButton: '.unset'
10
+ },
11
+
12
+ events: {
13
+ 'click .choose': function() {
14
+ var view = this;
15
+
16
+ this.choose().then(function(site) {
17
+ view.model.set(view.options.propertyName, site.get('perma_id'));
18
+ });
19
+
20
+ return false;
21
+ },
22
+
23
+ 'click .unset': function() {
24
+ this.model.unset(this.options.propertyName);
25
+ return false;
26
+ }
27
+ },
28
+
29
+ initialize: function() {
30
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.update);
31
+ },
32
+
33
+ onRender: function() {
34
+ this.update();
35
+ this.listenTo(this.model, 'change:' + this.options.propertyName, this.update);
36
+ },
37
+
38
+ choose: function() {
39
+ throw 'Not implemented: Override ReferenceInputView#choose to return a promise';
40
+ },
41
+
42
+ getTarget: function() {
43
+ throw 'Not implemented: Override ReferenceInputView#getTarget';
44
+ },
45
+
46
+ createThumbnailView: function(target) {
47
+ return new pageflow.ModelThumbnailView({
48
+ model: target
49
+ });
50
+ },
51
+
52
+ update: function() {
53
+ var target = this.getTarget(this.model.get(this.options.propertyName));
54
+
55
+ this.ui.title.text(target ? target.title() : I18n.t('pageflow.editor.views.inputs.reference_input_view.none'));
56
+ this.ui.unsetButton.toggle(!!target);
57
+
58
+ if (this.thumbnailView) {
59
+ this.thumbnailView.close();
60
+ }
61
+
62
+ this.thumbnailView = this.subview(this.createThumbnailView(target));
63
+
64
+ this.ui.title.before(this.thumbnailView.el);
65
+ }
66
+ });
@@ -0,0 +1,95 @@
1
+ /** @api private */
2
+ pageflow.ListItemView = Backbone.Marionette.ItemView.extend({
3
+ template: 'pageflow/editor/templates/list_item',
4
+
5
+ tagName: 'li',
6
+ className: 'list_item',
7
+
8
+ ui: {
9
+ thumbnail: '.list_item_thumbnail',
10
+ typePictogram: '.list_item_type_pictogram',
11
+ title: '.list_item_title',
12
+ description: '.list_item_description',
13
+ editButton: '.list_item_edit_button',
14
+ removeButton: '.list_item_remove_button'
15
+ },
16
+
17
+ events: {
18
+ 'click .list_item_edit_button': function() {
19
+ this.options.onEdit(this.model);
20
+ return false;
21
+ },
22
+
23
+ 'click .list_item_remove_button': function() {
24
+ this.options.onRemove(this.model);
25
+ return false;
26
+ },
27
+
28
+ 'mouseenter': function() {
29
+ if (this.options.highlight) {
30
+ this.model.highlight();
31
+ }
32
+ },
33
+
34
+ 'mouseleave': function() {
35
+ if (this.options.highlight) {
36
+ this.model.resetHighlight();
37
+ }
38
+ }
39
+ },
40
+
41
+ modelEvents: {
42
+ 'change': 'update'
43
+ },
44
+
45
+ onRender: function() {
46
+ this.subview(new pageflow.ModelThumbnailView({
47
+ el: this.ui.thumbnail,
48
+ model: this.model
49
+ }));
50
+
51
+ if (this.options.typeName) {
52
+ this.$el.addClass(this.typeName());
53
+ }
54
+
55
+ this.ui.editButton.toggleClass('is_available', !!this.options.onEdit);
56
+ this.ui.removeButton.toggleClass('is_available', !!this.options.onRemove);
57
+
58
+ this.update();
59
+ },
60
+
61
+ update: function() {
62
+ this.ui.typePictogram.attr('title', this.typeDescription());
63
+
64
+ this.ui.title.text(this.model.title() || I18n.t('pageflow.editor.views.page_link_item_view.unnamed'));
65
+
66
+ this.ui.description.text(this.description());
67
+ this.ui.description.toggle(!!this.description());
68
+
69
+ this.$el.toggleClass('is_invalid', !!this.getOptionResult('isInvalid'));
70
+ },
71
+
72
+ onClose: function() {
73
+ if (this.options.highlight) {
74
+ this.model.resetHighlight();
75
+ }
76
+ },
77
+
78
+ description: function() {
79
+ return this.getOptionResult('description');
80
+ },
81
+
82
+ typeName: function() {
83
+ return this.getOptionResult('typeName');
84
+ },
85
+
86
+ typeDescription: function() {
87
+ return this.getOptionResult('typeDescription');
88
+ },
89
+
90
+ getOptionResult: function(name) {
91
+ return typeof this.options[name] === 'function' ?
92
+ this.options[name](this.model) :
93
+ this.options[name];
94
+ }
95
+ });
@@ -0,0 +1,59 @@
1
+ /**
2
+ * A generic list view with items consisting of a thumbnail, text and
3
+ * possibly some buttons or a navigation arrow.
4
+ *
5
+ * Models inside the collection must implement the following methods:
6
+ *
7
+ * - `title` - A text for the list item.
8
+ * - `thumbnailFile` - The file to use as thumbnail for the list item.
9
+ *
10
+ * @option collection [Backbone.Collection]
11
+ * @option highlight [Boolean]
12
+ * @option sortable [Boolean]
13
+ * @option label [String]
14
+ * @option itemDescription [String|Function]
15
+ * @option itemTypeName [String|Function]
16
+ * @option itemTypeDescription [String|Function]
17
+ * @option itemIsInvalid [String|Function]
18
+ * @option onEdit [Function]
19
+ * @option onRemove [Function]
20
+ */
21
+ pageflow.ListView = Backbone.Marionette.ItemView.extend({
22
+ template: 'pageflow/editor/templates/list',
23
+ className: 'list',
24
+
25
+ ui: {
26
+ label: '.list_label',
27
+ items: '.list_items'
28
+ },
29
+
30
+ onRender: function() {
31
+ var collectionViewConstructor = this.options.sortable ?
32
+ pageflow.SortableCollectionView :
33
+ pageflow.CollectionView;
34
+
35
+ this.subview(new collectionViewConstructor({
36
+ el: this.ui.items,
37
+ collection: this.collection,
38
+
39
+ itemViewConstructor: pageflow.ListItemView,
40
+
41
+ itemViewOptions: _.extend({
42
+ description: this.options.itemDescription,
43
+ typeName: this.options.itemTypeName,
44
+ typeDescription: this.options.itemTypeDescription,
45
+ isInvalid: this.options.itemIsInvalid
46
+ }, _(this.options).pick('onEdit', 'onDelete', 'highlight')),
47
+
48
+ blankSlateViewConstructor: Backbone.Marionette.ItemView.extend({
49
+ tagName: 'li',
50
+ className: 'list_blank_slate',
51
+ template: 'pageflow/editor/templates/list_blank_slate'
52
+ })
53
+ }));
54
+
55
+ this.ui.label.text(this.options.label);
56
+
57
+ this.$el.toggleClass('with_type_pictogram', !!this.options.itemTypeName);
58
+ }
59
+ });
@@ -0,0 +1,5 @@
1
+ pageflow.LoadingView = Backbone.Marionette.ItemView.extend({
2
+ template: 'pageflow/editor/templates/loading',
3
+ className: 'loading',
4
+ tagName: 'li'
5
+ });
@@ -0,0 +1,37 @@
1
+ /**
2
+ * Base thumbnail view for models supporting a `thumbnailFile` method.
3
+ */
4
+ pageflow.ModelThumbnailView = Backbone.Marionette.View.extend({
5
+ className: 'model_thumbnail',
6
+
7
+ modelEvents: {
8
+ 'change:configuration': 'update'
9
+ },
10
+
11
+ render: function() {
12
+ this.update();
13
+ return this;
14
+ },
15
+
16
+ update: function() {
17
+ var file = this.model && this.model.thumbnailFile();
18
+
19
+ if (this.fileThumbnailView && this.currentFileThumbnail == file) {
20
+ return;
21
+ }
22
+
23
+ this.currentFileThumbnail = file;
24
+
25
+ if (this.fileThumbnailView) {
26
+ this.fileThumbnailView.close();
27
+ }
28
+
29
+ this.fileThumbnailView = this.subview(new pageflow.FileThumbnailView({
30
+ model: file,
31
+ className: 'thumbnail file_thumbnail',
32
+ imageUrlPropertyName: this.options.imageUrlPropertyName
33
+ }));
34
+
35
+ this.$el.append(this.fileThumbnailView.el);
36
+ }
37
+ });