pageflow-embedded-video 1.5.0 → 1.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f861657148c6bfefc6327c08dce8f7872e15c0ec81f5ad9e02ac2f0842c5154c
4
- data.tar.gz: 218618d0c5b9e19194165d04c75db9dd738e487b6825c2167c41977c883de3c2
3
+ metadata.gz: 4953d1e48d49ae77ee788c40eafa938d6cbdf6120dbe0d8958bc43cc2d661485
4
+ data.tar.gz: cada1c6fdc972ed53bc66b8419918dc9c7491a79bae641b19fc48bb00df2f806
5
5
  SHA512:
6
- metadata.gz: 4f4f5a460405ae6344e7c483478c9685f4f2716d6c1c0bd7c9f542c5918270923bde37dccf683047a8c0cd550c232cc143287b65adf4b11ead6a485ffb046140
7
- data.tar.gz: d0345f1836a7b30a077570e78d8b33d4bc713c2f815bab909fcde6f83efce3e4c9958d6428065d9ef99bf1ba1e2d0cf059e92c4511990d87bb4695be8d06380a
6
+ metadata.gz: dd4e3644d0a87253544a5f0ad4a7e57a39adc130165aa5c431513b2cbb321baa368fc171b3857f98dbba79911ca2bf39e34f2c040727980f9212afdca10927c4
7
+ data.tar.gz: 592cfb3a4363ea49b54b16ba6b48788762f55e97ce46d45727d88e03a87f54bc40cd4b913524e7aef9bb89f96772b51a6acbce8dd084d5ba242c86cce3bc5282
data/.travis.yml CHANGED
@@ -8,3 +8,6 @@ cache: bundler
8
8
 
9
9
  script:
10
10
  - bin/rspec
11
+
12
+ services:
13
+ - mysql
data/CHANGELOG.md CHANGED
@@ -1,14 +1,14 @@
1
1
  # CHANGELOG
2
2
 
3
- ### Version 1.5.0
3
+ ### Version 1.8.0
4
4
 
5
- 2019-06-18
5
+ 2022-07-18
6
6
 
