pageflow-linkmap-page 1.5.0 → 2.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +31 -6
- data/Gemfile +0 -7
- data/README.md +0 -5
- data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +8 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/config.js +23 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +24 -5
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +4 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_delegator.js +16 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_file.js +6 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/masked_image_file.js +7 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +49 -55
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/processed_file.js +12 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/patterns/area_pattern.js +42 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +3 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +2 -2
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_masks_preview.jst.ejs +4 -2
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_outlines.jst.ejs +3 -2
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/mobile_info_box_page_item.jst.ejs +2 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +1 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +46 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +3 -6
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +75 -10
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_masks_preview_embedded_view.js +71 -77
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_outlines_embedded_view.js +44 -82
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +12 -13
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_embedded_view.js +61 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_page_item_embedded_view.js +28 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor.js +10 -2
- data/app/assets/javascript/pageflow/linkmap_page/page_type.js +155 -20
- data/app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js +4 -1
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_contains.js +7 -6
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_set_mask.js +16 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js +83 -142
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/image_data.js +17 -47
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask.js +3 -34
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js +3 -6
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +78 -92
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_area_indicators.js +75 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_paginator.js +292 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_pan_zoom.js +241 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +81 -59
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js +14 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/area_outlines.scss +6 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/masks_preview.scss +10 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/mobile_info_box.scss +31 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/paginator.scss +53 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss +5 -1
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default.scss +3 -0
- data/app/assets/stylesheets/pageflow/linkmap_page.scss +29 -3
- data/app/helpers/pageflow/linkmap_page/areas_helper.rb +37 -11
- data/app/jobs/pageflow/linkmap_page/process_source_image_file_job.rb +4 -4
- data/app/views/pageflow/linkmap_page/areas/_div.html.erb +13 -7
- data/app/views/pageflow/linkmap_page/color_map_files/_color_map_file.json.jbuilder +18 -0
- data/app/views/pageflow/linkmap_page/editor/color_map_files/_color_map_file.json.jbuilder +1 -0
- data/app/views/pageflow/linkmap_page/editor/masked_image_files/_masked_image_file.json.jbuilder +1 -0
- data/app/views/pageflow/linkmap_page/page.html.erb +76 -39
- data/config/locales/de.yml +47 -4
- data/config/locales/en.yml +43 -4
- data/db/migrate/20170330201200_create_mask_sprites.rb +1 -1
- data/db/migrate/20171106151700_create_masked_image_files.rb +1 -1
- data/db/migrate/20180111145100_create_color_map_files.rb +1 -1
- data/db/migrate/20180214201200_drop_mask_sprites.rb +7 -0
- data/lib/pageflow/linkmap_page/engine.rb +4 -0
- data/lib/pageflow/linkmap_page/page_type.rb +26 -0
- data/lib/pageflow/linkmap_page/paperclip_processors/color_mask.rb +1 -1
- data/lib/pageflow/linkmap_page/paperclip_processors/colors.rb +1 -1
- data/lib/pageflow/linkmap_page/version.rb +1 -1
- data/lib/tasks/pageflow_linkmap_page_tasks.rake +8 -7
- data/pageflow-linkmap-page.gemspec +11 -5
- data/spec/factories/color_map_file.rb +16 -0
- data/spec/factories/image_file.rb +25 -0
- data/spec/factories/masked_image_file.rb +10 -0
- data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +76 -13
- data/spec/integration/masked_image_file_type_spec.rb +15 -0
- data/spec/models/pageflow/linkmap_page/color_map_file_spec.rb +113 -0
- data/spec/models/pageflow/linkmap_page/masked_image_file_spec.rb +87 -0
- data/spec/pageflow/linkmap_page/paperclip_processors/colors_spec.rb +46 -0
- data/spec/pageflow/linkmap_page/progress_spec.rb +91 -0
- data/spec/spec_helper.rb +5 -1
- data/spec/support/config/devise.rb +1 -8
- data/spec/support/config/{factory_girl.rb → factory_bot.rb} +5 -3
- data/spec/support/config/resque.rb +9 -0
- data/spec/support/fixtures/black_dots.png +0 -0
- data/spec/support/fixtures/color_map.png +0 -0
- data/spec/support/fixtures/dots_and_lines.png +0 -0
- data/spec/support/fixtures/green_and_black.png +0 -0
- data/spec/support/fixtures/red.png +0 -0
- data/spec/support/fixtures/transparent.png +0 -0
- data/spec/support/matchers/have_color.rb +34 -0
- metadata +98 -41
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/masks_delegator.js +0 -16
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_redraw.js +0 -34
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask_sprite.js +0 -68
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/masks.js +0 -99
- data/app/controllers/pageflow/linkmap_page/mask_sprites_controller.rb +0 -26
- data/app/models/pageflow/linkmap_page/mask_sprite.rb +0 -15
- data/config/routes.rb +0 -5
- data/spec/controllers/pageflow/linkmap_page/mask_sprites_controller_spec.rb +0 -108
@@ -22,10 +22,6 @@
|
|
22
22
|
this.overlayTitle = pageElement.find('.description_overlay .link_title');
|
23
23
|
this.overlayDescription = pageElement.find('.description_overlay .link_description');
|
24
24
|
|
25
|
-
this.touchIndicator = pageElement.find('.touch_indicator');
|
26
|
-
this.externalLinkLoadingIndicator = pageElement.find('.external_link_loading_indicator');
|
27
|
-
this.globalIndicators = this.touchIndicator.add(this.externalLinkLoadingIndicator);
|
28
|
-
|
29
25
|
this.startScrollPosition = _.clone(this.options.startScrollPosition);
|
30
26
|
|
31
27
|
this.currentScrollPosition = null;
|
@@ -33,40 +29,66 @@
|
|
33
29
|
this.refresh();
|
34
30
|
|
35
31
|
this.scroller.onScrollEnd(function() {
|
36
|
-
that.
|
32
|
+
if (!that.options.disabled) {
|
33
|
+
that.updateScrollPosition();
|
34
|
+
}
|
37
35
|
});
|
38
36
|
|
39
|
-
|
40
|
-
|
37
|
+
this._on(window, {
|
38
|
+
resize: function () {
|
39
|
+
that.centerToPoint(null, 0);
|
40
|
+
}
|
41
41
|
});
|
42
42
|
|
43
|
-
this.
|
44
|
-
|
45
|
-
|
43
|
+
this._on({
|
44
|
+
mousemove: function(e) {
|
45
|
+
that.lastMouseMoveEvent = e;
|
46
|
+
that.calcAreaOpacity(that.activeAreas, e.pageX, e.pageY);
|
47
|
+
}
|
46
48
|
});
|
47
49
|
|
48
|
-
|
49
|
-
|
50
|
+
this._on(pageElement, {
|
51
|
+
'linkmapareaenter .hover_area': function(event) {
|
52
|
+
var area = $(event.currentTarget);
|
53
|
+
area.addClass('hover');
|
54
|
+
|
55
|
+
positionOverlay(area);
|
56
|
+
},
|
57
|
+
|
58
|
+
'linkmaparealeave .hover_area': function(event) {
|
59
|
+
var area = $(event.currentTarget);
|
60
|
+
area.removeClass('hover');
|
61
|
+
},
|
62
|
+
|
63
|
+
'click': resetIndicatorsAndOverlays,
|
64
|
+
'linkmapbackgroundclick': resetIndicatorsAndOverlays
|
50
65
|
});
|
51
66
|
|
52
|
-
|
53
|
-
|
54
|
-
that.activeAreas.removeClass('hover hover_mobile');
|
55
|
-
that.globalIndicators.hide();
|
67
|
+
this._on($('body'), {
|
68
|
+
'linkmaparealeave .hover_area': resetOverlays
|
56
69
|
});
|
57
70
|
|
58
|
-
|
59
|
-
|
71
|
+
this._on(pageElement, {
|
72
|
+
'dragstart .hover_area': resetOverlays,
|
73
|
+
'resizestart .hover_area': resetOverlays
|
60
74
|
});
|
61
75
|
|
62
|
-
|
76
|
+
function resetIndicatorsAndOverlays() {
|
77
|
+
resetOverlays();
|
78
|
+
that.activeAreas.removeClass('hover hover_mobile');
|
79
|
+
that.options.areaIndicators.reset();
|
80
|
+
}
|
81
|
+
|
82
|
+
function resetOverlays() {
|
63
83
|
that.overlayBox.removeClass('active');
|
64
|
-
}
|
84
|
+
}
|
65
85
|
|
66
86
|
that.activeAreas.each(function() {
|
67
87
|
var area = $(this);
|
68
88
|
|
69
|
-
|
89
|
+
that._on(area, {linkmapareaclick: onAreaClick});
|
90
|
+
|
91
|
+
function onAreaClick(event) {
|
70
92
|
if (pageflow.browser.has('mobile platform')) {
|
71
93
|
if (area.hasClass('hover_mobile')) {
|
72
94
|
that.activeAreas.removeClass('active');
|
@@ -76,11 +98,8 @@
|
|
76
98
|
that.activeAreas.removeClass('hover hover_mobile');
|
77
99
|
area.addClass('hover hover_mobile');
|
78
100
|
|
79
|
-
positionOverlay($(
|
80
|
-
|
81
|
-
if (!area.hasClass('dynamic_marker')) {
|
82
|
-
displayTouchIndicator(event.originalEvent);
|
83
|
-
}
|
101
|
+
positionOverlay($(event.currentTarget));
|
102
|
+
this.options.areaIndicators.displayForSelectedArea(area, event.originalEvent);
|
84
103
|
|
85
104
|
return false;
|
86
105
|
}
|
@@ -90,12 +109,8 @@
|
|
90
109
|
area.addClass('active');
|
91
110
|
}
|
92
111
|
|
93
|
-
|
94
|
-
|
95
|
-
area.hasClass('target_self')) {
|
96
|
-
displayExternalLinkLoadingIndicator(event.originalEvent);
|
97
|
-
}
|
98
|
-
});
|
112
|
+
this.options.areaIndicators.displayForClickedArea(area, event.originalEvent);
|
113
|
+
}
|
99
114
|
});
|
100
115
|
|
101
116
|
var positionOverlay = function(area) {
|
@@ -170,35 +185,24 @@
|
|
170
185
|
}
|
171
186
|
};
|
172
187
|
|
173
|
-
|
174
|
-
|
175
|
-
that.externalLinkLoadingIndicator.show();
|
176
|
-
};
|
177
|
-
|
178
|
-
var displayTouchIndicator = function(event) {
|
179
|
-
positionGlobalIndicator(that.touchIndicator, event);
|
180
|
-
animateTouchIndicator();
|
181
|
-
};
|
182
|
-
|
183
|
-
var animateTouchIndicator = function() {
|
184
|
-
that.touchIndicator.hide();
|
185
|
-
|
186
|
-
setTimeout(function() {
|
187
|
-
that.touchIndicator.show();
|
188
|
-
}, 500);
|
189
|
-
};
|
190
|
-
|
191
|
-
var positionGlobalIndicator = function(indicator, event) {
|
192
|
-
var parentClientRect = that.panoramaWrapper[0].getBoundingClientRect();
|
193
|
-
var touch = event.touches ? event.touches[0] : event;
|
188
|
+
this.refresh();
|
189
|
+
},
|
194
190
|
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
});
|
199
|
-
};
|
191
|
+
_setOptions: function(options) {
|
192
|
+
var changed = (this.options.disabled !== options.disabled);
|
193
|
+
this._super(options);
|
200
194
|
|
201
|
-
|
195
|
+
if (changed) {
|
196
|
+
if (this.options.disabled) {
|
197
|
+
this.panoramaWrapper.css({
|
198
|
+
left: 0,
|
199
|
+
top: 0
|
200
|
+
});
|
201
|
+
}
|
202
|
+
else {
|
203
|
+
this.refresh();
|
204
|
+
}
|
205
|
+
}
|
202
206
|
},
|
203
207
|
|
204
208
|
calcAreaOpacity: function(activeAreas, mX, mY) {
|
@@ -229,6 +233,10 @@
|
|
229
233
|
},
|
230
234
|
|
231
235
|
highlightAreas: function() {
|
236
|
+
if (this.options.disabled) {
|
237
|
+
return;
|
238
|
+
}
|
239
|
+
|
232
240
|
var element = this.element;
|
233
241
|
element.find('.linkmap_marker').addClass('teasing');
|
234
242
|
|
@@ -242,6 +250,10 @@
|
|
242
250
|
},
|
243
251
|
|
244
252
|
resetAreaHighlighting: function() {
|
253
|
+
if (this.options.disabled) {
|
254
|
+
return;
|
255
|
+
}
|
256
|
+
|
245
257
|
var element = this.element;
|
246
258
|
|
247
259
|
element.find('.linkmap_marker').removeClass('no_transition teasing');
|
@@ -298,6 +310,10 @@
|
|
298
310
|
},
|
299
311
|
|
300
312
|
refresh: function() {
|
313
|
+
if (this.options.disabled) {
|
314
|
+
return;
|
315
|
+
}
|
316
|
+
|
301
317
|
this.keepingScrollPosition(function() {
|
302
318
|
var pageElement = this.options.page;
|
303
319
|
|
@@ -340,6 +356,8 @@
|
|
340
356
|
|
341
357
|
this.innerScrollerElement.removeClass('measuring');
|
342
358
|
this.scroller.refresh();
|
359
|
+
|
360
|
+
this.activeAreas.addClass('enabled');
|
343
361
|
});
|
344
362
|
},
|
345
363
|
|
@@ -365,6 +383,10 @@
|
|
365
383
|
},
|
366
384
|
|
367
385
|
resetScrollPosition: function() {
|
386
|
+
if (this.options.disabled) {
|
387
|
+
return;
|
388
|
+
}
|
389
|
+
|
368
390
|
this.centerToPoint(this.panoramaToScroller(this.startScrollPosition), 0);
|
369
391
|
},
|
370
392
|
|
@@ -6,16 +6,30 @@
|
|
6
6
|
var element = this.element;
|
7
7
|
var scroller = this.options.scroller;
|
8
8
|
|
9
|
+
this.arrows = this.element.find('.linkmap-arrow');
|
10
|
+
|
9
11
|
scroller.onScroll(toggle);
|
10
12
|
scroller.onScrollEnd(toggle);
|
11
13
|
toggle();
|
12
14
|
|
15
|
+
if (this.options.disabled) {
|
16
|
+
this.disable();
|
17
|
+
}
|
18
|
+
|
13
19
|
function toggle() {
|
14
20
|
element.toggleClass('can_scroll_left', Math.ceil(scroller.positionX()) < - margin);
|
15
21
|
element.toggleClass('can_scroll_right', Math.floor(scroller.positionX()) > scroller.maxX() + margin);
|
16
22
|
element.toggleClass('can_scroll_up', Math.ceil(scroller.positionY()) < - margin);
|
17
23
|
element.toggleClass('can_scroll_down', Math.floor(scroller.positionY()) > scroller.maxY() + margin);
|
18
24
|
}
|
25
|
+
},
|
26
|
+
|
27
|
+
disable: function() {
|
28
|
+
this.arrows.hide();
|
29
|
+
},
|
30
|
+
|
31
|
+
enable: function() {
|
32
|
+
this.arrows.show();
|
19
33
|
}
|
20
34
|
});
|
21
35
|
}(jQuery));
|
@@ -7,9 +7,19 @@
|
|
7
7
|
z-index: 4;
|
8
8
|
pointer-events: all;
|
9
9
|
|
10
|
+
.background_image,
|
11
|
+
.canvas_wrapper,
|
10
12
|
canvas {
|
11
13
|
position: absolute;
|
12
14
|
top: 0;
|
13
15
|
left: 0;
|
14
16
|
}
|
17
|
+
|
18
|
+
.background_image {
|
19
|
+
opacity: 0.3;
|
20
|
+
}
|
21
|
+
|
22
|
+
.canvas_wrapper {
|
23
|
+
overflow: hidden;
|
24
|
+
}
|
15
25
|
}
|
@@ -0,0 +1,31 @@
|
|
1
|
+
$linkmap-mobile-info-box-background-color: rgba(17, 17, 17, 0.9) !default;
|
2
|
+
|
3
|
+
$linkmap-mobile-info-box-text-color: #fff;
|
4
|
+
|
5
|
+
.linkmap-mobile_info_box {
|
6
|
+
position: absolute;
|
7
|
+
left: 0;
|
8
|
+
bottom: 0;
|
9
|
+
width: 100%;
|
10
|
+
z-index: 2;
|
11
|
+
pointer-events: none;
|
12
|
+
|
13
|
+
&-inner {
|
14
|
+
background: $linkmap-mobile-info-box-background-color;
|
15
|
+
}
|
16
|
+
|
17
|
+
h3,
|
18
|
+
p {
|
19
|
+
width: auto;
|
20
|
+
margin: 10px 5% 0;
|
21
|
+
color: $linkmap-mobile-info-box-text-color;
|
22
|
+
}
|
23
|
+
|
24
|
+
h3 {
|
25
|
+
font-size: 18px;
|
26
|
+
}
|
27
|
+
|
28
|
+
p {
|
29
|
+
font-size: 16px;
|
30
|
+
}
|
31
|
+
}
|
@@ -0,0 +1,53 @@
|
|
1
|
+
$linkmap-paginator-dot-color: rgba(255, 255, 255, 0.4);
|
2
|
+
$linkmap-paginator-active-dot-color: #fff;
|
3
|
+
|
4
|
+
.linkmap-paginator {
|
5
|
+
&-scroller {
|
6
|
+
margin-bottom: 38px;
|
7
|
+
|
8
|
+
> div {
|
9
|
+
position: absolute;
|
10
|
+
top: 0;
|
11
|
+
left: 0;
|
12
|
+
}
|
13
|
+
}
|
14
|
+
|
15
|
+
&-pages {
|
16
|
+
position: absolute;
|
17
|
+
padding-bottom: 40px;
|
18
|
+
}
|
19
|
+
|
20
|
+
&-page_group {
|
21
|
+
float: left;
|
22
|
+
}
|
23
|
+
|
24
|
+
&-page {
|
25
|
+
float: left;
|
26
|
+
box-sizing: border-box;
|
27
|
+
padding-bottom: 5px;
|
28
|
+
}
|
29
|
+
|
30
|
+
&-dots {
|
31
|
+
position: absolute;
|
32
|
+
bottom: 15px;
|
33
|
+
left: 50%;
|
34
|
+
@include transform(translateX(-50%));
|
35
|
+
@include transition(opacity 0.5s linear);
|
36
|
+
white-space: nowrap;
|
37
|
+
|
38
|
+
&.faded {
|
39
|
+
opacity: 0;
|
40
|
+
}
|
41
|
+
}
|
42
|
+
|
43
|
+
&-dot {
|
44
|
+
border: solid 3px $linkmap-paginator-dot-color;
|
45
|
+
border-radius: 3px;
|
46
|
+
display: inline-block;
|
47
|
+
margin: 0 3px;
|
48
|
+
|
49
|
+
&.active {
|
50
|
+
border-color: $linkmap-paginator-active-dot-color;
|
51
|
+
}
|
52
|
+
}
|
53
|
+
}
|
@@ -1,6 +1,5 @@
|
|
1
1
|
.linkmap_page {
|
2
2
|
$arrow-margin: 30px;
|
3
|
-
$arrow-margin-with-default-navigation: 95px;
|
4
3
|
$arrow-margin-mobile: 10px;
|
5
4
|
|
6
5
|
.arrow_left,
|
@@ -74,6 +73,11 @@
|
|
74
73
|
@include phone {
|
75
74
|
right: $arrow-margin-mobile;
|
76
75
|
}
|
76
|
+
|
77
|
+
.emulation_mode_phone & {
|
78
|
+
margin-right: 0;
|
79
|
+
right: $arrow-margin-mobile;
|
80
|
+
}
|
77
81
|
}
|
78
82
|
|
79
83
|
.arrow_up {
|
@@ -27,12 +27,24 @@
|
|
27
27
|
|
28
28
|
@include user-select(none);
|
29
29
|
|
30
|
+
.backgroundArea {
|
31
|
+
background: #000;
|
32
|
+
}
|
33
|
+
|
34
|
+
.content {
|
35
|
+
pointer-events: none;
|
36
|
+
}
|
37
|
+
|
30
38
|
.scroller {
|
31
39
|
overflow: hidden;
|
32
40
|
|
33
41
|
> div {
|
34
42
|
min-height: 0;
|
35
43
|
}
|
44
|
+
|
45
|
+
.emulation_mode_phone & {
|
46
|
+
margin-right: 0 !important;
|
47
|
+
}
|
36
48
|
}
|
37
49
|
|
38
50
|
.linkmap {
|
@@ -52,6 +64,8 @@
|
|
52
64
|
|
53
65
|
.panorama_wrapper {
|
54
66
|
position: absolute;
|
67
|
+
@include transition(transform 0.3s ease);
|
68
|
+
@include transform-origin(0 0);
|
55
69
|
}
|
56
70
|
|
57
71
|
.linkmap_areas {
|
@@ -62,6 +76,10 @@
|
|
62
76
|
bottom: 0;
|
63
77
|
}
|
64
78
|
|
79
|
+
.controls:before {
|
80
|
+
display: none;
|
81
|
+
}
|
82
|
+
|
65
83
|
.panorama {
|
66
84
|
height: 120%;
|
67
85
|
width: auto;
|
@@ -109,7 +127,11 @@
|
|
109
127
|
width: 20%;
|
110
128
|
overflow: hidden;
|
111
129
|
display: block;
|
112
|
-
pointer-events:
|
130
|
+
pointer-events: none;
|
131
|
+
|
132
|
+
&.enabled {
|
133
|
+
pointer-events: all;
|
134
|
+
}
|
113
135
|
|
114
136
|
.hover_image,
|
115
137
|
.visited_image {
|
@@ -183,7 +205,6 @@
|
|
183
205
|
left: 0;
|
184
206
|
top: 0;
|
185
207
|
z-index: 1;
|
186
|
-
display: block;
|
187
208
|
pointer-events: none;
|
188
209
|
opacity: 0;
|
189
210
|
max-width: 510px;
|
@@ -197,7 +218,6 @@
|
|
197
218
|
@include transition(opacity 0.15s);
|
198
219
|
|
199
220
|
&.active {
|
200
|
-
display: block;
|
201
221
|
opacity: 1;
|
202
222
|
}
|
203
223
|
|
@@ -216,6 +236,12 @@
|
|
216
236
|
}
|
217
237
|
}
|
218
238
|
|
239
|
+
&.hide_overlay_boxes {
|
240
|
+
.description_overlay {
|
241
|
+
display: none;
|
242
|
+
}
|
243
|
+
}
|
244
|
+
|
219
245
|
.external_link_loading_indicator,
|
220
246
|
.external_site_area .inline_loading_spinner {
|
221
247
|
position: absolute;
|
@@ -4,24 +4,50 @@ module Pageflow
|
|
4
4
|
include BackgroundImageHelper
|
5
5
|
|
6
6
|
def linkmap_areas_div(entry, configuration)
|
7
|
-
|
8
|
-
|
7
|
+
color_map_file =
|
8
|
+
ColorMapFile.find_by_id(configuration['linkmap_color_map_file_id'])
|
9
|
+
masked_hover_image_file =
|
10
|
+
MaskedImageFile.find_by_id(configuration['linkmap_masked_hover_image_id'])
|
11
|
+
masked_visited_image_file =
|
12
|
+
MaskedImageFile.find_by_id(configuration['linkmap_masked_visited_image_id'])
|
9
13
|
|
10
|
-
|
11
|
-
|
14
|
+
|
15
|
+
hide_overlay_boxes =
|
16
|
+
configuration['mobile_panorama_navigation'] == 'pan_zoom' &&
|
17
|
+
configuration['hide_linkmap_overlay_boxes']
|
12
18
|
|
13
19
|
render('pageflow/linkmap_page/areas/div',
|
14
20
|
entry: entry,
|
15
21
|
configuration: configuration,
|
22
|
+
color_map_file: color_map_file,
|
23
|
+
masked_hover_image_file: masked_hover_image_file,
|
24
|
+
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(' '),
|
16
29
|
data_attributes: {
|
17
|
-
|
18
|
-
hover_image_file.attachment.url(:panorama_large),
|
19
|
-
visited_image_url: visited_image_file &&
|
20
|
-
visited_image_file.attachment.url(:panorama_large),
|
21
|
-
mask_sprite_url_template: mask_sprite_url_template
|
30
|
+
color_map_file_id: configuration['color_map_file_id']
|
22
31
|
})
|
23
32
|
end
|
24
33
|
|
34
|
+
def linkmap_area_background_image_div(prefix, attributes, configuration, color_map_file)
|
35
|
+
if color_map_file &&
|
36
|
+
attributes['mask_perma_id'].present? &&
|
37
|
+
attributes['mask_perma_id'].split(':').first.to_i == color_map_file.id
|
38
|
+
background_image_div(configuration,
|
39
|
+
"linkmap_masked_#{prefix}_image",
|
40
|
+
class: "#{prefix}_image",
|
41
|
+
file_type: 'pageflow_linkmap_page_masked_image_files',
|
42
|
+
style_group: attributes['mask_perma_id'].split(':').last)
|
43
|
+
else
|
44
|
+
background_image_div(configuration,
|
45
|
+
"#{prefix}_image",
|
46
|
+
class: "#{prefix}_image",
|
47
|
+
style_group: :panorama)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
25
51
|
def linkmap_area(entry, attributes, index, background_type = nil, &block)
|
26
52
|
Link.new(self, entry, attributes.symbolize_keys, index, background_type).render(&block)
|
27
53
|
end
|
@@ -64,7 +90,7 @@ module Pageflow
|
|
64
90
|
end
|
65
91
|
|
66
92
|
def data_attributes
|
67
|
-
|
93
|
+
mask_perma_id = background_type != 'hover_video' && attributes[:mask_perma_id]
|
68
94
|
audio_file_id = attributes[:target_id]
|
69
95
|
|
70
96
|
{
|
@@ -72,7 +98,7 @@ module Pageflow
|
|
72
98
|
target_id: attributes[:target_id],
|
73
99
|
audio_file: audio_file_id.present? ? "#{audio_file_id}.area_#{index}" : nil,
|
74
100
|
page_transition: attributes[:page_transition],
|
75
|
-
|
101
|
+
mask_perma_id: mask_perma_id,
|
76
102
|
width: attributes[:width],
|
77
103
|
height: attributes[:height]
|
78
104
|
}.delete_if { |key, value| value.blank? }
|
@@ -1,11 +1,11 @@
|
|
1
1
|
module Pageflow
|
2
2
|
module LinkmapPage
|
3
|
-
class ProcessSourceImageFileJob
|
4
|
-
|
3
|
+
class ProcessSourceImageFileJob < ApplicationJob
|
4
|
+
queue_as :resizing
|
5
5
|
|
6
|
-
|
6
|
+
include StateMachineJob
|
7
7
|
|
8
|
-
def
|
8
|
+
def perform_with_result(file, _options)
|
9
9
|
file.attachment = file.source_image_file.attachment
|
10
10
|
file.save!
|
11
11
|
:ok
|
@@ -1,17 +1,23 @@
|
|
1
|
-
<%= content_tag(:div, class:
|
1
|
+
<%= content_tag(:div, class: css_classes, 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',
|
5
|
+
attributes,
|
6
|
+
configuration,
|
7
|
+
color_map_file) %>
|
5
8
|
|
6
9
|
<% if configuration['background_type'] == 'hover_video' &&
|
7
10
|
!Pageflow::ImageFile.find_by_id(configuration['hover_image_id']) %>
|
8
11
|
|
9
|
-
<%=
|
10
|
-
|
11
|
-
|
12
|
-
|
12
|
+
<%= background_image_div(configuration,
|
13
|
+
'panorama_video',
|
14
|
+
file_type: 'video_file',
|
15
|
+
class: 'hover_image') %>
|
13
16
|
<% else %>
|
14
|
-
|
17
|
+
<%= linkmap_area_background_image_div('hover',
|
18
|
+
attributes,
|
19
|
+
configuration,
|
20
|
+
color_map_file) %>
|
15
21
|
<% end %>
|
16
22
|
|
17
23
|
<div class="linkmap_marker <%= attributes['marker'] %>">
|
@@ -0,0 +1,18 @@
|
|
1
|
+
json.call(color_map_file, :width, :height, :sprite_url)
|
2
|
+
|
3
|
+
json.components do
|
4
|
+
color_map_file.present_colors.inject(0) do |sprite_offset, color|
|
5
|
+
bounding_box = color_map_file.bounding_box_for_color(color)
|
6
|
+
|
7
|
+
json.set!(color) do
|
8
|
+
json.color(color)
|
9
|
+
json.sprite_offset(sprite_offset)
|
10
|
+
json.top(bounding_box[:top])
|
11
|
+
json.left(bounding_box[:left])
|
12
|
+
json.width(bounding_box[:width])
|
13
|
+
json.height(bounding_box[:height])
|
14
|
+
end
|
15
|
+
|
16
|
+
sprite_offset + bounding_box[:width]
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
json.call(color_map_file, :source_image_file_id, :processing_progress)
|
data/app/views/pageflow/linkmap_page/editor/masked_image_files/_masked_image_file.json.jbuilder
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
json.call(masked_image_file, :source_image_file_id, :color_map_file_id, :processing_progress)
|