pageflow 0.11.4 → 12.0.0.rc1

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 (416) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +224 -1207
  3. data/README.md +7 -3
  4. data/Rakefile +2 -0
  5. data/admins/pageflow/accounts.rb +27 -8
  6. data/admins/pageflow/entry.rb +130 -47
  7. data/admins/pageflow/folder.rb +28 -17
  8. data/admins/pageflow/membership.rb +58 -6
  9. data/admins/pageflow/user.rb +105 -98
  10. data/app/assets/fonts/pageflow/fontawesome-webfont.eot +0 -0
  11. data/app/assets/fonts/pageflow/fontawesome-webfont.svg +644 -463
  12. data/app/assets/fonts/pageflow/fontawesome-webfont.ttf +0 -0
  13. data/app/assets/fonts/pageflow/fontawesome-webfont.woff +0 -0
  14. data/app/assets/fonts/pageflow/sourcesanspro-bold-webfont.eot +0 -0
  15. data/app/assets/fonts/pageflow/sourcesanspro-bold-webfont.svg +2864 -696
  16. data/app/assets/fonts/pageflow/sourcesanspro-bold-webfont.ttf +0 -0
  17. data/app/assets/fonts/pageflow/sourcesanspro-bold-webfont.woff +0 -0
  18. data/app/assets/fonts/pageflow/sourcesanspro-light-webfont.eot +0 -0
  19. data/app/assets/fonts/pageflow/sourcesanspro-light-webfont.svg +2572 -613
  20. data/app/assets/fonts/pageflow/sourcesanspro-light-webfont.ttf +0 -0
  21. data/app/assets/fonts/pageflow/sourcesanspro-light-webfont.woff +0 -0
  22. data/app/assets/fonts/pageflow/sourcesanspro-regular-webfont.eot +0 -0
  23. data/app/assets/fonts/pageflow/sourcesanspro-regular-webfont.svg +2977 -779
  24. data/app/assets/fonts/pageflow/sourcesanspro-regular-webfont.ttf +0 -0
  25. data/app/assets/fonts/pageflow/sourcesanspro-regular-webfont.woff +0 -0
  26. data/app/assets/javascripts/pageflow/admin/entries.js +21 -3
  27. data/app/assets/javascripts/pageflow/audio.js +30 -15
  28. data/app/assets/javascripts/pageflow/audio/multi_player.js +12 -1
  29. data/app/assets/javascripts/pageflow/audio_player.js +15 -1
  30. data/app/assets/javascripts/pageflow/audio_player/rewind_method.js +3 -1
  31. data/app/assets/javascripts/pageflow/base.js +4 -1
  32. data/app/assets/javascripts/pageflow/browser.js +3 -0
  33. data/app/assets/javascripts/pageflow/browser/autoplay_support.js +3 -0
  34. data/app/assets/javascripts/pageflow/browser/facebook.js +1 -2
  35. data/app/assets/javascripts/pageflow/browser/ios_platform.js +5 -0
  36. data/app/assets/javascripts/pageflow/browser/video.js +4 -0
  37. data/app/assets/javascripts/pageflow/components.js +7 -0
  38. data/app/assets/javascripts/pageflow/cookies.js +1 -4
  39. data/app/assets/javascripts/pageflow/dist/react.js +4724 -5808
  40. data/app/assets/javascripts/pageflow/editor/api.js +201 -161
  41. data/app/assets/javascripts/pageflow/editor/api/errors.js +80 -0
  42. data/app/assets/javascripts/pageflow/editor/api/failure.js +9 -0
  43. data/app/assets/javascripts/pageflow/editor/api/failures.js +25 -2
  44. data/app/assets/javascripts/pageflow/editor/api/file_type.js +42 -3
  45. data/app/assets/javascripts/pageflow/editor/api/file_types.js +75 -46
  46. data/app/assets/javascripts/pageflow/editor/base.js +8 -0
  47. data/app/assets/javascripts/pageflow/editor/collections/file_types_collection.js +37 -0
  48. data/app/assets/javascripts/pageflow/editor/collections/files_collection.js +32 -1
  49. data/app/assets/javascripts/pageflow/editor/collections/mixins/ordered_collection.js +1 -1
  50. data/app/assets/javascripts/pageflow/editor/collections/multi_collection.js +4 -6
  51. data/app/assets/javascripts/pageflow/editor/collections/nested_files_collection.js +27 -0
  52. data/app/assets/javascripts/pageflow/editor/collections/pages_collection.js +21 -1
  53. data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +8 -2
  54. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +3 -2
  55. data/app/assets/javascripts/pageflow/editor/initializers/error_listener.js +10 -5
  56. data/app/assets/javascripts/pageflow/editor/initializers/routing.js +3 -1
  57. data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +3 -0
  58. data/app/assets/javascripts/pageflow/editor/initializers/setup_file_types.js +136 -6
  59. data/app/assets/javascripts/pageflow/editor/initializers/setup_file_uploader.js +10 -0
  60. data/app/assets/javascripts/pageflow/editor/initializers/setup_hotkeys.js +5 -7
  61. data/app/assets/javascripts/pageflow/editor/initializers/stylesheet_reloading.js +1 -1
  62. data/app/assets/javascripts/pageflow/editor/models/configuration.js +1 -0
  63. data/app/assets/javascripts/pageflow/editor/models/entry.js +34 -26
  64. data/app/assets/javascripts/pageflow/editor/models/file_configuration.js +10 -0
  65. data/app/assets/javascripts/pageflow/editor/models/file_reuse.js +23 -0
  66. data/app/assets/javascripts/pageflow/editor/models/file_uploader.js +69 -0
  67. data/app/assets/javascripts/pageflow/editor/models/mixins/retryable.js +1 -1
  68. data/app/assets/javascripts/pageflow/editor/models/page.js +13 -0
  69. data/app/assets/javascripts/pageflow/editor/models/text_track_file.js +48 -0
  70. data/app/assets/javascripts/pageflow/editor/models/uploaded_file.js +62 -11
  71. data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +1 -0
  72. data/app/assets/javascripts/pageflow/editor/templates/confirm_upload.jst.ejs +18 -0
  73. data/app/assets/javascripts/pageflow/editor/templates/delete_row_table_cell.jst.ejs +1 -0
  74. data/app/assets/javascripts/pageflow/editor/templates/drop_down_button.jst.ejs +0 -2
  75. data/app/assets/javascripts/pageflow/editor/templates/drop_down_button_item.jst.ejs +1 -0
  76. data/app/assets/javascripts/pageflow/editor/templates/edit_entry.jst.ejs +3 -1
  77. data/app/assets/javascripts/pageflow/editor/templates/edit_file.jst.ejs +0 -0
  78. data/app/assets/javascripts/pageflow/editor/templates/file_item.jst.ejs +1 -6
  79. data/app/assets/javascripts/pageflow/editor/templates/file_meta_data_item_value_view.jst.ejs +3 -0
  80. data/app/assets/javascripts/pageflow/editor/templates/file_settings_dialog.jst.ejs +10 -0
  81. data/app/assets/javascripts/pageflow/editor/templates/files_blank_slate.jst.ejs +1 -1
  82. data/app/assets/javascripts/pageflow/editor/templates/filtered_files.jst.ejs +10 -0
  83. data/app/assets/javascripts/pageflow/{ui → editor}/templates/inputs/file_input.jst.ejs +1 -1
  84. data/app/assets/javascripts/pageflow/editor/templates/inputs/reference.jst.ejs +2 -2
  85. data/app/assets/javascripts/pageflow/editor/templates/nested_files.jst.ejs +1 -0
  86. data/app/assets/javascripts/pageflow/editor/templates/table_cell.jst.ejs +0 -0
  87. data/app/assets/javascripts/pageflow/editor/templates/text_tracks.jst.ejs +13 -0
  88. data/app/assets/javascripts/pageflow/editor/templates/uploadable_files.jst.ejs +1 -0
  89. data/app/assets/javascripts/pageflow/editor/utils/form_data_utils.js +19 -0
  90. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio.js +5 -2
  91. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_image.js +3 -2
  92. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/background.js +35 -0
  93. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/options.js +7 -9
  94. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/video.js +6 -5
  95. data/app/assets/javascripts/pageflow/editor/views/confirm_upload_view.js +69 -0
  96. data/app/assets/javascripts/pageflow/editor/views/confirmable_file_item_view.js +1 -1
  97. data/app/assets/javascripts/pageflow/editor/views/drop_down_button_item_list_view.js +9 -0
  98. data/app/assets/javascripts/pageflow/editor/views/drop_down_button_item_view.js +14 -1
  99. data/app/assets/javascripts/pageflow/editor/views/drop_down_button_view.js +51 -20
  100. data/app/assets/javascripts/pageflow/editor/views/edit_entry_view.js +21 -2
  101. data/app/assets/javascripts/pageflow/editor/views/edit_file_view.js +52 -0
  102. data/app/assets/javascripts/pageflow/editor/views/edit_storyline_view.js +1 -1
  103. data/app/assets/javascripts/pageflow/editor/views/entry_preview_view.js +15 -7
  104. data/app/assets/javascripts/pageflow/editor/views/file_item_view.js +33 -22
  105. data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_value_view.js +49 -0
  106. data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_view.js +16 -5
  107. data/app/assets/javascripts/pageflow/editor/views/file_settings_dialog_view.js +31 -0
  108. data/app/assets/javascripts/pageflow/editor/views/files_explorer_view.js +6 -7
  109. data/app/assets/javascripts/pageflow/editor/views/files_view.js +13 -14
  110. data/app/assets/javascripts/pageflow/editor/views/filtered_files_view.js +75 -0
  111. data/app/assets/javascripts/pageflow/editor/views/help_view.js +3 -0
  112. data/app/assets/javascripts/pageflow/editor/views/inputs/file_input_view.js +217 -0
  113. data/app/assets/javascripts/pageflow/editor/views/inputs/page_link_input_view.js +6 -0
  114. data/app/assets/javascripts/pageflow/editor/views/inputs/reference_input_view.js +13 -2
  115. data/app/assets/javascripts/pageflow/editor/views/list_view.js +24 -14
  116. data/app/assets/javascripts/pageflow/editor/views/model_thumbnail_view.js +4 -1
  117. data/app/assets/javascripts/pageflow/editor/views/nested_files_view.js +94 -0
  118. data/app/assets/javascripts/pageflow/editor/views/page_preview_view.js +7 -2
  119. data/app/assets/javascripts/pageflow/editor/views/text_file_meta_data_item_value_view.js +25 -0
  120. data/app/assets/javascripts/pageflow/editor/views/text_tracks_file_meta_data_item_value_view.js +12 -0
  121. data/app/assets/javascripts/pageflow/editor/views/text_tracks_view.js +65 -0
  122. data/app/assets/javascripts/pageflow/editor/views/uploadable_files_view.js +56 -0
  123. data/app/assets/javascripts/pageflow/editor/views/uploader_view.js +13 -10
  124. data/app/assets/javascripts/pageflow/features.js +8 -12
  125. data/app/assets/javascripts/pageflow/focus_outline.js +2 -0
  126. data/app/assets/javascripts/pageflow/media_player/volume_binding.js +2 -0
  127. data/app/assets/javascripts/pageflow/media_player/volume_fading.js +6 -0
  128. data/app/assets/javascripts/pageflow/page_type.js +0 -1
  129. data/app/assets/javascripts/pageflow/phone_landscape_fullscreen.js +34 -0
  130. data/app/assets/javascripts/pageflow/react.js +4 -0
  131. data/app/assets/javascripts/pageflow/ready.js +3 -0
  132. data/app/assets/javascripts/pageflow/seed_entry_data.js +4 -1
  133. data/app/assets/javascripts/pageflow/slideshow.js +1 -0
  134. data/app/assets/javascripts/pageflow/slideshow/adjacent_preparer.js +7 -5
  135. data/app/assets/javascripts/pageflow/slideshow/atmo.js +3 -3
  136. data/app/assets/javascripts/pageflow/slideshow/hidden_text_indicator_widget.js +4 -2
  137. data/app/assets/javascripts/pageflow/slideshow/hide_text.js +8 -4
  138. data/app/assets/javascripts/pageflow/slideshow/lazy_page_widget.js +5 -0
  139. data/app/assets/javascripts/pageflow/slideshow/scroller_widget.js +11 -18
  140. data/app/assets/javascripts/pageflow/ui.js +6 -0
  141. data/app/assets/javascripts/pageflow/ui/templates/inputs/url_display.jst.ejs +7 -0
  142. data/app/assets/javascripts/pageflow/ui/templates/table.jst.ejs +7 -0
  143. data/app/assets/javascripts/pageflow/ui/templates/table_blank_slate.jst.ejs +3 -0
  144. data/app/assets/javascripts/pageflow/ui/utils/i18n_utils.js +97 -2
  145. data/app/assets/javascripts/pageflow/ui/views/collection_view.js +8 -1
  146. data/app/assets/javascripts/pageflow/ui/views/inputs/check_box_input_view.js +12 -1
  147. data/app/assets/javascripts/pageflow/ui/views/inputs/proxy_url_input_view.js +51 -5
  148. data/app/assets/javascripts/pageflow/ui/views/inputs/select_input_view.js +80 -2
  149. data/app/assets/javascripts/pageflow/ui/views/inputs/slider_input_view.js +8 -1
  150. data/app/assets/javascripts/pageflow/ui/views/inputs/text_area_input_view.js +17 -1
  151. data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +47 -4
  152. data/app/assets/javascripts/pageflow/ui/views/inputs/url_display_view.js +42 -0
  153. data/app/assets/javascripts/pageflow/ui/views/inputs/url_input_view.js +20 -2
  154. data/app/assets/javascripts/pageflow/ui/views/mixins/input_view.js +74 -46
  155. data/app/assets/javascripts/pageflow/ui/views/table_cells/delete_row_table_cell_view.js +63 -0
  156. data/app/assets/javascripts/pageflow/ui/views/table_cells/enum_table_cell_view.js +26 -0
  157. data/app/assets/javascripts/pageflow/ui/views/table_cells/icon_table_cell_view.js +40 -0
  158. data/app/assets/javascripts/pageflow/ui/views/table_cells/presence_table_cell_view.js +31 -0
  159. data/app/assets/javascripts/pageflow/ui/views/table_cells/table_cell_view.js +101 -0
  160. data/app/assets/javascripts/pageflow/ui/views/table_cells/table_header_cell_view.js +10 -0
  161. data/app/assets/javascripts/pageflow/ui/views/table_cells/text_table_cell_view.js +46 -0
  162. data/app/assets/javascripts/pageflow/ui/views/table_row_view.js +47 -0
  163. data/app/assets/javascripts/pageflow/ui/views/table_view.js +47 -0
  164. data/app/assets/javascripts/pageflow/video_player.js +9 -5
  165. data/app/assets/javascripts/pageflow/video_player/buffer_underrun_waiting.js +15 -13
  166. data/app/assets/javascripts/pageflow/video_player/cue_settings_methods.js +33 -0
  167. data/app/assets/javascripts/pageflow/video_player/dash.js +3 -0
  168. data/app/assets/javascripts/pageflow/video_player/filter_sources.js +1 -1
  169. data/app/assets/javascripts/pageflow/video_player/lazy.js +3 -9
  170. data/app/assets/javascripts/pageflow/video_player/prebuffering.js +11 -2
  171. data/app/assets/javascripts/pageflow/video_player/use_slim_controls_during_phone_playback.js +16 -0
  172. data/app/assets/javascripts/pageflow/videojs.js +6 -0
  173. data/app/assets/javascripts/pageflow/widgets.js +41 -7
  174. data/app/assets/stylesheets/pageflow/admin.scss +7 -4
  175. data/app/assets/stylesheets/pageflow/admin/{entries/user_badge_list.scss → badge_list.scss} +6 -9
  176. data/app/assets/stylesheets/pageflow/admin/embed_code.scss +13 -0
  177. data/app/assets/stylesheets/pageflow/admin/entries.scss +1 -2
  178. data/app/assets/stylesheets/pageflow/admin/hint.scss +20 -0
  179. data/app/assets/stylesheets/pageflow/admin/tooltip_bubble.scss +34 -0
  180. data/app/assets/stylesheets/pageflow/editor/base.scss +4 -4
  181. data/app/assets/stylesheets/pageflow/editor/confirm_upload.scss +66 -0
  182. data/app/assets/stylesheets/pageflow/editor/dialogs.scss +9 -1
  183. data/app/assets/stylesheets/pageflow/editor/drop_down_button.scss +56 -20
  184. data/app/assets/stylesheets/pageflow/editor/file_meta_data.scss +26 -6
  185. data/app/assets/stylesheets/pageflow/editor/file_settings_dialog.scss +32 -0
  186. data/app/assets/stylesheets/pageflow/editor/files.scss +5 -0
  187. data/app/assets/stylesheets/pageflow/editor/filtered_files.scss +25 -0
  188. data/app/assets/stylesheets/pageflow/editor/inputs.scss +2 -1
  189. data/app/assets/stylesheets/pageflow/editor/inputs/file_input.scss +65 -0
  190. data/app/assets/stylesheets/pageflow/editor/inputs/reference.scss +2 -2
  191. data/app/assets/stylesheets/pageflow/editor/text_tracks.scss +39 -0
  192. data/app/assets/stylesheets/pageflow/entries.scss +1 -0
  193. data/app/assets/stylesheets/pageflow/mixins/buttons.scss +77 -5
  194. data/app/assets/stylesheets/pageflow/mixins/icons/fontawesome.scss +3 -1
  195. data/app/assets/stylesheets/pageflow/page_types.scss +0 -4
  196. data/app/assets/stylesheets/pageflow/page_types/video.scss +5 -1
  197. data/app/assets/stylesheets/pageflow/page_types/video/content_hiding.scss +1 -0
  198. data/app/assets/stylesheets/pageflow/themes/default/base.scss +1 -0
  199. data/app/assets/stylesheets/pageflow/themes/default/built_in_page_types.scss +0 -2
  200. data/app/assets/stylesheets/pageflow/themes/default/definitions.scss +1 -0
  201. data/app/assets/stylesheets/pageflow/themes/default/loading_spinner.scss +31 -12
  202. data/app/assets/stylesheets/pageflow/themes/default/logo.scss +9 -1
  203. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/background_image.scss +8 -2
  204. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/watermark.scss +21 -0
  205. data/app/assets/stylesheets/pageflow/themes/default/mixins/cue_margins.scss +43 -0
  206. data/app/assets/stylesheets/pageflow/themes/default/mixins/indicator_typography.scss +7 -3
  207. data/app/assets/stylesheets/pageflow/themes/default/page.scss +20 -2
  208. data/app/assets/stylesheets/pageflow/themes/default/player_controls.scss +4 -0
  209. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic.scss +4 -0
  210. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/container.scss +8 -6
  211. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/control_bar.scss +18 -3
  212. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/cue_margins.scss +1 -0
  213. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/icons/custom.scss +14 -0
  214. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/icons/icon_font.scss +4 -0
  215. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/icons/sprite.scss +4 -0
  216. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/info_box.scss +2 -2
  217. data/app/assets/stylesheets/pageflow/themes/default/player_controls/classic/menu_bar.scss +5 -0
  218. data/app/assets/stylesheets/pageflow/themes/default/player_controls/shared/menu_bar.scss +121 -0
  219. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim.scss +2 -0
  220. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/container.scss +2 -0
  221. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/control_bar.scss +74 -12
  222. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/cue_margins.scss +3 -0
  223. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/info_box.scss +31 -5
  224. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/menu_bar.scss +13 -0
  225. data/app/assets/stylesheets/pageflow/themes/default/player_controls/slim/quality_menu.scss +116 -0
  226. data/app/assets/stylesheets/pageflow/themes/default/player_controls/vjs_mapping.scss +13 -3
  227. data/app/assets/stylesheets/pageflow/themes/default/player_controls/widget_margins.scss +8 -3
  228. data/app/assets/stylesheets/pageflow/themes/default/text_track_cues.scss +25 -0
  229. data/app/assets/stylesheets/pageflow/themes/default/variables/widgets.scss +2 -2
  230. data/app/assets/stylesheets/pageflow/themes/default/video_player/vjs_base.scss +122 -79
  231. data/app/assets/stylesheets/pageflow/themes/default/video_wrapper.scss +16 -7
  232. data/app/assets/stylesheets/pageflow/ui.scss +5 -1
  233. data/app/assets/stylesheets/pageflow/ui/forms.scss +5 -58
  234. data/app/assets/stylesheets/pageflow/ui/table_cells/delete_row_table_cell.scss +7 -0
  235. data/app/assets/stylesheets/pageflow/ui/table_cells/icon_table_cell.scss +16 -0
  236. data/app/assets/stylesheets/pageflow/ui/table_cells/presence_table_cell.scss +8 -0
  237. data/app/assets/stylesheets/pageflow/ui/table_view.scss +33 -0
  238. data/app/assets/stylesheets/pageflow/ui/tooltip.scss +1 -1
  239. data/app/controllers/pageflow/editor/encoding_confirmations_controller.rb +3 -3
  240. data/app/controllers/pageflow/editor/entry_publications_controller.rb +3 -3
  241. data/app/controllers/pageflow/editor/files_controller.rb +72 -14
  242. data/app/controllers/pageflow/editor/widgets_controller.rb +1 -1
  243. data/app/controllers/pageflow/entries_controller.rb +12 -2
  244. data/app/controllers/pageflow/files_controller.rb +1 -1
  245. data/app/helpers/pageflow/admin/entries_helper.rb +17 -0
  246. data/app/helpers/pageflow/admin/form_helper.rb +1 -1
  247. data/app/helpers/pageflow/admin/memberships_helper.rb +117 -13
  248. data/app/helpers/pageflow/common_entry_seed_helper.rb +36 -5
  249. data/app/helpers/pageflow/embed_code_helper.rb +32 -0
  250. data/app/helpers/pageflow/entries_helper.rb +1 -1
  251. data/app/helpers/pageflow/entry_json_seed_helper.rb +6 -16
  252. data/app/helpers/pageflow/files_helper.rb +5 -2
  253. data/app/helpers/pageflow/folders_helper.rb +26 -2
  254. data/app/helpers/pageflow/page_background_asset_helper.rb +8 -0
  255. data/app/helpers/pageflow/quota_helper.rb +1 -1
  256. data/app/helpers/pageflow/video_files_helper.rb +0 -5
  257. data/app/jobs/pageflow/poll_zencoder_job.rb +1 -1
  258. data/app/jobs/pageflow/process_file_job.rb +18 -0
  259. data/app/mailers/pageflow/user_mailer.rb +4 -2
  260. data/app/models/concerns/pageflow/hosted_file.rb +9 -0
  261. data/app/models/concerns/pageflow/output_source.rb +60 -0
  262. data/app/models/concerns/pageflow/uploaded_file.rb +33 -5
  263. data/app/models/pageflow/account.rb +3 -1
  264. data/app/models/pageflow/audio_file_url_templates.rb +21 -0
  265. data/app/models/pageflow/draft_entry.rb +19 -9
  266. data/app/models/pageflow/entry.rb +2 -1
  267. data/app/models/pageflow/entry_duplicate.rb +2 -2
  268. data/app/models/pageflow/entry_role_query.rb +81 -0
  269. data/app/models/pageflow/file_reuse.rb +25 -0
  270. data/app/models/pageflow/file_usage.rb +7 -1
  271. data/app/models/pageflow/image_file.rb +7 -1
  272. data/app/models/pageflow/image_file_url_templates.rb +19 -0
  273. data/app/models/pageflow/invited_user.rb +2 -0
  274. data/app/models/pageflow/membership.rb +46 -3
  275. data/app/models/pageflow/published_entry.rb +2 -2
  276. data/app/models/pageflow/revision.rb +16 -5
  277. data/app/models/pageflow/roles.rb +36 -0
  278. data/app/models/pageflow/text_track_file.rb +45 -0
  279. data/app/models/pageflow/text_track_file_url_templates.rb +16 -0
  280. data/app/models/pageflow/thumbnail_file_resolver.rb +22 -2
  281. data/app/models/pageflow/url_template.rb +13 -0
  282. data/app/models/pageflow/used_file.rb +21 -0
  283. data/app/models/pageflow/video_file.rb +72 -27
  284. data/app/models/pageflow/video_file_url_templates.rb +34 -0
  285. data/app/policies/pageflow/account_policy.rb +145 -0
  286. data/app/policies/pageflow/admin/admin_only_tab_policy.rb +16 -0
  287. data/app/policies/pageflow/admin/entry_tab_policy.rb +25 -0
  288. data/app/policies/pageflow/application_policy.rb +11 -0
  289. data/app/policies/pageflow/entry_policy.rb +138 -0
  290. data/app/policies/pageflow/file_policy.rb +42 -0
  291. data/app/policies/pageflow/folder_policy.rb +54 -0
  292. data/app/policies/pageflow/membership_policy.rb +105 -0
  293. data/app/policies/pageflow/theming_policy.rb +57 -0
  294. data/app/policies/pageflow/user_policy.rb +69 -0
  295. data/app/state_machines/pageflow/encoded_file_state_machine.rb +4 -0
  296. data/app/state_machines/pageflow/image_file_state_machine.rb +5 -1
  297. data/app/views/admin/entries/_attributes_table.html.arb +21 -2
  298. data/app/views/admin/entries/_links.html.arb +1 -1
  299. data/app/views/admin/memberships/_entity_account_input.html.erb +5 -0
  300. data/app/views/admin/memberships/_entity_entry_input.html.erb +5 -0
  301. data/app/views/admin/memberships/_form.html.erb +16 -5
  302. data/app/views/admin/memberships/_role_hint.html.arb +2 -0
  303. data/app/views/admin/users/_form.html.erb +29 -20
  304. data/app/views/components/pageflow/admin/add_membership_button_if_needed.rb +62 -0
  305. data/app/views/components/pageflow/admin/embed_code_field.rb +15 -0
  306. data/app/views/components/pageflow/admin/entry_user_badge_list.rb +15 -7
  307. data/app/views/components/pageflow/admin/grouped_folder_list.rb +20 -16
  308. data/app/views/components/pageflow/admin/members_tab.rb +22 -11
  309. data/app/views/components/pageflow/admin/membership_role_with_tooltip.rb +21 -0
  310. data/app/views/components/pageflow/admin/tabs_view.rb +13 -13
  311. data/app/views/components/pageflow/admin/user_account_badge_list.rb +43 -0
  312. data/app/views/components/pageflow/admin/user_accounts_tab.rb +46 -0
  313. data/app/views/components/pageflow/admin/user_entries_tab.rb +50 -0
  314. data/app/views/components/pageflow/admin/users_tab.rb +32 -4
  315. data/app/views/layouts/pageflow/application.html.erb +3 -2
  316. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +15 -2
  317. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -0
  318. data/app/views/pageflow/editor/files/_file.json.jbuilder +10 -2
  319. data/app/views/pageflow/entries/show.css.erb +4 -11
  320. data/app/views/pageflow/entries/show.json.jbuilder +1 -1
  321. data/app/views/pageflow/entry_json_seed/_entry.json.jbuilder +19 -0
  322. data/app/views/pageflow/file_types/_thumbnails.css.erb +1 -1
  323. data/app/views/pageflow/files/_file.json.jbuilder +12 -0
  324. data/app/views/pageflow/page_background_asset/_element.html.erb +3 -0
  325. data/app/views/pageflow/page_types/_page_type.json.jbuilder +7 -0
  326. data/app/views/pageflow/react/_widget.html.erb +1 -0
  327. data/app/views/pageflow/react/page.html.erb +6 -0
  328. data/app/views/pageflow/video_files/_video_file.json.jbuilder +2 -0
  329. data/config/initializers/admin_resource_tabs.rb +8 -1
  330. data/config/initializers/features.rb +1 -4
  331. data/config/initializers/help_entries.rb +2 -1
  332. data/config/initializers/paperclip.rb +4 -0
  333. data/config/initializers/zencoder.rb +5 -2
  334. data/config/locales/de.yml +370 -108
  335. data/config/locales/en.yml +333 -83
  336. data/config/routes.rb +18 -10
  337. data/db/migrate/20150825133449_update_audio_loop_pages_to_use_atmo.rb +24 -0
  338. data/db/migrate/20160304072911_rename_membership_entry_and_make_polymorphic.rb +19 -0
  339. data/db/migrate/20160304151327_add_role_to_membership.rb +19 -0
  340. data/db/migrate/20160504093145_replace_role_and_account_on_user.rb +42 -0
  341. data/db/migrate/20160531152500_update_users_count.rb +27 -0
  342. data/db/migrate/20160707125400_add_output_presences_to_video_files.rb +5 -0
  343. data/db/migrate/20160824115000_add_parent_file_to_video_files.rb +8 -0
  344. data/db/migrate/20160824115100_add_parent_file_to_audio_files.rb +8 -0
  345. data/db/migrate/20160824115200_add_parent_file_to_image_files.rb +8 -0
  346. data/db/migrate/20160929102700_add_configuration_to_files.rb +7 -0
  347. data/db/migrate/20161007144500_add_text_track_files.rb +31 -0
  348. data/db/migrate/20161216175734_move_configuration_from_file_to_file_usage.rb +27 -0
  349. data/db/migrate/20161230144429_add_processed_attachment_to_text_track_files.rb +8 -0
  350. data/db/migrate/20170222124848_update_video_file_output_presences.rb +12 -0
  351. data/db/migrate/20170421112300_turn_background_video_pages_into_background_image_pages.rb +22 -0
  352. data/lib/generators/pageflow/assets/assets_generator.rb +2 -0
  353. data/lib/generators/pageflow/assets/templates/components.js +4 -0
  354. data/lib/generators/pageflow/initializer/templates/pageflow.rb +23 -20
  355. data/lib/generators/pageflow/seeds/templates/seeds.rb +81 -15
  356. data/lib/pageflow.rb +8 -0
  357. data/lib/pageflow/ability_mixin.rb +196 -62
  358. data/lib/pageflow/admin/tab.rb +21 -0
  359. data/lib/pageflow/admin/tabs.rb +31 -6
  360. data/lib/pageflow/built_in_file_type.rb +39 -0
  361. data/lib/pageflow/built_in_page_types_plugin.rb +80 -0
  362. data/lib/pageflow/configuration.rb +13 -1
  363. data/lib/pageflow/engine.rb +6 -1
  364. data/lib/pageflow/file_type.rb +60 -15
  365. data/lib/pageflow/file_types.rb +20 -2
  366. data/lib/pageflow/page_type.rb +53 -4
  367. data/lib/pageflow/page_types.rb +4 -0
  368. data/lib/pageflow/paperclip_processors/vtt.rb +35 -0
  369. data/lib/pageflow/react.rb +11 -0
  370. data/lib/pageflow/react/page_type.rb +26 -0
  371. data/lib/pageflow/react/widget_type.rb +20 -0
  372. data/lib/pageflow/seeds.rb +59 -15
  373. data/lib/pageflow/user_mixin.rb +18 -25
  374. data/lib/pageflow/version.rb +1 -1
  375. data/lib/pageflow/zencoder_api.rb +18 -4
  376. data/lib/pageflow/zencoder_video_output_definition.rb +375 -127
  377. data/lib/tasks/pageflow_tasks.rake +7 -0
  378. data/spec/factories/accounts.rb +36 -3
  379. data/spec/factories/entries.rb +22 -4
  380. data/spec/factories/invited_user.rb +3 -4
  381. data/spec/factories/memberships.rb +34 -2
  382. data/spec/factories/text_track_files.rb +40 -0
  383. data/spec/factories/users.rb +32 -7
  384. data/spec/factories/video_files.rb +7 -1
  385. data/spec/fixtures/sample.srt +12 -0
  386. data/spec/fixtures/sample.vtt +40 -0
  387. data/vendor/assets/javascripts/dash.all.min.js +14 -0
  388. data/vendor/assets/javascripts/polyfills/bind.js +17 -11
  389. data/vendor/assets/javascripts/videojs-dash.js +302 -0
  390. data/vendor/assets/javascripts/videojs.js +26804 -0
  391. metadata +187 -49
  392. data/app/assets/images/pageflow/themes/default/page_type_pictograms/audio_loop/sprite.png +0 -0
  393. data/app/assets/images/pageflow/themes/default/page_type_pictograms/audio_loop/wide.png +0 -0
  394. data/app/assets/javascripts/pageflow/editor/collections/file_usages_collection.js +0 -21
  395. data/app/assets/javascripts/pageflow/editor/models/file_usage.js +0 -8
  396. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/audio_loop.js +0 -20
  397. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/background_video.js +0 -24
  398. data/app/assets/javascripts/pageflow/page_types/audio.js +0 -135
  399. data/app/assets/javascripts/pageflow/page_types/audio_loop.js +0 -102
  400. data/app/assets/javascripts/pageflow/page_types/background_image.js +0 -44
  401. data/app/assets/javascripts/pageflow/page_types/background_video.js +0 -137
  402. data/app/assets/javascripts/pageflow/page_types/video.js +0 -277
  403. data/app/assets/javascripts/pageflow/ui/views/inputs/file_input_view.js +0 -79
  404. data/app/assets/javascripts/pageflow/video_player/play_button_patch.js +0 -39
  405. data/app/assets/javascripts/pageflow/video_player/player_buffered_patch.js +0 -47
  406. data/app/assets/javascripts/pageflow/video_player/src_from_options_method.js +0 -31
  407. data/app/assets/stylesheets/pageflow/page_types/audio_loop.scss +0 -18
  408. data/app/assets/stylesheets/pageflow/page_types/background-video.scss +0 -50
  409. data/app/controllers/pageflow/editor/file_usages_controller.rb +0 -37
  410. data/app/jobs/pageflow/process_image_file_job.rb +0 -18
  411. data/app/views/pageflow/pages/templates/_audio.html.erb +0 -69
  412. data/app/views/pageflow/pages/templates/_audio_loop.html.erb +0 -34
  413. data/app/views/pageflow/pages/templates/_background_image.html.erb +0 -24
  414. data/app/views/pageflow/pages/templates/_background_video.html.erb +0 -32
  415. data/app/views/pageflow/pages/templates/_video.html.erb +0 -42
  416. data/lib/pageflow/built_in_page_type.rb +0 -79
