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
@@ -0,0 +1,5 @@
1
+ class AddConfigurationToChapters < ActiveRecord::Migration
2
+ def change
3
+ add_column :pageflow_chapters, :configuration, :text
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddFeaturesConfigurationToAccounts < ActiveRecord::Migration
2
+ def change
3
+ add_column :pageflow_accounts, :features_configuration, :text
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddFeaturesConfigurationToEntries < ActiveRecord::Migration
2
+ def change
3
+ add_column :pageflow_entries, :features_configuration, :text
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddPasswordAttributesToRevisions < ActiveRecord::Migration
2
+ def change
3
+ add_column :pageflow_revisions, :password_protected, :boolean
4
+ add_column :pageflow_entries, :password_digest, :string
5
+ end
6
+ end
@@ -0,0 +1,14 @@
1
+ class AddFirstPublishedAtToEntries < ActiveRecord::Migration
2
+ def change
3
+ add_column :pageflow_entries, :first_published_at, :datetime
4
+
5
+ execute(<<-SQL)
6
+ UPDATE pageflow_entries SET first_published_at = (
7
+ SELECT MIN(published_at)
8
+ FROM pageflow_revisions
9
+ WHERE pageflow_revisions.entry_id = pageflow_entries.id
10
+ LIMIT 1
11
+ );
12
+ SQL
13
+ end
14
+ end
@@ -8,13 +8,12 @@ Pageflow.configure do |config|
8
8
 
9
9
  # Page types available in the editor. Add futher page types from
10
10
  # page type engines below.
11
- config.register_page_type(Pageflow::BuiltInPageType.background_image)
12
- config.register_page_type(Pageflow::BuiltInPageType.background_video)
13
- config.register_page_type(Pageflow::BuiltInPageType.video)
14
- config.register_page_type(Pageflow::BuiltInPageType.audio)
15
- config.register_page_type(Pageflow::BuiltInPageType.audio_loop)
16
- config.register_page_type(Pageflow::BuiltInPageType.internal_links)
17
- # config.register_page_type(Pageflow::Rainbow::PageType.new)
11
+ config.page_types.register(Pageflow::BuiltInPageType.background_image)
12
+ config.page_types.register(Pageflow::BuiltInPageType.background_video)
13
+ config.page_types.register(Pageflow::BuiltInPageType.video)
14
+ config.page_types.register(Pageflow::BuiltInPageType.audio)
15
+ config.page_types.register(Pageflow::BuiltInPageType.audio_loop)
16
+ # config.page_types.register(Pageflow::Rainbow::PageType.new)
18
17
 
19
18
  # Add custom themes by invoking the pageflow:theme generator and
20
19
  # registering the theme here.
@@ -35,6 +34,16 @@ Pageflow.configure do |config|
35
34
  # pageflow_filesystem_root paperclip interpolation.
36
35
  config.paperclip_filesystem_root = 'tmp/attachments/production'
37
36
 
37
+ # How to handle https requests for URLs which will have assets in the page.
38
+ # If you wish to serve all assets over http and prevent mixed-content warnings,
39
+ # you can force a redirect to http. The inverse is also true: you can force
40
+ # a redirect to https for all http requests.
41
+ #
42
+ # config.public_https_mode = :prevent (default) # => redirects https to http
43
+ # config.public_https_mode = :enforce # => redirects http to https
44
+ # config.public_https_mode = :ignore # => does nothing
45
+ config.public_https_mode = :ignore
46
+
38
47
  # Rewrite the below section to use your favorite configuration
39
48
  # method: ENV variables, secrets.yml, custom yml files. If you use
40
49
  # environment variables consider the dotenv gem to configure your
@@ -48,23 +57,23 @@ Pageflow.configure do |config|
48
57
  # calls are allowed.
49
58
  config.paperclip_s3_default_options.merge!(
50
59
  :s3_credentials => {
51
- :bucket => 'com-example-pageflow-development',
52
- :access_key_id => 'xxx',
53
- :secret_access_key => 'xxx',
54
- :s3_host_name => 's3-eu-west-1.amazonaws.com'
60
+ :bucket => ENV.fetch('S3_BUCKET', 'com-example-pageflow-development'),
61
+ :access_key_id => ENV.fetch('S3_ACCESS_KEY', 'xxx'),
62
+ :secret_access_key => ENV.fetch('S3_SECRET_KEY', 'xxx'),
63
+ :s3_host_name => ENV.fetch('S3_HOST_NAME', 's3-eu-west-1.amazonaws.com')
55
64
  },
56
- :s3_host_alias => 'com-example-pageflow.s3-website-eu-west-1.amazonaws.com',
57
- :s3_protocol => 'http'
65
+ :s3_host_alias => ENV.fetch('S3_HOST_ALIAS', 'com-example-pageflow.s3-website-eu-west-1.amazonaws.com'),
66
+ :s3_protocol => ENV.fetch('S3_PROTOCOL', 'http')
58
67
  )
