pageflow 12.0.4 → 12.1.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of pageflow might be problematic. Click here for more details.

Files changed (217) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +158 -374
  3. data/README.md +24 -3
  4. data/Rakefile +2 -2
  5. data/admins/pageflow/accounts.rb +30 -4
  6. data/admins/pageflow/entry.rb +59 -9
  7. data/admins/pageflow/membership.rb +57 -6
  8. data/admins/pageflow/user.rb +25 -4
  9. data/app/assets/images/pageflow/themes/default/preview.png +0 -0
  10. data/app/assets/images/pageflow/themes/default/preview_thumbnail.png +0 -0
  11. data/app/assets/javascripts/pageflow/admin/entries.js +5 -3
  12. data/app/assets/javascripts/pageflow/admin/users.js +33 -0
  13. data/app/assets/javascripts/pageflow/admin.js +4 -1
  14. data/app/assets/javascripts/pageflow/audio_context.js +28 -0
  15. data/app/assets/javascripts/pageflow/audio_player/get_media_element_method.js +5 -0
  16. data/app/assets/javascripts/pageflow/audio_player.js +2 -0
  17. data/app/assets/javascripts/pageflow/base.js +4 -22
  18. data/app/assets/javascripts/pageflow/dist/react.js +323 -242
  19. data/app/assets/javascripts/pageflow/editor/api/widget_type.js +23 -0
  20. data/app/assets/javascripts/pageflow/editor/api/widget_types.js +53 -0
  21. data/app/assets/javascripts/pageflow/editor/api.js +9 -1
  22. data/app/assets/javascripts/pageflow/editor/base.js +0 -1
  23. data/app/assets/javascripts/pageflow/editor/collections/pages_collection.js +1 -0
  24. data/app/assets/javascripts/pageflow/editor/collections/subset_collection.js +21 -1
  25. data/app/assets/javascripts/pageflow/editor/collections/themes_collection.js +13 -0
  26. data/app/assets/javascripts/pageflow/editor/collections/widgets_collection.js +23 -8
  27. data/app/assets/javascripts/pageflow/editor/controllers/sidebar_controller.js +7 -1
  28. data/app/assets/javascripts/pageflow/editor/initializers/setup_collections.js +10 -3
  29. data/app/assets/javascripts/pageflow/editor/initializers/setup_widget_types.js +5 -1
  30. data/app/assets/javascripts/pageflow/editor/initializers/stylesheet_reloading.js +8 -3
  31. data/app/assets/javascripts/pageflow/editor/models/edit_lock_container.js +1 -1
  32. data/app/assets/javascripts/pageflow/editor/models/entry.js +7 -4
  33. data/app/assets/javascripts/pageflow/editor/models/entry_configuration.js +1 -1
  34. data/app/assets/javascripts/pageflow/editor/models/file_stage.js +1 -0
  35. data/app/assets/javascripts/pageflow/editor/models/page.js +3 -1
  36. data/app/assets/javascripts/pageflow/editor/models/preview_entry_data.js +2 -2
  37. data/app/assets/javascripts/pageflow/editor/models/theme.js +25 -0
  38. data/app/assets/javascripts/pageflow/editor/models/theming.js +1 -19
  39. data/app/assets/javascripts/pageflow/editor/models/widget.js +22 -1
  40. data/app/assets/javascripts/pageflow/editor/models/widget_configuration.js +5 -0
  41. data/app/assets/javascripts/pageflow/editor/routers/sidebar_router.js +1 -0
  42. data/app/assets/javascripts/pageflow/editor/templates/change_theme_dialog.jst.ejs +23 -0
  43. data/app/assets/javascripts/pageflow/editor/templates/edit_widget.jst.ejs +1 -2
  44. data/app/assets/javascripts/pageflow/editor/templates/inputs/reference.jst.ejs +2 -2
  45. data/app/assets/javascripts/pageflow/editor/templates/static_thumbnail.jst.ejs +1 -0
  46. data/app/assets/javascripts/pageflow/editor/templates/theme_item.jst.ejs +5 -0
  47. data/app/assets/javascripts/pageflow/editor/templates/widget_item.jst.ejs +3 -0
  48. data/app/assets/javascripts/pageflow/editor/utils/stylesheet.js +23 -0
  49. data/app/assets/javascripts/pageflow/editor/views/change_theme_dialog_view.js +76 -0
  50. data/app/assets/javascripts/pageflow/editor/views/configuration_editors/groups/options.js +4 -2
  51. data/app/assets/javascripts/pageflow/editor/views/edit_meta_data_view.js +17 -4
  52. data/app/assets/javascripts/pageflow/editor/views/edit_widget_view.js +11 -21
  53. data/app/assets/javascripts/pageflow/editor/views/edit_widgets_view.js +1 -3
  54. data/app/assets/javascripts/pageflow/editor/views/file_meta_data_item_value_view.js +10 -1
  55. data/app/assets/javascripts/pageflow/editor/views/inputs/reference_input_view.js +36 -4
  56. data/app/assets/javascripts/pageflow/editor/views/inputs/theme_input_view.js +26 -0
  57. data/app/assets/javascripts/pageflow/editor/views/model_thumbnail_view.js +28 -14
  58. data/app/assets/javascripts/pageflow/editor/views/static_thumbnail_view.js +20 -0
  59. data/app/assets/javascripts/pageflow/editor/views/theme_item_view.js +41 -0
  60. data/app/assets/javascripts/pageflow/editor/views/widget_item_view.js +49 -0
  61. data/app/assets/javascripts/pageflow/history.js +7 -1
  62. data/app/assets/javascripts/pageflow/media_player/volume_fading/interval.js +65 -0
  63. data/app/assets/javascripts/pageflow/media_player/volume_fading/noop.js +5 -0
  64. data/app/assets/javascripts/pageflow/media_player/volume_fading/web_audio.js +109 -0
  65. data/app/assets/javascripts/pageflow/media_player/volume_fading.js +14 -65
  66. data/app/assets/javascripts/pageflow/slideshow/dom_order_scroll_navigator.js +5 -2
  67. data/app/assets/javascripts/pageflow/slideshow.js +19 -8
  68. data/app/assets/javascripts/pageflow/ui/views/configuration_editor_view.js +4 -0
  69. data/app/assets/javascripts/pageflow/ui/views/inputs/text_area_input_view.js +10 -5
  70. data/app/assets/javascripts/pageflow/ui/views/inputs/text_input_view.js +4 -48
  71. data/app/assets/javascripts/pageflow/ui/views/mixins/input_with_placeholder_text.js +58 -0
  72. data/app/assets/javascripts/pageflow/vendor.js +16 -0
  73. data/app/assets/javascripts/pageflow/video_player/get_media_element_method.js +6 -0
  74. data/app/assets/javascripts/pageflow/video_player.js +2 -0
  75. data/app/assets/stylesheets/pageflow/admin/entries.scss +1 -1
  76. data/app/assets/stylesheets/pageflow/admin/quotas.scss +1 -1
  77. data/app/assets/stylesheets/pageflow/admin.scss +2 -0
  78. data/app/assets/stylesheets/pageflow/base.scss +0 -1
  79. data/app/assets/stylesheets/pageflow/editor/base.scss +2 -0
  80. data/app/assets/stylesheets/pageflow/editor/change_theme.scss +114 -0
  81. data/app/assets/stylesheets/pageflow/editor/static_thumbnails.scss +4 -0
  82. data/app/assets/stylesheets/pageflow/editor/widgets.scss +26 -2
  83. data/app/assets/stylesheets/pageflow/page.scss +1 -14
  84. data/app/assets/stylesheets/pageflow/themes/default/indicators.scss +12 -0
  85. data/app/assets/stylesheets/pageflow/themes/default/loading_spinner.scss +11 -0
  86. data/app/assets/stylesheets/pageflow/themes/default/logo/alignment.scss +27 -0
  87. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/background_image.scss +20 -2
  88. data/app/assets/stylesheets/pageflow/themes/default/logo/variant/watermark.scss +4 -1
  89. data/app/assets/stylesheets/pageflow/themes/default/page/line_lengths.scss +113 -0
  90. data/app/assets/stylesheets/pageflow/themes/default/page.scss +1 -0
  91. data/app/controllers/pageflow/editor/widgets_controller.rb +15 -1
  92. data/app/controllers/pageflow/entries_controller.rb +1 -1
  93. data/app/helpers/pageflow/admin/entries_helper.rb +0 -9
  94. data/app/helpers/pageflow/admin/memberships_helper.rb +43 -123
  95. data/app/helpers/pageflow/admin/users_helper.rb +15 -0
  96. data/app/helpers/pageflow/entries_helper.rb +3 -1
  97. data/app/helpers/pageflow/entry_json_seed_helper.rb +9 -3
  98. data/app/helpers/pageflow/public_i18n_helper.rb +2 -2
  99. data/app/helpers/pageflow/quota_helper.rb +2 -2
  100. data/app/helpers/pageflow/social_share_helper.rb +3 -2
  101. data/app/helpers/pageflow/themes_helper.rb +11 -3
  102. data/app/helpers/pageflow/widgets_helper.rb +10 -2
  103. data/app/jobs/pageflow/prune_auto_snapshots_job.rb +9 -0
  104. data/app/mailers/pageflow/user_mailer.rb +11 -1
  105. data/app/models/concerns/pageflow/feature_target.rb +1 -1
  106. data/app/models/concerns/pageflow/hosted_file.rb +9 -0
  107. data/app/models/concerns/pageflow/output_source.rb +2 -1
  108. data/app/models/concerns/pageflow/serialization_blacklist.rb +19 -0
  109. data/app/models/concerns/pageflow/serialized_configuration.rb +17 -0
  110. data/app/models/concerns/pageflow/theme_referencer.rb +23 -0
  111. data/app/models/pageflow/account.rb +6 -1
  112. data/app/models/pageflow/account_member_query.rb +6 -12
  113. data/app/models/pageflow/account_role_query.rb +68 -0
  114. data/app/models/pageflow/application_query.rb +13 -0
  115. data/app/models/pageflow/application_record.rb +5 -0
  116. data/app/models/pageflow/audio_file.rb +1 -1
  117. data/app/models/pageflow/auto_snapshot_pruning.rb +26 -0
  118. data/app/models/pageflow/chapter.rb +4 -8
  119. data/app/models/pageflow/draft_entry.rb +2 -1
  120. data/app/models/pageflow/edit_lock.rb +11 -5
  121. data/app/models/pageflow/encoding_confirmation.rb +2 -1
  122. data/app/models/pageflow/entry.rb +13 -2
  123. data/app/models/pageflow/entry_publication.rb +2 -0
  124. data/app/models/pageflow/entry_role_query.rb +24 -9
  125. data/app/models/pageflow/entry_title_or_account_name_query.rb +33 -0
  126. data/app/models/pageflow/file_usage.rb +3 -7
  127. data/app/models/pageflow/folder.rb +1 -1
  128. data/app/models/pageflow/home_button.rb +1 -1
  129. data/app/models/pageflow/image_file.rb +22 -4
  130. data/app/models/pageflow/invitation_form.rb +10 -4
  131. data/app/models/pageflow/managed_user_query.rb +44 -0
  132. data/app/models/pageflow/membership.rb +1 -1
  133. data/app/models/pageflow/overview_button.rb +3 -4
  134. data/app/models/pageflow/page.rb +3 -7
  135. data/app/models/pageflow/potential_memberships.rb +112 -0
  136. data/app/models/pageflow/published_entry.rb +2 -1
  137. data/app/models/pageflow/revision.rb +13 -4
  138. data/app/models/pageflow/storyline.rb +3 -4
  139. data/app/models/pageflow/text_track_file.rb +1 -1
  140. data/app/models/pageflow/theming.rb +15 -10
  141. data/app/models/pageflow/url_template.rb +8 -2
  142. data/app/models/pageflow/user_name_query.rb +30 -0
  143. data/app/models/pageflow/video_file.rb +5 -1
  144. data/app/models/pageflow/widget.rb +3 -1
  145. data/app/models/pageflow/zencoder_attachment.rb +16 -5
  146. data/app/policies/pageflow/account_policy.rb +31 -61
  147. data/app/policies/pageflow/application_policy.rb +6 -0
  148. data/app/policies/pageflow/entry_policy.rb +11 -3
  149. data/app/policies/pageflow/membership_policy.rb +1 -2
  150. data/app/policies/pageflow/user_policy.rb +20 -1
  151. data/app/views/admin/accounts/_form.html.erb +4 -4
  152. data/app/views/admin/accounts/_theming_defaults_inline_help.html.erb +5 -0
  153. data/app/views/admin/memberships/_form.html.erb +9 -14
  154. data/app/views/admin/memberships/_role_hint.html.arb +1 -1
  155. data/app/views/admin/users/invitation.html.erb +18 -9
  156. data/app/views/admin/users/me.html.erb +2 -2
  157. data/app/views/admin/users/quota_state.html.erb +1 -0
  158. data/app/views/components/pageflow/admin/add_membership_button.rb +81 -0
  159. data/app/views/components/pageflow/admin/members_tab.rb +6 -4
  160. data/app/views/components/pageflow/admin/revisions_tab.rb +16 -4
  161. data/app/views/components/pageflow/admin/user_accounts_tab.rb +8 -2
  162. data/app/views/components/pageflow/admin/user_entries_tab.rb +6 -2
  163. data/app/views/components/pageflow/admin/users_tab.rb +9 -5
  164. data/app/views/layouts/pageflow/application.html.erb +2 -1
  165. data/app/views/pageflow/admin/users/_quota_exhausted.html.erb +1 -0
  166. data/app/views/pageflow/admin/users/_quota_state.html.erb +7 -0
  167. data/app/views/pageflow/config/_editor_seeds.json.jbuilder +2 -0
  168. data/app/views/pageflow/editor/entries/_entry.json.jbuilder +1 -0
  169. data/app/views/pageflow/editor/entries/seed.json.erb +3 -1
  170. data/app/views/pageflow/editor/image_files/_image_file.json.jbuilder +1 -1
  171. data/app/views/pageflow/editor/themings/_theming.json.jbuilder +0 -7
  172. data/app/views/pageflow/editor/widgets/_widget.json.jbuilder +1 -1
  173. data/app/views/pageflow/entries/_entry.html.erb +5 -5
  174. data/app/views/pageflow/entries/edit.html.erb +1 -1
  175. data/app/views/pageflow/entries/show.html.erb +1 -1
  176. data/app/views/pageflow/entry_json_seed/_entry.json.jbuilder +1 -0
  177. data/app/views/pageflow/themes/_theme.json.jbuilder +13 -0
  178. data/config/initializers/admin_resource_tabs.rb +19 -6
  179. data/config/initializers/features.rb +1 -0
  180. data/config/locales/de.yml +26 -3
  181. data/config/locales/en.yml +26 -3
  182. data/db/migrate/20170201074328_add_configuration_to_widgets.rb +5 -0
  183. data/db/migrate/20170222124848_update_video_file_output_presences.rb +1 -1
  184. data/db/migrate/20170315130000_add_theme_name_to_revisions.rb +12 -0
  185. data/db/migrate/20170912165050_reset_copied_snapshot_type.rb +24 -0
  186. data/lib/generators/pageflow/routes/routes_generator.rb +11 -1
  187. data/lib/generators/pageflow/seeds/seeds_generator.rb +5 -0
  188. data/lib/generators/pageflow/seeds/templates/seeds.rb +5 -3
  189. data/lib/generators/pageflow/theme/templates/preview.png +0 -0
  190. data/lib/generators/pageflow/theme/templates/preview_thumbnail.png +0 -0
  191. data/lib/generators/pageflow/theme/theme_generator.rb +3 -0
  192. data/lib/pageflow/ability_mixin.rb +27 -6
  193. data/lib/pageflow/active_admin_can_can_fix.rb +34 -0
  194. data/lib/pageflow/configuration/permissions.rb +27 -0
  195. data/lib/pageflow/configuration.rb +28 -0
  196. data/lib/pageflow/engine.rb +25 -19
  197. data/lib/pageflow/images/palette.png +0 -0
  198. data/lib/pageflow/seeds.rb +1 -1
  199. data/lib/pageflow/theme.rb +8 -0
  200. data/lib/pageflow/version.rb +1 -1
  201. data/lib/pageflow/widget_type.rb +13 -0
  202. data/lib/pageflow/zencoder_video_output_definition.rb +16 -16
  203. data/lib/tasks/pageflow_tasks.rake +14 -0
  204. data/spec/factories/entries.rb +4 -0
  205. data/spec/factories/revisions.rb +10 -0
  206. data/spec/factories/users.rb +6 -0
  207. data/spec/factories/video_files.rb +4 -0
  208. data/vendor/assets/javascripts/audio5.min.js +3 -0
  209. metadata +78 -15
  210. data/app/assets/javascripts/pageflow/editor/models/mixins/widget_subject.js +0 -37
  211. data/app/assets/javascripts/pageflow/editor/utils/reload_stylesheet.js +0 -9
  212. data/app/assets/stylesheets/pageflow/text_variants.scss +0 -24
  213. data/app/views/admin/accounts/_widgets_inline_help.html.erb +0 -5
  214. data/app/views/admin/memberships/_entity_account_input.html.erb +0 -5
  215. data/app/views/admin/memberships/_entity_entry_input.html.erb +0 -5
  216. data/app/views/admin/users/_quota_exhausted.html.erb +0 -1
  217. data/app/views/components/pageflow/admin/add_membership_button_if_needed.rb +0 -62
