pageflow-linkmap-page 2.1.0 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9825b545e07dcf9337e0f9176ff4c4f56868450ca81e26c66806324b04e3f096
4
- data.tar.gz: b576dda5149b50eef40d3cd15db7b32cb4f9e246b1b0378a4972436e23b5a1d7
3
+ metadata.gz: c1a18f3bb77acbad943c0648729e1d748e0c30fb685cbb700514920313a701be
4
+ data.tar.gz: e5a641ab8fd520414035553dfc1242bfee4dfb35423c2278c1a25d02fa90f183
5
5
  SHA512:
6
- metadata.gz: 2f203df90096273faea3c8b16478b33f35662d94ffadcd3cb533674575b15fb2f1cf2100703c15176f76f07e984ea0b96a3de140f52e6a6e67d2983627548f5f
7
- data.tar.gz: 7e51966d6484244aa35a1d659f32160d3f2cc069585248418b7a1a7446164936516f25bb7abbe922dcc4e8c07fe7cfd59a0812d55cec3fd31ce8a4d5a3b2f7fe
6
+ metadata.gz: 2a79656eaf85fa16d48c7e30531d4a1907ca1ca0ecdd62d04984b3740506f3e86b865d7a8da41aca3cad85145b32952e3e450acfccf30dc7feb00742c074cc17
7
+ data.tar.gz: 8c93f349e4f83c4fe915d5ae12de25f1b39281d48dc46d94bca128a91d7b8fb41f37b43f824d47b30ca7829d6aa6891cc551cf0e883aedd7dcce9df48449fb37
data/CHANGELOG.md CHANGED
@@ -1,14 +1,22 @@
1
1
  # CHANGELOG
2
2
 
3
- ### Version 2.1.0
3
+ ### Version 2.2.0
4
4
 
5
- 2019-01-23
5
+ 2019-03-05
6
6
 
7
- [Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/2-0-stable...v2.1.0)
7
+ [Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/2-1-stable...v2.2.0)
8
8
 
