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
metadata
CHANGED
@@ -1,69 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: pageflow-linkmap-page
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.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:
|
11
|
+
date: 2018-12-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: pageflow
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0.10'
|
20
|
-
- - "<"
|
17
|
+
- - "~>"
|
21
18
|
- !ruby/object:Gem::Version
|
22
|
-
version:
|
19
|
+
version: 13.x
|
23
20
|
type: :runtime
|
24
21
|
prerelease: false
|
25
22
|
version_requirements: !ruby/object:Gem::Requirement
|
26
23
|
requirements:
|
27
|
-
- - "
|
28
|
-
- !ruby/object:Gem::Version
|
29
|
-
version: '0.10'
|
30
|
-
- - "<"
|
24
|
+
- - "~>"
|
31
25
|
- !ruby/object:Gem::Version
|
32
|
-
version:
|
26
|
+
version: 13.x
|
33
27
|
- !ruby/object:Gem::Dependency
|
34
28
|
name: pageflow-external-links
|
35
29
|
requirement: !ruby/object:Gem::Requirement
|
36
30
|
requirements:
|
37
|
-
- - "
|
38
|
-
- !ruby/object:Gem::Version
|
39
|
-
version: '0.3'
|
40
|
-
- - "<"
|
31
|
+
- - "~>"
|
41
32
|
- !ruby/object:Gem::Version
|
42
|
-
version:
|
33
|
+
version: 2.x
|
43
34
|
type: :runtime
|
44
35
|
prerelease: false
|
45
36
|
version_requirements: !ruby/object:Gem::Requirement
|
46
37
|
requirements:
|
47
|
-
- - "
|
48
|
-
- !ruby/object:Gem::Version
|
49
|
-
version: '0.3'
|
50
|
-
- - "<"
|
38
|
+
- - "~>"
|
51
39
|
- !ruby/object:Gem::Version
|
52
|
-
version:
|
40
|
+
version: 2.x
|
53
41
|
- !ruby/object:Gem::Dependency
|
54
42
|
name: pageflow-support
|
55
43
|
requirement: !ruby/object:Gem::Requirement
|
56
44
|
requirements:
|
57
45
|
- - "~>"
|
58
46
|
- !ruby/object:Gem::Version
|
59
|
-
version:
|
47
|
+
version: 13.x
|
60
48
|
type: :development
|
61
49
|
prerelease: false
|
62
50
|
version_requirements: !ruby/object:Gem::Requirement
|
63
51
|
requirements:
|
64
52
|
- - "~>"
|
65
53
|
- !ruby/object:Gem::Version
|
66
|
-
version:
|
54
|
+
version: 13.x
|
67
55
|
- !ruby/object:Gem::Dependency
|
68
56
|
name: bundler
|
69
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -98,28 +86,28 @@ dependencies:
|
|
98
86
|
requirements:
|
99
87
|
- - "~>"
|
100
88
|
- !ruby/object:Gem::Version
|
101
|
-
version: '3.
|
89
|
+
version: '3.7'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
93
|
requirements:
|
106
94
|
- - "~>"
|
107
95
|
- !ruby/object:Gem::Version
|
108
|
-
version: '3.
|
96
|
+
version: '3.7'
|
109
97
|
- !ruby/object:Gem::Dependency
|
110
|
-
name:
|
98
|
+
name: factory_bot_rails
|
111
99
|
requirement: !ruby/object:Gem::Requirement
|
112
100
|
requirements:
|
113
101
|
- - "~>"
|
114
102
|
- !ruby/object:Gem::Version
|
115
|
-
version: '4.
|
103
|
+
version: '4.8'
|
116
104
|
type: :development
|
117
105
|
prerelease: false
|
118
106
|
version_requirements: !ruby/object:Gem::Requirement
|
119
107
|
requirements:
|
120
108
|
- - "~>"
|
121
109
|
- !ruby/object:Gem::Version
|
122
|
-
version: '4.
|
110
|
+
version: '4.8'
|
123
111
|
- !ruby/object:Gem::Dependency
|
124
112
|
name: sqlite3
|
125
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -148,6 +136,34 @@ dependencies:
|
|
148
136
|
- - "~>"
|
149
137
|
- !ruby/object:Gem::Version
|
150
138
|
version: '2.13'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: chunky_png
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - "~>"
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '1.3'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - "~>"
|
151
|
+
- !ruby/object:Gem::Version
|
152
|
+
version: '1.3'
|
153
|
+
- !ruby/object:Gem::Dependency
|
154
|
+
name: unindent
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - "~>"
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '1.0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - "~>"
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '1.0'
|
151
167
|
- !ruby/object:Gem::Dependency
|
152
168
|
name: semmy
|
153
169
|
requirement: !ruby/object:Gem::Requirement
|
@@ -191,18 +207,23 @@ files:
|
|
191
207
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/area.js
|
192
208
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/area_file_selection_handler.js
|
193
209
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/audio_file_area_type.js
|
210
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_delegator.js
|
211
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_file.js
|
194
212
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/external_link_area_type.js
|
195
|
-
- app/assets/javascript/pageflow/linkmap_page/editor/models/
|
213
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/models/masked_image_file.js
|
196
214
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js
|
197
215
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js
|
198
216
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/page_link_area_type.js
|
217
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/models/processed_file.js
|
199
218
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/stored_mask_sprite.js
|
200
219
|
- app/assets/javascript/pageflow/linkmap_page/editor/models/text_only_area_type.js
|
220
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/patterns/area_pattern.js
|
201
221
|
- app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js
|
202
222
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/edit_area.jst.ejs
|
203
223
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs
|
204
224
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_masks_preview.jst.ejs
|
205
225
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_outlines.jst.ejs
|
226
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/mobile_info_box_page_item.jst.ejs
|
206
227
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/scaled_on_phone_hint.jst.ejs
|
207
228
|
- app/assets/javascript/pageflow/linkmap_page/editor/templates/select_area_position_hint.jst.ejs
|
208
229
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js
|
@@ -213,6 +234,8 @@ files:
|
|
213
234
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_masks_preview_embedded_view.js
|
214
235
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_outlines_embedded_view.js
|
215
236
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js
|
237
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_embedded_view.js
|
238
|
+
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_page_item_embedded_view.js
|
216
239
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/panorama_embedded_view.js
|
217
240
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/inputs/area_mask_input_view.js
|
218
241
|
- app/assets/javascript/pageflow/linkmap_page/editor/views/scaled_on_phone_hint_view.js
|
@@ -223,17 +246,18 @@ files:
|
|
223
246
|
- app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js
|
224
247
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js
|
225
248
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_contains.js
|
226
|
-
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/
|
249
|
+
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_set_mask.js
|
227
250
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js
|
228
251
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/image_data.js
|
229
252
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask.js
|
230
|
-
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask_sprite.js
|
231
|
-
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/masks.js
|
232
253
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js
|
254
|
+
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_area_indicators.js
|
233
255
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js
|
234
256
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_players_controller.js
|
235
257
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround.js
|
236
258
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround_strategies/target_speed.js
|
259
|
+
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_paginator.js
|
260
|
+
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_pan_zoom.js
|
237
261
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js
|
238
262
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama/get_panorama_size.js
|
239
263
|
- app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js
|
@@ -250,25 +274,28 @@ files:
|
|
250
274
|
- app/assets/stylesheets/pageflow/linkmap_page/editor/resizable.scss
|
251
275
|
- app/assets/stylesheets/pageflow/linkmap_page/editor/select_area_position_hint.scss
|
252
276
|
- app/assets/stylesheets/pageflow/linkmap_page/themes/default.scss
|
277
|
+
- app/assets/stylesheets/pageflow/linkmap_page/themes/default/mobile_info_box.scss
|
278
|
+
- app/assets/stylesheets/pageflow/linkmap_page/themes/default/paginator.scss
|
253
279
|
- app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss
|
254
|
-
- app/controllers/pageflow/linkmap_page/mask_sprites_controller.rb
|
255
280
|
- app/helpers/pageflow/linkmap_page/areas_helper.rb
|
256
281
|
- app/jobs/pageflow/linkmap_page/process_source_image_file_job.rb
|
257
282
|
- app/models/pageflow/linkmap_page/color_map_file.rb
|
258
|
-
- app/models/pageflow/linkmap_page/mask_sprite.rb
|
259
283
|
- app/models/pageflow/linkmap_page/masked_image_file.rb
|
260
284
|
- app/models/pageflow/linkmap_page/processed_image_file.rb
|
261
285
|
- app/views/pageflow/linkmap_page/areas/_div.html.erb
|
286
|
+
- app/views/pageflow/linkmap_page/color_map_files/_color_map_file.json.jbuilder
|
287
|
+
- app/views/pageflow/linkmap_page/editor/color_map_files/_color_map_file.json.jbuilder
|
288
|
+
- app/views/pageflow/linkmap_page/editor/masked_image_files/_masked_image_file.json.jbuilder
|
262
289
|
- app/views/pageflow/linkmap_page/page.html.erb
|
263
290
|
- bin/rspec
|
264
291
|
- bin/spring
|
265
292
|
- config/locales/de.yml
|
266
293
|
- config/locales/en.yml
|
267
|
-
- config/routes.rb
|
268
294
|
- config/spring.rb
|
269
295
|
- db/migrate/20170330201200_create_mask_sprites.rb
|
270
296
|
- db/migrate/20171106151700_create_masked_image_files.rb
|
271
297
|
- db/migrate/20180111145100_create_color_map_files.rb
|
298
|
+
- db/migrate/20180214201200_drop_mask_sprites.rb
|
272
299
|
- lib/generators/pageflow_linkmap_page/install/install_generator.rb
|
273
300
|
- lib/pageflow-linkmap-page.rb
|
274
301
|
- lib/pageflow/linkmap_page/engine.rb
|
@@ -284,11 +311,26 @@ files:
|
|
284
311
|
- lib/pageflow/linkmap_page/version.rb
|
285
312
|
- lib/tasks/pageflow_linkmap_page_tasks.rake
|
286
313
|
- pageflow-linkmap-page.gemspec
|
287
|
-
- spec/
|
314
|
+
- spec/factories/color_map_file.rb
|
315
|
+
- spec/factories/image_file.rb
|
316
|
+
- spec/factories/masked_image_file.rb
|
288
317
|
- spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb
|
318
|
+
- spec/integration/masked_image_file_type_spec.rb
|
319
|
+
- spec/models/pageflow/linkmap_page/color_map_file_spec.rb
|
320
|
+
- spec/models/pageflow/linkmap_page/masked_image_file_spec.rb
|
321
|
+
- spec/pageflow/linkmap_page/paperclip_processors/colors_spec.rb
|
322
|
+
- spec/pageflow/linkmap_page/progress_spec.rb
|
289
323
|
- spec/spec_helper.rb
|
290
324
|
- spec/support/config/devise.rb
|
291
|
-
- spec/support/config/
|
325
|
+
- spec/support/config/factory_bot.rb
|
326
|
+
- spec/support/config/resque.rb
|
327
|
+
- spec/support/fixtures/black_dots.png
|
328
|
+
- spec/support/fixtures/color_map.png
|
329
|
+
- spec/support/fixtures/dots_and_lines.png
|
330
|
+
- spec/support/fixtures/green_and_black.png
|
331
|
+
- spec/support/fixtures/red.png
|
332
|
+
- spec/support/fixtures/transparent.png
|
333
|
+
- spec/support/matchers/have_color.rb
|
292
334
|
homepage: https://github.com/codevise/pageflow-linkmap-page
|
293
335
|
licenses:
|
294
336
|
- MIT
|
@@ -309,13 +351,28 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
309
351
|
version: '0'
|
310
352
|
requirements: []
|
311
353
|
rubyforge_project:
|
312
|
-
rubygems_version: 2.7.
|
354
|
+
rubygems_version: 2.7.5
|
313
355
|
signing_key:
|
314
356
|
specification_version: 4
|
315
357
|
summary: Pageflow page type for a page that contains customizable link areas
|
316
358
|
test_files:
|
317
|
-
- spec/
|
359
|
+
- spec/factories/color_map_file.rb
|
360
|
+
- spec/factories/image_file.rb
|
361
|
+
- spec/factories/masked_image_file.rb
|
318
362
|
- spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb
|
363
|
+
- spec/integration/masked_image_file_type_spec.rb
|
364
|
+
- spec/models/pageflow/linkmap_page/color_map_file_spec.rb
|
365
|
+
- spec/models/pageflow/linkmap_page/masked_image_file_spec.rb
|
366
|
+
- spec/pageflow/linkmap_page/paperclip_processors/colors_spec.rb
|
367
|
+
- spec/pageflow/linkmap_page/progress_spec.rb
|
319
368
|
- spec/spec_helper.rb
|
320
369
|
- spec/support/config/devise.rb
|
321
|
-
- spec/support/config/
|
370
|
+
- spec/support/config/factory_bot.rb
|
371
|
+
- spec/support/config/resque.rb
|
372
|
+
- spec/support/fixtures/black_dots.png
|
373
|
+
- spec/support/fixtures/color_map.png
|
374
|
+
- spec/support/fixtures/dots_and_lines.png
|
375
|
+
- spec/support/fixtures/green_and_black.png
|
376
|
+
- spec/support/fixtures/red.png
|
377
|
+
- spec/support/fixtures/transparent.png
|
378
|
+
- spec/support/matchers/have_color.rb
|
@@ -1,16 +0,0 @@
|
|
1
|
-
pageflow.linkmapPage.MasksDelegator = pageflow.Object.extend({
|
2
|
-
initialize: function() {
|
3
|
-
this._masks = pageflow.linkmapPage.Masks.empty;
|
4
|
-
},
|
5
|
-
|
6
|
-
updateDelegate: function(masks) {
|
7
|
-
this._masks = masks;
|
8
|
-
this.trigger('update');
|
9
|
-
}
|
10
|
-
});
|
11
|
-
|
12
|
-
_(['findByPermaId', 'atPoint', 'each', 'draw', 'isEmpty']).each(function(method) {
|
13
|
-
pageflow.linkmapPage.MasksDelegator.prototype[method] = function() {
|
14
|
-
return this._masks[method].apply(this._masks, arguments);
|
15
|
-
};
|
16
|
-
});
|
@@ -1,34 +0,0 @@
|
|
1
|
-
$.fn.linkmapAreaRedraw = function(options) {
|
2
|
-
this.each(function() {
|
3
|
-
var area = $(this);
|
4
|
-
var position = area.position();
|
5
|
-
|
6
|
-
var mask = options.masks && options.masks.findByPermaId(area.attr('data-mask-id'));
|
7
|
-
area.data('mask', mask || null);
|
8
|
-
|
9
|
-
var canvas = area.find('canvas').filter(options.target)[0];
|
10
|
-
|
11
|
-
if (!canvas) {
|
12
|
-
return;
|
13
|
-
}
|
14
|
-
|
15
|
-
var context = canvas.getContext('2d');
|
16
|
-
|
17
|
-
if (options.image) {
|
18
|
-
canvas.width = options.width;
|
19
|
-
canvas.height = options.height;
|
20
|
-
|
21
|
-
if (mask) {
|
22
|
-
mask.draw(context, options.width);
|
23
|
-
context.globalCompositeOperation = 'source-in';
|
24
|
-
}
|
25
|
-
|
26
|
-
if (options.image) {
|
27
|
-
options.image.draw(canvas);
|
28
|
-
}
|
29
|
-
}
|
30
|
-
else {
|
31
|
-
context.clearRect(0, 0, options.width, options.height);
|
32
|
-
}
|
33
|
-
});
|
34
|
-
};
|
@@ -1,68 +0,0 @@
|
|
1
|
-
pageflow.linkmapPage.MaskSprite = (function() {
|
2
|
-
function MaskSprite(id, imageData) {
|
3
|
-
this.id = id;
|
4
|
-
|
5
|
-
this.nonTransparentAt = function(x, y) {
|
6
|
-
var pixel = imageData.get(x, y, 1, 1).data;
|
7
|
-
return pixel[3] > 0;
|
8
|
-
};
|
9
|
-
|
10
|
-
this.draw = function(context, spriteOffset, boundingBox, scale) {
|
11
|
-
imageData.draw(context,
|
12
|
-
spriteOffset,
|
13
|
-
0,
|
14
|
-
boundingBox.width,
|
15
|
-
boundingBox.height,
|
16
|
-
boundingBox.left * scale,
|
17
|
-
boundingBox.top * scale,
|
18
|
-
boundingBox.width * scale,
|
19
|
-
boundingBox.height * scale);
|
20
|
-
|
21
|
-
};
|
22
|
-
|
23
|
-
this.toDataURL = function() {
|
24
|
-
return imageData.toDataURL();
|
25
|
-
};
|
26
|
-
}
|
27
|
-
|
28
|
-
MaskSprite.load = function(maskSpriteUrlTemplate, id) {
|
29
|
-
return pageflow.linkmapPage.ImageData.load(getUrl(maskSpriteUrlTemplate, id)).then(function(imageData) {
|
30
|
-
return new MaskSprite(id, imageData);
|
31
|
-
});
|
32
|
-
};
|
33
|
-
|
34
|
-
MaskSprite.fromColorMapImageData = function(colorMapImageData, colorMap) {
|
35
|
-
var imageData = new pageflow.linkmapPage.ImageData(colorMap.sumOfComponentWidths(),
|
36
|
-
colorMap.maxComponentHeight());
|
37
|
-
|
38
|
-
_(colorMap.components).reduce(function(offset, component) {
|
39
|
-
imageData.copyColorFrom(colorMapImageData.getBoundingBox(component.boundingBox),
|
40
|
-
component.color,
|
41
|
-
offset, 0);
|
42
|
-
|
43
|
-
return offset + component.boundingBox.width;
|
44
|
-
}, 0);
|
45
|
-
|
46
|
-
return new MaskSprite('a', imageData);
|
47
|
-
};
|
48
|
-
|
49
|
-
function getUrl(template, id) {
|
50
|
-
return template.replace(':id_partition', idPartition(id));
|
51
|
-
}
|
52
|
-
|
53
|
-
function idPartition(id) {
|
54
|
-
return partition(pad(id, 9), '/');
|
55
|
-
}
|
56
|
-
|
57
|
-
function partition(string, separator) {
|
58
|
-
return string.replace(/./g, function(c, i, a) {
|
59
|
-
return i && ((a.length - i) % 3 === 0) ? '/' + c : c;
|
60
|
-
});
|
61
|
-
}
|
62
|
-
|
63
|
-
function pad(string, size) {
|
64
|
-
return (_.times(size, function() { return '0'; }).join('') + string).slice(-size);
|
65
|
-
}
|
66
|
-
|
67
|
-
return MaskSprite;
|
68
|
-
}());
|
@@ -1,99 +0,0 @@
|
|
1
|
-
pageflow.linkmapPage.Masks = (function() {
|
2
|
-
var SPRITE_IMAGE_ID = 'id';
|
3
|
-
var COLOR_MAP = 'c';
|
4
|
-
|
5
|
-
function Masks(masks, sprite, colorMap) {
|
6
|
-
this.findByPermaId = function(permaId) {
|
7
|
-
return _(masks).detect(function(mask) {
|
8
|
-
return mask.permaId === permaId;
|
9
|
-
});
|
10
|
-
};
|
11
|
-
|
12
|
-
this.atPoint = function(fractionX, fractionY) {
|
13
|
-
return _(masks).detect(function(mask) {
|
14
|
-
return mask.contains(fractionX, fractionY);
|
15
|
-
});
|
16
|
-
};
|
17
|
-
|
18
|
-
this.draw = function(context, width) {
|
19
|
-
_(masks).each(function(mask) {
|
20
|
-
mask.draw(context, width);
|
21
|
-
});
|
22
|
-
};
|
23
|
-
|
24
|
-
this.each = function(callback, context) {
|
25
|
-
_(masks).each(callback, context);
|
26
|
-
};
|
27
|
-
|
28
|
-
this.isEmpty = function() {
|
29
|
-
return !masks.length;
|
30
|
-
};
|
31
|
-
|
32
|
-
this.serialize = function(spriteId) {
|
33
|
-
var data = {};
|
34
|
-
|
35
|
-
data[SPRITE_IMAGE_ID] = spriteId;
|
36
|
-
data[COLOR_MAP] = colorMap.serialize();
|
37
|
-
|
38
|
-
return data;
|
39
|
-
};
|
40
|
-
|
41
|
-
this.getSpriteDataUrl = function() {
|
42
|
-
return sprite.toDataURL();
|
43
|
-
};
|
44
|
-
}
|
45
|
-
|
46
|
-
Masks.empty = new Masks([]);
|
47
|
-
|
48
|
-
Masks.loadColorMapImage = function(url) {
|
49
|
-
return pageflow.linkmapPage.ImageData.load(url).then(function(colorMapImageData) {
|
50
|
-
try {
|
51
|
-
var colorMap = pageflow.linkmapPage.ColorMap.fromImageData(colorMapImageData);
|
52
|
-
|
53
|
-
return fromMaskSpriteAndColorMap(
|
54
|
-
pageflow.linkmapPage.MaskSprite.fromColorMapImageData(colorMapImageData, colorMap),
|
55
|
-
colorMap
|
56
|
-
);
|
57
|
-
}
|
58
|
-
catch(e) {
|
59
|
-
return new $.Deferred().reject(e).promise();
|
60
|
-
}
|
61
|
-
});
|
62
|
-
};
|
63
|
-
|
64
|
-
Masks.deserialize = function(data, maskSpriteUrlTemplate) {
|
65
|
-
return pageflow.linkmapPage.MaskSprite.load(maskSpriteUrlTemplate, data[SPRITE_IMAGE_ID]).then(function(sprite) {
|
66
|
-
return fromMaskSpriteAndColorMap(
|
67
|
-
sprite,
|
68
|
-
pageflow.linkmapPage.ColorMap.deserialize(data[COLOR_MAP])
|
69
|
-
);
|
70
|
-
});
|
71
|
-
};
|
72
|
-
|
73
|
-
function fromMaskSpriteAndColorMap(sprite, colorMap) {
|
74
|
-
var masks = [];
|
75
|
-
var permaId = 0;
|
76
|
-
|
77
|
-
_(colorMap.components).reduce(function(offset, component) {
|
78
|
-
masks.push(new pageflow.linkmapPage.Mask({
|
79
|
-
permaId: sprite.id + ':' + permaId.toString(),
|
80
|
-
|
81
|
-
sprite: sprite,
|
82
|
-
spriteOffset: offset,
|
83
|
-
|
84
|
-
originalWidth: colorMap.width,
|
85
|
-
originalHeight: colorMap.height,
|
86
|
-
|
87
|
-
boundingBox: component.boundingBox
|
88
|
-
}));
|
89
|
-
|
90
|
-
permaId += 1;
|
91
|
-
|
92
|
-
return offset + component.boundingBox.width;
|
93
|
-
}, 0);
|
94
|
-
|
95
|
-
return new Masks(masks, sprite, colorMap);
|
96
|
-
}
|
97
|
-
|
98
|
-
return Masks;
|
99
|
-
}());
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Pageflow
|
2
|
-
module LinkmapPage
|
3
|
-
class MaskSpritesController < Pageflow::ApplicationController
|
4
|
-
respond_to :json
|
5
|
-
|
6
|
-
before_filter :authenticate_user!
|
7
|
-
|
8
|
-
def create
|
9
|
-
image_file = ImageFile.find(params[:image_file_id])
|
10
|
-
authorize!(:update, image_file)
|
11
|
-
|
12
|
-
mask_sprite = MaskSprite
|
13
|
-
.create_with(permitted_params)
|
14
|
-
.find_or_create_by!(image_file_id: image_file.id)
|
15
|
-
|
16
|
-
respond_with(mask_sprite, location: image_file_mask_sprite_url(image_file, mask_sprite))
|
17
|
-
end
|
18
|
-
|
19
|
-
private
|
20
|
-
|
21
|
-
def permitted_params
|
22
|
-
params.require(:mask_sprite).permit(:attachment)
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,15 +0,0 @@
|
|
1
|
-
module Pageflow
|
2
|
-
module LinkmapPage
|
3
|
-
class MaskSprite < ActiveRecord::Base
|
4
|
-
belongs_to :image_file
|
5
|
-
|
6
|
-
has_attached_file :attachment, Pageflow.config.paperclip_s3_default_options
|
7
|
-
|
8
|
-
do_not_validate_attachment_file_type :attachment
|
9
|
-
|
10
|
-
def as_json(*)
|
11
|
-
super(only: [:id])
|
12
|
-
end
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
data/config/routes.rb
DELETED
@@ -1,108 +0,0 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
module Pageflow
|
4
|
-
module LinkmapPage
|
5
|
-
describe MaskSpritesController do
|
6
|
-
DATA_URL = 'data:image/png;base64,iVBORw0KGgoAAA' \
|
7
|
-
'ANSUhEUgAAAAcAAAAHCAYAAADEUlfTAAAAGXRFWHRTb2Z' \
|
8
|
-
'0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAENJREFU' \
|
9
|
-
'eNpiYICABCDeAcRfoXQCA5LEDyD+j4R/wBTsQJOAYZA42' \
|
10
|
-
'Chskl+ZgMRhBuzgMEhyBRD/RJP4CRXH7VqAAAMA2qweFJ' \
|
11
|
-
'llSygAAAAASUVORK5CYII='.freeze
|
12
|
-
|
13
|
-
describe '#create' do
|
14
|
-
routes { Pageflow::LinkmapPage::Engine.routes }
|
15
|
-
|
16
|
-
it 'responds with success for member' do
|
17
|
-
user = create(:user)
|
18
|
-
entry = create(:entry, with_editor: user)
|
19
|
-
image_file = create(:image_file, used_in: entry.draft)
|
20
|
-
|
21
|
-
sign_in(user)
|
22
|
-
post(:create,
|
23
|
-
image_file_id: image_file.id,
|
24
|
-
mask_sprite: {attachment: DATA_URL},
|
25
|
-
format: 'json')
|
26
|
-
|
27
|
-
expect(response.status).to eq(201)
|
28
|
-
end
|
29
|
-
|
30
|
-
it 'includes id of created mask sprite in response' do
|
31
|
-
user = create(:user)
|
32
|
-
entry = create(:entry, with_editor: user)
|
33
|
-
image_file = create(:image_file, used_in: entry.draft)
|
34
|
-
|
35
|
-
sign_in(user)
|
36
|
-
post(:create,
|
37
|
-
image_file_id: image_file.id,
|
38
|
-
mask_sprite: {attachment: DATA_URL},
|
39
|
-
format: 'json')
|
40
|
-
|
41
|
-
json = JSON.parse(response.body)
|
42
|
-
|
43
|
-
expect(json['id']).to eq(MaskSprite.last.id)
|
44
|
-
end
|
45
|
-
|
46
|
-
it 'creates mask sprite for image' do
|
47
|
-
user = create(:user)
|
48
|
-
entry = create(:entry, with_editor: user)
|
49
|
-
image_file = create(:image_file, used_in: entry.draft)
|
50
|
-
|
51
|
-
sign_in(user)
|
52
|
-
post(:create,
|
53
|
-
image_file_id: image_file.id,
|
54
|
-
mask_sprite: {attachment: DATA_URL},
|
55
|
-
format: 'json')
|
56
|
-
mask_sprite = MaskSprite.where(image_file: image_file).first
|
57
|
-
|
58
|
-
expect(mask_sprite).to be_present
|
59
|
-
expect(mask_sprite.attachment).to be_present
|
60
|
-
end
|
61
|
-
|
62
|
-
it 'does not recreate mask sprite if it already exists' do
|
63
|
-
user = create(:user)
|
64
|
-
entry = create(:entry, with_editor: user)
|
65
|
-
image_file = create(:image_file, used_in: entry.draft)
|
66
|
-
|
67
|
-
sign_in(user)
|
68
|
-
post(:create,
|
69
|
-
image_file_id: image_file.id,
|
70
|
-
mask_sprite: {attachment: DATA_URL},
|
71
|
-
format: 'json')
|
72
|
-
|
73
|
-
expect {
|
74
|
-
post(:create,
|
75
|
-
image_file_id: image_file.id,
|
76
|
-
mask_sprite: {attachment: DATA_URL},
|
77
|
-
format: 'json')
|
78
|
-
}.not_to change { MaskSprite.count }
|
79
|
-
end
|
80
|
-
|
81
|
-
it 'requires user to have permissions for entry' do
|
82
|
-
user = create(:user)
|
83
|
-
entry = create(:entry)
|
84
|
-
image_file = create(:image_file, used_in: entry.draft)
|
85
|
-
|
86
|
-
sign_in(user)
|
87
|
-
post(:create,
|
88
|
-
image_file_id: image_file.id,
|
89
|
-
mask_sprite: {attachment: DATA_URL},
|
90
|
-
format: 'json')
|
91
|
-
|
92
|
-
expect(response.status).to eq(403)
|
93
|
-
end
|
94
|
-
|
95
|
-
it 'requires user to be signed in' do
|
96
|
-
image_file = create(:image_file)
|
97
|
-
|
98
|
-
post(:create,
|
99
|
-
image_file_id: image_file.id,
|
100
|
-
mask_sprite: {attachment: DATA_URL},
|
101
|
-
format: 'json')
|
102
|
-
|
103
|
-
expect(response.status).to eq(401)
|
104
|
-
end
|
105
|
-
end
|
106
|
-
end
|
107
|
-
end
|
108
|
-
end
|