@@ -1,68 +1,17 @@
1
- pageflow.mediaPlayer.volumeFading = function(player) {
2
- var originalVolume = player.volume;
3
- var fadeVolumeDeferred;
4
- var fadeVolumeInterval;
5
-
6
- player.volume = function(value) {
7
- if (typeof value !== 'undefined') {
8
- cancelFadeVolume();
9
- }
10
-
11
- return originalVolume.apply(player, arguments);
12
- };
13
-
14
- player.fadeVolume = function(value, duration) {
15
- if (!pageflow.browser.has('volume control support')) {
16
- return new jQuery.Deferred().resolve().promise();
17
- }
18
-
19
- cancelFadeVolume();
20
-
21
- return new $.Deferred(function(deferred) {
22
- var resolution = 10;
23
- var startValue = volume();
24
- var steps = duration / resolution;
25
- var leap = (value - startValue) / steps;
26
-
27
- if (value === startValue) {
28
- deferred.resolve();
29
- }
30
- else {
31
- fadeVolumeDeferred = deferred;
32
- fadeVolumeInterval = setInterval(function() {
33
- volume(volume() + leap);
34
-
35
- if ((volume() >= value && value >= startValue) ||
36
- (volume() <= value && value <= startValue)) {
1
+ //= require_self
2
+ //= require_tree ./volume_fading
37
3
 
38
- resolveFadeVolume();
39
- }
40
- }, resolution);
41
- }
42
- });
43
-
44
- function volume(/* arguments */) {
45
- return originalVolume.apply(player, arguments);
46
- }
47
- };
48
-
49
- player.one('dispose', cancelFadeVolume);
50
-
51
- function resolveFadeVolume() {
52
- clearInterval(fadeVolumeInterval);
53
- fadeVolumeDeferred.resolve();
54
-
55
- fadeVolumeInterval = null;
56
- fadeVolumeDeferred = null;
4
+ pageflow.mediaPlayer.volumeFading = function(player) {
5
+ if (!pageflow.browser.has('volume control support')) {
6
+ return pageflow.mediaPlayer.volumeFading.noop(player);
57
7
  }
58
-
59
- function cancelFadeVolume() {
60
- if (fadeVolumeInterval) {
61
- clearInterval(fadeVolumeInterval);
62
- fadeVolumeDeferred.reject();
63
-
64
- fadeVolumeInterval = null;
65
- fadeVolumeDeferred = null;
66
- }
8
+ else if (pageflow.audioContext.get() && player.getMediaElement) {
9
+ return pageflow.mediaPlayer.volumeFading.webAudio(
10
+ player,
11
+ pageflow.audioContext.get()
12
+ );
13
+ }
14
+ else {
15
+ return pageflow.mediaPlayer.volumeFading.interval(player);
67
16
  }
68
- };
17
+ };
@@ -12,12 +12,15 @@ pageflow.DomOrderScrollNavigator = function(slideshow, entryData) {
12
12
  }
13
13
 
14
14
  slideshow.goTo(previousPage, {
15
- position: position
15
+ position: position,
16
+ ignoreInHistory: true
16
17
  });
17
18
  };
18
19
 
19
20
  this.next = function(currentPage, pages) {
20
- slideshow.goTo(this.getNextPage(currentPage, pages));
21
+ slideshow.goTo(this.getNextPage(currentPage, pages), {
22
+ ignoreInHistory: true
23
+ });
21
24
  };
22
25
 
23
26
  this.nextPageExists = function(currentPage, pages) {
@@ -85,7 +85,7 @@ pageflow.Slideshow = function($el, configurations) {
85
85
 
86
86
  this.goToByPermaId = function(permaId, options) {
87
87
  if (permaId) {
88
- return this.goTo($el.find('#' + permaId), options);
88
+ return this.goTo(getPageByPermaId(permaId), options);
89
89
  }
90
90
  };
91
91
 
@@ -129,7 +129,7 @@ pageflow.Slideshow = function($el, configurations) {
129
129
  return this.goTo(pages.first());
130
130
  };
131
131
 
132
- this.update = function() {
132
+ this.update = function(options) {
133
133
  pages = $el.find('section.page');
134
134
 
135
135
  pages.each(function(index) {
@@ -141,7 +141,7 @@ pageflow.Slideshow = function($el, configurations) {
141
141
  });
142
142
  });
143
143
 
144
- ensureCurrentPage();
144
+ ensureCurrentPage(options);
145
145
  };
146
146
 
147
147
  this.currentPage = function() {
@@ -152,8 +152,8 @@ pageflow.Slideshow = function($el, configurations) {
152
152
  return currentPage.page('getConfiguration');
153
153
  };
154
154
 
155
- function ensureCurrentPage() {
156
- var newCurrentPage = findNewCurrentPage();
155
+ function ensureCurrentPage(options) {
156
+ var newCurrentPage = findNewCurrentPage(options);
157
157
 
158
158
  if (newCurrentPage) {
159
159
  currentPage = newCurrentPage;
@@ -164,15 +164,23 @@ pageflow.Slideshow = function($el, configurations) {
164
164
  }
165
165
  }
166
166
 
167
- function findNewCurrentPage() {
167
+ function findNewCurrentPage(options) {
168
168
  if (!currentPage.length) {
169
- return that.scrollNavigator.getLandingPage(pages);
169
+ var permaId = options && options.landingPagePermaId;
170
+
171
+ return permaId ?
172
+ getPageByPermaId(permaId) :
173
+ that.scrollNavigator.getLandingPage(pages);
170
174
  }
171
175
  else if (!currentPage.parent().length) {
172
176
  return nearestPage(currentPageIndex);
173
177
  }
174
178
  }
175
179
 
180
+ function getPageByPermaId(permaId) {
181
+ return $el.find('#' + permaId);
182
+ }
183
+
176
184
  this.on = function() {
177
185
  $el.on.apply($el, arguments);
178
186
  };
@@ -241,7 +249,10 @@ pageflow.Slideshow.setup = function(options) {
241
249
  options.beforeFirstUpdate();
242
250
  }
243
251
 
244
- pageflow.slides.update();
252
+ pageflow.slides.update({
253
+ landingPagePermaId: pageflow.history.getLandingPagePermaId()
254
+ });
255
+
245
256
  pageflow.history.start();
246
257
 
247
258
  return pageflow.slides;
@@ -25,6 +25,10 @@ pageflow.ConfigurationEditorView = Backbone.Marionette.View.extend({
25
25
  }, this));
26
26
  },
27
27
 
28
+ refresh: function() {
29
+ this.tabsView.refresh();
30
+ },
31
+
28
32
  render: function() {
29
33
  this.$el.append(this.subview(this.tabsView).el);
30
34
  return this;
@@ -12,17 +12,21 @@
12
12
  * @param {boolean} [options.disableRichtext=false]
13
13
  * Do not provide text formatting options.
14
14
  *
15
+ * @see
16
+ * {@link module:pageflow/ui.pageflow.inputWithPlaceholderText pageflow.inputWithPlaceholderText}
17
+ * for placeholder related options
18
+ *
15
19
  * @see {@link module:pageflow/ui.pageflow.inputView pageflow.inputView} for further options
16
20
  * @class
17
21
  * @memberof module:pageflow/ui
18
22
  */
19
23
  pageflow.TextAreaInputView = Backbone.Marionette.ItemView.extend({
20
- mixins: [pageflow.inputView],
24
+ mixins: [pageflow.inputView, pageflow.inputWithPlaceholderText],
21
25
 
22
26
  template: 'pageflow/ui/templates/inputs/text_area_input',
23
27
 
24
28
  ui: {
25
- textarea: 'textarea',
29
+ input: 'textarea',
26
30
  toolbar: '.toolbar'
27
31
  },
28
32
 
@@ -31,10 +35,11 @@ pageflow.TextAreaInputView = Backbone.Marionette.ItemView.extend({
31
35
  },
32
36
 
33
37
  onRender: function() {
34
- this.ui.textarea.addClass(this.options.size);
38
+ this.ui.input.addClass(this.options.size);
35
39
  this.load();
40
+ this.updatePlaceholder();
36
41
 
37
- this.editor = new wysihtml5.Editor(this.ui.textarea[0], {
42
+ this.editor = new wysihtml5.Editor(this.ui.input[0], {
38
43
  toolbar: this.ui.toolbar[0],
39
44
  autoLink: this.options.disableLinks ? 0 : 1,
40
45
  parserRules: {
@@ -77,7 +82,7 @@ pageflow.TextAreaInputView = Backbone.Marionette.ItemView.extend({
77
82
  },
78
83
 
79
84
  load: function() {
80
- this.ui.textarea.val(this.model.get(this.options.propertyName));
85
+ this.ui.input.val(this.model.get(this.options.propertyName));
81
86
  }
82
87
  });
83
88
 
@@ -4,28 +4,16 @@
4
4
  * @param {boolean} [options.required=false]
5
5
  * Display an error if the input is blank.
6
6
  *
7
- * @param {string|function} [options.placeholder]
8
- * Display a placeholder string if the input is blank. Either a
9
- * string or a function taking the model as a first parameter and
10
- * returning a string.
11
- *
12
- * @param {string} [options.placeholderBinding]
13
- * Name of an attribute. Recompute the placeholder function whenever
14
- * this attribute changes.
15
- *
16
- * @param {boolean} [options.hidePlaceholderIfDisabled]
17
- * Do not display the placeholder if the input is disabled.
18
- *
19
- * @param {Backbone.Model} [options.placeholderModel]
20
- * Obtain placeholder by looking up the configured `propertyName`
21
- * inside a given model.
7
+ * @see
8
+ * {@link module:pageflow/ui.pageflow.inputWithPlaceholderText pageflow.inputWithPlaceholderText}
9
+ * for placeholder related further options
22
10
  *
23
11
  * @see {@link module:pageflow/ui.pageflow.inputView pageflow.inputView} for further options
24
12
  * @class
25
13
  * @memberof module:pageflow/ui
26
14
  */
27
15
  pageflow.TextInputView = Backbone.Marionette.ItemView.extend({
28
- mixins: [pageflow.inputView],
16
+ mixins: [pageflow.inputView, pageflow.inputWithPlaceholderText],
29
17
 
30
18
  template: 'pageflow/ui/templates/inputs/text_input',
31
19
 
@@ -38,17 +26,10 @@ pageflow.TextInputView = Backbone.Marionette.ItemView.extend({
38
26
  },
39
27
 
40
28
  onRender: function() {
41
- this.updatePlaceholder();
42
29
  this.load();
43
30
  this.validate();
44
31
 
45
32
  this.listenTo(this.model, 'change:' + this.options.propertyName, this.load);
46
-
47
- if (this.options.placeholderBinding) {
48
- this.listenTo(this.model,
49
- 'change:' + this.options.placeholderBinding,
50
- this.updatePlaceholder);
51
- }
52
33
  },
53
34
 
54
35
  onChange: function() {
@@ -85,30 +66,5 @@ pageflow.TextInputView = Backbone.Marionette.ItemView.extend({
85
66
  resetValidationError: function(message) {
86
67
  this.$el.removeClass('invalid');
87
68
  this.ui.input.attr('title', '');
88
- },
89
-
90
- updatePlaceholder: function() {
91
- this.ui.input.attr('placeholder', this.placeholderText());
92
- },
93
-
94
- placeholderText: function() {
95
- if (!this.options.disabled || !this.options.hidePlaceholderIfDisabled) {
96
- if (this.options.placeholder) {
97
- if (typeof this.options.placeholder == 'function') {
98
- return this.options.placeholder(this.model);
99
- }
100
- else {
101
- return this.options.placeholder;
102
- }
103
- }
104
- else {
105
- return this.placeholderModelValue();
106
- }
107
- }
108
- },
109
-
110
- placeholderModelValue: function() {
111
- return this.options.placeholderModel &&
112
- this.options.placeholderModel.get(this.options.propertyName);
113
69
  }
114
70
  });
@@ -0,0 +1,58 @@
1
+ /**
2
+ * Text based input view that can display a placeholder.
3
+ *
4
+ * @param {string|function} [options.placeholder]
5
+ * Display a placeholder string if the input is blank. Either a
6
+ * string or a function taking the model as a first parameter and
7
+ * returning a string.
8
+ *
9
+ * @param {string} [options.placeholderBinding]
10
+ * Name of an attribute. Recompute the placeholder function whenever
11
+ * this attribute changes.
12
+ *
13
+ * @param {boolean} [options.hidePlaceholderIfDisabled]
14
+ * Do not display the placeholder if the input is disabled.
15
+ *
16
+ * @param {Backbone.Model} [options.placeholderModel]
17
+ * Obtain placeholder by looking up the configured `propertyName`
18
+ * inside a given model.
19
+ *
20
+ * @mixin
21
+ * @memberof module:pageflow/ui
22
+ */
23
+ pageflow.inputWithPlaceholderText = {
24
+ onRender: function() {
25
+ this.updatePlaceholder();
26
+
27
+ if (this.options.placeholderBinding) {
28
+ this.listenTo(this.model,
29
+ 'change:' + this.options.placeholderBinding,
30
+ this.updatePlaceholder);
31
+ }
32
+ },
33
+
34
+ updatePlaceholder: function() {
35
+ this.ui.input.attr('placeholder', this.placeholderText());
36
+ },
37
+
38
+ placeholderText: function() {
39
+ if (!this.options.disabled || !this.options.hidePlaceholderIfDisabled) {
40
+ if (this.options.placeholder) {
41
+ if (typeof this.options.placeholder == 'function') {
42
+ return this.options.placeholder(this.model);
43
+ }
44
+ else {
45
+ return this.options.placeholder;
46
+ }
47
+ }
48
+ else {
49
+ return this.placeholderModelValue();
50
+ }
51
+ }
52
+ },
53
+
54
+ placeholderModelValue: function() {
55
+ return this.options.placeholderModel &&
56
+ this.options.placeholderModel.get(this.options.propertyName);
57
+ }
58
+ };
@@ -0,0 +1,16 @@
1
+ // vendor JavaScript manifest for Pageflow.
2
+ // This file is meant to hold code we don't develop and/or rarely change.
3
+ // It means this asset will stay cached for much longer.
4
+
5
+ //= require i18n
6
+ //= require jquery
7
+ //= require jquery-ui/widget
8
+ //= require jquery_ujs
9
+ //= require jquery.fullscreen
10
+ //= require jquery.placeholder
11
+
12
+ //= require iscroll
13
+ //= require audio5.min
14
+
15
+ //= require react
16
+ //= require backbone-rails
@@ -0,0 +1,6 @@
1
+ pageflow.VideoPlayer.getMediaElementMethod = function(player) {
2
+ player.getMediaElement = function() {
3
+ var tech = player.tech({IWillNotUseThisInPlugins: true});
4
+ return tech && tech.el();
5
+ };
6
+ };
@@ -10,6 +10,7 @@
10
10
  //= require ./video_player/filter_sources
11
11
  //= require ./video_player/lazy
12
12
  //= require ./video_player/cue_settings_methods
13
+ //= require ./video_player/get_media_element_method
13
14
 
14
15
  pageflow.VideoPlayer = function(element, options) {
15
16
  options = options || {};
@@ -23,6 +24,7 @@ pageflow.VideoPlayer = function(element, options) {
23
24
 
24
25
  pageflow.VideoPlayer.prebuffering(player);
25
26
  pageflow.VideoPlayer.cueSettingsMethods(player);
27
+ pageflow.VideoPlayer.getMediaElementMethod(player);
26
28
 
27
29
  if (options.mediaEvents) {
28
30
  pageflow.VideoPlayer.mediaEvents(player, options.context);
@@ -23,7 +23,7 @@
23
23
  float: right;
24
24
  }
25
25
 
26
- span[title] {
26
+ td > span[title] {
27
27
  border-bottom: 1px #aaa dotted;
28
28
  cursor: default;
29
29
  }
@@ -1,4 +1,4 @@
1
- .quota_state {
1
+ .quota_state_description {
2
2
  margin: 0 10px 10px 10px;
3
3
  padding: 5px 10px;
4
4
  background-color: #fff;
@@ -1,3 +1,5 @@
1
+ @import "active_admin/searchable_select";
2
+
1
3
  @import "pageflow/mixins";
2
4
 
3
5
  @import "pageflow/admin/badge_list";
@@ -72,7 +72,6 @@ a {
72
72
  @import "./header";
73
73
  @import "./focus_outline";
74
74
  @import "./skip_links";
75
- @import "./text_variants";
76
75
  @import "./multimedia_alert";
77
76
  @import "./hide_text";
78
77
  @import "./subshare";
@@ -17,6 +17,7 @@
17
17
  @import "./unsupported_browser_hint";
18
18
 
19
19
  .editor {
20
+ @import "./change_theme";
20
21
  @extend %pageflow-ui;
21
22
 
22
23
  font-family: Helvetica, "Sans-Serif";
@@ -68,6 +69,7 @@
68
69
  @import "./file_thumbnails";
69
70
  @import "./file_settings_dialog";
70
71
  @import "./text_tracks";
72
+ @import "./static_thumbnails";
71
73
  @import "./wysihtml5";
72
74
  @import "./notifications";
73
75
  @import "./publish_entry";
@@ -0,0 +1,114 @@
1
+ &.change_theme {
2
+ .box {
3
+ position: absolute;
4
+ top: 20px;
5
+ left: 20px;
6
+ bottom: 20px;
7
+ right: 20px;
8
+ max-width: 1100px;
9
+ max-height: 650px;
10
+ background-color: #eee;
11
+ }
12
+
13
+ .content {
14
+ position: absolute;
15
+ top: 20px;
16
+ right: 20px;
17
+ bottom: 50px;
18
+ left: 20px;
19
+ overflow: auto;
20
+ overflow-y: scroll;
21
+ background-color: #fff;
22
+
23
+ >div {
24
+ padding: 10px;
25
+ }
26
+ }
27
+
28
+ .footer {
29
+ position: absolute;
30
+ right: 20px;
31
+ bottom: 10px;
32
+ left: 20px;
33
+ }
34
+
35
+ .themes_panel {
36
+ position: absolute;
37
+ top: 60px;
38
+ left: 20px;
39
+ width: 330px;
40
+ }
41
+
42
+ .preview_panel {
43
+ position: absolute;
44
+ top: 68px;
45
+ right: 30px;
46
+ left: 370px;
47
+ bottom: 50px;
48
+ }
49
+
50
+ .use_theme {
51
+ @include button(#590);
52
+ }
53
+
54
+ .theme_name {
55
+ margin: 10px;
56
+ }
57
+
58
+ .button_or_checkmark {
59
+ margin-right: 10px;
60
+ position: absolute;
61
+ right: 10px;
62
+ }
63
+
64
+ .theme_in_use {
65
+ font-size: 35px;
66
+ }
67
+
68
+ li {
69
+ position: relative;
70
+ line-height: 60px;
71
+ background-color: #eeeeee;
72
+ margin: 10px;
73
+
74
+ .active {
75
+ background-color: #d2e5fa;
76
+ }
77
+ }
78
+
79
+ h2.themes_header {
80
+ display: block;
81
+ font-size: 1.5em;
82
+ font-weight: bold;
83
+ text-transform: none;
84
+ position: absolute;
85
+ top: 25px;
86
+ left: 30px;
87
+ }
88
+
89
+ h2.preview_header {
90
+ font-size: 14px;
91
+ text-transform: none;
92
+ }
93
+
94
+ .preview_image_region {
95
+ margin-bottom: 30px;
96
+ border: 1px solid #eee;
97
+ padding-top: 71%;
98
+ position: relative;
99
+ }
100
+
101
+ .preview_image {
102
+ position: absolute;
103
+ top: 0;
104
+ max-width: 100%;
105
+ z-index: 2;
106
+ }
107
+
108
+ .loading {
109
+ position: absolute;
110
+ top: 50px;
111
+ z-index: 1;
112
+ width: 100%;
113
+ }
114
+ }
@@ -0,0 +1,4 @@
1
+ .static_thumbnail {
2
+ background-size: cover;
3
+ height: 100%;
4
+ }
@@ -1,4 +1,28 @@
1
- .edit_widget {
1
+ .widget_item {
2
2
  list-style: none;
3
3
  padding: 5px 0;
4
- }
4
+ position: relative;
5
+
6
+ &.is_hidden {
7
+ display: none;
8
+ }
9
+
10
+ &.has_settings {
11
+ .widget_type {
12
+ padding-right: 40px;
13
+ }
14
+
15
+ .settings {
16
+ display: block;
17
+ }
18
+ }
19
+
20
+ .settings {
21
+ @include icon-only-button(#aaa);
22
+ @include cog-icon;
23
+ display: none;
24
+ position: absolute;
25
+ right: 0;
26
+ top: 19px;
27
+ }
28
+ }
@@ -81,19 +81,6 @@
81
81
  display: none;
82
82
  }
83
83
 
84
- h1, h2 span.subtitle, h2 span.tagline, h3, p {
85
- max-width: 500px;
86
- width: 60%;
87
- @include mobile {
88
- width: 100%;
89
- }
90
- }
91
-
92
- h2 .title {
93
- max-width: 700px;
94
- width: 100%;
95
- }
96
-
97
84
  .shadow {
98
85
  position: absolute;
99
86
  top: 0;
@@ -135,4 +122,4 @@
135
122
  @include phone {
136
123
  margin-bottom: 80px;
137
124
  }
138
- }
125
+ }
@@ -12,6 +12,9 @@
12
12
  /// - `"icon_font"`: Use font icons for icon.
13
13
  $indicator-icons: "icon_font" !default;
14
14
 
15
+ /// Display the scroll indicator at the bottom of the page.
16
+ $display-scroll-indicator: true !default;
17
+
15
18
  @import "./indicators/icons/default";
16
19
  @import "./indicators/icons/icon_font";
17
20
  @import "./indicators/icons/sprite";
@@ -26,3 +29,12 @@ $indicator-icons: "icon_font" !default;
26
29
  } @else {
27
30
  @include indicators-icons-default;
28
31
  }
32
+
33
+ @if not $display-scroll-indicator {
34
+ .scroll_indicator {
35
+ // Override inline style used to display scroll indicator
36
+ // scss-lint:disable ImportantRule
37
+ display: none !important;
38
+ // scss-lint:enable ImportantRule
39
+ }
40
+ }