@@ -3,186 +3,226 @@
3
3
 
4
4
  /**
5
5
  * Interface for engines providing editor extensions.
6
+ * @alias pageflow.editor
7
+ * @memberof module:pageflow/editor
6
8
  */
7
- pageflow.EditorApi = pageflow.Object.extend({
8
- initialize: function() {
9
+ pageflow.EditorApi = pageflow.Object.extend(
10
+ /** @lends module:pageflow/editor.pageflow.editor */{
11
+
12
+ initialize: function(options) {
13
+ this.router = options && options.router;
14
+
9
15
  this.sideBarRoutings = [];
10
16
  this.mainMenuItems = [];
11
17
  this.initializers = [];
12
18
  this.fileSelectionHandlers = {};
13
19
 
14
- /**
15
- * Display Backbone/Marionette View inside the main panel
16
- * of the editor.
17
- */
18
- this.showViewInMainPanel = function(view) {
19
- pageflow.app.mainRegion.show(view);
20
- };
21
-
22
- /**
23
- * Display the Pageflow-Preview inside the main panel.
24
- */
25
- this.showPreview = function() {
26
- pageflow.app.mainRegion.$el.empty();
27
- };
28
-
29
- /**
30
- * Register additional router and controller for sidebar.
31
- *
32
- * Supported options:
33
- * - router: constructor function of Backbone Marionette app router
34
- * - controller: constructor function of Backbone Marionette controller
35
- */
36
- this.registerSideBarRouting = function(options) {
37
- this.sideBarRoutings.push(options);
38
- };
39
-
40
- /**
41
- * Set the name of the help entry that shall be selected by
42
- * default when the help view is opened. This value is
43
- * automatically reset when navigation occurs.
44
- */
45
- this.setDefaultHelpEntry = function(name) {
46
- this.nextDefaultHelpEntry = name;
47
- };
48
-
49
- /** @api private */
50
- this.applyDefaultHelpEntry = function(name) {
51
- this.defaultHelpEntry = this.nextDefaultHelpEntry;
52
- this.nextDefaultHelpEntry = null;
53
- };
54
-
55
- /**
56
- * Register additional menu item to be displayed on the root sidebar
57
- * view.
58
- *
59
- * Supported options:
60
- * - translationKey: for the label
61
- * - path: route to link to
62
- * - click: click handler
63
- */
64
- this.registerMainMenuItem = function(options) {
65
- this.mainMenuItems.push(options);
66
- };
67
-
68
- /**
69
- * Register a custom initializer which will be run before the boot
70
- * initializer of the editor.
71
- */
72
- this.addInitializer = function(fn) {
73
- this.initializers.push(fn);
74
- };
75
-
76
- /**
77
- * Navigate to the given path.
78
- */
79
- this.navigate = function(path, options) {
80
- editor.navigate(path, options);
81
- };
82
-
83
- /**
84
- * Extend the interface of page configuration objects. This is
85
- * especially convenient to wrap structured data from the page
86
- * configuration as Backbone objects.
87
- *
88
- * Example:
89
- *
90
- * pageflow.editor.registerPageConfigurationMixin({
91
- * externalLinks: function() {
92
- * return new Backbone.Collection(this.get('external_links'));
93
- * }
94
- * }
95
- *
96
- * pageflow.pages.get(1).configuration.externalLinks().each(...);
97
- */
98
- this.registerPageConfigurationMixin = function(mixin) {
99
- Cocktail.mixin(pageflow.Configuration, mixin);
100
- };
101
-
102
- /**
103
- * File selection handlers let editor extensions use the files view
104
- * to select files for usage in their custom models.
105
- *
106
- * See selectFile method for details how to trigger file selection.
107
- *
108
- * Example:
109
- *
110
- * function MyFileSelectionHandler(options) {
111
- * this.call = function(file) {
112
- * // invoked with the selected file
113
- * };
114
- *
115
- * this.getReferer = function() {
116
- * // the path to return to when the back button is clicked
117
- * // or after file selection
118
- * return '/some/path';
119
- * }
120
- * }
121
- *
122
- * pageflow.editor.registerFileSelectionHandler('my_file_selection_handler', MyFileSelectionHandler);
123
- */
124
- this.registerFileSelectionHandler = function(name, handler) {
125
- this.fileSelectionHandlers[name] = handler;
126
- };
127
-
128
- /**
129
- * Trigger selection of the given file type with the given
130
- * handler. Payload hash is passed to selection handler as options.
131
- *
132
- * Example:
133
- *
134
- * pageflow.editor.selectFile('image_files', 'my_file_selection_handler', {some: 'option for handler'});
135
- */
136
- this.selectFile = function(fileType, handlerName, payload) {
137
- this.navigate('/files/' + fileType + '?handler=' + handlerName + '&payload=' + encodeURIComponent(JSON.stringify(payload)), {trigger: true});
138
- };
139
-
140
- /**
141
- * Returns a promise which resolves to a page selected by the
142
- * user.
143
- *
144
- * Supported options:
145
- * - isAllowed: function which given a page returns true or false depending on
146
- * whether the page is a valid selection
147
- */
148
- this.selectPage = function(options) {
149
- return pageflow.PageSelectionView.selectPage(options);
150
- };
151
-
152
20
  /**
153
21
  * Failures API
154
22
  *
155
- * Can watch collections for errors saving models and display the error
156
- * allong with a retry button.
157
- *
158
- * pageflow.editor.failures.watch(collection);
159
- *
160
- * It's possible to add failures to the UI by adding instances of subclasses of pageflow.Failure:
161
- *
162
- * pageflow.editor.failures.add(new pageflow.OrderingFailure(model, collection));
23
+ * @returns {pageflow.Failures}
163
24
  *
25
+ * @alias failures
26
+ * @memberof module:pageflow/editor.pageflow.editor
164
27
  */
165
28
  this.failures = new pageflow.FailuresAPI();
166
29
 
167
30
  /**
168
31
  * Setup editor integration for page types.
32
+ * @alias pageTypes
33
+ * @memberof module:pageflow/editor.pageflow.editor
169
34
  */
170
35
  this.pageTypes = new pageflow.PageTypes();
171
36
 
172
37
  /**
173
- *
38
+ * @alias fileTypes
39
+ * @memberof module:pageflow/editor.pageflow.editor
174
40
  */
175
41
  this.fileTypes = new pageflow.FileTypes();
176
-
177
- /** @private */
178
- this.createFileSelectionHandler = function(handlerName, encodedPayload) {
179
- /** @private */
180
- if (!this.fileSelectionHandlers[handlerName]) {
181
- throw 'Unknown FileSelectionHandler ' + handlerName;
182
- }
183
-
184
- var payloadJson = JSON.parse(decodeURIComponent(encodedPayload));
185
- return new this.fileSelectionHandlers[handlerName](payloadJson);
186
- };
187
- }
42
+ },
43
+
44
+ /**
45
+ * Display Backbone/Marionette View inside the main panel
46
+ * of the editor.
47
+ */
48
+ showViewInMainPanel: function(view) {
49
+ pageflow.app.mainRegion.show(view);
50
+ },
51
+
52
+ /**
53
+ * Display the Pageflow-Preview inside the main panel.
54
+ */
55
+ showPreview: function() {
56
+ pageflow.app.mainRegion.$el.empty();
57
+ },
58
+
59
+ /**
60
+ * Register additional router and controller for sidebar.
61
+ *
62
+ * Supported options:
63
+ * - router: constructor function of Backbone Marionette app router
64
+ * - controller: constructor function of Backbone Marionette controller
65
+ */
66
+ registerSideBarRouting: function(options) {
67
+ this.sideBarRoutings.push(options);
68
+ },
69
+
70
+ /**
71
+ * Set the file that is the parent of nested files when they are
72
+ * uploaded. This value is automatically set and unset upon
73
+ * navigating towards the appropriate views.
74
+ */
75
+ setUploadTargetFile: function(file) {
76
+ this.nextUploadTargetFile = file;
77
+ },
78
+
79
+ /**
80
+ * Set the name of the help entry that shall be selected by
81
+ * default when the help view is opened. This value is
82
+ * automatically reset when navigation occurs.
83
+ */
84
+ setDefaultHelpEntry: function(name) {
85
+ this.nextDefaultHelpEntry = name;
86
+ },
87
+
88
+ applyDefaultHelpEntry: function(name) {
89
+ this.defaultHelpEntry = this.nextDefaultHelpEntry;
90
+ this.nextDefaultHelpEntry = null;
91
+ },
92
+
93
+ /**
94
+ * Register additional menu item to be displayed on the root sidebar
95
+ * view.
96
+ *
97
+ * Supported options:
98
+ * - translationKey: for the label
99
+ * - path: route to link to
100
+ * - click: click handler
101
+ */
102
+ registerMainMenuItem: function(options) {
103
+ this.mainMenuItems.push(options);
104
+ },
105
+
106
+ /**
107
+ * Register a custom initializer which will be run before the boot
108
+ * initializer of the editor.
109
+ */
110
+ addInitializer: function(fn) {
111
+ this.initializers.push(fn);
112
+ },
113
+
114
+ /**
115
+ * Navigate to the given path.
116
+ */
117
+ navigate: function(path, options) {
118
+ if (!this.router) {
119
+ throw 'Routing has not been initialized yet.';
120
+ }
121
+
122
+ this.router.navigate(path, options);
123
+ },
124
+
125
+ /**
126
+ * Extend the interface of page configuration objects. This is
127
+ * especially convenient to wrap structured data from the page
128
+ * configuration as Backbone objects.
129
+ *
130
+ * Example:
131
+ *
132
+ * pageflow.editor.registerPageConfigurationMixin({
133
+ * externalLinks: function() {
134
+ * return new Backbone.Collection(this.get('external_links'));
135
+ * }
136
+ * }
137
+ *
138
+ * pageflow.pages.get(1).configuration.externalLinks().each(...);
139
+ */
140
+ registerPageConfigurationMixin: function(mixin) {
141
+ Cocktail.mixin(pageflow.Configuration, mixin);
142
+ },
143
+
144
+ /**
145
+ * File selection handlers let editor extensions use the files view
146
+ * to select files for usage in their custom models.
147
+ *
148
+ * See {@link module:pageflow/editor.pageflow.editor.selectFile
149
+ * selectFile} method for details how to trigger file selection.
150
+ *
151
+ * Example:
152
+ *
153
+ * function MyFileSelectionHandler(options) { this.call =
154
+ * function(file) { // invoked with the selected file };
155
+ *
156
+ * this.getReferer = function() { // the path to return to
157
+ * when the back button is clicked // or after file
158
+ * selection return '/some/path'; } }
159
+ *
160
+ *
161
+ pageflow.editor.registerFileSelectionHandler('my_file_selection_handler',
162
+ MyFileSelectionHandler);
163
+ */
164
+ registerFileSelectionHandler: function(name, handler) {
165
+ this.fileSelectionHandlers[name] = handler;
166
+ },
167
+
168
+ /**
169
+ * Trigger selection of the given file type with the given
170
+ * handler. Payload hash is passed to selection handler as options.
171
+ *
172
+ * @param {string|{name: string, filter: string}} fileType
173
+ * Either collection name of a file type or and object containing
174
+ * the collection name a file type and a the name of a file type
175
+ * filter.
176
+ *
177
+ * @param {string} handlerName
178
+ * The name of a handler registered via {@link
179
+ * module:pageflow/editor.pageflow.editor.registerFileSelectionHandler}.
180
+ *
181
+ * @param {Object} payload
182
+ * Options passed to the file selection handler.
183
+ *
184
+ * @example
185
+ *
186
+ * pageflow.editor.selectFile('image_files',
187
+ * 'my_file_selection_handler',
188
+ * {some: 'option for handler'});
189
+ *
190
+ * pageflow.editor.selectFile({name: 'image_files', filter: 'some_filter'},
191
+ * 'my_file_selection_handler',
192
+ * {some: 'option for handler'});
193
+ */
194
+ selectFile: function(fileType, handlerName, payload) {
195
+ if (typeof fileType === 'string') {
196
+ fileType = {
197
+ name: fileType
198
+ };
199
+ }
200
+
201
+ this.navigate('/files/' + fileType.name +
202
+ '?handler=' + handlerName +
203
+ '&payload=' + encodeURIComponent(JSON.stringify(payload)) +
204
+ (fileType.filter ? '&filter=' + fileType.filter : ''),
205
+ {trigger: true});
206
+ },
207
+
208
+ /**
209
+ * Returns a promise which resolves to a page selected by the
210
+ * user.
211
+ *
212
+ * Supported options:
213
+ * - isAllowed: function which given a page returns true or false depending on
214
+ * whether the page is a valid selection
215
+ */
216
+ selectPage: function(options) {
217
+ return pageflow.PageSelectionView.selectPage(options);
218
+ },
219
+
220
+ createFileSelectionHandler: function(handlerName, encodedPayload) {
221
+ if (!this.fileSelectionHandlers[handlerName]) {
222
+ throw 'Unknown FileSelectionHandler ' + handlerName;
223
+ }
224
+
225
+ var payloadJson = JSON.parse(decodeURIComponent(encodedPayload));
226
+ return new this.fileSelectionHandlers[handlerName](payloadJson);
227
+ },
188
228
  });
@@ -0,0 +1,80 @@
1
+ pageflow.UploadError = pageflow.Object.extend({
2
+ setMessage: function(options) {
3
+ this.upload = options.upload;
4
+
5
+ var typeTranslation;
6
+ if (options.typeTranslation) {
7
+ typeTranslation = options.typeTranslation;
8
+ } else if (this.upload.type !== ''){
9
+ typeTranslation = this.upload.type;
10
+ } else {
11
+ typeTranslation = I18n.t('pageflow.editor.errors.upload.type_empty');
12
+ }
13
+
14
+ var interpolations = {name: this.upload.name,
15
+ type: typeTranslation,
16
+ validList: options.validList};
17
+
18
+ this.message = I18n.t(options.translationKey, interpolations);
19
+ }
20
+ });
21
+
22
+ pageflow.UnmatchedUploadError = pageflow.UploadError.extend({
23
+ name: 'UnmatchedUploadError',
24
+
25
+ initialize: function(upload) {
26
+ this.setMessage({upload: upload,
27
+ translationKey: 'pageflow.editor.errors.unmatched_upload_error'});
28
+ }
29
+ });
30
+
31
+ pageflow.validFileTypeTranslationList = {
32
+ validFileTypeTranslations: function(validFileTypes) {
33
+ return _.map(validFileTypes,
34
+ function(validFileType) {
35
+ return I18n.t('activerecord.models.' + validFileType.i18nKey + '.other');
36
+ }).join(', ');
37
+ }
38
+ };
39
+
40
+ pageflow.NestedTypeError = pageflow.UploadError.extend({
41
+ name: 'NestedTypeError',
42
+
43
+ initialize: function(upload, options) {
44
+ var fileType = options.fileType;
45
+ var fileTypes = options.fileTypes;
46
+ var validParentFileTypes = fileTypes.filter(function(parentFileType) {
47
+ return parentFileType.nestedFileTypes.contains(fileType);
48
+ });
49
+ var validParentFileTypeTranslations = this.validFileTypeTranslations(validParentFileTypes);
50
+
51
+ var typeI18nKey = fileTypes.findByUpload(upload).i18nKey;
52
+ var typePluralTranslation = I18n.t('activerecord.models.' + typeI18nKey + '.other');
53
+
54
+ this.setMessage({upload: upload,
55
+ translationKey: 'pageflow.editor.errors.nested_type_error',
56
+ typeTranslation: typePluralTranslation,
57
+ validList: validParentFileTypeTranslations});
58
+ }
59
+ });
60
+ Cocktail.mixin(pageflow.NestedTypeError, pageflow.validFileTypeTranslationList);
61
+
62
+ pageflow.InvalidNestedTypeError = pageflow.UploadError.extend({
63
+ name: 'InvalidNestedTypeError',
64
+
65
+ initialize: function(upload, options) {
66
+ var editor = options.editor;
67
+ var fileType = options.fileType;
68
+ var validFileTypes = editor.nextUploadTargetFile.fileType().nestedFileTypes.fileTypes;
69
+ var validFileTypeTranslations = this.validFileTypeTranslations(validFileTypes);
70
+
71
+ var typeI18nKey = fileType.i18nKey;
72
+ var typeSingularTranslation = I18n.t('activerecord.models.' + typeI18nKey + '.one');
73
+
74
+ this.setMessage({upload: upload,
75
+ translationKey: 'pageflow.editor.errors.invalid_nested_type_error',
76
+ typeTranslation: typeSingularTranslation,
77
+ validList: validFileTypeTranslations});
78
+ }
79
+ });
80
+ Cocktail.mixin(pageflow.InvalidNestedTypeError, pageflow.validFileTypeTranslationList);