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.
Files changed (99) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +31 -6
  3. data/Gemfile +0 -7
  4. data/README.md +0 -5
  5. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +8 -1
  6. data/app/assets/javascript/pageflow/linkmap_page/editor/config.js +23 -1
  7. data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +24 -5
  8. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +4 -1
  9. data/app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_delegator.js +16 -0
  10. data/app/assets/javascript/pageflow/linkmap_page/editor/models/color_map_file.js +6 -0
  11. data/app/assets/javascript/pageflow/linkmap_page/editor/models/masked_image_file.js +7 -0
  12. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +49 -55
  13. data/app/assets/javascript/pageflow/linkmap_page/editor/models/processed_file.js +12 -0
  14. data/app/assets/javascript/pageflow/linkmap_page/editor/patterns/area_pattern.js +42 -0
  15. data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +3 -1
  16. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +2 -2
  17. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_masks_preview.jst.ejs +4 -2
  18. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_outlines.jst.ejs +3 -2
  19. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/mobile_info_box_page_item.jst.ejs +2 -0
  20. data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +1 -0
  21. data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +46 -0
  22. data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +3 -6
  23. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +75 -10
  24. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_masks_preview_embedded_view.js +71 -77
  25. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_outlines_embedded_view.js +44 -82
  26. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +12 -13
  27. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_embedded_view.js +61 -0
  28. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/mobile_info_box_page_item_embedded_view.js +28 -0
  29. data/app/assets/javascript/pageflow/linkmap_page/editor.js +10 -2
  30. data/app/assets/javascript/pageflow/linkmap_page/page_type.js +155 -20
  31. data/app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js +4 -1
  32. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_contains.js +7 -6
  33. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_set_mask.js +16 -0
  34. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js +83 -142
  35. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/image_data.js +17 -47
  36. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask.js +3 -34
  37. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js +3 -6
  38. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +78 -92
  39. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_area_indicators.js +75 -0
  40. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_paginator.js +292 -0
  41. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_pan_zoom.js +241 -0
  42. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +81 -59
  43. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js +14 -0
  44. data/app/assets/stylesheets/pageflow/linkmap_page/editor/area_outlines.scss +6 -0
  45. data/app/assets/stylesheets/pageflow/linkmap_page/editor/masks_preview.scss +10 -0
  46. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/mobile_info_box.scss +31 -0
  47. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/paginator.scss +53 -0
  48. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss +5 -1
  49. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default.scss +3 -0
  50. data/app/assets/stylesheets/pageflow/linkmap_page.scss +29 -3
  51. data/app/helpers/pageflow/linkmap_page/areas_helper.rb +37 -11
  52. data/app/jobs/pageflow/linkmap_page/process_source_image_file_job.rb +4 -4
  53. data/app/views/pageflow/linkmap_page/areas/_div.html.erb +13 -7
  54. data/app/views/pageflow/linkmap_page/color_map_files/_color_map_file.json.jbuilder +18 -0
  55. data/app/views/pageflow/linkmap_page/editor/color_map_files/_color_map_file.json.jbuilder +1 -0
  56. data/app/views/pageflow/linkmap_page/editor/masked_image_files/_masked_image_file.json.jbuilder +1 -0
  57. data/app/views/pageflow/linkmap_page/page.html.erb +76 -39
  58. data/config/locales/de.yml +47 -4
  59. data/config/locales/en.yml +43 -4
  60. data/db/migrate/20170330201200_create_mask_sprites.rb +1 -1
  61. data/db/migrate/20171106151700_create_masked_image_files.rb +1 -1
  62. data/db/migrate/20180111145100_create_color_map_files.rb +1 -1
  63. data/db/migrate/20180214201200_drop_mask_sprites.rb +7 -0
  64. data/lib/pageflow/linkmap_page/engine.rb +4 -0
  65. data/lib/pageflow/linkmap_page/page_type.rb +26 -0
  66. data/lib/pageflow/linkmap_page/paperclip_processors/color_mask.rb +1 -1
  67. data/lib/pageflow/linkmap_page/paperclip_processors/colors.rb +1 -1
  68. data/lib/pageflow/linkmap_page/version.rb +1 -1
  69. data/lib/tasks/pageflow_linkmap_page_tasks.rake +8 -7
  70. data/pageflow-linkmap-page.gemspec +11 -5
  71. data/spec/factories/color_map_file.rb +16 -0
  72. data/spec/factories/image_file.rb +25 -0
  73. data/spec/factories/masked_image_file.rb +10 -0
  74. data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +76 -13
  75. data/spec/integration/masked_image_file_type_spec.rb +15 -0
  76. data/spec/models/pageflow/linkmap_page/color_map_file_spec.rb +113 -0
  77. data/spec/models/pageflow/linkmap_page/masked_image_file_spec.rb +87 -0
  78. data/spec/pageflow/linkmap_page/paperclip_processors/colors_spec.rb +46 -0
  79. data/spec/pageflow/linkmap_page/progress_spec.rb +91 -0
  80. data/spec/spec_helper.rb +5 -1
  81. data/spec/support/config/devise.rb +1 -8
  82. data/spec/support/config/{factory_girl.rb → factory_bot.rb} +5 -3
  83. data/spec/support/config/resque.rb +9 -0
  84. data/spec/support/fixtures/black_dots.png +0 -0
  85. data/spec/support/fixtures/color_map.png +0 -0
  86. data/spec/support/fixtures/dots_and_lines.png +0 -0
  87. data/spec/support/fixtures/green_and_black.png +0 -0
  88. data/spec/support/fixtures/red.png +0 -0
  89. data/spec/support/fixtures/transparent.png +0 -0
  90. data/spec/support/matchers/have_color.rb +34 -0
  91. metadata +98 -41
  92. data/app/assets/javascript/pageflow/linkmap_page/editor/models/masks_delegator.js +0 -16
  93. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_redraw.js +0 -34
  94. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask_sprite.js +0 -68
  95. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/masks.js +0 -99
  96. data/app/controllers/pageflow/linkmap_page/mask_sprites_controller.rb +0 -26
  97. data/app/models/pageflow/linkmap_page/mask_sprite.rb +0 -15
  98. data/config/routes.rb +0 -5
  99. data/spec/controllers/pageflow/linkmap_page/mask_sprites_controller_spec.rb +0 -108
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 292a7ccb48c2c4a81d69edfee98d6567861b6df965ab6ff59d29384da534bcc8
4
- data.tar.gz: 168b15ee2a7da3d2803e2d3ffac8625e3f2d154036e94b725efb261452f086b8
3
+ metadata.gz: 6ce17d17c0e4310badb5085357e5207eed1a85771ebe119b9ebe04171cb38c2e
4
+ data.tar.gz: da776f95231282a5645ca3b67a3437ec26c8eb00ab7b537de7438344adffe5f5
5
5
  SHA512:
