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
@@ -1,5 +1,7 @@
1
1
  module Pageflow
2
2
  class Account < ActiveRecord::Base
3
+ include FeatureTarget
4
+
3
5
  has_many :users
4
6
  has_many :entries
5
7
  has_many :folders
@@ -5,6 +5,12 @@ module Pageflow
5
5
 
6
6
  delegate :entry, :to => :revision
7
7
 
8
+ serialize :configuration, JSON
9
+
10
+ def configuration
11
+ super || {}
12
+ end
13
+
8
14
  def copy_to(revision)
9
15
  chapter = dup
10
16
  revision.chapters << chapter
@@ -6,7 +6,9 @@ module Pageflow
6
6
 
7
7
  delegate(:id,
8
8
  :edit_lock, :account, :theming, :slug,
9
+ :enabled_feature_names,
9
10
  :published_until, :published?,
11
+ :password_digest,
10
12
  :to_model, :to_key, :persisted?, :to_json,
11
13
  :to => :entry)
12
14
 
@@ -1,5 +1,10 @@
1
1
  module Pageflow
2
2
  class Entry < ActiveRecord::Base
3
+ class PasswordMissingError < StandardError
4
+ end
5
+
6
+ include FeatureTarget
7
+
3
8
  extend FriendlyId
4
9
  friendly_id :slug_candidates, :use => [:finders, :slugged]
5
10
 
@@ -24,13 +29,17 @@ module Pageflow
24
29
 
25
30
  has_one :edit_lock, :dependent => :destroy
26
31
 
32
+ has_secure_password validations: false
33
+
27
34
  validates :account, :theming, :presence => true
28
35
  validate :folder_belongs_to_same_account
29
36
 
30
37
  scope :published, -> { joins(:published_revision) }
31
38
  scope :editing, -> { joins(:edit_lock).merge(Pageflow::EditLock.active) }
32
39
 
33
- after_create do
40
+ attr_accessor :skip_draft_creation
41
+
42
+ after_create unless: :skip_draft_creation do
34
43
  create_draft!(home_button_enabled: theming.home_button_enabled_by_default)
35
44
  theming.widgets.copy_all_to(draft)
36
45
  end
@@ -39,15 +48,25 @@ module Pageflow
39
48
  super || EditLock::Null.new(self)
40
49
  end
41
50
 
42
- def publish(options = {})
43
- revisions.depublish_all
44
- association(:published_revision).reset
51
+ def feature_state(name)
52
+ super(name) || account.feature_state(name)
53
+ end
45
54
 
46
- draft.copy do |revision|
47
- revision.creator = options[:creator]
48
- revision.frozen_at = Time.now
49
- revision.published_at = Time.now
50
- revision.published_until = options[:published_until]
55
+ def publish(options = {})
56
+ ActiveRecord::Base.transaction do
57
+ self.first_published_at ||= Time.now
58
+ update_password!(options.slice(:password, :password_protected))
59
+
60
+ revisions.depublish_all
61
+ association(:published_revision).reset
62
+
63
+ draft.copy do |revision|
64
+ revision.creator = options[:creator]
65
+ revision.frozen_at = Time.now
66
+ revision.published_at = Time.now
67
+ revision.published_until = options[:published_until]
68
+ revision.password_protected = options[:password_protected]
69
+ end
51
70
  end
52
71
  end
53
72
 
@@ -68,9 +87,14 @@ module Pageflow
68
87
  revision.frozen_at = nil
69
88
  revision.published_at = nil
70
89
  revision.published_until = nil
90
+ revision.password_protected = nil
71
91
  end
72
92
  end
73
93
 
94
+ def duplicate
95
+ EntryDuplicate.of(self).create!
96
+ end
97
+
74
98
  def published?
75
99
  published_revision.present?
76
100
  end
@@ -92,5 +116,19 @@ module Pageflow
92
116
  def folder_belongs_to_same_account
93
117
  errors.add(:folder, :must_be_same_account) if folder.present? && folder.account_id != account_id
94
118
  end
119
+
120
+ def update_password!(options)
121
+ if options[:password].present?
122
+ self.password = options[:password]
123
+ end
124
+
125
+ if options[:password_protected]
126
+ raise PasswordMissingError if password_digest.blank?
127
+ else
128
+ self.password_digest = nil
129
+ end
130
+
131
+ save!
132
+ end
95
133
  end
96
134
  end
