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
@@ -11,6 +11,21 @@ pageflow.EditorApi = pageflow.Object.extend({
11
11
  this.initializers = [];
12
12
  this.fileSelectionHandlers = {};
13
13
 
14
+ /**
15
+ * Display Backbone/Marionette View inside the main panel
16
+ * of the editor.
17
+ */
18
+ this.showViewInMainPanel = function(view) {
19
+ pageflow.app.mainRegion.show(view);
20
+ };
21
+
22
+ /**
23
+ * Display the Pageflow-Preview inside the main panel.
24
+ */
25
+ this.showPreview = function() {
26
+ pageflow.app.mainRegion.$el.empty();
27
+ };
28
+
14
29
  /**
15
30
  * Register additional router and controller for sidebar.
16
31
  *
@@ -44,6 +59,7 @@ pageflow.EditorApi = pageflow.Object.extend({
44
59
  * Supported options:
45
60
  * - translationKey: for the label
46
61
  * - path: route to link to
62
+ * - click: click handler
47
63
  */
48
64
  this.registerMainMenuItem = function(options) {
49
65
  this.mainMenuItems.push(options);
@@ -121,6 +137,14 @@ pageflow.EditorApi = pageflow.Object.extend({
121
137
  this.navigate('/files/' + fileType + '?handler=' + handlerName + '&payload=' + encodeURIComponent(JSON.stringify(payload)), {trigger: true});
122
138
  };
123
139
 
140
+ /**
141
+ * Returns a promise which resolves to a page selected by the
142
+ * user.
143
+ */
144
+ this.selectPage = function() {
145
+ return pageflow.PageSelectionView.selectPage();
146
+ };
147
+
124
148
  /**
125
149
  * Failures API
126
150
  *
@@ -136,6 +160,11 @@ pageflow.EditorApi = pageflow.Object.extend({
136
160
  */
137
161
  this.failures = new pageflow.FailuresAPI();
138
162
 
163
+ /**
164
+ * Setup editor integration for page types.
165
+ */
166
+ this.pageTypes = new pageflow.PageTypes();
167
+
139
168
  /**
140
169
  *
141
170
  */
@@ -0,0 +1,42 @@
1
+ pageflow.PageType = pageflow.Object.extend({
2
+ initialize: function(name, options, seed) {
3
+ this.name = name;
4
+ this.options = options;
5
+ this.seed = seed;
6
+ },
7
+
8
+ translationKey: function() {
9
+ return this.seed.translation_key;
10
+ },
11
+
12
+ thumbnailCandidates: function() {
13
+ return this.seed.thumbnail_candidates;
14
+ },
15
+
16
+ pageLinks: function(configuration) {
17
+ if ('pageLinks' in this.options) {
18
+ return this.options.pageLinks(configuration);
19
+ }
20
+ },
21
+
22
+ configurationEditorView: function() {
23
+ return this.options.configurationEditorView ||
24
+ pageflow.ConfigurationEditorView.repository[this.name];
25
+ },
26
+
27
+ embeddedViews: function() {
28
+ return this.options.embeddedViews;
29
+ },
30
+
31
+ createConfigurationEditorView: function(options) {
32
+ var constructor = this.configurationEditorView();
33
+ options.pageType = this.seed;
34
+
35
+ return new constructor(_.extend({
36
+ attributeTranslationKeyPrefixes: [
37
+ this.seed.translation_key_prefix + '.page_attributes',
38
+ 'pageflow.common_page_attributes'
39
+ ]
40
+ }, options));
41
+ }
42
+ });
@@ -0,0 +1,47 @@
1
+ pageflow.PageTypes = pageflow.Object.extend({
2
+ initialize: function() {
3
+ this.clientSideConfigs = {};
4
+ },
5
+
6
+ register: function(name, config) {
7
+ if (this._setup) {
8
+ throw 'Page types already set up. Register page types before initializers run.';
9
+ }
10
+
11
+ this.clientSideConfigs[name] = config;
12
+ },
13
+
14
+ setup: function(serverSideConfigs) {
15
+ var clientSideConfigs = this.clientSideConfigs;
16
+ this._setup = true;
17
+
18
+ this.pageTypes = _.map(serverSideConfigs, function(serverSideConfig) {
19
+ var clientSideConfig = clientSideConfigs[serverSideConfig.name] || {};
20
+ return new pageflow.PageType(serverSideConfig.name, clientSideConfig, serverSideConfig);
21
+ });
22
+ },
23
+
24
+ findByName: function(name) {
25
+ var result = this.find(function(pageType) {
26
+ return pageType.name === name;
27
+ });
28
+
29
+ if (!result) {
30
+ throw('Could not find page type with name "' + name +'"');
31
+ }
32
+
33
+ return result;
34
+ }
35
+ });
36
+
37
+ _.each(['each', 'map', 'reduce', 'first', 'find', 'pluck'], function(method) {
38
+ pageflow.PageTypes.prototype[method] = function() {
39
+ if (!this._setup) {
40
+ throw 'Page types are not yet set up.';
41
+ }
42
+
43
+ var args = Array.prototype.slice.call(arguments);
44
+ args.unshift(this.pageTypes);
45
+ return _[method].apply(_, args);
46
+ };
47
+ });
@@ -19,6 +19,7 @@
19
19
  //= require ./models/uploaded_file
20
20
  //= require ./models/hosted_file
21
21
  //= require ./models/encoded_file
22
+ //= require ./models/configuration
22
23
  //= require_tree ./models
23
24
  //= require_tree ./collections/mixins
24
25
  //= require ./collections/multi_collection
@@ -29,18 +30,23 @@
29
30
  //= require_tree ./templates
30
31
 
31
32
  //= require_tree ./views/mixins
33
+ //= require ./views/model_thumbnail_view
32
34
  //= require ./views/file_item_view
33
35
  //= require ./views/chapter_item_view
34
36
  //= require ./views/page_item_view
37
+ //= require ./views/inputs/reference_input_view
35
38
  //= require_tree ./views/configuration_editors
36
39
  //= require_tree ./views
37
40
 
38
41
  //= require ./initializers/setup_config
42
+ //= require ./initializers/setup_features
43
+ //= require ./initializers/setup_audio
39
44
  //= require ./initializers/setup_help_entries
40
45
  //= require ./initializers/setup_file_types
41
46
  //= require ./initializers/setup_widget_types
42
47
  //= require ./initializers/setup_collections
43
48
  //= require ./initializers/setup_page_types
49
+ //= require ./initializers/setup_hotkeys
44
50
  //= require ./initializers/edit_lock
45
51
  //= require ./initializers/files_polling
46
52
  //= require ./initializers/routing
@@ -55,7 +61,7 @@ pageflow.startEditor = function(options) {
55
61
  jQuery(function() {
56
62
  $.when(
57
63
  $.getJSON('/editor/entries/' + options.entryId + '/seed'),
58
- pageflow.features.detect()
64
+ pageflow.browser.detectFeatures()
59
65
  )
60
66
  .done(function(result) {
61
67
  pageflow.app.start(result[0]);
@@ -16,10 +16,14 @@ pageflow.SubsetCollection = Backbone.Collection.extend({
16
16
 
17
17
  this.listenTo(this.parent, 'add', function(model, collection, options) {
18
18
  if (!adding && this.filter(model)) {
19
- this.add(model, collection, options);
19
+ this.add(model, options);
20
20
  }
21
21
  });
22
22
 
23
+ this.listenTo(this.parent, 'remove', function(model) {
24
+ this.remove(model);
25
+ });
26
+
23
27
  this.listenTo(this, 'add', function(model, collection, options) {
24
28
  adding = true;
25
29
  this.parent.add(model);
@@ -3,10 +3,16 @@ pageflow.app.addInitializer(function(options) {
3
3
  el: $('body')
4
4
  }).render();
5
5
 
6
- pageflow.app.mainRegion.show(new pageflow.EntryPreviewView({
6
+ new pageflow.ScrollingView({
7
+ el: $('sidebar .scrolling'),
8
+ region: pageflow.app.sidebarRegion
9
+ }).render();
10
+
11
+ pageflow.app.previewRegion.show(new pageflow.EntryPreviewView({
7
12
  model: pageflow.entry
8
13
  }));
9
14
 
15
+ pageflow.app.indicatorsRegion.show(new pageflow.DisabledAtmoIndicatorView().render());
10
16
  pageflow.app.notificationsRegion.show(new pageflow.NotificationsView().render());
11
17
  pageflow.app.helpButtonRegion.show(new pageflow.HelpButtonView().render());
12
18
 
@@ -14,7 +20,9 @@ pageflow.app.addInitializer(function(options) {
14
20
  });
15
21
 
16
22
  pageflow.app.addRegions({
17
- mainRegion: 'main',
23
+ previewRegion: '#entry_preview',
24
+ mainRegion: '#main_content',
25
+ indicatorsRegion: '#editor_indicators',
18
26
  sidebarRegion: 'sidebar .container',
19
27
  dialogRegion: '.dialog_container',
20
28
  notificationsRegion: 'sidebar .notifications_container',
@@ -0,0 +1,8 @@
1
+ pageflow.app.addInitializer(function(options) {
2
+ pageflow.Audio.setup({
3
+ getSources: function(audioFileId) {
4
+ var file = pageflow.audioFiles.get(audioFileId);
5
+ return file ? file.getSources() : '';
6
+ }
7
+ });
8
+ });
@@ -9,6 +9,13 @@ pageflow.app.addInitializer(function(options) {
9
9
  pageflow.chapters = new pageflow.ChaptersCollection(options.chapters);
10
10
  pageflow.entry = new pageflow.Entry(options.entry);
11
11
  pageflow.theming = new pageflow.Theming(options.theming);
12
+ pageflow.account = new Backbone.Model(options.account);
13
+
14
+ pageflow.entryData = new pageflow.PreviewEntryData({
15
+ chapters: pageflow.chapters,
16
+ pages: pageflow.pages,
17
+ theming: pageflow.theming
18
+ });
12
19
 
13
20
  pageflow.pages.sort();
14
21
 
@@ -0,0 +1,3 @@
1
+ pageflow.app.addInitializer(function(options) {
2
+ pageflow.features.enable('editor', options.entry.enabled_feature_names);
3
+ });
@@ -0,0 +1,20 @@
1
+ pageflow.app.addInitializer(function(options) {
2
+ var KEY_A = 65;
3
+ var KEY_X = 88;
4
+
5
+ $(document).on('keydown', function(event) {
6
+ if (event.altKey && event.which === KEY_A) {
7
+ if (pageflow.features.isEnabled('atmo')) {
8
+ if (pageflow.atmo.disabled) {
9
+ pageflow.atmo.enable();
10
+ }
11
+ else {
12
+ pageflow.atmo.disable();
13
+ }
14
+ }
15
+ }
16
+ else if (event.altKey && event.which === KEY_X) {
17
+ pageflow.editor.navigate('pages/' + pageflow.slides.currentPage().data('id'), {trigger: true});
18
+ }
19
+ });
20
+ });
@@ -1,8 +1,3 @@
1
1
  pageflow.app.addInitializer(function(options) {
2
- pageflow.Page.types = options.page_types;
3
-
4
- pageflow.Page.typesByName = _.reduce(options.page_types, function(memo, pageType) {
5
- memo[pageType.name] = pageType;
6
- return memo;
7
- }, {});
2
+ pageflow.editor.pageTypes.setup(options.page_types);
8
3
  });
@@ -1,3 +1,11 @@
1
1
  pageflow.AudioFile = pageflow.EncodedFile.extend({
2
2
  thumbnailPictogram: 'audio',
3
+
4
+ getSources: function(attribute) {
5
+ if (this.isReady()) {
6
+ return this.get('sources') ? this.get('sources') : '';
7
+ }
8
+
9
+ return '';
10
+ },
3
11
  });
@@ -15,6 +15,13 @@ pageflow.Chapter = Backbone.Model.extend({
15
15
  this.save();
16
16
  });
17
17
 
18
+ this.configuration = new pageflow.ChapterConfiguration(this.get('configuration') || {});
19
+
20
+ this.listenTo(this.configuration, 'change', function() {
21
+ this.save();
22
+ this.trigger('change:configuration', this);
23
+ });
24
+
18
25
  return attributes;
19
26
  },
20
27
 
@@ -22,14 +29,26 @@ pageflow.Chapter = Backbone.Model.extend({
22
29
  return this.isNew() ? this.collection.url() : '/chapters';
23
30
  },
24
31
 
25
- addPage: function() {
26
- this.pages.create({
32
+ addPage: function(options) {
33
+ options = options || {};
34
+
35
+ var pos = ('position' in options) ? options.position : this.pages.length;
36
+
37
+ var create_opts = {
27
38
  chapter_id: this.get('id'),
28
- position: this.pages.length
39
+ position: pos
40
+ };
41
+
42
+ return this.pages.create(create_opts);
43
+ },
44
+
45
+ toJSON: function() {
46
+ return _.extend(_.clone(this.attributes), {
47
+ configuration: this.configuration.toJSON()
29
48
  });
30
49
  },
31
50
 
32
51
  destroy: function() {
33
52
  this.destroyWithDelay();
34
53
  }
35
- });
54
+ });
@@ -0,0 +1,7 @@
1
+ pageflow.ChapterConfiguration = pageflow.Configuration.extend({
2
+ modelName: 'chapter',
3
+ i18nKey: 'pageflow/chapter',
4
+
5
+ defaults: {
6
+ }
7
+ });
@@ -22,11 +22,13 @@ pageflow.Configuration = Backbone.Model.extend({
22
22
  return this.parent.id;
23
23
  },
24
24
 
25
- getImageFileUrl: function(attribute) {
25
+ getImageFileUrl: function(attribute, options) {
26
+ options = options || {};
27
+
26
28
  var file = this.getImageFile(attribute);
27
29
 
28
30
  if (file && file.isReady()) {
29
- return file.get('url');
31
+ return file.get(options.styleGroup ? options.styleGroup + '_url' : 'url');
30
32
  }
31
33
 
32
34
  return '';
@@ -110,7 +112,7 @@ pageflow.Configuration = Backbone.Model.extend({
110
112
 
111
113
  return _.map(sources, function(source) {
112
114
  var clone = _.clone(source);
113
- clone.src = clone.src + '?e=' + parent.id;
115
+ clone.src = clone.src + '?e=' + parent.id + '&t=' + new Date().getTime();
114
116
  return clone;
115
117
  });
116
118
  }
@@ -49,11 +49,13 @@ pageflow.Entry = Backbone.Model.extend({
49
49
  });
50
50
  },
51
51
 
52
- addChapter: function() {
53
- this.chapters.create({
52
+ addChapter: function(params) {
53
+ var defaults = {
54
54
  entry_id: this.get('id'),
55
+ title: '',
55
56
  position: this.chapters.length
56
- });
57
+ };
58
+ return this.chapters.create(_.extend(defaults, params));
57
59
  },
58
60
 
59
61
  addFileUpload: function(upload) {
@@ -93,7 +95,7 @@ pageflow.Entry = Backbone.Model.extend({
93
95
 
94
96
  parse: function(response, options) {
95
97
  if (response) {
96
- this.set(_.pick(response, 'published', 'published_until'));
98
+ this.set(_.pick(response, 'published', 'published_until', 'password_protected'));
97
99
 
98
100
  pageflow.editor.fileTypes.each(function(fileType) {
99
101
  this.getFileCollection(fileType).set(response[fileType.collectionName], {add: false, remove: false});
@@ -6,8 +6,8 @@ pageflow.delayedDestroying = {
6
6
  destroyWithDelay: function() {
7
7
  var model = this;
8
8
 
9
- this.trigger('destroying', this);
10
9
  this._destroying = true;
10
+ this.trigger('destroying', this);
11
11
 
12
12
  return Backbone.Model.prototype.destroy.call(this, {
13
13
  wait: true,
@@ -1,8 +1,9 @@
1
1
  pageflow.stageProvider = {
2
2
  initialize: function() {
3
3
  var finishedStates = [this.readyState];
4
+ var stages = _.result(this, 'stages') || [];
4
5
 
5
- this.stages = new Backbone.Collection(_.chain(this).result('stages').slice().reverse().map(function (options) {
6
+ this.stages = new Backbone.Collection(_.chain(stages).slice().reverse().map(function (options) {
6
7
  var name = options.name;
7
8
 
8
9
  options.file = this;
@@ -20,4 +21,4 @@ pageflow.stageProvider = {
20
21
  return stage.get('active') || stage.get('action_required') || stage.get('failed');
21
22
  });
22
23
  }
23
- };
24
+ };