9
- - Add compatibility to pageflow_linkmap_page 1.5
10
- ([#48](https://github.com/codevise/pageflow-linkmap-page/pull/48))
9
+ - Only show scroll indicators if at least 20% of panorama is hidden
10
+ ([#52](https://github.com/codevise/pageflow-linkmap-page/pull/52))
11
+ - Improve phone emulation support
12
+ ([#54](https://github.com/codevise/pageflow-linkmap-page/pull/54))
13
+ - Bug fix: Handle scroller widget margin correctly
14
+ ([#51](https://github.com/codevise/pageflow-linkmap-page/pull/51))
15
+ - Bug fix: Prevent letter boxes in pan zoom
16
+ ([#50](https://github.com/codevise/pageflow-linkmap-page/pull/50))
17
+ - Bug fix: Fix hiding linkmap info boxes
18
+ ([#49](https://github.com/codevise/pageflow-linkmap-page/pull/49))
11
19
 
12
20
  See
13
- [2-0-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/2-0-stable/CHANGELOG.md)
21
+ [2-1-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/2-1-stable/CHANGELOG.md)
14
22
  for previous changes.
@@ -63,7 +63,9 @@ pageflow.pageType.register('linkmap_page', _.extend({
63
63
 
64
64
  this.contentAndBackground.linkmapScrollIndicators({
65
65
  disabled: this.isPanZoomEnabled(configuration),
66
- scroller: this.scroller
66
+ scroller: this.scroller,
67
+ viewport: this.content,
68
+ innerScrollerElement: pageElement.find('.linkmap')
67
69
  });
68
70
 
69
71
  pageElement.find('.hover_video').linkmapHoverVideo({
@@ -254,12 +256,23 @@ pageflow.pageType.register('linkmap_page', _.extend({
254
256
 
255
257
  resize: function(pageElement, configuration) {
256
258
  this.content.linkmapPanorama('refresh');
259
+ this.contentAndBackground.linkmapScrollIndicators('refresh');
257
260
  this.content.linkmapPanZoom('refresh');
258
261
  this.linkmapAreas.linkmap('refresh');
259
262
  this.mobileInfoBox.linkmapPaginator('refresh');
260
263
 
261
264
  this.updateNavigationMode(configuration);
262
265
  this.content.linkmapLookaround('update', this.getMarginScrollingDisabled(configuration));
266
+
267
+ this.phoneEmulationChanged(function() {
268
+ this.content.linkmapPanorama('update',
269
+ configuration.add_environment,
270
+ configuration.limit_scrolling,
271
+ this.getPanoramaStartScrollPosition(configuration),
272
+ this.phoneEmulation());
273
+
274
+ this.content.linkmapPanorama('resetScrollPosition');
275
+ });
263
276
  },
264
277
 
265
278
  prepare: function(pageElement, configuration) {
@@ -350,7 +363,7 @@ pageflow.pageType.register('linkmap_page', _.extend({
350
363
  this.linkmapAreas.linkmap('updateHoverVideoEnabled', configuration.get('background_type') === 'hover_video');
351
364
 
352
365
  this.afterEmbeddedViewsUpdate(function() {
353
- var minScaling = false;
366
+ var minScaling = this.phoneEmulation();
354
367
 
355
368
  this.linkmapAreas.linkmap('option',
356
369
  'colorMapFileId',
@@ -368,7 +381,7 @@ pageflow.pageType.register('linkmap_page', _.extend({
368
381
  initialPosition: this.getPanoramaStartScrollPosition(configuration.attributes)
369
382
  });
370
383
 
371
- this.updateScaledOnPhoneFlags(configuration.page,
384
+ this.updateScaledOnPhoneFlags(configuration,
372
385
  this.content.linkmapPanorama('instance'));
373
386
 
374
387
  this.content.linkmapLookaround('update',
@@ -381,8 +394,12 @@ pageflow.pageType.register('linkmap_page', _.extend({
381
394
  });
382
395
  },
383
396
 
384
- updateScaledOnPhoneFlags: function(page, panorama) {
397
+ updateScaledOnPhoneFlags: function(configuration, panorama) {
398
+ var panZoomOnPhone = configuration.get('mobile_panorama_navigation') === 'pan_zoom';
399
+ var page = configuration.page;
400
+
385
401
  page.set('scaled_on_portrait_phone',
402
+ !panZoomOnPhone &&
386
403
  panorama.getPanoramaSize({
387
404
  pageWidth: 360,
388
405
  pageHeight: 640,
@@ -390,6 +407,7 @@ pageflow.pageType.register('linkmap_page', _.extend({
390
407
  }).scaled);
391
408
 
392
409
  page.set('scaled_on_landscape_phone',
410
+ !panZoomOnPhone &&
393
411
  panorama.getPanoramaSize({
394
412
  pageWidth: 640,
395
413
  pageHeight: 360,
@@ -457,6 +475,16 @@ pageflow.pageType.register('linkmap_page', _.extend({
457
475
  return !!$('#entry_preview > .emulation_mode_phone').length;
458
476
  },
459
477
 
478
+ phoneEmulationChanged: function(callback) {
479
+ var phoneEmulation = this.phoneEmulation();
480
+
481
+ if (this.lastPhoneEmulation != phoneEmulation) {
482
+ callback.call(this);
483
+ }
484
+
485
+ this.lastPhoneEmulation = phoneEmulation;
486
+ },
487
+
460
488
  playVideo: function(configuration) {
461
489
  var that = this;
462
490
 
@@ -201,9 +201,9 @@
201
201
  var areaHeight = area.height();
202
202
  var areaPosition = area.position();
203
203
 
204
- var scale = Math.min(2,
204
+ var scale = Math.max(1, Math.min(2,
205
205
  this.pageWidth / areaWidth,
206
- this.pageHeight / areaHeight);
206
+ this.pageHeight / areaHeight));
207
207
 
208
208
  var result = {
209
209
  scale: scale,
@@ -114,6 +114,8 @@
114
114
  });
115
115
 
116
116
  var positionOverlay = function(area) {
117
+ var viewport = that.element;
118
+
117
119
  if (area.is('.editing')) {
118
120
  return;
119
121
  }
@@ -133,7 +135,7 @@
133
135
  }
134
136
  else {
135
137
  var spaceLeftOfArea = area.offset().left;
136
- var spaceRightOfArea = $(pageElement).width() - area.offset().left - area.outerWidth();
138
+ var spaceRightOfArea = viewport.width() - area.offset().left - area.outerWidth();
137
139
 
138
140
  if(spaceLeftOfArea < spaceRightOfArea || spaceLeftOfArea < that.overlayBox.outerWidth()) {
139
141
  var overlayAlignmentDirection = "right";
@@ -163,8 +165,8 @@
163
165
  }
164
166
 
165
167
  var spaceToBottom = that.panorama.height() - area.position().top;
166
- var spaceToViewportBottom = $(pageElement).height() - area.offset().top - area.height() / 2;
167
- var spaceToViewportTop = $(pageElement).height() - 50;
168
+ var spaceToViewportBottom = viewport.height() - area.offset().top - area.height() / 2;
169
+ var spaceToViewportTop = viewport.height() - 50;
168
170
  var minMargin = 40;
169
171
 
170
172
  if(that.overlayBox.outerHeight() > spaceToBottom) {
@@ -210,8 +212,8 @@
210
212
  return;
211
213
  }
212
214
 
213
- var pageElement = this.options.page;
214
- var distanceLimit = pageElement.width() > pageElement.height() ? pageElement.height() : pageElement.width();
215
+ var viewport = this.element;
216
+ var distanceLimit = viewport.width() > viewport.height() ? viewport.height() : viewport.width();
215
217
  var minOpacity = 0.4;
216
218
  activeAreas.each(function() {
217
219
  var distance = calculateDistance($(this), mX, mY);
@@ -262,7 +264,7 @@
262
264
 
263
265
  getScrollArea: function(activeAreas) {
264
266
  var panorama = this.panorama;
265
- var pageElement = this.options.page;
267
+ var viewport = this.element;
266
268
  var startScrollPosition = this.startScrollPosition;
267
269
  var scrollArea;
268
270
 
@@ -283,10 +285,10 @@
283
285
  scrollArea.right = scrollArea.right < el.position().left + el.width() ? el.position().left + el.width() : scrollArea.right;
284
286
  });
285
287
 
286
- scrollArea.top = Math.max(0, scrollArea.top - pageElement.height() * this.scrollHoverMargin);
287
- scrollArea.left = Math.max(0, scrollArea.left - pageElement.width() * this.scrollHoverMargin);
288
- scrollArea.bottom = Math.min(panorama.height(), scrollArea.bottom + pageElement.height() * this.scrollHoverMargin);
289
- scrollArea.right = Math.min(panorama.width(), scrollArea.right + pageElement.width() * this.scrollHoverMargin);
288
+ scrollArea.top = Math.max(0, scrollArea.top - viewport.height() * this.scrollHoverMargin);
289
+ scrollArea.left = Math.max(0, scrollArea.left - viewport.width() * this.scrollHoverMargin);
290
+ scrollArea.bottom = Math.min(panorama.height(), scrollArea.bottom + viewport.height() * this.scrollHoverMargin);
291
+ scrollArea.right = Math.min(panorama.width(), scrollArea.right + viewport.width() * this.scrollHoverMargin);
290
292
  }
291
293
  else {
292
294
  scrollArea = {
@@ -316,12 +318,13 @@
316
318
 
317
319
  this.keepingScrollPosition(function() {
318
320
  var pageElement = this.options.page;
321
+ var viewport = this.element;
319
322
 
320
323
  this.panorama = this.options.panorama();
321
324
 
322
325
  this.panoramaSize = this.getPanoramaSize({
323
- pageWidth: pageElement.width(),
324
- pageHeight: pageElement.height(),
326
+ pageWidth: viewport.width(),
327
+ pageHeight: viewport.height(),
325
328
 
326
329
  minScaling: this.minScaling
327
330
  });
@@ -340,14 +343,14 @@
340
343
  this.innerScrollerElement.width(this.scrollArea.right - this.scrollArea.left);
341
344
  this.innerScrollerElement.height(this.scrollArea.bottom - this.scrollArea.top);
342
345
 
343
- var centerX = Math.max(0, (pageElement.width() - (this.scrollArea.right - this.scrollArea.left)) / 2);
344
- var centerY = Math.max(0, (pageElement.height() - (this.scrollArea.bottom - this.scrollArea.top)) / 2);
346
+ var centerX = Math.max(0, (viewport.width() - (this.scrollArea.right - this.scrollArea.left)) / 2);
347
+ var centerY = Math.max(0, (viewport.height() - (this.scrollArea.bottom - this.scrollArea.top)) / 2);
345
348
 
346
349
  var translateX = this.scrollArea.left - centerX;
347
350
  var translateY = this.scrollArea.top - centerY;
348
351
 
349
- var maxTranslateX = this.panoramaSize.width - pageElement.width();
350
- var maxTranslateY = this.panoramaSize.height - pageElement.height();
352
+ var maxTranslateX = this.panoramaSize.width - viewport.width();
353
+ var maxTranslateY = this.panoramaSize.height - viewport.height();
351
354
 
352
355
  this.panoramaWrapper.css({
353
356
  left: -Math.min(maxTranslateX, Math.max(0, translateX)) +'px',
@@ -1,27 +1,44 @@
1
1
  (function($) {
2
+ // Only show scroll indicators if at least 20% of the panorama is
3
+ // outside of the viewport.
4
+ var minOverflowFraction = 1.2;
5
+
6
+ // Ensure scroll indicators are already hidden when the scroller
7
+ // decelerates while approaching the max scroll position.
2
8
  var margin = 40;
3
9
 
4
10
  $.widget('pageflow.linkmapScrollIndicators', {
5
11
  _create: function() {
6
- var element = this.element;
7
12
  var scroller = this.options.scroller;
8
13
 
9
14
  this.arrows = this.element.find('.linkmap-arrow');
10
15
 
11
- scroller.onScroll(toggle);
12
- scroller.onScrollEnd(toggle);
13
- toggle();
16
+ scroller.onScroll(_.bind(this.refresh, this));
17
+ scroller.onScrollEnd(_.bind(this.refresh, this));
18
+ this.refresh();
14
19
 
15
20
  if (this.options.disabled) {
16
21
  this.disable();
17
22
  }
23
+ },
18
24
 
19
- function toggle() {
20
- element.toggleClass('can_scroll_left', Math.ceil(scroller.positionX()) < - margin);
21
- element.toggleClass('can_scroll_right', Math.floor(scroller.positionX()) > scroller.maxX() + margin);
22
- element.toggleClass('can_scroll_up', Math.ceil(scroller.positionY()) < - margin);
23
- element.toggleClass('can_scroll_down', Math.floor(scroller.positionY()) > scroller.maxY() + margin);
24
- }
25
+ refresh: function() {
26
+ var element = this.element;
27
+ var scroller = this.options.scroller;
28
+ var viewport = this.options.viewport;
29
+ var innerScrollerElement = this.options.innerScrollerElement;
30
+
31
+ var showH = innerScrollerElement.width() / viewport.width() > minOverflowFraction;
32
+ var showV = innerScrollerElement.height() / viewport.height() > minOverflowFraction;
33
+
34
+ element.toggleClass('can_scroll_left',
35
+ showH && Math.ceil(scroller.positionX()) < - margin);
36
+ element.toggleClass('can_scroll_right',
37
+ showH && Math.floor(scroller.positionX()) > scroller.maxX() + margin);
38
+ element.toggleClass('can_scroll_up',
39
+ showV && Math.ceil(scroller.positionY()) < - margin);
40
+ element.toggleClass('can_scroll_down',
41
+ showV && Math.floor(scroller.positionY()) > scroller.maxY() + margin);
25
42
  },
26
43
 
27
44
  disable: function() {
@@ -3,6 +3,17 @@ module Pageflow
3
3
  module AreasHelper
4
4
  include BackgroundImageHelper
5
5
 
6
+ def linkmap_content_and_background_css_classes(configuration)
7
+ hide_overlay_boxes =
8
+ configuration['mobile_panorama_navigation'] == 'pan_zoom' &&
9
+ configuration['hide_linkmap_overlay_boxes']
10
+
11
+ [
12
+ 'content_and_background linkmap_page unplayed',
13
+ hide_overlay_boxes ? 'hide_overlay_boxes' : nil
14
+ ].compact.join(' ')
15
+ end
16
+
6
17
  def linkmap_areas_div(entry, configuration)
7
18
  color_map_file =
8
19
  ColorMapFile.find_by_id(configuration['linkmap_color_map_file_id'])
@@ -11,21 +22,12 @@ module Pageflow
11
22
  masked_visited_image_file =
12
23
  MaskedImageFile.find_by_id(configuration['linkmap_masked_visited_image_id'])
13
24
 
14
-
15
- hide_overlay_boxes =
16
- configuration['mobile_panorama_navigation'] == 'pan_zoom' &&
17
- configuration['hide_linkmap_overlay_boxes']
18
-
19
25
  render('pageflow/linkmap_page/areas/div',
20
26
  entry: entry,
21
27
  configuration: configuration,
22
28
  color_map_file: color_map_file,
23
29
  masked_hover_image_file: masked_hover_image_file,
24
30
  masked_visited_image_file: masked_visited_image_file,
25
- css_classes: [
26
- 'linkmap_areas',
27
- hide_overlay_boxes ? 'hide_overlay_boxes' : nil
28
- ].compact.join(' '),
29
31
  data_attributes: {
30
32
  color_map_file_id: configuration['color_map_file_id']
31
33
  })
@@ -1,4 +1,4 @@
1
- <%= content_tag(:div, class: css_classes, data: data_attributes) do %>
1
+ <%= content_tag(:div, class: 'linkmap_areas', data: data_attributes) do %>
2
2
  <% (configuration['linkmap_areas'].presence || []).each_with_index do |attributes, index| %>
3
3
  <%= linkmap_area(entry, attributes, index, configuration['background_type']) do %>
4
4
  <%= linkmap_area_background_image_div('visited',
@@ -1,5 +1,5 @@
1
1
  <div class="blackLayer"></div>
2
- <div class="content_and_background linkmap_page unplayed">
2
+ <%= content_tag(:div, class: linkmap_content_and_background_css_classes(configuration)) do %>
3
3
  <div class="backgroundArea">
4
4
  <%= background_image_div(configuration, 'fixed_background_image', class: 'fixed_background') %>
5
5
  <div class="scroller">
@@ -97,4 +97,4 @@
97
97
  </div>
98
98
  </div>
99
99
  </div>
100
- </div>
100
+ <% end %>
@@ -1,5 +1,5 @@
1
1
  module Pageflow
2
2
  module LinkmapPage
3
- VERSION = '2.1.0'.freeze
3
+ VERSION = '2.2.0'.freeze
4
4
  end
5
5
  end
@@ -3,6 +3,48 @@ require 'spec_helper'
3
3
  module Pageflow
4
4
  module LinkmapPage
5
5
  describe AreasHelper do
6
+ describe '#linkmap_content_and_background_css_classes' do
7
+ it 'contains default css classes' do
8
+ classes = helper.linkmap_content_and_background_css_classes({}).split(' ')
9
+
10
+ expect(classes).to include('content_and_background')
11
+ expect(classes).to include('linkmap_page')
12
+ expect(classes).to include('unplayed')
13
+ end
14
+
15
+ it 'contains hide_overlay_boxes if option is set and pan zoom is active' do
16
+ configuration = {
17
+ 'mobile_panorama_navigation' => 'pan_zoom',
18
+ 'hide_linkmap_overlay_boxes'=> true
19
+ }
20
+
21
+ classes = helper.linkmap_content_and_background_css_classes(configuration).split(' ')
22
+
23
+ expect(classes).to include('hide_overlay_boxes')
24
+ end
25
+
26
+ it 'does not contain hide_overlay_boxes if option is not set even if pan zoom is active' do
27
+ configuration = {
28
+ 'mobile_panorama_navigation' => 'pan_zoom',
29
+ 'hide_linkmap_overlay_boxes'=> false
30
+ }
31
+
32
+ classes = helper.linkmap_content_and_background_css_classes(configuration).split(' ')
33
+
34
+ expect(classes).not_to include('hide_overlay_boxes')
35
+ end
36
+
37
+ it 'does not contain hide_overlay_boxes if option is set even but pan zoom is not active' do
38
+ configuration = {
39
+ 'hide_linkmap_overlay_boxes'=> true
40
+ }
41
+
42
+ classes = helper.linkmap_content_and_background_css_classes(configuration).split(' ')
43
+
44
+ expect(classes).not_to include('hide_overlay_boxes')
45
+ end
46
+ end
47
+
6
48
  describe '#linkmap_area_divs' do
7
49
  it 'renders div with attribute name as class' do
8
50
  entry = create(:entry)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pageflow-linkmap-page
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.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-01-23 00:00:00.000000000 Z
11
+ date: 2019-03-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pageflow
@@ -351,7 +351,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
351
351
  version: '0'
352
352
  requirements: []
353
353
  rubyforge_project:
354
- rubygems_version: 2.7.8
354
+ rubygems_version: 2.7.5
355
355
  signing_key:
356
356
  specification_version: 4
357
357
  summary: Pageflow page type for a page that contains customizable link areas