7
- [Compare changes](https://github.com/codevise/pageflow-embedded-video/compare/1-4-stable...v1.5.0)
7
+ [Compare changes](https://github.com/codevise/pageflow-embedded-video/compare/1-7-stable...v1.8.0)
8
8
 
9
- - YouTube now uses a unitless time parameter
10
- ([#32](https://github.com/codevise/pageflow-embedded-video/pull/32))
9
+ - Embed opt-in
10
+ ([#37](https://github.com/codevise/pageflow-embedded-video/pull/37))
11
11
 
12
12
  See
13
- [1-4-stable branch](https://github.com/codevise/pageflow-embedded-video/blob/1-4-stable/CHANGELOG.md)
13
+ [1-7-stable branch](https://github.com/codevise/pageflow-embedded-video/blob/1-7-stable/CHANGELOG.md)
14
14
  for previous changes.
data/README.md CHANGED
@@ -14,11 +14,11 @@ Add this line to your application's Gemfile:
14
14
 
15
15
  Run `bundle install`
16
16
 
17
- Register the page type:
17
+ Register the plugin:
18
18
 
19
19
  # config/initializers/pageflow.rb
20
20
  Pageflow.configure do |config|
21
- config.page_types.register(Pageflow::EmbeddedVideo.page_type)
21
+ config.plugin(Pageflow::EmbeddedVideo.plugin)
22
22
  end
23
23
 
24
24
  Include javascript/stylesheets:
@@ -0,0 +1,41 @@
1
+ pageflow.embeddedVideo.consent = new (pageflow.Object.extend({
2
+ accepted: {},
3
+ promises: {},
4
+ registered: {},
5
+
6
+ ensureVendorRegistered: function(options) {
7
+ var name = options.name;
8
+
9
+ if (!name || this.registered[name]) {
10
+ return;
11
+ }
12
+
13
+ this.registered[name] = true;
14
+
15
+ pageflow.consent.registerVendor(name, {
16
+ paradigm: options.skip ? 'skip' : 'lazy opt-in',
17
+ displayName: I18n.t(
18
+ 'pageflow.public.embedded_video.consent.' + name + '.vendor_name'
19
+ ),
20
+ description: I18n.t(
21
+ 'pageflow.public.embedded_video.consent.' + name + '.vendor_description'
22
+ )
23
+ });
24
+ },
25
+
26
+ setup: function(name) {
27
+ if (!name) {
28
+ return;
29
+ }
30
+
31
+ var that = this;
32
+
33
+ this.promises[name] = this.promises[name] ||
34
+ pageflow.consent.requireAccepted(name).then(function(result) {
35
+ if (result == 'fulfilled') {
36
+ that.accepted[name] = true;
37
+ that.trigger('accepted:' + name);
38
+ }
39
+ });
40
+ }
41
+ }));
@@ -1,15 +1,40 @@
1
1
  /*global YT, URI, $f */
2
2
 
3
+ pageflow.pageType.registerInitializer('embedded_video', function(configuration) {
4
+ var url = configuration.display_embedded_video_url;
5
+
6
+ pageflow.embeddedVideo.consent.ensureVendorRegistered({
7
+ name: pageflow.embeddedVideo.providerFromUrl(url),
8
+ skip: !pageflow.features.isEnabled('embedded_video_opt_in')
9
+ });
10
+ });
11
+
3
12
  pageflow.react.registerPageTypeWithDefaultBackground('embedded_video', _.extend({
4
13
  prepareNextPageTimeout: 0,
5
14
 
6
15
  enhance: function(pageElement, configuration) {
16
+ var url = configuration.display_embedded_video_url;
17
+
18
+ pageflow.embeddedVideo.consent.setup(
19
+ pageflow.embeddedVideo.providerFromUrl(url)
20
+ );
21
+
22
+ pageElement.thirdPartyEmbedConsent();
23
+
24
+ if (!pageflow.features.isEnabled('embedded_video_opt_in')) {
25
+ pageElement.find('.opt_out_wrapper').hide();
26
+ }
27
+
7
28
  var that = this;
8
29
 
9
30
  pageElement.addClass('no_hidden_text_indicator');
10
31
 
11
32
  if (pageflow.features.has('mobile platform')) {
12
33
  pageElement.find('.close_button, .iframe_container').click(function(event) {
34
+ if ($(event.target).parents('.third_party_embed_opt_in').length) {
35
+ return;
36
+ }
37
+
13
38
  event.stopPropagation();
14
39
  that._pauseVideo();
15
40
  pageElement.find('.iframe_container, .close_button').removeClass('show');
@@ -101,22 +126,11 @@ pageflow.react.registerPageTypeWithDefaultBackground('embedded_video', _.extend(
101
126
  var that = this,
102
127
  iframeWrapper = pageElement.find('.iframe_wrapper'),
103
128
  captionElement = pageElement.find('.video_caption'),
129
+ captionTextElement = pageElement.find('.video_caption_text'),
104
130
  caption = configuration.get('video_caption');
105
131
 
106
- if ((caption || '').trim() !== '') {
107
- if (!captionElement.length) {
108
- captionElement = $('<div class="video_caption"></div>');
109
-
110
- if (pageElement.find('.scroller iframe').length) {
111
- captionElement.insertAfter(iframeWrapper);
112
- } else {
113
- captionElement.appendTo(iframeWrapper);
114
- }
115
- }
116
- captionElement.text(caption || '');
117
- } else {
118
- captionElement.remove();
119
- }
132
+ captionElement.toggleClass('video_caption_blank', (caption || '').trim() === '');
133
+ captionTextElement.text(caption || '');
120
134
 
121
135
  if (this.active) {
122
136
  if (configuration.hasChanged('display_embedded_video_url') ||
@@ -140,6 +154,17 @@ pageflow.react.registerPageTypeWithDefaultBackground('embedded_video', _.extend(
140
154
  url = configuration.display_embedded_video_url,
141
155
  provider = pageflow.embeddedVideo.providerFromUrl(url);
142
156
 
157
+ pageflow.embeddedVideo.consent.setup(
158
+ pageflow.embeddedVideo.providerFromUrl(url)
159
+ );
160
+
161
+ if (!pageflow.embeddedVideo.consent.accepted[provider]) {
162
+ pageflow.embeddedVideo.consent.once('accepted:' + provider, function() {
163
+ this._createPlayer(pageElement, configuration);
164
+ }, this);
165
+ return;
166
+ }
167
+
143
168
  if (provider === 'youtube') {
144
169
  this.ytApiInitialize().done(function () {
145
170
  that._createYouTubePlayer(pageElement, url, configuration);
@@ -255,6 +280,8 @@ pageflow.react.registerPageTypeWithDefaultBackground('embedded_video', _.extend(
255
280
  },
256
281
 
257
282
  _removePlayer: function (pageElement, callback) {
283
+ pageflow.embeddedVideo.consent.off(null, null, this);
284
+
258
285
  if (this.player && typeof this.player.destroy === 'function') {
259
286
  this.player.destroy();
260
287
  }
@@ -1,4 +1,5 @@
1
1
  //= require_self
2
+ //= require ./embedded_video/consent
2
3
  //= require ./embedded_video/page_type
3
4
  //= require ./URI.js
4
5
  //= require ./froogaloop.js
@@ -1 +1,11 @@
1
+ $embedded-video-caption-typography: () !default;
2
+
1
3
  @include pageflow-page-type-pictograms("embedded_video");
4
+
5
+ .embedded_video_page {
6
+ .video_caption {
7
+ @include typography(
8
+ $embedded-video-caption-typography
9
+ );
10
+ }
11
+ }
@@ -76,6 +76,7 @@
76
76
  height: initial;
77
77
  padding-top: 56.25%;
78
78
  position: relative;
79
+ color: #fff;
79
80
 
80
81
  iframe {
81
82
  position: absolute;
@@ -93,7 +94,7 @@
93
94
  @include transform(translate(0,-50%));
94
95
  margin-bottom: 0;
95
96
  z-index: 1;
96
- padding-top: 33%;
97
+ padding-top: 25.2%;
97
98
  }
98
99
 
99
100
  &:before {
@@ -214,6 +215,8 @@
214
215
  position: relative;
215
216
  display: block;
216
217
  margin-bottom: 40px;
218
+ padding-right: 40px;
219
+ box-sizing: border-box;
217
220
 
218
221
  &:before {
219
222
  content: "";
@@ -244,10 +247,22 @@
244
247
  }
245
248
  }
246
249
 
250
+ .video_caption_blank:before {
251
+ display: none;
252
+ }
253
+
247
254
  .widescreened .video_caption {
248
255
  position: absolute;
249
256
  top: 100%;
250
257
  width: 100%;
251
258
  margin-bottom: 0;
252
259
  }
260
+
261
+ .opt_out_wrapper {
262
+ position: absolute;
263
+ top: -10px;
264
+ right: -10px;
265
+ bottom: -10px;
266
+ left: -10px;
267
+ }
253
268
  }
@@ -0,0 +1,33 @@
1
+ module Pageflow
2
+ module EmbeddedVideo
3
+ # @api private
4
+ module ConsentHelper
5
+ include PageflowPaged::ThirdPartyEmbedConsentHelper
6
+
7
+ def embedded_video_opt_in(entry, configuration)
8
+ vendor_name = embedded_video_consent_vendor_name(configuration)
9
+ return unless vendor_name
10
+
11
+ vendor_display_name = I18n.t(
12
+ "pageflow.public.embedded_video.consent.#{vendor_name}.vendor_name"
13
+ )
14
+
15
+ third_party_embed_opt_in(
16
+ entry: entry,
17
+ vendor_name: vendor_name,
18
+ message: t('pageflow.public.embedded_video.opt_in_prompt',
19
+ vendor: vendor_display_name)
20
+ )
21
+ end
22
+
23
+ def embedded_video_consent_vendor_name(configuration)
24
+ if configuration['display_embedded_video_url'] =~ /youtube\.com/ ||
25
+ configuration['display_embedded_video_url'] =~ /youtu\.be/
26
+ 'youtube'
27
+ elsif configuration['display_embedded_video_url'] =~ /vimeo\.com/
28
+ 'vimeo'
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -20,10 +20,18 @@
20
20
  </div>
21
21
  </div>
22
22
  <div class="iframe_container">
23
- <div class="iframe_wrapper"></div>
24
- <% if configuration['video_caption'].present? %>
25
- <div class="video_caption"><%= configuration['video_caption'] %></div>
26
- <% end %>
23
+ <div class="iframe_wrapper">
24
+ <%= embedded_video_opt_in(entry, configuration) %>
25
+ </div>
26
+ <div class="video_caption
27
+ <%= configuration['video_caption'].blank? ? 'video_caption_blank' : ''%>">
28
+ <span class="video_caption_text">
29
+ <%= configuration['video_caption'] %>
30
+ </span>
31
+ <div class="opt_out_wrapper">
32
+ <%= third_party_embed_opt_out_info(entry) %>
33
+ </div>
34
+ </div>
27
35
  </div>
28
36
  </div>
29
37
  </div>
@@ -29,6 +29,8 @@ de:
29
29
  page_type_category_name: Media
30
30
  page_type_description: Bettet ein externes Video von YouTube oder Vimeo ein
31
31
  page_type_name: Embedded Video
32
+ embedded_video_opt_in:
33
+ feature_name: Opt-In für YouTube/Vimeo Embeds
32
34
  ui:
33
35
  configuration_editor:
34
36
  tabs:
@@ -29,6 +29,8 @@ en:
29
29
  page_type_category_name: Media
30
30
  page_type_description: Embed YouTube or Vimeo videos
31
31
  page_type_name: Embedded Video
32
+ embedded_video_opt_in:
33
+ feature_name: Opt-in for YouTube/Vimeo embeds
32
34
  ui:
33
35
  configuration_editor:
34
36
  tabs:
@@ -3,10 +3,13 @@ module Pageflow
3
3
  class PageType < Pageflow::PageType
4
4
  name 'embedded_video'
5
5
 
6
+ def view_helpers
7
+ [ConsentHelper]
8
+ end
9
+
6
10
  def json_seed_template
7
11
  'pageflow/embedded_video/page_type.json.jbuilder'
8
12
  end
9
-
10
13
  end
11
14
  end
12
15
  end
@@ -0,0 +1,10 @@
1
+ module Pageflow
2
+ module EmbeddedVideo
3
+ class Plugin < Pageflow::Plugin
4
+ def configure(config)
5
+ config.page_types.register(EmbeddedVideo.page_type)
6
+ config.features.register('embedded_video_opt_in')
7
+ end
8
+ end
9
+ end
10
+ end
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
2
  module EmbeddedVideo
3
- VERSION = '1.5.0'.freeze
3
+ VERSION = '1.8.0'.freeze
4
4
  end
5
5
  end
@@ -10,6 +10,10 @@ module Pageflow
10
10
  block.call(config)
11
11
  end
12
12
 
13
+ def self.plugin
14
+ EmbeddedVideo::Plugin.new
15
+ end
16
+
13
17
  def self.page_type
14
18
  EmbeddedVideo::PageType.new
15
19
  end
@@ -18,11 +18,11 @@ Gem::Specification.new do |spec|
18
18
 
19
19
  spec.required_ruby_version = '~> 2.1'
20
20
 
21
- spec.add_runtime_dependency 'pageflow', '~> 14.x'
21
+ spec.add_runtime_dependency 'pageflow', '~> 15.7.x'
22
22
  spec.add_runtime_dependency 'pageflow-public-i18n', '~> 1.0'
23
23
 
24
24
  spec.add_development_dependency 'bundler', ['>= 1.0', '< 3']
25
- spec.add_development_dependency 'pageflow-support', '~> 14.x'
25
+ spec.add_development_dependency 'pageflow-support', ['>= 14', '< 16']
26
26
  spec.add_development_dependency 'rake', '~> 12.0'
27
27
  spec.add_development_dependency 'rspec-rails', '~> 3.0'
28
28
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pageflow-embedded-video
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.5.0
4
+ version: 1.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Codevise Solutions Ltd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-06-18 00:00:00.000000000 Z
11
+ date: 2022-07-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pageflow
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 14.x
19
+ version: 15.7.x
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 14.x
26
+ version: 15.7.x
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: pageflow-public-i18n
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -62,16 +62,22 @@ dependencies:
62
62
  name: pageflow-support
63
63
  requirement: !ruby/object:Gem::Requirement
64
64
  requirements:
65
- - - "~>"
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: '14'
68
+ - - "<"
66
69
  - !ruby/object:Gem::Version
67
- version: 14.x
70
+ version: '16'
68
71
  type: :development
69
72
  prerelease: false
70
73
  version_requirements: !ruby/object:Gem::Requirement
71
74
  requirements:
72
- - - "~>"
75
+ - - ">="
76
+ - !ruby/object:Gem::Version
77
+ version: '14'
78
+ - - "<"
73
79
  - !ruby/object:Gem::Version
74
- version: 14.x
80
+ version: '16'
75
81
  - !ruby/object:Gem::Dependency
76
82
  name: rake
77
83
  requirement: !ruby/object:Gem::Requirement
@@ -138,6 +144,7 @@ files:
138
144
  - app/assets/images/pageflow/ov-embedded_video.png
139
145
  - app/assets/javascript/pageflow/URI.js
140
146
  - app/assets/javascript/pageflow/embedded_video.js
147
+ - app/assets/javascript/pageflow/embedded_video/consent.js
141
148
  - app/assets/javascript/pageflow/embedded_video/editor.js
142
149
  - app/assets/javascript/pageflow/embedded_video/editor/collections/embedded_videos_collection.js
143
150
  - app/assets/javascript/pageflow/embedded_video/editor/initializers/setup_collections.js
@@ -152,6 +159,7 @@ files:
152
159
  - app/assets/stylesheets/pageflow/embedded_video/custom.scss
153
160
  - app/assets/stylesheets/pageflow/embedded_video/editor.scss
154
161
  - app/assets/stylesheets/pageflow/embedded_video/themes/default.scss
162
+ - app/helpers/pageflow/embedded_video/consent_helper.rb
155
163
  - app/views/pageflow/embedded_video/page.html.erb
156
164
  - app/views/pageflow/embedded_video/page_type.json.jbuilder
157
165
  - bin/rails-cmd
@@ -162,6 +170,7 @@ files:
162
170
  - lib/pageflow/embedded_video/configuration.rb
163
171
  - lib/pageflow/embedded_video/engine.rb
164
172
  - lib/pageflow/embedded_video/page_type.rb
173
+ - lib/pageflow/embedded_video/plugin.rb
165
174
  - lib/pageflow/embedded_video/version.rb
166
175
  - pageflow-embedded-video.gemspec
167
176
  - spec/integration/page_type_spec.rb
@@ -185,8 +194,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
185
194
  - !ruby/object:Gem::Version
186
195
  version: '0'
187
196
  requirements: []
188
- rubyforge_project:
189
- rubygems_version: 2.7.8
197
+ rubygems_version: 3.0.8
190
198
  signing_key:
191
199
  specification_version: 4
192
200
  summary: Pagetype for embedded youtube/vimeo videos