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
@@ -13,6 +13,8 @@ module Pageflow
13
13
  def seed
14
14
  @entry = DraftEntry.find(params[:id])
15
15
  authorize!(:edit, @entry.to_model)
16
+
17
+ @entry_config = Pageflow.config_for(@entry)
16
18
  end
17
19
  end
18
20
  end
@@ -17,6 +17,8 @@ module Pageflow
17
17
  render(action: :check)
18
18
  rescue Quota::ExceededError
19
19
  render(action: :check, status: :forbidden)
20
+ rescue Entry::PasswordMissingError
21
+ head(:bad_request)
20
22
  end
21
23
 
22
24
  def check
@@ -37,7 +39,7 @@ module Pageflow
37
39
  end
38
40
 
39
41
  def entry_publication_params
40
- params.fetch(:entry_publication, {}).permit(:published_until)
42
+ params.fetch(:entry_publication, {}).permit(:published_until, :password, :password_protected)
41
43
  end
42
44
 
43
45
  def published_entries_quota
@@ -1,8 +1,10 @@
1
1
  module Pageflow
2
2
  class EntriesController < Pageflow::ApplicationController
3
+ include PublicHttpsMode
4
+
3
5
  before_filter :authenticate_user!, :except => [:index, :show, :page]
4
6
 
5
- before_filter :prevent_ssl, :only => [:index, :show], :unless => lambda { |controller| controller.request.format.json? }
7
+ before_filter :check_public_https_mode, only: [:index, :show], unless: lambda { |controller| controller.request.format.json? }
6
8
 
7
9
  helper_method :render_to_string
8
10
 
@@ -22,12 +24,15 @@ module Pageflow
22
24
  @entry = PublishedEntry.find(params[:id], entry_request_scope)
23
25
  I18n.locale = @entry.locale
24
26
 
27
+ if request.format.html? && @entry.password_protected?
28
+ check_entry_password(@entry)
29
+ end
30
+
25
31
  if params[:page].present?
26
- @entry.share_target = Page.find_by_perma_id(params[:page])
32
+ @entry.share_target = @entry.pages.find_by_perma_id(params[:page])
27
33
  else
28
34
  @entry.share_target = @entry
29
35
  end
30
-
31
36
  end
32
37
  format.json do
33
38
  authenticate_user!
@@ -61,6 +66,8 @@ module Pageflow
61
66
  def edit
62
67
  @entry = DraftEntry.find(params[:id])
63
68
  authorize!(:edit, @entry.to_model)
69
+
70
+ @entry_config = Pageflow.config_for(@entry)
64
71
  end
65
72
 
66
73
  def update
@@ -83,5 +90,11 @@ module Pageflow
83
90
  def entry_request_scope
84
91
  Pageflow.config.public_entry_request_scope.call(Entry, request)
85
92
  end
93
+
94
+ def check_entry_password(entry)
95
+ authenticate_or_request_with_http_basic('Pageflow') do |_, password|
96
+ entry.authenticate(password)
97
+ end
98
+ end
86
99
  end
87
100
  end
@@ -1,6 +1,8 @@
1
1
  module Pageflow
2
2
  class FilesController < Pageflow::ApplicationController
3
- before_filter :prevent_ssl
3
+ include PublicHttpsMode
4
+
5
+ before_filter :check_public_https_mode
4
6
 
5
7
  def show
6
8
  respond_to do |format|
@@ -0,0 +1,25 @@
1
+ module Pageflow
2
+ module Admin
3
+ module FeaturesHelper
4
+ def feature_state_select_tag(feature_target, feature_name)
5
+ value = FeatureTarget::STATE_MAPPING[feature_target.feature_state(feature_name)]
6
+
7
+ select_tag(feature_state_input_name(feature_target, feature_name),
8
+ options_for_select(feature_states_collection, value))
9
+ end
10
+
11
+ def feature_state_input_name(feature_target, feature_name)
12
+ param_key = feature_target.class.model_name.param_key
13
+ "#{param_key}[feature_states][#{feature_name}]"
14
+ end
15
+
16
+ def feature_states_collection
17
+ {
18
+ I18n.t('pageflow.admin.features.states.undefined') => nil,
19
+ I18n.t('pageflow.admin.features.states.enabled') => FeatureTarget::STATE_MAPPING[true],
20
+ I18n.t('pageflow.admin.features.states.disabled') => FeatureTarget::STATE_MAPPING[false]
21
+ }
22
+ end
23
+ end
24
+ end
25
+ end
@@ -16,7 +16,17 @@ module Pageflow
16
16
  end
17
17
  end
18
18
 