59
68
 
60
69
  # Default options for paperclip attachments which are supposed to
61
70
  # use filesystem storage. All options allowed in paperclip has_attached_file
62
71
  # calls are allowed.
63
72
  config.zencoder_options.merge!(
64
- :api_key => 'xxx',
65
- :output_bucket => 'com-example-pageflow-out',
66
- :s3_host_alias => 'com-example-pageflow-out.s3-website-eu-west-1.amazonaws.com',
67
- :s3_protocol => 'http',
73
+ :api_key => ENV.fetch('ZENCODER_API_KEY', 'xxx'),
74
+ :output_bucket => ENV.fetch('S3_OUTPUT_BUCKET', 'com-example-pageflow-out'),
75
+ :s3_host_alias => ENV.fetch('S3_OUTPUT_HOST_ALIAS', 'com-example-pageflow-out.s3-website-eu-west-1.amazonaws.com'),
76
+ :s3_protocol => ENV.fetch('S3_PROTOCOL','http'),
68
77
  :attachments_version => 'v1'
69
78
  )
70
79
  end
@@ -13,9 +13,10 @@ module Pageflow
13
13
  directory('images/pageflow/themes/default', themes_path('images', name))
14
14
 
15
15
  template('stylesheets/pageflow/themes/default.css.scss', themes_path('stylesheets', "#{name}.css.scss")) do |content|
16
- content.gsub!('$theme-name: "default";', %Q'$theme-name: "#{name}";')
17
16
  content.gsub!('@import "./default/', %Q'@import "./#{name}/')
18
17
  end
18
+
19
+ gsub_file themes_path('stylesheets', "#{name}/variables.css.scss"), '$theme-name: "default";', %Q'$theme-name: "#{name}";'
19
20
  end
20
21
 
21
22
  private
data/lib/pageflow.rb CHANGED
@@ -1,52 +1,8 @@
1
1
  require "pageflow/engine"
2
+ require "pageflow/global_config_api"
2
3
 
3
4
  module Pageflow
4
- def self.config(options = {})
5
- unless @config
6
- if options[:ignore_not_configured]
7
- return Configuration.new
8
- else
9
- raise('Pageflow has not been configured yet')
10
- end
11
- end
12
- @config
13
- end
14
-
15
- def self.configure(&block)
16
- @configure_blocks ||= []
17
- @configure_blocks << block
18
- end
19
-
20
- def self.configured?
21
- !!@config
22
- end
23
-
24
- def self.configure!
25
- return unless @finalized
26
-
27
- config = Configuration.new
28
- @configure_blocks ||= []
29
-
30
- @configure_blocks.each do |block|
31
- block.call(config)
32
- end
33
-
34
- @after_configure_blocks.each do |block|
35
- block.call(config)
36
- end
37
-
38
- @config = config
39
- end
40
-
41
- def self.finalize!
42
- @finalized = true
43
- configure!
44
- end
45
-
46
- def self.after_configure(&block)
47
- @after_configure_blocks ||= []
48
- @after_configure_blocks << block
49
- end
5
+ extend GlobalConfigApi
50
6
 
51
7
  def self.routes(router)
52
8
  router.instance_eval do
@@ -0,0 +1,18 @@
1
+ module Pageflow
2
+ module Admin
3
+ # @api private
4
+ class FormInput
5
+ attr_reader :attribute_name
6
+
7
+ def initialize(attribute_name, options)
8
+ @attribute_name = attribute_name
9
+ @options = options
10
+ end
11
+
12
+ def build(form_builder)
13
+ options = @options.respond_to?(:call) ? @options.call : @options
14
+ form_builder.input(attribute_name, options)
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,41 @@
1
+ module Pageflow
2
+ module Admin
3
+ # A registry of additional inputs for admin forms.
4
+ #
5
+ # @since 0.9
6
+ class FormInputs
7
+ def initialize
8
+ @resources = {}
9
+ end
10
+
11
+ # Register a proc which adds additional inputs to admin forms.
12
+ #
13
+ # @param resource_name [Symbol] A resource name like `:entry`,
14
+ # `:account` or `:theming`
15
+ # @param attribute_name [Symbol] The name of the additional
16
+ # attribute
17
+ # @param options [Hash] Formtastic options
18
+ def register(resource_name, attribute_name, options = {})
19
+ @resources[resource_name] ||= []
20
+ @resources[resource_name] << FormInput.new(attribute_name, options)
21
+ end
22
+
23
+ # @api private
24
+ def build(resource_name, form_builder)
25
+ find_all_for(resource_name).each do |form_input|
26
+ form_input.build(form_builder)
27
+ end
28
+ end
29
+
30
+ # @api private
31
+ def permitted_attributes_for(resource_name)
32
+ find_all_for(resource_name).map(&:attribute_name)
33
+ end
34
+
35
+ # @api private
36
+ def find_all_for(resource_name)
37
+ @resources.fetch(resource_name, [])
38
+ end
39
+ end
40
+ end
41
+ end
@@ -62,10 +62,6 @@ module Pageflow
62
62
  thumbnail_candidates: video_thumbnail_candidates)