6
- metadata.gz: e5d6b1ddc936609028ccb8ef0a5c6c3ff0cd08ad122bfc8b9b0d9fb2e503d46c6d41df21c52b2eea16bb6cbad64b285f76ab8bdd0cbac43a5a42edce51cddc9c
7
- data.tar.gz: 1699af6c8ab0e2719df1006f5f16e8947ae52860f7a0a7e863fa2e3c4cfa933b9045f28241cc35dfa3642284422ef57729857bbc56cef52a6afae69a0c27550f
6
+ metadata.gz: 222ed28a9b10e79cf16e3b1f306c4aa88612e12b923a5570724a3bfbee456ec475a8ec5f08f1a3ee24b757a41d1335ffeaad3a3c1e330e43a9e8120afe4c8d6e
7
+ data.tar.gz: beca7d5fc98604075efc611f2eb98ca3b67549e89b11b4b350b402b170d1292af2bada093306f95895fbcf7e8eb0c3aa39fb735dbed9e36fe04b29e28466b75e
data/CHANGELOG.md CHANGED
@@ -1,14 +1,39 @@
1
1
  # CHANGELOG
2
2
 
3
- ### Version 1.5.0
3
+ ### Version 2.0.0
4
4
 
5
- 2019-01-23
5
+ 2018-12-10
6
6
 