19
+ def background_image_lazy_loading_css_class(prefix, model)
20
+ css_class = [prefix, model.id].join('_')
21
+ ".load_all_images .#{css_class}, .load_image.#{css_class}"
22
+ end
23
+
19
24
  class Div
25
+ FILE_TYPE_CSS_CLASS_PREFIXES = {
26
+ 'image_file' => 'image',
27
+ 'video_file' => 'video_poster',
28
+ }
29
+
20
30
  attr_reader :configuration, :property_base_name, :options
21
31
 
22
32
  delegate :content_tag, :to => :@template
@@ -35,9 +45,10 @@ module Pageflow
35
45
  protected
36
46
 
37
47
  def data_attributes
48
+ options.slice(:style_group)
38
49
  end
39
50
 
40
- def image_id
51
+ def file_id
41
52
  configuration["#{property_base_name}_id"]
42
53
  end
43
54
 
@@ -48,7 +59,15 @@ module Pageflow
48
59
  private
49
60
 
50
61
  def css_class
51
- ["background background_image image_#{image_id || 'none'}", options[:class]].compact.join(' ')
62
+ ["background background_image #{image_css_class}", options[:class]].compact.join(' ')
63
+ end
64
+
65
+ def image_css_class
66
+ [image_css_class_prefix, options[:style_group], file_id || 'none'].compact.join('_')
67
+ end
68
+
69
+ def image_css_class_prefix
70
+ FILE_TYPE_CSS_CLASS_PREFIXES.fetch(options.fetch(:file_type, 'image_file'))
52
71
  end
53
72
 
54
73
  def background_position(coord)
@@ -59,8 +78,10 @@ module Pageflow
59
78
 
60
79
  class DivWithSizeAttributes < Div
61
80
  def data_attributes
62
- if image_file
63
- {:width => image_file.width, :height => image_file.height}
81
+ if file
82
+ super.merge(:width => file.width, :height => file.height)
83
+ else
84
+ super
64
85
  end
65
86
  end
66
87
 
@@ -72,17 +93,27 @@ module Pageflow
72
93
  end
73
94
  end
74
95
 
96
+ private
97
+
75
98
  def padding_top
76
- if image_file
77
- image_file.height / image_file.width.to_f * 100
99
+ if file
100
+ file.height / file.width.to_f * 100
78
101
  else
79
102
  0
80
103
  end
81
104
  end
82
105
 
83
- def image_file
84
- @image_file ||= (ImageFile.find_by_id(image_id) || :none)
85
- @image_file == :none ? nil : @image_file
106
+ def file
107
+ @file ||= (find_file || :none)
108
+ @file == :none ? nil : @file
109
+ end
110
+
111
+ def find_file
112
+ file_type.model.find_by_id(file_id)
113
+ end
114
+
115
+ def file_type
116
+ Pageflow.config.file_types.find_by_collection_name!(options.fetch(:file_type, 'image_file').pluralize)
86
117
  end
87
118
  end
88
119
  end
@@ -1,17 +1,15 @@
1
1
  module Pageflow
2
2
  module EntriesHelper
3
- include RenderJsonHelper
4
-
5
3
  def pretty_entry_url(entry)
6
4
  pageflow.short_entry_url(entry.to_model, Pageflow.config.theming_url_options(entry.theming))
7
5
  end
8
6
 
9
7
  def entry_file_rights(entry)
10
- rights = [:audio_files, :image_files, :video_files].map do |collection|
11
- entry.send(collection).map do |file|
12
- file.rights.presence || entry.account.default_file_rights
8
+ rights = Pageflow.config.file_types.map do |file_type|
9
+ entry.files(file_type.model).map do |file|
10
+ file.rights.presence || entry.account.default_file_rights.presence
13
11
  end
14
- end.flatten.sort.uniq
12
+ end.flatten.compact.sort.uniq
15
13
 
16
14
  if rights.any?
17
15
  content_tag :p, class: 'rights' do
@@ -43,7 +41,12 @@ module Pageflow
43
41
  end
44
42
 
45
43
  def entry_stylesheet_link_tag(entry)
46
- stylesheet_link_tag(polymorphic_path(entry.stylesheet_model, v: entry.stylesheet_cache_key, format: 'css'), media: 'all')
44
+ url = polymorphic_path(entry.stylesheet_model,
45
+ v: entry.stylesheet_cache_key,
46
+ p: Pageflow::VERSION,
47
+ format: 'css')
48
+
49
+ stylesheet_link_tag(url, media: 'all')
47
50
  end
48
51
 
49
52
  def entry_mobile_navigation_pages(entry)
@@ -73,9 +76,5 @@ module Pageflow
73
76
  return '' if entry.summary.blank?