63
63
  end
64
64
 
65
- def self.internal_links
66
- new('internal_links', file_type_models: ['Pageflow::ImageFile'])
67
- end
68
-
69
65
  def self.video
70
66
  new('video',
71
67
  file_type_models: ['Pageflow::ImageFile', 'Pageflow::VideoFile'],
@@ -33,6 +33,22 @@ module Pageflow
33
33
  # new users
34
34
  attr_accessor :mailer_sender
35
35
 
36
+ # Extend the configuration based on feature flags set for accounts
37
+ # or entries.
38
+ #
39
+ # @example
40
+ #
41
+ # Make a page type only available if a feature flag is set on the
42
+ # entry or its account
43
+ #
44
+ # config.features.register('some_special_page_type' do |config
45
+ # config.page_types.register(Pageflow::SomeSpecial.page_type)
46
+ # end
47
+ #
48
+ # @since 0.9
49
+ # @returns [Features}
50
+ attr_reader :features
51
+
36
52
  # Subscribe to hooks in order to be notified of events. Any object
37
53
  # with a call method can be a subscriber
38
54
  #
@@ -60,6 +76,11 @@ module Pageflow
60
76
  # @return [Themes]
61
77
  attr_reader :themes
62
78
 
79
+ # Register new types of pages.
80
+ # @return [PageTypes]
81
+ # @since 0.9
82
+ attr_reader :page_types
83
+
63
84
  # List of {FileType} instances provided by page types.
64
85
  # @return [FileTypes]
65
86
  attr_reader :file_types
@@ -159,14 +180,39 @@ module Pageflow
159
180
  #
160
181
  # config.admin_resource_tabs.register(:entry, Admin::CustomTab)
161
182
  #
162
- # @return [Admin::TabsRegistry]
183
+ # @return [Admin::Tabs]
163
184
  attr_reader :admin_resource_tabs
164
185
 
186
+ # Add custom form fields to admin forms.
187
+ #
188
+ # @example
189
+ #
190
+ # config.admin_form_inputs.register(:entry) do |form|
191
+ # form.input(:custom_field)
192
+ # end
193
+ #
194
+ # @since 0.9
195
+ # @return [Admin::FormInputs]
196
+ attr_reader :admin_form_inputs
197
+
165
198
  # Array of locales which can be chosen as interface language by a
166
199
  # user or for an entry. Defaults to `I18n.available_locales`.
167
200
  # @since 0.7
168
201
  attr_accessor :available_locales
169
202
 
203
+ # How to handle https requests for URLs which will have assets in the page.
204
+ # If you wish to serve all assets over http and prevent mixed-content warnings,
205
+ # you can force a redirect to http. The inverse is also true: you can force
206
+ # a redirect to https for all http requests.
207
+ #
208
+ # @example
209
+ #
210
+ # config.public_https_mode = :prevent (default) # => redirects https to http
211
+ # config.public_https_mode = :enforce # => redirects http to https
212
+ # config.public_https_mode = :ignore # => does nothing
213
+ # @since 0.9
214
+ attr_accessor :public_https_mode
215
+
170
216
  def initialize
171
217
  @paperclip_filesystem_default_options = {validate_media_type: false}
172
218
  @paperclip_s3_default_options = {validate_media_type: false}
@@ -175,9 +221,11 @@ module Pageflow
175
221
 
176
222
  @mailer_sender = 'pageflow@example.com'
177
223
 
224
+ @features = Features.new
178
225
  @hooks = Hooks.new
179
226
  @quotas = Quotas.new
180
227
  @themes = Themes.new
228
+ @page_types = PageTypes.new
181
229
  @file_types = FileTypes.new(page_types)
182
230
  @widget_types = WidgetTypes.new
183
231
  @help_entries = HelpEntries.new
@@ -192,8 +240,11 @@ module Pageflow
192
240
  @confirm_encoding_jobs = false
193
241
 
194
242
  @admin_resource_tabs = Pageflow::Admin::Tabs.new
243
+ @admin_form_inputs = Pageflow::Admin::FormInputs.new
195
244
 
196
245
  @available_locales = Engine.config.i18n.available_locales
246
+
247
+ @public_https_mode = :prevent
197
248
  end
198
249
 
199
250
  # Activate a plugin.
@@ -204,24 +255,10 @@ module Pageflow
204
255
  plugin.configure(self)
205
256
  end
206
257
 
207
- # Make a page type available for use in the system.
258
+ # @deprecated Use `config.page_types.register` instead.
208
259
  def register_page_type(page_type)
209
- page_types << page_type
210
-
211
- @page_types_by_name ||= {}
212
- @page_types_by_name[page_type.name] = page_type
213
- end
214
-
215
- def lookup_page_type(name)
216
- @page_types_by_name.fetch(name)
217
- end
218
-
219
- def page_types
220
- @page_types ||= []
221
- end
222
-
223
- def page_type_names
224
- page_types.map(&:name)
260
+ ActiveSupport::Deprecation.warn('Pageflow::Configuration#register_page_type is deprecated. Use config.page_types.register instead.', caller)
261
+ page_types.register(page_type)
225
262
  end
226
263
 
227
264
  def revision_components
@@ -233,5 +270,24 @@ module Pageflow
233
270
  options = public_entry_url_options
234
271
  options.respond_to?(:call) ? options.call(theming) : options
235
272
  end
273
+
274
+ # @api private
275
+ def enable_features(names)
276
+ features.enable(names, FeatureLevelConfiguration.new(self))
277
+ end
278
+
279
+ # @api private
280
+ def enable_all_features
281
+ features.enable_all(FeatureLevelConfiguration.new(self))
282
+ end
283
+
284
+ # Restricts the configuration interface to those parts which can
285
+ # be used from inside features.
286
+ class FeatureLevelConfiguration < Struct.new(:config)
287
+ delegate :page_types, to: :config
288
+ delegate :widget_types, to: :config
289
+ delegate :help_entries, to: :config
290
+ delegate :admin_form_inputs, to: :config
291
+ end
236
292
  end
237
293
  end
@@ -0,0 +1,33 @@
1
+ module Pageflow
2
+ # Represents a set of configuration changes that can be performed
3
+ # based on account or entry feature flags.
4
+ #
5
+ # @since 0.9
6
+ class Feature
7
+ # Unique identifyer of feature.
8
+ #
9
+ # @return [String]
10
+ attr_reader :name
11
+
12
+ # Create a block based feature.
13
+ #
14
+ # @param name [String] Unique identifyer of feature.
15
+ # @yieldparam config [Configuration] The configuration object to manipulate.
16
+ def initialize(name, &block)
17
+ @name = name
18
+ @block = block
19
+ end
20
+
21
+ # Perform any configuration change that is needed to activate this
22
+ # feature.
23
+ #
24
+ # @param config [Configuration]
25
+ def enable(config)
26
+ @block.call(config) if @block
27
+ end
28
+
29
+ def name_translation_key
30
+ "pageflow.#{name}.feature_name"
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,68 @@
1
+ module Pageflow
2
+ # A registry of [Feature} objects.
3
+ #
4
+ # @since 0.9
5
+ class Features
6
+ include Enumerable
7
+
8
+ # @api private
9
+ def initialize
10
+ @features = {}
11
+ @enabled_features = []
12
+ end
13
+
14
+ # Register a feature that can be enabled for accounts of
15
+ # entries. If the first parameter is a string, a block can be
16
+ # passed to provide the enable method. If only a string is passed,
17
+ # enabling the feature is no-op.
18
+ #
19
+ # @overload register(feature)
20
+ # @param feature [Feature]
21
+ #
22
+ # @overload register(feature)
23
+ # @param feature [String]
24
+ # @yieldparam config [Configuration] Use the block as enable
25
+ # method.
26
+ #
27
+ # @overload register(feature)
28
+ # @param feature [String]
29
+ def register(feature, &block)
30
+ if feature.is_a?(String)
31
+ return register(Feature.new(feature, &block))
32
+ end
33
+
34
+ if @features.key?(feature.name)
35
+ raise(ArgumentError, "Feature #{feature.name} is already registered.")
36
+ end
37
+
38
+ @features[feature.name] = feature
39
+ end
40
+
41
+ # Check if a feature has been enabled.
42
+ #
43
+ # @return [Boolean]
44
+ def enabled?(name)
45
+ @enabled_features.include?(name)
46
+ end
47
+
48
+ # @api private
49
+ def enable(names, config)
50
+ @enabled_features = names
51
+
52
+ names.each do |name|
53
+ raise(ArgumentError, "Cannot enable unknown feature #{name}.") unless @features.key?(name)
54
+
55
+ @features[name].enable(config)
56
+ end
57
+ end
58
+
59
+ # @api private
60
+ def enable_all(config)
61
+ enable(@features.keys, config)
62
+ end
63
+
64
+ def each(&block)
65
+ @features.values.each(&block)
66
+ end
67
+ end
68
+ end