@@ -0,0 +1,51 @@
1
+ module Pageflow
2
+ class EntryDuplicate < Struct.new(:original_entry)
3
+ def create!
4
+ create_entry
5
+
6
+ copy_draft
7
+ copy_memberships
8
+
9
+ new_entry
10
+ end
11
+
12
+ def self.of(entry)
13
+ new(entry)
14
+ end
15
+
16
+ private
17
+
18
+ attr_reader :new_entry
19
+
20
+ def create_entry
21
+ @new_entry = Entry.create!(new_attributes)
22
+ end
23
+
24
+ def copy_draft
25
+ original_entry.draft.copy do |revision|
26
+ revision.entry = new_entry
27
+ end
28
+ end
29
+
30
+ def copy_memberships
31
+ original_entry.users.each do |member|
32
+ new_entry.memberships.create(user: member)
33
+ end
34
+ end
35
+
36
+ def new_attributes
37
+ {
38
+ title: new_title,
39
+ account: original_entry.account,
40
+ theming: original_entry.theming,
41
+ features_configuration: original_entry.features_configuration,
42
+
43
+ skip_draft_creation: true
44
+ }
45
+ end
46
+
47
+ def new_title
48
+ I18n.t('pageflow.entry.duplicated_title', title: original_entry.title)
49
+ end
50
+ end
51
+ end
@@ -3,19 +3,33 @@ module Pageflow
3
3
  include ImageFileStateMachine
4
4
  include UploadedFile
5
5
 
6
- has_attached_file(:unprocessed_attachment, Pageflow.config.paperclip_s3_default_options)
7
-
8
- has_attached_file(:processed_attachment, Pageflow.config.paperclip_s3_default_options
9
- .merge(:default_url => ':pageflow_placeholder',
10
- :styles => Pageflow.config.thumbnail_styles
11
- .merge(:print => ['300x300>', :JPG],
12
- :medium => ['1024x1024>', :JPG],
13
- :large => ['1920x1920>', :JPG]),
14
- :convert_options => {
15
- :print => "-quality 10 -interlace Plane",
16
- :medium => "-quality 70 -interlace Plane",
17
- :large => "-quality 70 -interlace Plane"
18
- }))
6
+ STYLES = lambda do |attachment|
7
+ panorama_format = File.extname(attachment.original_filename) == '.png' ? :PNG : :JPG
8
+
9
+ Pageflow.config.thumbnail_styles
10
+ .merge(print: ['300x300>', :JPG],
11
+ medium: ['1024x1024>', :JPG],
12
+ large: ['1920x1920>', :JPG],
13
+ panorama_medium: ['1024x1024^', panorama_format],
14
+ panorama_large: ['1920x1080^', panorama_format])
15
+ end
16
+
17
+ CONVERT_OPTIONS = {
18
+ print: '-quality 10 -interlace Plane',
19
+ medium: '-quality 70 -interlace Plane',
20
+ large: '-quality 70 -interlace Plane',
21
+ panorama_medium: '-quality 70 -interlace Plane',
22
+ panorama_large: '-quality 70 -interlace Plane'
23
+ }
24
+
25
+ has_attached_file(:unprocessed_attachment,
26
+ Pageflow.config.paperclip_s3_default_options)
27
+
28
+ has_attached_file(:processed_attachment,
29
+ Pageflow.config.paperclip_s3_default_options
30
+ .merge(default_url: ':pageflow_placeholder',
31
+ styles: STYLES,
32
+ convert_options: CONVERT_OPTIONS))
19
33
 
20
34
  do_not_validate_attachment_file_type(:unprocessed_attachment)
21
35
  do_not_validate_attachment_file_type(:processed_attachment)
@@ -40,6 +54,12 @@ module Pageflow
40
54
  end
41
55
  end
42
56
 
57
+ def panorama_url
58
+ if processed_attachment.present?
59
+ attachment.url(:panorama_large)
60
+ end
61
+ end
62
+
43
63
  private
44
64
 
45
65
  def save_image_dimensions
@@ -4,7 +4,7 @@ module Pageflow
4
4
 
5
5
  attr_accessor :is_first
6
6
 
7
- validates_inclusion_of :template, :in => ->(_) { Pageflow.config.page_type_names }
7
+ validates_inclusion_of :template, :in => ->(_) { Pageflow.config.page_types.names }
8
8
 
9
9
  serialize :configuration, JSON