7
- [Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/1-4-stable...v1.5.0)
7
+ [Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/1-x-stable...v2.0.0)
8
8
 
9
- - Add Rake-Task to migrate existing linkmap pages to 2.0-version
10
- ([#47](https://github.com/codevise/pageflow-linkmap-page/pull/47))
9
+ ##### Breaking Changes
10
+
11
+ - Requires Pageflow 13.
12
+ ([#35](https://github.com/codevise/pageflow-linkmap-page/pull/35),
13
+ [#38](https://github.com/codevise/pageflow-linkmap-page/pull/38))
14
+
15
+ - Use server side processing for color maps and masked images.
16
+ ([#42](https://github.com/codevise/pageflow-linkmap-page/pull/42))
17
+
18
+ Remove the following line from your `config/routes.rb` file:
19
+
20
+ mount Pageflow::LinkmapPage::Engine, at: '/linkmap_page'
21
+
22
+ Run the following rake task to trigger server side processing of
23
+ color maps and masked images:
24
+
25
+ bin/rake pageflow_linkmap_page:migrate_to_masked_image_files
26
+
27
+ Consider running this task on a separate machine to handle file
28
+ processing before deploying the update.
29
+
30
+ ##### Features
31
+
32
+ - Paginated mobile navigation
33
+ ([#43](https://github.com/codevise/pageflow-linkmap-page/pull/43))
34
+ - Integrate with horizontal slideshow navigation
35
+ ([#44](https://github.com/codevise/pageflow-linkmap-page/pull/44))
11
36
 
12
37
  See
13
- [1-4-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/1-4-stable/CHANGELOG.md)
38
+ [1-x-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/1-x-stable/CHANGELOG.md)
14
39
  for previous changes.
data/Gemfile CHANGED
@@ -3,12 +3,5 @@ source 'https://rubygems.org'
3
3
  # Specify your gem's dependencies in chart.gemspec
4
4
  gemspec
5
5
 
6
- gem 'state_machine', git: 'https://github.com/codevise/state_machine.git'
7
-
8
6
  gem 'spring-commands-rspec', group: :development
9
7
  gem 'spring-commands-teaspoon', group: :development
10
-
11
- # Required to make Bundler 1.16.1 find a resolution. Without this line
12
- # `bundle install` without a `Gemfile.lock` would run for a very long
13
- # time makin the Travis build time out.
14
- gem 'railties', '~> 4.2'
data/README.md CHANGED
@@ -19,11 +19,6 @@ Register the page type inside the configure block in `config/initializers/pagefl
19
19
  config.plugin(Pageflow::LinkmapPage.plugin)
20
20
  end
21
21
 
22
- Mount the engine:
23
-
24
- # config/routes.rb
25
- mount Pageflow::LinkmapPage::Engine, at: '/linkmap_page'
26
-
27
22
  Include javascripts and stylesheets:
28
23
 
29
24
  # app/assets/javascripts/pageflow/application.js
@@ -12,6 +12,10 @@ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
12
12
  this.listenTo(this, 'add', this.updateSelectedAttributes);
13
13
  },
14
14
 
15
+ comparator: function(area) {
16
+ return area.get('position');
17
+ },
18
+
15
19
  canAddLink: function() {
16
20
  return true;
17
21
  },
@@ -55,6 +59,7 @@ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
55
59
  },
56
60
 
57
61
  resetSelection: function() {
62
+ this.trigger('resetSelection');
58
63
  this.updateSelectedAttributes(null);
59
64
  },
60
65
 
@@ -62,5 +67,7 @@ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
62
67
  this.each(function(area) {
63
68
  area.set('selected', area === selectedArea);
64
69
  });
65
- }
70
+ },
71
+
72
+ saveOrder: function() {}
66
73
  });
@@ -1,3 +1,19 @@
1
+ pageflow.editor.fileTypes.register('pageflow_linkmap_page_color_map_files', {
2
+ model: pageflow.linkmapPage.ColorMapFile,
3
+
4
+ matchUpload: function(upload) {
5
+ return false;
6
+ }
7
+ });
8
+
9
+ pageflow.editor.fileTypes.register('pageflow_linkmap_page_masked_image_files', {
10
+ model: pageflow.linkmapPage.MaskedImageFile,
11
+
12
+ matchUpload: function(upload) {
13
+ return false;
14
+ }
15
+ });
16
+
1
17
  pageflow.editor.pageTypes.register('linkmap_page', {
2
18
  configurationEditorView: pageflow.linkmapPage.ConfigurationEditorView,
3
19
 
@@ -29,6 +45,10 @@ pageflow.editor.pageTypes.register('linkmap_page', {
29
45
  view: pageflow.linkmapPage.AreasEmbeddedView
30
46
  },
31
47
 
48
+ '.linkmap-mobile_info_box': {
49
+ view: pageflow.linkmapPage.MobileInfoBoxEmbeddedView
50
+ },
51
+
32
52
  '.fixed_background': {
33
53
  view: pageflow.BackgroundImageEmbeddedView,
34
54
  options: {propertyName: 'fixed_background_image_id'}
@@ -37,7 +57,9 @@ pageflow.editor.pageTypes.register('linkmap_page', {
37
57
 
38
58
  pageLinks: function(configuration) {
39
59
  return configuration.linkmapPageLinks();
40
- }
60
+ },
61
+
62
+ supportsPhoneEmulation: true
41
63
  });
42
64
 
43
65
  pageflow.editor.registerPageConfigurationMixin(pageflow.linkmapPage.pageConfigurationMixin);
@@ -13,8 +13,10 @@ pageflow.linkmapPage.SideBarController = Backbone.Marionette.Controller.extend({
13
13
  }));
14
14
  },
15
15
 
16
- selectAreaPosition: function(pageId) {
17
- var returnPath = 'pages/' + pageId + '/areas';
16
+ selectAreaPosition: function(pageId, areaIndex) {
17
+ var returnPath = areaIndex === undefined ?
18
+ 'pages/' + pageId + '/areas' :
19
+ 'linkmap_pages/' + pageId + '/areas/' + areaIndex;
18
20
 
19
21
  if (!pageflow.linkmapPage.currentAreaSelection) {
20
22
  pageflow.editor.navigate(returnPath, {trigger: true});
@@ -31,8 +33,25 @@ pageflow.linkmapPage.SideBarController = Backbone.Marionette.Controller.extend({
31
33
  selection: pageflow.linkmapPage.currentAreaSelection
32
34
  }));
33
35
 
34
- pageflow.linkmapPage.currentAreaSelection.deferred.always(function() {
35
- pageflow.editor.navigate(returnPath, {trigger: true});
36
- });
36
+ var areas = page.configuration.linkmapAreas();
37
+
38
+ if (!areaIndex) {
39
+ areas.once('add', function(area) {
40
+ pageflow.editor.navigate(area.editPath(), {trigger: true});
41
+ }, this);
42
+ }
43
+
44
+ pageflow.linkmapPage.currentAreaSelection.deferred
45
+ .then(
46
+ function() {
47
+ if (areaIndex) {
48
+ pageflow.editor.navigate(returnPath, {trigger: true});
49
+ }
50
+ },
51
+ _.bind(function() {
52
+ areas.off('add', null, this);
53
+ pageflow.editor.navigate(returnPath, {trigger: true});
54
+ }, this)
55
+ );
37
56
  }
38
57
  });
@@ -70,7 +70,10 @@ pageflow.linkmapPage.Area = Backbone.Model.extend({
70
70
 
71
71
  return pageflow.linkmapPage.selectArea(
72
72
  this.collection.page,
73
- {type: 'mask'}
73
+ {
74
+ type: 'colorMapComponent',
75
+ areaIndex: this.collection.indexOf(this)
76
+ }
74
77
  ).then(function(attributes) {
75
78
  model.set(_.extend(attributes, {
76
79
  marker: 'no_marker'
@@ -0,0 +1,16 @@
1
+ pageflow.linkmapPage.ColorMapDelegator = pageflow.Object.extend({
2
+ initialize: function() {
3
+ this._colorMap = pageflow.linkmapPage.ColorMap.empty;
4
+ },
5
+
6
+ updateDelegate: function(colorMap) {
7
+ this._colorMap = colorMap;
8
+ this.trigger('update');
9
+ }
10
+ });
11
+
12
+ _(['components', 'componentFromPoint', 'componentByPermaId', 'previewUrl']).each(function(method) {
13
+ pageflow.linkmapPage.ColorMapDelegator.prototype[method] = function() {
14
+ return this._colorMap[method].apply(this._colorMap, arguments);
15
+ };
16
+ });
@@ -0,0 +1,6 @@
1
+ pageflow.linkmapPage.ColorMapFile = pageflow.linkmapPage.ProcessedFile.extend({
2
+ toJSON: function() {
3
+ return _.pick(this.attributes,
4
+ 'source_image_file_id');
5
+ }
6
+ });
@@ -0,0 +1,7 @@
1
+ pageflow.linkmapPage.MaskedImageFile = pageflow.linkmapPage.ProcessedFile.extend({
2
+ toJSON: function() {
3
+ return _.pick(this.attributes,
4
+ 'source_image_file_id',
5
+ 'color_map_file_id');
6
+ }
7
+ });
@@ -1,15 +1,47 @@
1
1
  (function() {
2
2
  pageflow.linkmapPage.pageConfigurationMixin = {
3
- initialize: function() {
4
- this.listenTo(this, 'change:linkmap_color_map_image_id', function(model, imageFileId) {
5
- if (imageFileId) {
6
- var imageFile = this.getImageFile('linkmap_color_map_image_id');
7
- generateMaskSpriteWhenReady(this, imageFile);
8
- }
9
- else {
10
- resetMaskSprite(this);
11
- }
12
- });
3
+ initialize: function(options) {
4
+ this.listenTo(this,
5
+ 'change:linkmap_color_map_image_id',
6
+ function(model, imageFileId) {
7
+ if (imageFileId) {
8
+ this.setReference('linkmap_color_map_file_id',
9
+ colorMapFiles().findOrCreateBy({
10
+ source_image_file_id: imageFileId
11
+ }));
12
+ }
13
+ else {
14
+ this.unsetReference('linkmap_color_map_file_id');
15
+ }
16
+ });
17
+
18
+ _(['hover_image_id', 'visited_image_id']).each(_.bind(function(attribute) {
19
+ this.listenTo(
20
+ this,
21
+ 'change:' + attribute +
22
+ ' change:linkmap_color_map_file_id' +
23
+ ' change:linkmap_color_map_file_id:ready',
24
+ function() {
25
+ var colorMapFile = colorMapFiles().get(this.get('linkmap_color_map_file_id'));
26
+ var imageFile = pageflow.imageFiles.get(this.get(attribute));
27
+
28
+ if (imageFile && colorMapFile && colorMapFile.isReady()) {
29
+ this.setReference('linkmap_masked_' + attribute,
30
+ maskedImageFiles().findOrCreateBy({
31
+ source_image_file_id: imageFile.id,
32
+ color_map_file_id: colorMapFile.id
33
+ }));
34
+ }
35
+ else {
36
+ this.unsetReference('linkmap_masked_' + attribute);
37
+ }
38
+ });
39
+ }, this));
40
+ },
41
+
42
+ linkmapReadyColorMapFileId: function() {
43
+ var colorMapFile = colorMapFiles().get(this.get('linkmap_color_map_file_id'));
44
+ return colorMapFile && colorMapFile.isReady() ? colorMapFile.id : null;
13
45
  },
14
46
 
15
47
  linkmapPageLinks: function() {
@@ -34,60 +66,22 @@
34
66
  }
35
67
  );
36
68
 
37
- configuration.listenTo(collection, 'add remove change', function() {
69
+ configuration.listenTo(collection, 'add remove change sort', function() {
38
70
  configuration.set('linkmap_areas', collection.map(function(area) {
39
- return _.omit(area.attributes, 'highlighted', 'editing', 'selected');
71
+ return _.omit(area.attributes, 'highlighted', 'editing', 'selected', 'position');
40
72
  }));
41
73
  });
42
74
 
43
75
  return collection;
44
76
  }
45
- },
46
-
47
- getLinkmapAreaMask: function(masks, permaId) {
48
- if (this.get('background_type') !== 'hover_video') {
49
- return masks.findByPermaId(permaId);
50
- }
51
77
  }
52
78
  };
53
79
 
54
- function generateMaskSpriteWhenReady(configuration, imageFile) {
55
- if (imageFile.isReady()) {
56
- generateMaskSprite(configuration, imageFile);
57
- }
58
- else {
59
- imageFile.once('change:state', function() {
60
- generateMaskSpriteWhenReady(configuration, imageFile);
61
- });
62
- }
63
- }
64
-
65
- function generateMaskSprite(configuration, imageFile) {
66
- // panorama_mask_url is available in Pageflow >= 12.1
67
- pageflow.linkmapPage.StoredMaskSprite
68
- .findOrCreateForImageFileId(imageFile.id,
69
- imageFile.get('panorama_mask_url') ||
70
- imageFile.get('panorama_url'))
71
- .then(
72
- function(masks) {
73
- configuration.set('linkmap_masks', masks);
74
- },
75
- function(error) {
76
- configuration.unset('linkmap_masks');
77
- configuration.unset('linkmap_color_map_image_id');
78
-
79
- if (error.i18nKey) {
80
- alert(I18n.t(error.i18nKey));
81
- }
82
- else {
83
- alert(I18n.t('pageflow.linkmap_page.errors.mask_image_failed'));
84
- throw(error);
85
- }
86
- }
87
- );
80
+ function maskedImageFiles() {
81
+ return pageflow.entry.getFileCollection('pageflow_linkmap_page_masked_image_files');
88
82
  }
89
83
 
90
- function resetMaskSprite(configuration) {
91
- configuration.unset('linkmap_masks');
84
+ function colorMapFiles() {
85
+ return pageflow.entry.getFileCollection('pageflow_linkmap_page_color_map_files');
92
86
  }
93
- }());
87
+ }());
@@ -0,0 +1,12 @@
1
+ pageflow.linkmapPage.ProcessedFile = pageflow.UploadedFile.extend({
2
+ stages: [
3
+ {
4
+ name: 'processing',
5
+ activeStates: ['processing'],
6
+ finishedStates: ['processed'],
7
+ failedStates: ['processing_failed']
8
+ }
9
+ ],
10
+
11
+ readyState: 'processed'
12
+ });
@@ -0,0 +1,42 @@
1
+ pageflow.linkmapPage.areaPattern = {
2
+ applyOffset: function(canvas, left, top, width, height) {
3
+ var el = $(canvas)
4
+
5
+ var deltaX = left % 14;
6
+ var deltaY = top % 14;
7
+
8
+ el.css({
9
+ left: -deltaX + 'px',
10
+ top: -deltaY + 'px',
11
+ width: width + deltaX + 'px',
12
+ height: height + deltaY + 'px'
13
+ }).show();
14
+
15
+ canvas.width = el.width();
16
+ canvas.height = el.height();
17
+ },
18
+
19
+ use: function(context) {
20
+ if (!this.patternSource) {
21
+ var rectSize = 7;
22
+
23
+ var canvas = document.createElement('canvas');
24
+ this.patternSource = canvas;
25
+
26
+ canvas.width = rectSize * 2;
27
+ canvas.height = rectSize * 2;
28
+
29
+ var c = canvas.getContext('2d');
30
+
31
+ c.fillStyle = '#000';
32
+ c.fillRect(0, 0, rectSize, rectSize);
33
+ c.fillRect(rectSize, rectSize, rectSize, rectSize);
34
+
35
+ c.fillStyle = '#fff';
36
+ c.fillRect(rectSize, 0, rectSize, rectSize);
37
+ c.fillRect(0, rectSize, rectSize, rectSize);
38
+ }
39
+
40
+ context.fillStyle = context.createPattern(this.patternSource, 'repeat');
41
+ }
42
+ };
@@ -2,6 +2,8 @@ pageflow.linkmapPage.SideBarRouter = Backbone.Marionette.AppRouter.extend({
2
2
  appRoutes: {
3
3
  'linkmap_pages/:pageId/areas/:index': 'area',
4
4
 
5
- 'linkmap_pages/:pageId/select_area_position': 'selectAreaPosition',
5
+ 'linkmap_pages/:pageId/select_area_position?area=:index': 'selectAreaPosition',
6
+
7
+ 'linkmap_pages/:pageId/select_area_position': 'selectAreaPosition'
6
8
  }
7
9
  });
@@ -1,5 +1,5 @@
1
- <canvas class="visited_image" />
2
- <canvas class="hover_image" />
1
+ <div class="background_image visited_image" data-style-group="panorama"></div>
2
+ <div class="background_image hover_image" data-style-group="panorama"></div>
3
3
  <div class="linkmap_marker"></div>
4
4
  <span class="area_type_pictogram"></span>
5
5
  <div class="linkmap_description">
@@ -1,2 +1,4 @@
1
- <canvas class="all" />
2
- <canvas class="current" />
1
+ <div class="background_image" />
2
+ <div class="canvas_wrapper" style="pointer-events: none;">
3
+ <canvas />
4
+ </div>
@@ -1,2 +1,3 @@
1
- <canvas class="all" />
2
- <canvas class="highlighted" />
1
+ <span class="linkmap_area_outlines-canvas_wrapper">
2
+ <canvas />
3
+ </span>
@@ -12,6 +12,7 @@ pageflow.linkmapPage.AreasListView = Backbone.Marionette.View.extend({
12
12
  label: I18n.t('pageflow.linkmap_page.editor.views.areas_list.label'),
13
13
  collection: this.model.linkmapAreas(),
14
14
  highlight: true,
15
+ sortable: true,
15
16
 
16
17
  onEdit: function(model) {
17
18
  pageflow.editor.navigate(model.editPath(), {trigger: true});
@@ -43,6 +43,14 @@ pageflow.linkmapPage.ConfigurationEditorView = pageflow.ConfigurationEditorView.
43
43
  }
44
44
  });
45
45
 
46
+ this.input('linkmap_masked_hover_image_id', pageflow.FileProcessingStateDisplayView, {
47
+ collection: 'pageflow_linkmap_page_masked_image_files',
48
+ visibleBinding: 'background_type',
49
+ visible: function(backgroundType) {
50
+ return _(['image', 'video']).contains(backgroundType);
51
+ }
52
+ });
53
+
46
54
  this.input('panorama_video_id', pageflow.FileInputView, {
47
55
  attributeTranslationKeyPrefixes: ['pageflow.linkmap_page.page_attributes.hover_video_type'],
48
56
  collection: pageflow.videoFiles,
@@ -68,11 +76,23 @@ pageflow.linkmapPage.ConfigurationEditorView = pageflow.ConfigurationEditorView.
68
76
  }
69
77
  });
70
78
 
79
+ this.input('linkmap_color_map_file_id', pageflow.FileProcessingStateDisplayView, {
80
+ collection: 'pageflow_linkmap_page_color_map_files',
81
+ visibleBinding: 'background_type',
82
+ visible: function(backgroundType) {
83
+ return _(['image', 'video']).contains(backgroundType);
84
+ }
85
+ });
86
+
71
87
  this.input('visited_image_id', pageflow.FileInputView, {
72
88
  collection: pageflow.imageFiles,
73
89
  positioning: false
74
90
  });
75
91
 
92
+ this.input('linkmap_masked_visited_image_id', pageflow.FileProcessingStateDisplayView, {
93
+ collection: 'pageflow_linkmap_page_masked_image_files'
94
+ });
95
+
76
96
  this.input('thumbnail_image_id', pageflow.FileInputView, {
77
97
  collection: pageflow.imageFiles,
78
98
  positioning: false
@@ -87,6 +107,32 @@ pageflow.linkmapPage.ConfigurationEditorView = pageflow.ConfigurationEditorView.
87
107
  this.view(pageflow.linkmapPage.AreasListView, {
88
108
  model: this.model
89
109
  });
110
+
111
+ this.input('mobile_panorama_navigation', pageflow.SelectInputView, {
112
+ values: ['free', 'pan_zoom']
113
+ });
114
+
115
+ this.input('mobile_info_box_title', pageflow.TextInputView, {
116
+ visibleBinding: 'mobile_panorama_navigation',
117
+ visible: function(navigation) {
118
+ return navigation === 'pan_zoom';
119
+ }
120
+ });
121
+ this.input('mobile_info_box_description', pageflow.TextAreaInputView, {
122
+ size: 'short',
123
+ disableLinks: true,
124
+ visibleBinding: 'mobile_panorama_navigation',
125
+ visible: function(navigation) {
126
+ return navigation === 'pan_zoom';
127
+ }
128
+ });
129
+
130
+ this.input('hide_linkmap_overlay_boxes', pageflow.CheckBoxInputView, {
131
+ visibleBinding: 'mobile_panorama_navigation',
132
+ visible: function(navigation) {
133
+ return navigation === 'pan_zoom';
134
+ }
135
+ });
90
136
  });
91
137
 
92
138
  this.tab('options', function() {
@@ -47,11 +47,8 @@ pageflow.linkmapPage.EditAreaView = Backbone.Marionette.Layout.extend({
47
47
  visibleBindingValue: 'page'
48
48
  });
49
49
 
50
- this.input('page_transition', pageflow.SelectInputView, {
51
- translationKeyPrefix: 'pageflow.page_transitions',
50
+ this.group('page_transitions', {
52
51
  includeBlank: true,
53
- blankTranslationKey: 'pageflow.linkmap_page.default_page_transition',
54
- values: pageflow.pageTransitions.names(),
55
52
  visibleBinding: 'target_type',
56
53
  visibleBindingValue: 'page'
57
54
  });
@@ -85,7 +82,7 @@ pageflow.linkmapPage.EditAreaView = Backbone.Marionette.Layout.extend({
85
82
  visible: function(value) {
86
83
  return value !== 'dynamic_marker';
87
84
  },
88
- disabled: !page.configuration.has('linkmap_masks') ||
85
+ disabled: !page.configuration.has('linkmap_color_map_file_id') ||
89
86
  page.configuration.get('background_type') === 'hover_video'
90
87
  });
91
88
  this.input('inverted', pageflow.CheckBoxInputView, {
@@ -107,4 +104,4 @@ pageflow.linkmapPage.EditAreaView = Backbone.Marionette.Layout.extend({
107
104
  goBack: function() {
108
105
  pageflow.editor.navigate('/pages/' + this.options.page.id + '/areas', {trigger: true});
109
106
  }
110
- });
107
+ });