pageflow-linkmap-page 2.5.0 → 2.6.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 +4 -4
- data/.travis.yml +3 -0
- data/CHANGELOG.md +12 -10
- data/Gemfile +2 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor.js +1 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_file.js +1 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/{processed_file.js → generated_image_file.js} +1 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/masked_image_file.js +1 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +10 -8
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js +5 -5
- data/app/helpers/pageflow/linkmap_page/areas_helper.rb +5 -4
- data/app/models/pageflow/linkmap_page/color_map_file.rb +4 -2
- data/app/models/pageflow/linkmap_page/{processed_image_file.rb → generated_image_file.rb} +9 -20
- data/app/models/pageflow/linkmap_page/masked_image_file.rb +1 -1
- data/app/views/pageflow/linkmap_page/areas/_div.html.erb +1 -2
- data/app/views/pageflow/linkmap_page/page.html.erb +1 -1
- data/db/migrate/20190724114801_delete_orphaned_generated_image_files.rb +9 -0
- data/lib/pageflow/linkmap_page/page_type.rb +18 -4
- data/lib/pageflow/linkmap_page/version.rb +1 -1
- data/pageflow-linkmap-page.gemspec +2 -2
- data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +50 -33
- data/spec/integration/masked_image_file_type_spec.rb +10 -2
- metadata +9 -9
- data/lib/tasks/pageflow_linkmap_page_tasks.rake +0 -149
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 69769f94b00cc835ff6fa21c1aba78de3b00e39c6019f9819dad9bcb4072302f
|
4
|
+
data.tar.gz: 0d6aa6ab8692766983576bfa3ad9d17614fadf343b9a415046dcc49b291d497f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 35f77e151491e8bbf30783b7b7d3c49998ca3e103c4bffa7f42cfe4e061b59b0c811ea0da4d265f2c19e9e26f3fd16ed9bebcef60e84943487097e9152cfbaba
|
7
|
+
data.tar.gz: cf62ebfb4b5504b49c68d50733a2b93762b308e2cd06296c7079c3274ba63baf2604e8a27c9246f03a77014be08ef4f1aa3245d4b8c17757c06a3e4edde487dc
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,18 +1,20 @@
|
|
1
1
|
# CHANGELOG
|
2
2
|
|
3
|
-
### Version 2.
|
3
|
+
### Version 2.6.0
|
4
4
|
|
5
|
-
2019-
|
5
|
+
2019-11-04
|
6
6
|
|
7
|
-
[Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/2-
|
7
|
+
[Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/2-5-stable...v2.6.0)
|
8
8
|
|
9
|
-
-
|
10
|
-
|
11
|
-
|
12
|
-
([#
|
13
|
-
-
|
14
|
-
([#
|
9
|
+
- Specify mysql service for Travis build
|
10
|
+
([#66](https://github.com/codevise/pageflow-linkmap-page/pull/66))
|
11
|
+
- Use perma id for color map file and components
|
12
|
+
([#65](https://github.com/codevise/pageflow-linkmap-page/pull/65))
|
13
|
+
- Wait for color map file to be persisted
|
14
|
+
([#64](https://github.com/codevise/pageflow-linkmap-page/pull/64))
|
15
|
+
- Add import and export
|
16
|
+
([#63](https://github.com/codevise/pageflow-linkmap-page/pull/63))
|
15
17
|
|
16
18
|
See
|
17
|
-
[2-
|
19
|
+
[2-5-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/2-5-stable/CHANGELOG.md)
|
18
20
|
for previous changes.
|
data/Gemfile
CHANGED
@@ -3,11 +3,13 @@
|
|
3
3
|
initialize: function(options) {
|
4
4
|
this.listenTo(this,
|
5
5
|
'change:linkmap_color_map_image_id',
|
6
|
-
function(model,
|
7
|
-
if (
|
6
|
+
function(model, imageFilePermaId) {
|
7
|
+
if (imageFilePermaId) {
|
8
|
+
var sourceImageFile = pageflow.imageFiles.getByPermaId(imageFilePermaId);
|
9
|
+
|
8
10
|
this.setReference('linkmap_color_map_file_id',
|
9
11
|
colorMapFiles().findOrCreateBy({
|
10
|
-
source_image_file_id:
|
12
|
+
source_image_file_id: sourceImageFile.id
|
11
13
|
}));
|
12
14
|
}
|
13
15
|
else {
|
@@ -21,10 +23,10 @@
|
|
21
23
|
'change:' + attribute +
|
22
24
|
' change:linkmap_color_map_file_id',
|
23
25
|
function() {
|
24
|
-
var colorMapFile =
|
25
|
-
var imageFile =
|
26
|
+
var colorMapFile = this.getReference('linkmap_color_map_file_id', colorMapFiles());
|
27
|
+
var imageFile = this.getReference(attribute, pageflow.imageFiles);
|
26
28
|
|
27
|
-
if (imageFile && colorMapFile) {
|
29
|
+
if (imageFile && colorMapFile && !colorMapFile.isNew()) {
|
28
30
|
this.setReference('linkmap_masked_' + attribute,
|
29
31
|
maskedImageFiles().findOrCreateBy({
|
30
32
|
source_image_file_id: imageFile.id,
|
@@ -39,8 +41,8 @@
|
|
39
41
|
},
|
40
42
|
|
41
43
|
linkmapReadyColorMapFileId: function() {
|
42
|
-
var colorMapFile =
|
43
|
-
return colorMapFile && colorMapFile.isReady() ? colorMapFile.
|
44
|
+
var colorMapFile = this.getReference('linkmap_color_map_file_id', colorMapFiles());
|
45
|
+
return colorMapFile && colorMapFile.isReady() ? colorMapFile.get('perma_id') : null;
|
44
46
|
},
|
45
47
|
|
46
48
|
linkmapPageLinks: function() {
|
@@ -5,7 +5,7 @@ pageflow.linkmapPage.ColorMap = (function() {
|
|
5
5
|
var colorMapSprite = options.colorMapSprite;
|
6
6
|
|
7
7
|
this.color = attributes.color;
|
8
|
-
this.permaId = options.
|
8
|
+
this.permaId = options.colorMapPermaId + ':' + attributes.color;
|
9
9
|
|
10
10
|
this.draw = function(context, width) {
|
11
11
|
var scale = width / attributes.width;
|
@@ -53,7 +53,7 @@ pageflow.linkmapPage.ColorMap = (function() {
|
|
53
53
|
function ColorMap(attributes, sprite) {
|
54
54
|
var components = _(attributes.components).map(function(componentAttributes) {
|
55
55
|
return new ColorMapComponent(componentAttributes, {
|
56
|
-
|
56
|
+
colorMapPermaId: attributes.perma_id,
|
57
57
|
colorMapWidth: attributes.width,
|
58
58
|
colorMapHeight: attributes.height,
|
59
59
|
colorMapSprite: sprite
|
@@ -87,8 +87,8 @@ pageflow.linkmapPage.ColorMap = (function() {
|
|
87
87
|
height: 0
|
88
88
|
});
|
89
89
|
|
90
|
-
ColorMap.load = function(
|
91
|
-
var colorMapFile = pageflow.entryData.getFile('pageflow_linkmap_page_color_map_files',
|
90
|
+
ColorMap.load = function(permaId) {
|
91
|
+
var colorMapFile = pageflow.entryData.getFile('pageflow_linkmap_page_color_map_files', permaId);
|
92
92
|
|
93
93
|
if (!colorMapFile) {
|
94
94
|
return $.when(ColorMap.empty);
|
@@ -100,4 +100,4 @@ pageflow.linkmapPage.ColorMap = (function() {
|
|
100
100
|
};
|
101
101
|
|
102
102
|
return ColorMap;
|
103
|
-
}());
|
103
|
+
}());
|
@@ -2,6 +2,7 @@ module Pageflow
|
|
2
2
|
module LinkmapPage
|
3
3
|
module AreasHelper
|
4
4
|
include BackgroundImageHelper
|
5
|
+
include RevisionFileHelper
|
5
6
|
|
6
7
|
def linkmap_content_and_background_css_classes(configuration)
|
7
8
|
hide_overlay_boxes =
|
@@ -16,11 +17,11 @@ module Pageflow
|
|
16
17
|
|
17
18
|
def linkmap_areas_div(entry, configuration)
|
18
19
|
color_map_file =
|
19
|
-
ColorMapFile
|
20
|
+
find_file_in_entry(ColorMapFile, configuration['linkmap_color_map_file_id'])
|
20
21
|
masked_hover_image_file =
|
21
|
-
MaskedImageFile
|
22
|
+
find_file_in_entry(MaskedImageFile, configuration['linkmap_masked_hover_image_id'])
|
22
23
|
masked_visited_image_file =
|
23
|
-
MaskedImageFile
|
24
|
+
find_file_in_entry(MaskedImageFile, configuration['linkmap_masked_visited_image_id'])
|
24
25
|
|
25
26
|
render('pageflow/linkmap_page/areas/div',
|
26
27
|
entry: entry,
|
@@ -37,7 +38,7 @@ module Pageflow
|
|
37
38
|
color_map_component_id = attributes['color_map_component_id'] || attributes['mask_perma_id']
|
38
39
|
if color_map_file &&
|
39
40
|
color_map_component_id.present? &&
|
40
|
-
color_map_component_id.split(':').first.to_i == color_map_file.
|
41
|
+
color_map_component_id.split(':').first.to_i == color_map_file.perma_id
|
41
42
|
background_image_div(configuration,
|
42
43
|
"linkmap_masked_#{prefix}_image",
|
43
44
|
class: "#{prefix}_image",
|
@@ -1,7 +1,9 @@
|
|
1
1
|
module Pageflow
|
2
2
|
module LinkmapPage
|
3
|
-
class ColorMapFile <
|
4
|
-
|
3
|
+
class ColorMapFile < GeneratedImageFile
|
4
|
+
has_one :masked_image_file,
|
5
|
+
class_name: 'Pageflow::LinkmapPage::MaskedImageFile',
|
6
|
+
dependent: :destroy
|
5
7
|
|
6
8
|
# Prevent anti aliasing. Otherwise, when processing color map
|
7
9
|
# images, borders between areas are blurred.
|
@@ -1,9 +1,9 @@
|
|
1
1
|
module Pageflow
|
2
2
|
module LinkmapPage
|
3
|
-
class
|
3
|
+
class GeneratedImageFile < ActiveRecord::Base
|
4
4
|
self.abstract_class = true
|
5
5
|
|
6
|
-
include Pageflow::
|
6
|
+
include Pageflow::ReusableFile
|
7
7
|
|
8
8
|
belongs_to :source_image_file, class_name: 'Pageflow::ImageFile'
|
9
9
|
|
@@ -29,22 +29,7 @@ module Pageflow
|
|
29
29
|
end
|
30
30
|
end
|
31
31
|
|
32
|
-
|
33
|
-
''
|
34
|
-
end
|
35
|
-
|
36
|
-
def original_url
|
37
|
-
''
|
38
|
-
end
|
39
|
-
|
40
|
-
def retry!
|
41
|
-
process!
|
42
|
-
end
|
43
|
-
|
44
|
-
def publish!
|
45
|
-
process!
|
46
|
-
end
|
47
|
-
|
32
|
+
# ReusableFile-overrides:
|
48
33
|
def retryable?
|
49
34
|
processing_failed?
|
50
35
|
end
|
@@ -57,8 +42,12 @@ module Pageflow
|
|
57
42
|
processing_failed?
|
58
43
|
end
|
59
44
|
|
60
|
-
def
|
61
|
-
|
45
|
+
def retry!
|
46
|
+
process!
|
47
|
+
end
|
48
|
+
|
49
|
+
def publish!
|
50
|
+
process!
|
62
51
|
end
|
63
52
|
|
64
53
|
def prerequisite_files
|
@@ -7,8 +7,7 @@
|
|
7
7
|
color_map_file) %>
|
8
8
|
|
9
9
|
<% if configuration['background_type'] == 'hover_video' &&
|
10
|
-
!Pageflow::ImageFile
|
11
|
-
|
10
|
+
!find_file_in_entry(Pageflow::ImageFile, configuration['hover_image_id']) %>
|
12
11
|
<%= background_image_div(configuration,
|
13
12
|
'panorama_video',
|
14
13
|
file_type: 'video_file',
|
@@ -7,7 +7,7 @@
|
|
7
7
|
<div class="pan_zoom_safe_area_wrapper">
|
8
8
|
<div class="panorama_wrapper">
|
9
9
|
<% if configuration['background_type'] == 'video' &&
|
10
|
-
!Pageflow::ImageFile
|
10
|
+
!find_file_in_entry(Pageflow::ImageFile, configuration['panorama_image_id']) %>
|
11
11
|
|
12
12
|
<%= background_image_div_with_size(configuration,
|
13
13
|
'panorama_video',
|
@@ -0,0 +1,9 @@
|
|
1
|
+
# Deletes orphaned color map files, along with their usages
|
2
|
+
# and the associated masked image files along with their usages
|
3
|
+
class DeleteOrphanedGeneratedImageFiles < ActiveRecord::Migration[5.2]
|
4
|
+
def up
|
5
|
+
Pageflow::LinkmapPage::ColorMapFile.find_each do |color_map_file|
|
6
|
+
color_map_file.destroy unless color_map_file.source_image_file.present?
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
@@ -25,21 +25,35 @@ module Pageflow
|
|
25
25
|
|
26
26
|
def self.color_map_file_type
|
27
27
|
FileType.new(model: ColorMapFile,
|
28
|
-
custom_attributes: [:source_image_file_id],
|
29
28
|
partial: 'pageflow/linkmap_page/color_map_files/color_map_file',
|
30
|
-
editor_partial: 'pageflow/linkmap_page/editor/color_map_files/color_map_file'
|
29
|
+
editor_partial: 'pageflow/linkmap_page/editor/color_map_files/color_map_file',
|
30
|
+
custom_attributes: {
|
31
|
+
source_image_file_id: {
|
32
|
+
model: 'Pageflow::ImageFile',
|
33
|
+
permitted_create_param: true
|
34
|
+
}
|
35
|
+
})
|
31
36
|
end
|
32
37
|
|
33
38
|
def self.masked_image_file_type
|
34
39
|
FileType.new(model: MaskedImageFile,
|
35
|
-
custom_attributes: [:source_image_file_id, :color_map_file_id],
|
36
40
|
editor_partial: 'pageflow/linkmap_page/editor/' \
|
37
41
|
'masked_image_files/masked_image_file',
|
38
42
|
css_background_image_urls: lambda do |masked_image_file|
|
39
43
|
masked_image_file.present_styles.each_with_object({}) do |color, result|
|
40
44
|
result[color] = masked_image_file.url_for_color(color)
|
41
45
|
end
|
42
|
-
end
|
46
|
+
end,
|
47
|
+
custom_attributes: {
|
48
|
+
source_image_file_id: {
|
49
|
+
model: 'Pageflow::ImageFile',
|
50
|
+
permitted_create_param: true
|
51
|
+
},
|
52
|
+
color_map_file_id: {
|
53
|
+
model: 'Pageflow::LinkmapPage::ColorMapFile',
|
54
|
+
permitted_create_param: true
|
55
|
+
}
|
56
|
+
})
|
43
57
|
end
|
44
58
|
end
|
45
59
|
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', '~>
|
21
|
+
spec.add_runtime_dependency 'pageflow', '~> 15.x'
|
22
22
|
spec.add_runtime_dependency 'pageflow-external-links', '~> 2.x'
|
23
23
|
|
24
24
|
spec.add_development_dependency 'bundler', ['>= 1.0', '< 3']
|
25
|
-
spec.add_development_dependency 'pageflow-support', '~>
|
25
|
+
spec.add_development_dependency 'pageflow-support', '~> 15.x'
|
26
26
|
spec.add_development_dependency 'rake', '~> 12.0'
|
27
27
|
spec.add_development_dependency 'rspec-rails', '~> 3.7'
|
28
28
|
spec.add_development_dependency 'factory_bot_rails', '~> 4.8'
|
@@ -1,8 +1,12 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
|
+
require 'pageflow/used_file_test_helper'
|
4
|
+
|
3
5
|
module Pageflow
|
4
6
|
module LinkmapPage
|
5
7
|
describe AreasHelper do
|
8
|
+
include UsedFileTestHelper
|
9
|
+
|
6
10
|
describe '#linkmap_content_and_background_css_classes' do
|
7
11
|
it 'contains default css classes' do
|
8
12
|
classes = helper.linkmap_content_and_background_css_classes({}).split(' ')
|
@@ -50,6 +54,8 @@ module Pageflow
|
|
50
54
|
entry = create(:entry)
|
51
55
|
configuration = {}
|
52
56
|
|
57
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
58
|
+
|
53
59
|
html = helper.linkmap_areas_div(entry, configuration)
|
54
60
|
|
55
61
|
expect(html).to have_selector('div.linkmap_areas')
|
@@ -59,6 +65,8 @@ module Pageflow
|
|
59
65
|
entry = create(:entry)
|
60
66
|
configuration = {'linkmap_areas' => [{}]}
|
61
67
|
|
68
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
69
|
+
|
62
70
|
html = helper.linkmap_areas_div(entry, configuration)
|
63
71
|
|
64
72
|
expect(html).to have_selector('div a[href]')
|
@@ -68,35 +76,37 @@ module Pageflow
|
|
68
76
|
entry = create(:entry)
|
69
77
|
configuration = {'linkmap_areas' => [{}], 'hover_image_id' => 5}
|
70
78
|
|
79
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
80
|
+
|
71
81
|
html = helper.linkmap_areas_div(entry, configuration)
|
72
82
|
|
73
|
-
expect(html).to have_selector(
|
83
|
+
expect(html).to have_selector("a div[class~='image_panorama_5']")
|
74
84
|
end
|
75
85
|
|
76
86
|
it 'renders masked hover image inside masked linkmap areas' do
|
77
|
-
entry = create(:entry)
|
78
|
-
color_map_file =
|
79
|
-
masked_image_file =
|
87
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
88
|
+
color_map_file = create_used_file(:color_map_file, entry: entry)
|
89
|
+
masked_image_file = create_used_file(:masked_image_file, entry: entry)
|
80
90
|
configuration = {
|
81
|
-
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file.
|
91
|
+
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file.perma_id}:aaa"}],
|
82
92
|
'hover_image_id' => 5,
|
83
|
-
'linkmap_color_map_file_id' => color_map_file.
|
84
|
-
'linkmap_masked_hover_image_id' => masked_image_file.
|
93
|
+
'linkmap_color_map_file_id' => color_map_file.perma_id,
|
94
|
+
'linkmap_masked_hover_image_id' => masked_image_file.perma_id
|
85
95
|
}
|
86
96
|
|
87
97
|
html = helper.linkmap_areas_div(entry, configuration)
|
88
98
|
|
89
|
-
image_class = "pageflow_linkmap_page_masked_image_file_aaa_#{masked_image_file.
|
99
|
+
image_class = "pageflow_linkmap_page_masked_image_file_aaa_#{masked_image_file.perma_id}"
|
90
100
|
expect(html).to have_selector("a div[class~=#{image_class}]")
|
91
101
|
end
|
92
102
|
|
93
103
|
it 'only uses masked hover image if area is masked' do
|
94
|
-
entry = create(:entry)
|
95
|
-
masked_image_file =
|
104
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
105
|
+
masked_image_file = create_used_file(:masked_image_file, entry: entry)
|
96
106
|
configuration = {
|
97
107
|
'linkmap_areas' => [{}],
|
98
108
|
'hover_image_id' => 5,
|
99
|
-
'linkmap_masked_hover_image_id' => masked_image_file.
|
109
|
+
'linkmap_masked_hover_image_id' => masked_image_file.perma_id
|
100
110
|
}
|
101
111
|
|
102
112
|
html = helper.linkmap_areas_div(entry, configuration)
|
@@ -105,14 +115,15 @@ module Pageflow
|
|
105
115
|
end
|
106
116
|
|
107
117
|
it 'does not use masked hover image if area color map component id references other image' do
|
108
|
-
entry = create(:entry)
|
109
|
-
|
110
|
-
|
111
|
-
|
118
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
119
|
+
color_map_file = create_used_file(:color_map_file, entry: entry)
|
120
|
+
masked_image_file = create_used_file(:masked_image_file, entry: entry)
|
121
|
+
|
122
|
+
other_id = color_map_file.perma_id + 1
|
112
123
|
configuration = {
|
113
124
|
'linkmap_areas' => [{'color_map_component_id' => "#{other_id}:aaa"}],
|
114
125
|
'hover_image_id' => 5,
|
115
|
-
'linkmap_masked_hover_image_id' => masked_image_file.
|
126
|
+
'linkmap_masked_hover_image_id' => masked_image_file.perma_id
|
116
127
|
}
|
117
128
|
|
118
129
|
html = helper.linkmap_areas_div(entry, configuration)
|
@@ -124,25 +135,27 @@ module Pageflow
|
|
124
135
|
entry = create(:entry)
|
125
136
|
configuration = {'linkmap_areas' => [{}], 'visited_image_id' => 5}
|
126
137
|
|
138
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
139
|
+
|
127
140
|
html = helper.linkmap_areas_div(entry, configuration)
|
128
141
|
|
129
142
|
expect(html).to have_selector('a div[class~="image_panorama_5"]')
|
130
143
|
end
|
131
144
|
|
132
145
|
it 'renders masked visited image inside masked linkmap areas' do
|
133
|
-
entry = create(:entry)
|
134
|
-
color_map_file =
|
135
|
-
masked_image_file =
|
146
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
147
|
+
color_map_file = create_used_file(:color_map_file, entry: entry)
|
148
|
+
masked_image_file = create_used_file(:masked_image_file, entry: entry)
|
136
149
|
configuration = {
|
137
|
-
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file.
|
150
|
+
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file.perma_id}:aaa"}],
|
138
151
|
'hover_image_id' => 5,
|
139
|
-
'linkmap_color_map_file_id' => color_map_file.
|
140
|
-
'linkmap_masked_visited_image_id' => masked_image_file.
|
152
|
+
'linkmap_color_map_file_id' => color_map_file.perma_id,
|
153
|
+
'linkmap_masked_visited_image_id' => masked_image_file.perma_id
|
141
154
|
}
|
142
155
|
|
143
156
|
html = helper.linkmap_areas_div(entry, configuration)
|
144
157
|
|
145
|
-
image_class = "pageflow_linkmap_page_masked_image_file_aaa_#{masked_image_file.
|
158
|
+
image_class = "pageflow_linkmap_page_masked_image_file_aaa_#{masked_image_file.perma_id}"
|
146
159
|
expect(html).to have_selector("a div[class~='#{image_class}']")
|
147
160
|
end
|
148
161
|
|
@@ -150,35 +163,37 @@ module Pageflow
|
|
150
163
|
entry = create(:entry)
|
151
164
|
configuration = {'linkmap_areas' => [{'color_map_component_id' => '1:aaa'}]}
|
152
165
|
|
166
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
167
|
+
|
153
168
|
html = helper.linkmap_areas_div(entry, configuration)
|
154
169
|
|
155
170
|
expect(html).to have_selector('a[data-color-map-component-id="1:aaa"]')
|
156
171
|
end
|
157
172
|
|
158
173
|
it 'uses color map component id if present, preceding mask perma id' do
|
159
|
-
entry = create(:entry)
|
160
|
-
color_map_file_1 =
|
161
|
-
color_map_file_2 =
|
174
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
175
|
+
color_map_file_1 = create_used_file(:color_map_file, entry: entry)
|
176
|
+
color_map_file_2 = create_used_file(:color_map_file, entry: entry)
|
162
177
|
configuration = {
|
163
|
-
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file_2.
|
164
|
-
'mask_perma_id' => "#{color_map_file_1.
|
178
|
+
'linkmap_areas' => [{'color_map_component_id' => "#{color_map_file_2.perma_id}:aaa",
|
179
|
+
'mask_perma_id' => "#{color_map_file_1.perma_id}:aaa"}]
|
165
180
|
}
|
166
181
|
|
167
182
|
html = helper.linkmap_areas_div(entry, configuration)
|
168
183
|
|
169
|
-
expect(html).to have_selector("a[data-color-map-component-id='#{color_map_file_2.
|
184
|
+
expect(html).to have_selector("a[data-color-map-component-id='#{color_map_file_2.perma_id}:aaa']")
|
170
185
|
end
|
171
186
|
|
172
187
|
it 'uses mask perma id as fallback if present and color map component id is blank' do
|
173
|
-
entry = create(:entry)
|
174
|
-
color_map_file =
|
188
|
+
entry = PublishedEntry.new(create(:entry, :published))
|
189
|
+
color_map_file = create_used_file(:color_map_file, entry: entry)
|
175
190
|
configuration = {
|
176
|
-
'linkmap_areas' => [{'mask_perma_id' => "#{color_map_file.
|
191
|
+
'linkmap_areas' => [{'mask_perma_id' => "#{color_map_file.perma_id}:aaa"}]
|
177
192
|
}
|
178
193
|
|
179
194
|
html = helper.linkmap_areas_div(entry, configuration)
|
180
195
|
|
181
|
-
expect(html).to have_selector("a[data-color-map-component-id='#{color_map_file.
|
196
|
+
expect(html).to have_selector("a[data-color-map-component-id='#{color_map_file.perma_id}:aaa']")
|
182
197
|
end
|
183
198
|
|
184
199
|
it 'does not set data-color-map-component-id attribute if background type is hover_video' do
|
@@ -188,6 +203,8 @@ module Pageflow
|
|
188
203
|
'background_type' => 'hover_video'
|
189
204
|
}
|
190
205
|
|
206
|
+
allow(helper).to receive(:find_file_in_entry).and_return(nil)
|
207
|
+
|
191
208
|
html = helper.linkmap_areas_div(entry, configuration)
|
192
209
|
|
193
210
|
expect(html).not_to have_selector('a[data-color-map-component-id]')
|
@@ -6,10 +6,18 @@ module Pageflow
|
|
6
6
|
module LinkmapPage
|
7
7
|
Pageflow::Lint.file_type(:masked_image_file,
|
8
8
|
create_file_type: -> { LinkmapPage.masked_image_file_type },
|
9
|
-
create_file: -> { create(:masked_image_file) }
|
9
|
+
create_file: -> { create(:masked_image_file) },
|
10
|
+
create_prerequisite_file_types: -> {
|
11
|
+
[BuiltInFileType.image, LinkmapPage.color_map_file_type]
|
12
|
+
},
|
13
|
+
get_prerequisite_files: ->(file) {
|
14
|
+
[*file.prerequisite_files, *file.color_map_file.prerequisite_files]
|
15
|
+
})
|
10
16
|
|
11
17
|
Pageflow::Lint.file_type(:color_map_file,
|
12
18
|
create_file_type: -> { LinkmapPage.color_map_file_type },
|
13
|
-
create_file: -> { create(:color_map_file) }
|
19
|
+
create_file: -> { create(:color_map_file) },
|
20
|
+
create_prerequisite_file_types: -> { [BuiltInFileType.image] },
|
21
|
+
get_prerequisite_files: ->(file) { file.prerequisite_files })
|
14
22
|
end
|
15
23
|
end
|
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.
|
4
|
+
version: 2.6.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-
|
11
|
+
date: 2019-11-04 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:
|
19
|
+
version: 15.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:
|
26
|
+
version: 15.x
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: pageflow-external-links
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -64,14 +64,14 @@ dependencies:
|
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
67
|
+
version: 15.x
|
68
68
|
type: :development
|
69
69
|
prerelease: false
|
70
70
|
version_requirements: !ruby/object:Gem::Requirement
|
71
71
|
requirements:
|
72
72
|
- - "~>"
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
74
|
+
version: 15.x
|
75
75
|
- !ruby/object:Gem::Dependency
|
76
76
|
name: rake
|
77
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -230,11 +230,11 @@ files:
|
|
230
230
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_delegator.js
|
231
231
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_file.js
|
232
232
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/external_link_area_type.js
|
233
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/models/generated_image_file.js
|
233
234
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/masked_image_file.js
|
234
235
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js
|
235
236
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js
|
236
237
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/page_link_area_type.js
|
237
|
-
- app/assets/javascript/pageflow/linkmap_page/editor/models/processed_file.js
|
238
238
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/stored_mask_sprite.js
|
239
239
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/text_only_area_type.js
|
240
240
|
- app/assets/javascript/pageflow/linkmap_page/editor/patterns/area_pattern.js
|
@@ -300,8 +300,8 @@ files:
|
|
300
300
|
- app/helpers/pageflow/linkmap_page/areas_helper.rb
|
301
301
|
- app/jobs/pageflow/linkmap_page/process_source_image_file_job.rb
|
302
302
|
- app/models/pageflow/linkmap_page/color_map_file.rb
|
303
|
+
- app/models/pageflow/linkmap_page/generated_image_file.rb
|
303
304
|
- app/models/pageflow/linkmap_page/masked_image_file.rb
|
304
|
-
- app/models/pageflow/linkmap_page/processed_image_file.rb
|
305
305
|
- app/views/pageflow/linkmap_page/areas/_div.html.erb
|
306
306
|
- app/views/pageflow/linkmap_page/color_map_files/_color_map_file.json.jbuilder
|
307
307
|
- app/views/pageflow/linkmap_page/editor/color_map_files/_color_map_file.json.jbuilder
|
@@ -316,6 +316,7 @@ files:
|
|
316
316
|
- db/migrate/20171106151700_create_masked_image_files.rb
|
317
317
|
- db/migrate/20180111145100_create_color_map_files.rb
|
318
318
|
- db/migrate/20180214201200_drop_mask_sprites.rb
|
319
|
+
- db/migrate/20190724114801_delete_orphaned_generated_image_files.rb
|
319
320
|
- lib/generators/pageflow_linkmap_page/install/install_generator.rb
|
320
321
|
- lib/pageflow-linkmap-page.rb
|
321
322
|
- lib/pageflow/linkmap_page/engine.rb
|
@@ -329,7 +330,6 @@ files:
|
|
329
330
|
- lib/pageflow/linkmap_page/plugin.rb
|
330
331
|
- lib/pageflow/linkmap_page/progress.rb
|
331
332
|
- lib/pageflow/linkmap_page/version.rb
|
332
|
-
- lib/tasks/pageflow_linkmap_page_tasks.rake
|
333
333
|
- pageflow-linkmap-page.gemspec
|
334
334
|
- spec/factories/color_map_file.rb
|
335
335
|
- spec/factories/image_file.rb
|
@@ -1,149 +0,0 @@
|
|
1
|
-
namespace :pageflow_linkmap_page do
|
2
|
-
desc 'Migrate to server generated files'
|
3
|
-
task migrate_to_masked_image_files: :environment do
|
4
|
-
Pageflow::LinkmapPage::MaskedImageFilesMigrator.run
|
5
|
-
end
|
6
|
-
end
|
7
|
-
|
8
|
-
module Pageflow
|
9
|
-
module LinkmapPage
|
10
|
-
module MaskedImageFilesMigrator
|
11
|
-
extend self
|
12
|
-
|
13
|
-
def run
|
14
|
-
Resque.inline = true
|
15
|
-
total = pages_with_mask_image.count
|
16
|
-
|
17
|
-
pages_with_mask_image.find_each.with_index do |page, index|
|
18
|
-
puts "== Migrating page #{page.id} (#{index}/#{total})"
|
19
|
-
color_map_file = create_files(page)
|
20
|
-
|
21
|
-
if color_map_file
|
22
|
-
puts '-- Migrating mask perma ids...'
|
23
|
-
migrate_mask_perma_ids(page, color_map_file)
|
24
|
-
end
|
25
|
-
|
26
|
-
page.save!
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def create_files(page)
|
33
|
-
color_map_image_file =
|
34
|
-
ImageFile.find_by_id(page.configuration['linkmap_color_map_image_id'])
|
35
|
-
|
36
|
-
if color_map_image_file
|
37
|
-
revision = page.chapter.storyline.revision
|
38
|
-
|
39
|
-
puts "-- Color map file for image file #{color_map_image_file.id}"
|
40
|
-
|
41
|
-
color_map_file = color_map_file_for(color_map_image_file, revision)
|
42
|
-
page.configuration['linkmap_color_map_file_id'] = color_map_file.id
|
43
|
-
|
44
|
-
hover_image_file = ImageFile.find_by_id(page.configuration['hover_image_id'])
|
45
|
-
|
46
|
-
if hover_image_file
|
47
|
-
puts "-- Masked image file for hover image file #{hover_image_file.id}"
|
48
|
-
|
49
|
-
masked_image_file = masked_image_file_for(hover_image_file, color_map_file, revision)
|
50
|
-
page.configuration['linkmap_masked_hover_image_id'] = masked_image_file.id
|
51
|
-
end
|
52
|
-
|
53
|
-
visited_image_file = ImageFile.find_by_id(page.configuration['visited_image_id'])
|
54
|
-
|
55
|
-
if visited_image_file
|
56
|
-
puts "-- Masked image file for visited image file #{visited_image_file.id}"
|
57
|
-
|
58
|
-
masked_image_file = masked_image_file_for(visited_image_file, color_map_file, revision)
|
59
|
-
page.configuration['linkmap_masked_visited_image_id'] = masked_image_file.id
|
60
|
-
end
|
61
|
-
|
62
|
-
color_map_file
|
63
|
-
end
|
64
|
-
end
|
65
|
-
|
66
|
-
def color_map_file_for(image_file, revision)
|
67
|
-
color_map_file = ColorMapFile.find_or_create_by(source_image_file_id: image_file.id) do |c|
|
68
|
-
c.entry_id = revision.entry_id
|
69
|
-
end
|
70
|
-
|
71
|
-
unless color_map_file.processed?
|
72
|
-
puts ' Processing...'
|
73
|
-
|
74
|
-
color_map_file.process!
|
75
|
-
color_map_file.reload
|
76
|
-
end
|
77
|
-
|
78
|
-
revision.file_usages.find_or_create_by(file: color_map_file)
|
79
|
-
color_map_file
|
80
|
-
end
|
81
|
-
|
82
|
-
def masked_image_file_for(image_file, color_map_file, revision)
|
83
|
-
masked_image_file = MaskedImageFile.find_or_create_by(source_image_file: image_file,
|
84
|
-
color_map_file: color_map_file) do |m|
|
85
|
-
m.entry_id = revision.entry_id
|
86
|
-
end
|
87
|
-
|
88
|
-
unless masked_image_file.processed?
|
89
|
-
puts ' Processing...'
|
90
|
-
|
91
|
-
masked_image_file.process!
|
92
|
-
masked_image_file.reload
|
93
|
-
end
|
94
|
-
|
95
|
-
revision.file_usages.find_or_create_by(file: masked_image_file)
|
96
|
-
masked_image_file
|
97
|
-
end
|
98
|
-
|
99
|
-
def migrate_mask_perma_ids(page, color_map_file)
|
100
|
-
areas = page.configuration['linkmap_areas'] || []
|
101
|
-
|
102
|
-
page.configuration['linkmap_areas'] = areas.map do |area_attributes|
|
103
|
-
mask_perma_id = area_attributes['mask_perma_id']
|
104
|
-
|
105
|
-
if mask_perma_id && !area_attributes['color_map_component_id']
|
106
|
-
sprite_id = page.configuration.fetch('linkmap_masks').fetch('id')
|
107
|
-
colors =
|
108
|
-
page
|
109
|
-
.configuration
|
110
|
-
.fetch('linkmap_masks')
|
111
|
-
.fetch('c')
|
112
|
-
.fetch('c')
|
113
|
-
.map { |component| component['c'] }
|
114
|
-
|
115
|
-
area_attributes.merge(color_map_component_id: convert_mask_perma_id(mask_perma_id,
|
116
|
-
colors,
|
117
|
-
color_map_file,
|
118
|
-
sprite_id))
|
119
|
-
else
|
120
|
-
area_attributes
|
121
|
-
end
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def convert_mask_perma_id(perma_id, colors, color_map_file, sprite_id)
|
126
|
-
target_sprite_id, color_index = perma_id.split(':')
|
127
|
-
|
128
|
-
if target_sprite_id.to_i == sprite_id
|
129
|
-
"#{color_map_file.id}:#{nearest_color(color_map_file, *colors[color_index.to_i])}"
|
130
|
-
end
|
131
|
-
end
|
132
|
-
|
133
|
-
def nearest_color(color_map_file, r, g, b)
|
134
|
-
color_map_file.present_colors.min_by do |color|
|
135
|
-
(color[0..1].to_i(16) - r).abs +
|
136
|
-
(color[2..3].to_i(16) - g).abs +
|
137
|
-
(color[4..5].to_i(16) - b).abs
|
138
|
-
end
|
139
|
-
end
|
140
|
-
|
141
|
-
def pages_with_mask_image
|
142
|
-
Page
|
143
|
-
.where(template: 'linkmap_page')
|
144
|
-
.where('configuration LIKE "%linkmap_color_map_image_id%"')
|
145
|
-
.includes(chapter: {storyline: :revision})
|
146
|
-
end
|
147
|
-
end
|
148
|
-
end
|
149
|
-
end
|