10
10
 
@@ -25,7 +25,7 @@ module Pageflow
25
25
  end
26
26
 
27
27
  def page_type
28
- Pageflow.config.lookup_page_type(template)
28
+ Pageflow.config.page_types.find_by_name!(template)
29
29
  end
30
30
 
31
31
  def configuration
@@ -6,7 +6,12 @@ module Pageflow
6
6
  attr_reader :entry, :revision
7
7
  attr_accessor :share_target
8
8
 
9
- delegate(:id, :account, :theming, :to_model, :to_key, :persisted?, :to => :entry)
9
+ delegate(:id,
10
+ :account, :theming,
11
+ :enabled_feature_names,
12
+ :to_model, :to_key, :persisted?,
13
+ :authenticate,
14
+ :to => :entry)
10
15
 
11
16
  delegate(:widgets, :chapters, :pages, :files,
12
17
  :image_files, :video_files, :audio_files,
@@ -15,6 +20,7 @@ module Pageflow
15
20
  :emphasize_new_pages,
16
21
  :share_image_id, :share_image_x, :share_image_y,
17
22
  :locale,
23
+ :password_protected?,
18
24
  :to => :revision)
19
25
 
20
26
  def initialize(entry, revision = nil)
@@ -1,7 +1,13 @@
1
1
  <%= semantic_form_for [:admin, resource] do |f| %>
2
+ <% account_config = Pageflow.config_for(f.object) %>
3
+
2
4
  <%= f.inputs do %>
3
5
  <%= f.input :name %>
4
6
  <%= f.input :default_file_rights %>
7
+
8
+ <% account_config.admin_form_inputs.find_all_for(:account).each do |form_input| %>
9
+ <%= form_input.build(f) %>
10
+ <% end %>
5
11
  <% end %>
6
12
 
7
13
  <%= f.semantic_fields_for :default_theming do |theming| %>
@@ -18,13 +24,17 @@
18
24
  <%= theming.input :copyright_link_label %>
19
25
  <%= theming.input :copyright_link_url %>
20
26
 
27
+ <% account_config.admin_form_inputs.find_all_for(:theming).each do |form_input| %>
28
+ <%= form_input.build(theming) %>
29
+ <% end %>
30
+
21
31
  <% theming.object.widgets.resolve(:include_placeholders => true).each do |widget| %>
22
32
  <%= f.semantic_fields_for(widget) do |w| %>
23
33
  <%= w.input(:type_name,
24
34
  :label => t(widget.role, :scope => 'pageflow.widgets.roles'),
25
35
  :input_html => {:name => "widgets[#{widget.role}]"},
26
36
  :include_blank => t('pageflow.widgets.none'),
27
- :collection => widget_types_collection_for_role(widget.role)) %>
37
+ :collection => widget_types_collection_for_role(account_config, widget.role)) %>
28
38
  <% end %>
29
39
  <% end %>
30
40
  <% end %>
@@ -0,0 +1,16 @@
1
+ <%= semantic_form_for [:admin, resource], html: {class: 'features'} do |f| %>
2
+ <%= hidden_field_tag('tab', params[:tab]) %>
3
+
4
+ <%= f.inputs do %>
5
+ <% Pageflow.config.features.each do |feature| %>
6
+ <li>
7
+ <%= label_tag(feature_state_input_name(resource, feature.name),
8
+ t(feature.name_translation_key)) %>
9
+ <%= feature_state_select_tag(resource, feature.name) %>
10
+ </li>
11
+ <% end %>
12
+ <% end %>
13
+ <%= f.actions do %>
14
+ <%= f.action(:submit) %>
15
+ <% end %>
16
+ <% end %>
@@ -0,0 +1,10 @@
1
+ module Pageflow
2
+ module Admin
3
+ class FeaturesTab < ViewComponent
4
+ def build(resource)
5
+ feature_target = resource.is_a?(Theming) ? resource.account : resource
6
+ render('admin/features/form', resource: feature_target)
7
+ end
8
+ end
9
+ end
10
+ end
@@ -32,6 +32,10 @@ module Pageflow
32
32
  column :created_with do |revision|
33
33
  span(I18n.t(revision.created_with, :scope => 'pageflow.admin.entries.revision_created_with'),
34
34
  :title => I18n.t(revision.created_with, :scope => 'pageflow.admin.entries.revision_created_with_hint'))