74
77
  strip_tags(entry.summary.gsub(/<br ?\/?>/, ' ').squish)
75
78
  end
76
-
77
- def entry_pages_json_seed(entry)
78
- sanitize_json(entry.pages.to_json(only: [:id, :perma_id, :configuration])).html_safe
79
- end
80
79
  end
81
80
  end
@@ -0,0 +1,44 @@
1
+ module Pageflow
2
+ # Render seed data for published entries.
3
+ #
4
+ # @api private
5
+ module EntryJsonSeedHelper
6
+ include RenderJsonHelper
7
+
8
+ def entry_json_seed(entry)
9
+ seed = {
10
+ theming: entry_theming_seed(entry),
11
+ chapter_configurations: entry_chapter_configurations_seed(entry),
12
+ pages: entry_pages_seed(entry)
13
+ }
14
+
15
+ sanitize_json(seed.to_json).html_safe
16
+ end
17
+
18
+ def entry_theming_seed(entry)
19
+ {
20
+ page_change_by_scrolling: entry.theming.theme.page_change_by_scrolling?,
21
+ hide_text_on_swipe: entry.theming.theme.hide_text_on_swipe?
22
+ }
23
+ end
24
+
25
+ def entry_chapter_configurations_seed(entry)
26
+ entry.chapters.each_with_object({}) do |chapter, result|
27
+ result[chapter.id] = chapter.configuration
28
+ end
29
+ end
30
+
31
+ def entry_pages_seed(entry)
32
+ attributes = [:id, :perma_id, :chapter_id, :configuration]
33
+ entry.pages.as_json(only: attributes)
34
+ end
35
+
36
+ def entry_audio_files_json_seed(entry)
37
+ seed = entry.audio_files.each_with_object({}) do |audio_file, result|
38
+ result[audio_file.id] = audio_file_sources(audio_file)
39
+ end
40
+
41
+ sanitize_json(seed.to_json).html_safe
42
+ end
43
+ end
44
+ end
@@ -1,14 +1,14 @@
1
1
  module Pageflow
2
2
  # @api private
3
3
  module HelpEntriesHelper
4
- def help_entry_sections
4
+ def help_entry_sections(config)
5
5
  render(partial: 'pageflow/help_entries/section',
6
- collection: Pageflow.config.help_entries.flat,
6
+ collection: config.help_entries.flat,
7
7
  as: :help_entry)
8
8
  end
9
9
 
10
- def help_entries_menu
11
- render('pageflow/help_entries/menu', help_entries: Pageflow.config.help_entries)
10
+ def help_entries_menu(config)
11
+ render('pageflow/help_entries/menu', help_entries: config.help_entries)
12
12
  end
13
13
 
14
14
  def help_entry_li(help_entry, &block)
@@ -2,8 +2,10 @@ module Pageflow
2
2
  module PageTypesHelper
3
3
  include RenderJsonHelper
4
4
 
5
- def page_type_json_seeds
6
- render_json_partial('pageflow/page_types/page_type', :collection => Pageflow.config.page_types, :as => :page_type)
5
+ def page_type_json_seeds(config)
6
+ render_json_partial('pageflow/page_types/page_type',
7
+ collection: config.page_types,
8
+ as: :page_type)
7
9
  end
8
10
 
9
11
  def page_type_templates
@@ -5,13 +5,29 @@ module Pageflow
5
5
  classes << 'invert' if page.configuration['invert']
6
6
  classes << 'hide_title' if page.configuration['hide_title']
7
7
  classes << "text_position_#{page.configuration['text_position']}" if page.configuration['text_position'].present?
8
+ classes << "scroll_indicator_mode_#{page.configuration['scroll_indicator_mode']}" if page.configuration['scroll_indicator_mode'].present?
9
+ classes << "scroll_indicator_orientation_#{page.configuration['scroll_indicator_orientation']}" if page.configuration['scroll_indicator_orientation'].present?
10
+ classes << "delayed_text_fade_in_#{page.configuration['delayed_text_fade_in']}" if page.configuration['delayed_text_fade_in'].present?
8
11
  classes << 'chapter_beginning' if page.position == 0
12
+ classes << 'no_text_content' if !page_has_content(page)
9
13
  classes.join(' ')
10
14
  end
11
15
 
16
+ # @api private
17
+ def page_has_content(page)
18
+ has_title = ['title','subtitle','tagline'].any? do |attribute|
19
+ page.configuration[attribute].present?
20
+ end
21
+
22
+ has_text = strip_tags(page.configuration['text']).present?
23
+
24
+ (has_title && !page.configuration['hide_title']) || has_text
25
+ end
26
+
12
27
  def page_navigation_css_class(page)
