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
@@ -5,10 +5,12 @@
5
5
  that = this;
6
6
 
7
7
  parent.on('pageactivate', function(event) {
8
+ var pageOrPageWrapper = $(event.target).add('.content_and_background', event.target);
9
+
8
10
  that.element.toggleClass('invert', $(event.target).hasClass('invert'));
9
11
  that.element.toggleClass('hidden',
10
- $(event.target).hasClass('hide_content_with_text') ||
11
- $(event.target).hasClass('no_hidden_text_indicator'));
12
+ pageOrPageWrapper.hasClass('hide_content_with_text') ||
13
+ pageOrPageWrapper.hasClass('no_hidden_text_indicator'));
12
14
  });
13
15
 
14
16
  parent.on('hidetextactivate', function() {
@@ -32,13 +32,17 @@ pageflow.hideText = (function() {
32
32
  },
33
33
 
34
34
  activate: function() {
35
- element().addClass('hideText');
36
- element().trigger('hidetextactivate');
35
+ if (!this.isActive()) {
36
+ element().addClass('hideText');
37
+ element().trigger('hidetextactivate');
38
+ }
37
39
  },
38
40
 
39
41
  deactivate: function() {
40
- element().removeClass('hideText');
41
- element().trigger('hidetextdeactivate');
42
+ if (this.isActive()) {
43
+ element().removeClass('hideText');
44
+ element().trigger('hidetextdeactivate');
45
+ }
42
46
  },
43
47
 
44
48
  on: function(event, callback) {
@@ -5,6 +5,11 @@
5
5
  var prototype = {
6
6
  _create: function() {
7
7
  this.configuration = this.element.data('configuration') || this.options.configuration;
8
+ this.index = this.options.index;
9
+ },
10
+
11
+ _destroy: function() {
12
+ this.isDestroyed = true;
8
13
  },
9
14
 
10
15
  _ensureCreated: function() {
@@ -4,6 +4,7 @@
4
4
  * Wrapper widget around iScroll adding special bump events which
5
5
  * are triggered when scrolling to the very top or very bottom
6
6
  * (called boundary posititon below).
7
+ * @private
7
8
  */
8
9
  $.widget('pageflow.scroller', {
9
10
  dragThreshold: 50,
@@ -157,13 +158,11 @@
157
158
  }
158
159
  },
159
160
 
160
- /**
161
- * Whenever the a mousewheel event is triggered, we test whether
162
- * the scroller is at the very top or at the very bottom. If so,
163
- * we trigger a hintdown or hintup event the first time the mouse
164
- * wheel turns and a bumpup or bumpdown event when the mouse wheel
165
- * is turned to times in a short period of time.
166
- */
161
+ // Whenever the a mousewheel event is triggered, we test whether
162
+ // the scroller is at the very top or at the very bottom. If so,
163
+ // we trigger a hintdown or hintup event the first time the mouse
164
+ // wheel turns and a bumpup or bumpdown event when the mouse wheel
165
+ // is turned to times in a short period of time.
167
166
  _initMousewheelBump: function(direction) {
168
167
  var firstBump = false;
169
168
 
@@ -189,10 +188,8 @@
189
188
  }, this));
190
189
  },
191
190
 
192
- /**
193
- * Trigger bumpup or bumpdown event when the a up/down key is
194
- * pressed while the scroller in boundary position.
195
- */
191
+ // Trigger bumpup or bumpdown event when the a up/down key is
192
+ // pressed while the scroller in boundary position.
196
193
  _initKeyboardBump: function(direction) {
197
194
  this.iscroll.on('keyboard' + direction, _.bind(function(event) {
198
195
  if (this._atBoundary(direction)) {
@@ -210,10 +207,8 @@
210
207
  }, this));
211
208
  },
212
209
 
213
- /**
214
- * Trigger bumpup or bumpdown when the user drags the page from a
215
- * boundary position.
216
- */
210
+ // Trigger bumpup or bumpdown when the user drags the page from a
211
+ // boundary position.
217
212
  _initDragGestureBump: function() {
218
213
  var allowUp = false,
219
214
  allowDown = false,
@@ -265,9 +260,7 @@
265
260
  }
266
261
  },
267
262
 
268
- /**
269
- * Checks whether the scroller is at the very top or very bottom.
270
- */
263
+ // Checks whether the scroller is at the very top or very bottom.
271
264
  _atBoundary: function(direction, options) {
272
265
  options = options || {};
273
266
  var delta = options.delta || 0;
@@ -11,7 +11,13 @@
11
11
  //= require_tree ./ui/utils
12
12
  //= require_tree ./ui/views/mixins
13
13
  //= require ./ui/views/inputs/select_input_view
14
+ //= require ./ui/views/table_cells/table_cell_view
14
15
  //= require_tree ./ui/views
15
16
  //= require_tree ./ui/templates
16
17
 
18
+ /**
19
+ * Reusable Backbone views for the editor and admin interface.
20
+ * @module pageflow/ui
21
+ */
22
+
17
23
  window.pageflow = window.pageflow || {};
@@ -0,0 +1,7 @@
1
+ <label>
2
+ <span class="name"></span>
3
+ <span class="inline_help"></span>
4
+ </label>
5
+ <a class="original" href="#" download target="_blank">
6
+ <%= I18n.t('pageflow.ui.templates.inputs.url_display.link_text') %>
7
+ </a>
@@ -0,0 +1,7 @@
1
+ <table>
2
+ <thead>
3
+ <tr></tr>
4
+ </thead>
5
+ <tbody>
6
+ </tbody>
7
+ </table>
@@ -0,0 +1,3 @@
1
+ <td colspan="<%= colSpan %>">
2
+ <%= blankSlateText %>
3
+ </td>
@@ -1,12 +1,107 @@
1
+ /**
2
+ * Helpers functions for handling translations.
3
+ *
4
+ * @memberof module:pageflow/ui
5
+ */
1
6
  pageflow.i18nUtils = {
7
+ /**
8
+ * Returns an array of translation keys based on the `prefixes`
9
+ * option and the given `keyName`.
10
+ *
11
+ * @param {string} keyName
12
+ * Suffix to append to prefixes.
13
+ *
14
+ * @param {string[]} [options.prefixes]
15
+ * Array of translation key prefixes.
16
+ *
17
+ * @param {string} [options.fallbackPrefix]
18
+ * Optional additional prefix to form a model based translation
19
+ * key of the form
20
+ * `prefix.fallbackModelI18nKey.propertyName.keyName`.
21
+ *
22
+ * @param {string} [options.fallbackModelI18nKey]
23
+ * Required if `fallbackPrefix` option is present.
24
+ *
25
+ * @return {string[]}
26
+ * @since 12.0
27
+ */
28
+ attributeTranslationKeys: function(attributeName, keyName, options) {
29
+ var result = [];
30
+
31
+ if (options.prefixes) {
32
+ result = result.concat(_(options.prefixes).map(function(prefix) {
33
+ return prefix + '.' + attributeName + '.' + keyName;
34
+ }, this));
35
+ }
36
+
37
+ if (options && options.fallbackPrefix) {
38
+ result.push(options.fallbackPrefix + '.' +
39
+ options.fallbackModelI18nKey + '.' +
40
+ attributeName);
41
+ }
42
+
43
+ return result;
44
+ },
45
+
46
+ /**
47
+ * Takes the same parameters as {@link
48
+ * module:pageflow/ui.pageflow.i18nUtils.attributeTranslationKeys
49
+ * i18nUtils.attributeTranslationKeys}, but returns the first
50
+ * existing translation.
51
+ *
52
+ * @return {string}
53
+ * @since 12.0
54
+ */
55
+ attributeTranslation: function(attributeName, keyName, options) {
56
+ return pageflow.i18nUtils.findTranslation(
57
+ this.attributeTranslationKeys(attributeName, keyName, options)
58
+ );
59
+ },
60
+
61
+ /**
62
+ * Find the first key for which a translation exists and return the
63
+ * translation.
64
+ *
65
+ * @param {string[]} keys
66
+ * Translation key candidates.
67
+ *
68
+ * @param {string} [options.defaultValue]
69
+ * Value to return if none of the keys has a translation. Is
70
+ * treated like an HTML translation if html flag is set.
71
+ *
72
+ * @param {boolean} [options.html]
73
+ * If true, also search for keys ending in '_html' and HTML-escape
74
+ * keys that do not end in 'html'
75
+ *
76
+ * @return {string}
77
+ */
2
78
  findTranslation: function(keys, options) {
3
79
  options = options || {};
4
80
 
81
+ if (options.html) {
82
+ keys = this.translationKeysWithSuffix(keys, 'html');
83
+ }
84
+
5
85
  return _.chain(keys).reverse().reduce(function(result, key) {
6
- return I18n.t(key, {defaultValue: result});
86
+ var unescapedTranslation = I18n.t(key, _.extend({}, options, {defaultValue: result}));
87
+ if (!options.html || key.match(/_html$/) || result == unescapedTranslation) {
88
+ return unescapedTranslation;
89
+ }
90
+ else {
91
+ return $('<div />').text(unescapedTranslation).html();
92
+ }
7
93
  }, options.defaultValue).value();
8
94
  },
9
95
 
96
+ /**
97
+ * Return the first key for which a translation exists. Returns the
98
+ * first if non of the keys has a translation.
99
+ *
100
+ * @param {string[]} keys
101
+ * Translation key candidates.
102
+ *
103
+ * @return {string}
104
+ */
10
105
  findKeyWithTranslation: function(keys) {
11
106
  var missing = '_not_translated';
12
107
 
@@ -20,4 +115,4 @@ pageflow.i18nUtils = {
20
115
  return [key + '_' + suffix, key];
21
116
  }).flatten().value();
22
117
  }
23
- };
118
+ };
@@ -80,7 +80,14 @@ pageflow.CollectionView = Backbone.Marionette.View.extend({
80
80
  var last = null;
81
81
 
82
82
  this.collection.each(function(item) {
83
- var element = this.itemViews.findByModel(item).$el;
83
+ var itemView = this.itemViews.findByModel(item);
84
+ var element;
85
+
86
+ if (!itemView) {
87
+ return;
88
+ }
89
+
90
+ element = itemView.$el;
84
91
 
85
92
  if (last) {
86
93
  last.after(element);
@@ -1,3 +1,14 @@
1
+ /**
2
+ * Input view for boolean values.
3
+ *
4
+ * @param {boolean} [options.displayUncheckedIfDisabled=false]
5
+ * Ignore the attribute value if the input is disabled and display
6
+ * an unchecked check box.
7
+ *
8
+ * @see {@link module:pageflow/ui.pageflow.inputView pageflow.inputView} for further options
9
+ * @class
10
+ * @memberof module:pageflow/ui
11
+ */
1
12
  pageflow.CheckBoxInputView = Backbone.Marionette.ItemView.extend({
2
13
  mixins: [pageflow.inputView],
3
14
 
@@ -41,4 +52,4 @@ pageflow.CheckBoxInputView = Backbone.Marionette.ItemView.extend({
41
52
  return this.model.get(this.options.propertyName);
42
53
  }
43
54
  }
44
- });
55
+ });
@@ -1,7 +1,53 @@
1
1
  //= require ./url_input_view
2
2
 
3
- pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend({
4
- /** @override */
3
+ /**
4
+ * Input view that verifies that a certain URL is reachable via a
5
+ * proxy. To conform with same origin restrictions, this input view
6
+ * lets the user enter some url and saves a rewritten url where the
7
+ * domain is replaced with some path segment.
8
+ *
9
+ * That way, when `/example` is setup to proxy requests to
10
+ * `http://example.com`, the user can enter an url of the form
11
+ * `http://example.com/some/path` but the string `/example/some/path`
12
+ * is persisited to the database.
13
+ *
14
+ * @param {string} options.displayPropertyName
15
+ * Attribute name to store the url entered by the user.
16
+ *
17
+ * @param {Object[]} options.proxies
18
+ * List of supported proxies.
19
+ *
20
+ * @param {string} options.proxies[].url
21
+ * Supported prefix of an url that can be entered by the user.
22
+ *
23
+ * @param {string} options.proxies[].base_path
24
+ * Path to replace the url prefix with.
25
+ *
26
+ * @param {boolean} [options.required=false]
27
+ * Display an error if the url is blank.
28
+ *
29
+ * @param {boolean} [options.permitHttps=false]
30
+ * Allow urls with https protocol.
31
+ *
32
+ * @example
33
+ *
34
+ * this.input('url, pageflow.ProxyUrlInputView, {
35
+ * proxies: [
36
+ * {
37
+ * url: 'http://example.com',
38
+ * base_path: '/example'
39
+ * }
40
+ * ]
41
+ * });
42
+ *
43
+ * @see {@link module:pageflow/ui.pageflow.inputView pageflow.inputView} for further options
44
+ * @class
45
+ * @memberof module:pageflow/ui
46
+ */
47
+ pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend(
48
+ /** @lends module:pageflow/ui.pageflow.ProxyUrlInputView# */{
49
+
50
+ // @override
5
51
  validateUrl: function(url) {
6
52
  var view = this;
7
53
 
@@ -19,12 +65,12 @@ pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend({
19
65
  }).promise();
20
66
  },
21
67
 
22
- /** @override */
68
+ // @override
23
69
  transformPropertyValue: function(url) {
24
70
  return this.rewriteUrl(url);
25
71
  },
26
72
 
27
- /** @override */
73
+ // @override
28
74
  supportedHosts: function() {
29
75
  return _.pluck(this.options.proxies, 'url');
30
76
  },
@@ -36,4 +82,4 @@ pageflow.ProxyUrlInputView = pageflow.UrlInputView.extend({
36
82
 
37
83
  return url;
38
84
  }
39
- });
85
+ });
@@ -1,3 +1,76 @@
1
+ /**
2
+ * A drop down with support for grouped items.
3
+ *
4
+ * @param {string[]} [options.values]
5
+ * List of possible values to persist in the attribute.
6
+ *
7
+ * @param {string[]} [options.texts]
8
+ * List of display texts for drop down items.
9
+ *
10
+ * @param {string[]} [options.translationKeys]
11
+ * Translation keys to obtain item texts from.
12
+ *
13
+ * @param {string[]} [options.translationKeyPrefix]
14
+ * Obtain texts for items from translations by appending the item
15
+ * value to this prefix separated by a dot. By default the
16
+ * [`attributeTranslationKeyPrefixes` option]{@link module:pageflow/ui:pageflow.inputView}
17
+ * is used by appending the suffix `.values` to each candidate.
18
+ *
19
+ * @param {string[]} [options.groups]
20
+ * Array of same length as `values` array, containing the display
21
+ * name of a group header each item shall be grouped under.
22
+ *
23
+ * @param {Backbone.Model[]} [options.collection]
24
+ * Create items for each model in the collection. Use the
25
+ * `*Property` options to extract values and texts for each items
26
+ * from the models.
27
+ *
28
+ * @param {string} [options.valueProperty]
29
+ * Attribute to use as item value.
30
+ *
31
+ * @param {string} [options.textProperty]
32
+ * Attribute to use as item display text.
33
+ *
34
+ * @param {string} [options.groupProperty]
35
+ * Attribute to use as item group name.
36
+ *
37
+ * @param {string} [options.translationKeyProperty]
38
+ * Attribute to use as translation key to obtain display text.
39
+ *
40
+ * @param {string} [options.groupTranslationKeyProperty]
41
+ * Attribute to use as translation key to obtain group name.
42
+ *
43
+ * @param {boolean} [options.ensureValueDefined]
44
+ * Set the attribute to the first value on view creation.
45
+ *
46
+ * @param {boolean} [options.includeBlank]
47
+ * Include an item that sets the value of the attribute to a blank
48
+ * string.
49
+ *
50
+ * @param {string} [options.blankText]
51
+ * Display text for the blank item.
52
+ *
53
+ * @param {string} [options.blankTranslationKey]
54
+ * Translation key to obtain display text for blank item.
55
+ *
56
+ * @param {string} [options.placeholderValue]
57
+ * Include an item that sets the value of the attribute to a blank
58
+ * string and indicate that the attribute is set to a default
59
+ * value. Include the display name of the given value, in the
60
+ * text. This option can be used if a fallback to the
61
+ * `placeholderValue` occurs whenever the attribute is blank.
62
+ *
63
+ * @param {Backbone.Model} [options.placeholderModel]
64
+ * Behaves like `placeholderValue`, but obtains the value by looking
65
+ * up the `propertyName` attribute inside the given model. This
66
+ * option can be used if a fallback to the corresponding attribute
67
+ * value of the `placeholderModel` occurs whenever the attribute is
68
+ * blank.
69
+ *
70
+ * @see {@link module:pageflow/ui.pageflow.inputView pageflow.inputView} for further options
71
+ * @class
72
+ * @memberof module:pageflow/ui
73
+ */
1
74
  pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
2
75
  mixins: [pageflow.inputView],
3
76
 
@@ -139,7 +212,12 @@ pageflow.SelectInputView = Backbone.Marionette.ItemView.extend({
139
212
 
140
213
  load: function() {
141
214
  if (!this.isClosed) {
142
- this.ui.select.val(this.model.get(this.options.propertyName));
215
+ if (this.model.has(this.options.propertyName)) {
216
+ this.ui.select.val(this.model.get(this.options.propertyName));
217
+ }
218
+ else {
219
+ this.ui.select.val(this.ui.select.find('option:first').val());
220
+ }
143
221
  }
144
222
  }
145
- });
223
+ });