35
+
36
+ if revision.password_protected?
37
+ span('', :class => 'password_protected', :title => t('pageflow.admin.entries.password_protected'))
38
+ end
35
39
  end
36
40
  column do |revision|
37
41
  text_node(link_to(t('pageflow.admin.entries.show'), pageflow.revision_path(revision), :class => 'show'))
@@ -1,4 +1,4 @@
1
- <meta name="dc.language" content="de" />
1
+ <meta name="dc.language" content="<%= I18n.locale %>" />
2
2
  <meta name="keywords" content="pageflow, multimedia, reportage">
3
3
  <meta name="description" content="">
4
4
  <meta name="author" content="Pageflow">
@@ -17,9 +17,9 @@
17
17
 
18
18
  <%= render 'layouts/pageflow/ie_include_tags' %>
19
19
  </head>
20
- <%= content_tag :body, :class => [@body_class, 'load_images has_no_mobile_platform non_js'].compact.flatten.join(' ') do %>
20
+ <%= content_tag :body, :class => [@body_class, 'load_all_images has_no_mobile_platform non_js'].compact.flatten.join(' ') do %>
21
21
  <script>
22
- jQuery('body').removeClass('load_images');
22
+ jQuery('body').removeClass('load_all_images');
23
23
  jQuery("body").removeClass('non_js').addClass('js');
24
24
  </script>
25
25
  <%= yield %>
@@ -0,0 +1 @@
1
+ json.(account, :name)
@@ -1,9 +1,10 @@
1
- json.(entry, :id, :published_until, :slug)
1
+ json.(entry, :id, :published_until, :slug, :enabled_feature_names)
2
2
 
3
3
  json.pretty_url pretty_entry_url(entry)
4
4
 
5
5
  json.default_file_rights entry.account.default_file_rights
6
6
  json.published(entry.published?)
7
+ json.password_protected(entry.password_digest.present?)
7
8
 
8
9
  json.configuration do
9
10
  json.(entry, :title, :summary, :credits, :manual_start, :emphasize_chapter_beginning, :emphasize_new_pages, :share_image_id, :share_image_x, :share_image_y, :locale)
@@ -1,6 +1,6 @@
1
1
  <div id="help_entries_seed">
2
2
  <nav>
3
- <%= help_entries_menu %>
3
+ <%= help_entries_menu(config) %>
4
4
  </nav>
5
- <%= help_entry_sections %>
5
+ <%= help_entry_sections(config) %>
6
6
  </div>
@@ -0,0 +1,3 @@
1
+ <div id="indicators_seed">
2
+ <%= render('pageflow/entries/indicators', theme: theme) %>
3
+ </div>
@@ -8,7 +8,8 @@
8
8
 
9
9
  "files": <%= files_json_seeds(@entry) %>,
10
10
 
11
+ "account": <%= render_json_seed(@entry.account) %>,
11
12
  "theming": <%= render_json_seed(@entry.theming) %>,
12
- "widget_types": <%= widget_types_json_seeds %>,
13
- "page_types": <%= page_type_json_seeds %>
13
+ "widget_types": <%= widget_types_json_seeds(@entry_config) %>,
14
+ "page_types": <%= page_type_json_seeds(@entry_config) %>
14
15
  }
@@ -5,6 +5,7 @@ end
5
5
  json.entry do
6
6
  json.(@entry_publication.entry, :published_until)
7
7
  json.published(@entry_publication.entry.published?)
8
+ json.password_protected(@entry_publication.entry.password_digest.present?)
8
9
  end
9
10
  json.exhausted_html(render_html_partial('pageflow/editor/quotas/published_entries_exhausted',
10
11
  entry: @entry_publication.entry,
@@ -1,3 +1,3 @@
1
- json.(image_file, :width, :height)
1
+ json.(image_file, :width, :height, :panorama_url)
2
2
 
3
3
  json.dimensions(file_dimensions(image_file))
@@ -1,2 +1,6 @@
1
1
  json.pretty_url pretty_theming_url(theming)
2
2
  json.home_button theming.theme.has_home_button?
3
+ json.page_change_by_scrolling theming.theme.page_change_by_scrolling?
4
+ json.hide_text_on_swipe theming.theme.hide_text_on_swipe?
5
+ json.emphasized_pages theming.theme.supports_emphasized_pages?
6
+ json.scroll_indicator_modes theming.theme.supports_scroll_indicator_modes?