13
28
  classes = [page.template]
14
29
  classes << 'chapter_beginning' if page.position == 0
30
+ classes << 'emphasized' if page.configuration['emphasize_in_navigation']
15
31
  classes << "chapter_#{page.chapter.position}"
16
32
  page.chapter.position % 2 == 0 ? classes << 'chapter_even' : classes << 'chapter_odd'
17
33
  classes.join(' ')
@@ -19,7 +35,9 @@ module Pageflow
19
35
 
20
36
  def shadow_div(options = {})
21
37
  style = options[:opacity] ? "opacity: #{options[:opacity] / 100.0};" : nil
22
- content_tag(:div, '', :class => 'shadow', :style => style)
38
+ content_tag(:div, '', :class => 'shadow_wrapper') do
39
+ content_tag(:div, '', :class => 'shadow', :style => style)
40
+ end
23
41
  end
24
42
 
25
43
  def mobile_poster_image_div(config = {})
@@ -124,33 +142,8 @@ module Pageflow
124
142
  }
125
143
  end
126
144
 
127
- def page_thumbnail_item(page_ids, index, layout_name)
128
- page_ids ||= {}
129
- page = @entry.pages.find_by_perma_id(page_ids[index.to_s])
130
-
131
- content_tag(:li,
132
- page ? page_thumbnail_link(page, page_thumbnail_hero?(index, layout_name)) : '',
133
- :data => {:reference_key => index},
134
- :class => page ? 'title_hover' : 'title_hover empty')
135
- end
136
-
137
- def page_thumbnail_hero?(index, layout_name)
138
- index == {
139
- 'hero_top_left' => 1,
140
- 'hero_top_right' => 1
141
- }[layout_name]
142
- end
143
-
144
- def page_thumbnail_link(page, hero = false)
145
- link_to(content_tag(:span, raw(page.configuration['description']), :class => 'title'),
146
- "##{page.perma_id}",
147
- :title => page.title,
148
- :data => {:page => page.id},
149
- :class => ['thumbnail', page_thumbnail_image_class(page, hero)] * ' ')
150
- end
151
-
152
145
  def page_thumbnail_image_class(page, hero)
153
- file_thumbnail_css_class(page.thumbnail_file, hero ? :link_thumbnail : :link_thumbnail_large)
146
+ file_thumbnail_css_class(page.thumbnail_file, hero ? :link_thumbnail_large : :link_thumbnail)
154
147
  end
155
148
 
156
149
  CSS_RENDERED_THUMBNAIL_STYLES = [:link_thumbnail, :link_thumbnail_large]
@@ -22,8 +22,8 @@ module Pageflow
22
22
  end.join(' ')
23
23
  end
24
24
 
25
- def widget_types_json_seeds
26
- Pageflow.config.widget_types.each_with_object({}) do |widget_type, result|
25
+ def widget_types_json_seeds(config)
26
+ config.widget_types.each_with_object({}) do |widget_type, result|
27
27
  widget_type.roles.each do |role|
28
28
  result[role] ||= []
29
29
  result[role] << {
@@ -34,8 +34,8 @@ module Pageflow
34
34
  end.to_json.html_safe
35
35
  end
36
36
 
37
- def widget_types_collection_for_role(role)
38
- Pageflow.config.widget_types.find_all_by_role(role).each_with_object({}) do |widget_type, result|
37
+ def widget_types_collection_for_role(config, role)
38
+ config.widget_types.find_all_by_role(role).each_with_object({}) do |widget_type, result|
39
39
  result[I18n.t(widget_type.translation_key)] = widget_type.name
40
40
  end
41
41
  end
@@ -0,0 +1,37 @@
1
+ module Pageflow
2
+ # @api private
3
+ module FeatureTarget
4
+ STATE_MAPPING = {
5
+ true => 'enabled',
6
+ false => 'disabled'
7
+ }
8
+
9
+ extend ActiveSupport::Concern
10
+
11
+ included do
12
+ serialize :features_configuration, JSON
13
+ end
14
+
15
+ def enabled_feature_names
16
+ Pageflow.config.features.select do |feature|
17
+ feature_state(feature.name) == true
18
+ end.map(&:name)
19
+ end
20
+
21
+ def feature_state(name)
22
+ features_configuration[name]
23
+ end
24
+
25
+ def feature_states=(states)
26
+ boolean_states = states.each_with_object({}) do |(key, value), result|
27
+ result[key] = (value == true || value == STATE_MAPPING[true])
28
+ end
29
+
30
+ self.features_configuration = features_configuration.merge(boolean_states)
31
+ end
32
+
33
+ def features_configuration
34
+ super || {}
35
+ end
36
+ end
37
+ end