pageflow-linkmap-page 0.2.0 → 1.0.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.
Files changed (73) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +32 -44
  3. data/README.md +14 -4
  4. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +21 -12
  5. data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +23 -0
  6. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +36 -0
  7. data/app/assets/javascript/pageflow/linkmap_page/editor/models/masks_delegator.js +16 -0
  8. data/app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js +1 -0
  9. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +84 -27
  10. data/app/assets/javascript/pageflow/linkmap_page/editor/models/stored_mask_sprite.js +25 -0
  11. data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +3 -1
  12. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +14 -5
  13. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_masks_preview.jst.ejs +2 -0
  14. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_outlines.jst.ejs +2 -0
  15. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/select_area_position_hint.jst.ejs +4 -0
  16. data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +6 -0
  17. data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +9 -4
  18. data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +15 -11
  19. data/app/assets/javascript/pageflow/linkmap_page/editor/views/editable_areas_mode_view.js +6 -1
  20. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +78 -56
  21. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_masks_preview_embedded_view.js +219 -0
  22. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_outlines_embedded_view.js +126 -0
  23. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +34 -3
  24. data/app/assets/javascript/pageflow/linkmap_page/editor/views/inputs/area_mask_input_view.js +35 -0
  25. data/app/assets/javascript/pageflow/linkmap_page/editor/views/select_area_position_hint_view.js +39 -0
  26. data/app/assets/javascript/pageflow/linkmap_page/editor.js +12 -1
  27. data/app/assets/javascript/pageflow/linkmap_page/page_type.js +35 -35
  28. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_contains.js +18 -0
  29. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_redraw.js +29 -0
  30. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js +122 -0
  31. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/image_data.js +59 -0
  32. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask.js +37 -0
  33. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask_sprite.js +68 -0
  34. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/masks.js +99 -0
  35. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js +38 -0
  36. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +137 -9
  37. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js +1 -1
  38. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +24 -18
  39. data/app/assets/javascript/pageflow/linkmap_page.js +1 -1
  40. data/app/assets/stylesheets/pageflow/linkmap_page/animations/{rotate.css.scss → rotate.scss} +0 -0
  41. data/app/assets/stylesheets/pageflow/linkmap_page/editor/action_buttons.scss +66 -0
  42. data/app/assets/stylesheets/pageflow/linkmap_page/editor/area_outlines.scss +13 -0
  43. data/app/assets/stylesheets/pageflow/linkmap_page/editor/{file_areas.css.scss → file_areas.scss} +0 -0
  44. data/app/assets/stylesheets/pageflow/linkmap_page/editor/inputs/area_mask.scss +3 -0
  45. data/app/assets/stylesheets/pageflow/linkmap_page/editor/masks_preview.scss +15 -0
  46. data/app/assets/stylesheets/pageflow/linkmap_page/editor/{resizable.css.scss → resizable.scss} +0 -0
  47. data/app/assets/stylesheets/pageflow/linkmap_page/editor/select_area_position_hint.scss +9 -0
  48. data/app/assets/stylesheets/pageflow/linkmap_page/{editor.css.scss → editor.scss} +28 -41
  49. data/app/assets/stylesheets/pageflow/linkmap_page/themes/{default.css.scss → default.scss} +2 -3
  50. data/app/assets/stylesheets/pageflow/{linkmap_page.css.scss → linkmap_page.scss} +15 -18
  51. data/app/controllers/pageflow/linkmap_page/mask_sprites_controller.rb +26 -0
  52. data/app/helpers/pageflow/linkmap_page/areas_helper.rb +19 -4
  53. data/app/models/pageflow/linkmap_page/mask_sprite.rb +15 -0
  54. data/app/views/pageflow/linkmap_page/areas/_div.html.erb +4 -7
  55. data/config/locales/de.yml +184 -6
  56. data/config/locales/en.yml +149 -7
  57. data/config/routes.rb +2 -2
  58. data/db/migrate/20170330201200_create_mask_sprites.rb +12 -0
  59. data/lib/generators/pageflow_linkmap_page/install/install_generator.rb +1 -0
  60. data/lib/pageflow/linkmap_page/version.rb +1 -1
  61. data/pageflow-linkmap-page.gemspec +10 -11
  62. data/spec/controllers/pageflow/linkmap_page/mask_sprites_controller_spec.rb +108 -0
  63. data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +23 -2
  64. metadata +75 -59
  65. data/config/locales/new/inverted.de.yml +0 -10
  66. data/config/locales/new/inverted.en.yml +0 -10
  67. data/config/locales/new/scaled_on_phone_hint.de.yml +0 -11
  68. data/config/locales/new/scaled_on_phone_hint.en.yml +0 -11
  69. data/config/locales/new/scroll_indicators_v.de.yml +0 -6
  70. data/config/locales/new/scroll_indicators_v.en.yml +0 -6
  71. data/config/locales/new/text_only_area_type.de.yml +0 -11
  72. data/config/locales/new/text_only_area_type.en.yml +0 -11
  73. data/config/locales/new/typo.en.yml +0 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4be69c22ece16a9e318bb3566dc670fd6a1ca230
4
- data.tar.gz: a7a90492548b93bbdc273717175616593c2dace0
3
+ metadata.gz: 2ace1b5edf88295b6d1e8d602bdf11cfd4f28800
4
+ data.tar.gz: f264b4eac26073ef030b801d3cf17e34299030ee
5
5
  SHA512:
6
- metadata.gz: 2452e5b8dd93e30d517de81f8172decd7a716e787d45401e17cc037a62e1a5c5fb5351cb2c9c5c37fda452c3b98995fbfc4374e5e85f5cdc651b8bdcaab8dbfa
7
- data.tar.gz: 3c2cbf1be66d085a038b1c2c666c6b93a5d27230efa64dcf2e3ef2dc183947fba95a673e424f8c6a9baea2b38f13488c3f4997dd4bcd85ebe4d861c4fe20a96a
6
+ metadata.gz: f0b5f204c209625f2621577553bfaf9626ef70d74b93eaabdf8745948a76a5c37c5cec3b18c333a0c6f6bc2743e2c8ad0bcb33d3ed82de46073b36db18a472fe
7
+ data.tar.gz: e37fc9d1c98a09d9e562beb7324985482c508c985cd736b60553ef68e7ebae30498e8312a9955ca2a26805cdf1669a2bb8b14f506bdf556100fd27e4bfd3a861
data/CHANGELOG.md CHANGED
@@ -1,46 +1,34 @@
1
1
  # CHANGELOG
2
2
 
3
- ### Version 0.2.0
4
-
5
- 2017-04-21
6
-
7
- [Compare changes](http://github.com/codevise/pageflow-linkmap-page/compare/v0.1.0...v0.2.0)
8
-
9
- - Add vertical scroll indicators
10
- ([#7](https://github.com/codevise/pageflow-linkmap-page/pull/7))
11
- - Prevent scrolling via mousemove on mobile platform
12
- ([#21](https://github.com/codevise/pageflow-linkmap-page/pull/21))
13
- - Improve panorama scaling
14
- ([#20](https://github.com/codevise/pageflow-linkmap-page/pull/20))
15
- - Ensure viewport is covered when scroll area restricted
16
- ([#19](https://github.com/codevise/pageflow-linkmap-page/pull/19))
17
- - Disable links in overlay boxes
18
- ([#18](https://github.com/codevise/pageflow-linkmap-page/pull/18))
19
- - Prevent overlays to be displayed behind editor bar
20
- ([#8](https://github.com/codevise/pageflow-linkmap-page/pull/8))
21
- - Use info box title as title for text only areas
22
- ([#16](https://github.com/codevise/pageflow-linkmap-page/pull/16))
23
- - Fix translation typo
24
- ([#13](https://github.com/codevise/pageflow-linkmap-page/pull/13))
25
-
26
- Internals:
27
-
28
- - Fix test suite and run on travis
29
- ([#15](https://github.com/codevise/pageflow-linkmap-page/pull/15))
30
- - Add .erb extension
31
- ([#11](https://github.com/codevise/pageflow-linkmap-page/pull/11))
32
- - Remove unused files
33
- ([#17](https://github.com/codevise/pageflow-linkmap-page/pull/17))
34
-
35
- Documentation:
36
-
37
- - Add instructions to migrate external links migrations
38
- ([#3](https://github.com/codevise/pageflow-linkmap-page/pull/3))
39
- - Explicitly note to enable the feature
40
- ([#12](https://github.com/codevise/pageflow-linkmap-page/pull/12))
41
-
42
- ### Version 0.1.0
43
-
44
- 2016-06-09
45
-
46
- - Initial release
3
+ ### Version 1.0.0
4
+
5
+ 2017-08-11
6
+
7
+ [Compare changes](https://github.com/codevise/pageflow-linkmap-page/compare/0-2-stable...v1.0.0)
8
+
9
+ ##### Manual Update Step
10
+
11
+ The plugin now provides additional routes and migrations. Mount the engine:
12
+
13
+ # config/routes.rb
14
+ mount Pageflow::LinkmapPage::Engine, at: '/linkmap_page'
15
+
16
+ Install and run migrations:
17
+
18
+ $ rake pageflow_linkmap_page:install:migrations
19
+ $ rake db:migrate
20
+
21
+ ##### Features
22
+
23
+ - Support mask image for non rectangular areas
24
+ ([#22](https://github.com/codevise/pageflow-linkmap-page/pull/22))
25
+ - Add support for pageflow-external-links 1.x
26
+ ([#26](https://github.com/codevise/pageflow-linkmap-page/pull/26))
27
+ - Rename the last `css.scss` files
28
+ ([#25](https://github.com/codevise/pageflow-linkmap-page/pull/25))
29
+ - Require pageflow 12
30
+ ([#24](https://github.com/codevise/pageflow-linkmap-page/pull/24))
31
+
32
+ See
33
+ [0-2-stable branch](https://github.com/codevise/pageflow-linkmap-page/blob/0-2-stable/CHANGELOG.md)
34
+ for previous changes.
data/README.md CHANGED
@@ -19,6 +19,11 @@ 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
+
22
27
  Include javascripts and stylesheets:
23
28
 
24
29
  # app/assets/javascripts/pageflow/application.js
@@ -27,15 +32,15 @@ Include javascripts and stylesheets:
27
32
  # app/assets/javascripts/pageflow/editor.js
28
33
  //= require pageflow/linkmap_page/editor
29
34
 
30
- # app/assets/stylesheets/pageflow/application.css.scss
35
+ # app/assets/stylesheets/pageflow/application.scss
31
36
  @import "pageflow/linkmap_page";
32
37
 
33
- # app/assets/stylesheets/pageflow/editor.css.scss
38
+ # app/assets/stylesheets/pageflow/editor.scss
34
39
  @import "pageflow/linkmap_page/editor";
35
40
 
36
41
  Import default theme additions:
37
42
 
38
- # app/assets/stylesheets/pageflow/themes/default.css.scss
43
+ # app/assets/stylesheets/pageflow/themes/default.scss
39
44
 
40
45
  @import "pageflow/linkmap_page/themes/default";
41
46
 
@@ -46,6 +51,11 @@ Install dependencies:
46
51
 
47
52
  bundle install
48
53
 
54
+ Install and run migrations:
55
+
56
+ $ rake pageflow_linkmap_page:install:migrations
57
+ $ rake db:migrate
58
+
49
59
  Then follow the installation instructions for the [pageflow-external-links](https://github.com/codevise/pageflow-external-links) gem.
50
60
 
51
61
  Restart the application server and enable the corresponding page type
@@ -62,5 +72,5 @@ doesn't help, consider
62
72
  ## Contributing Locales
63
73
 
64
74
  Edit the translations directly on the
65
- [pageflow-internal-links](http://www.localeapp.com/projects/public?search=tf/pageflow-linkmap-page)
75
+ [pageflow-linkmap-page](http://www.localeapp.com/projects/public?search=tf/pageflow-linkmap-page)
66
76
  locale project.
@@ -7,13 +7,9 @@ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
7
7
  left: 10,
8
8
  top: 10
9
9
  };
10
- },
11
10
 
12
- /**
13
- * @param [Object, Function] value
14
- */
15
- setDefaultPosition: function(value) {
16
- this.defaultPosition = value;
11
+ this.listenTo(this, 'select', this.updateSelectedAttributes);
12
+ this.listenTo(this, 'add', this.updateSelectedAttributes);
17
13
  },
18
14
 
19
15
  canAddLink: function() {
@@ -48,10 +44,23 @@ pageflow.linkmapPage.AreasCollection = Backbone.Collection.extend({
48
44
  },
49
45
 
50
46
  addWithPosition: function(attributes) {
51
- this.add(_.extend(
52
- {width: 7, height: 7},
53
- _.result(this, 'defaultPosition'),
54
- attributes
55
- ));
47
+ var collection = this;
48
+
49
+ pageflow.linkmapPage.selectArea(this.page).then(function(positionAttributes) {
50
+ collection.add(_.extend(
51
+ positionAttributes,
52
+ attributes
53
+ ));
54
+ });
55
+ },
56
+
57
+ resetSelection: function() {
58
+ this.updateSelectedAttributes(null);
59
+ },
60
+
61
+ updateSelectedAttributes: function(selectedArea) {
62
+ this.each(function(area) {
63
+ area.set('selected', area === selectedArea);
64
+ });
56
65
  }
57
- });
66
+ });
@@ -11,5 +11,28 @@ pageflow.linkmapPage.SideBarController = Backbone.Marionette.Controller.extend({
11
11
  page: page,
12
12
  areaIndex: areaIndex
13
13
  }));
14
+ },
15
+
16
+ selectAreaPosition: function(pageId) {
17
+ var returnPath = 'pages/' + pageId + '/areas';
18
+
19
+ if (!pageflow.linkmapPage.currentAreaSelection) {
20
+ pageflow.editor.navigate(returnPath, {trigger: true});
21
+ return;
22
+ }
23
+
24
+ var page = pageflow.pages.get(pageId);
25
+ page.configuration.trigger('linkmap:select_area_position', {
26
+ selection: pageflow.linkmapPage.currentAreaSelection
27
+ });
28
+
29
+ this.region.show(new pageflow.linkmapPage.SelectAreaPostionHintView({
30
+ model: page,
31
+ selection: pageflow.linkmapPage.currentAreaSelection
32
+ }));
33
+
34
+ pageflow.linkmapPage.currentAreaSelection.deferred.always(function() {
35
+ pageflow.editor.navigate(returnPath, {trigger: true});
36
+ });
14
37
  }
15
38
  });
@@ -61,6 +61,42 @@ pageflow.linkmapPage.Area = Backbone.Model.extend({
61
61
  return this.get('name');
62
62
  },
63
63
 
64
+ select: function() {
65
+ this.trigger('select', this);
66
+ },
67
+
68
+ selectMask: function() {
69
+ var model = this;
70
+
71
+ return pageflow.linkmapPage.selectArea(
72
+ this.collection.page,
73
+ {type: 'mask'}
74
+ ).then(function(attributes) {
75
+ model.set(_.extend(attributes, {
76
+ marker: 'no_marker'
77
+ }));
78
+ model.trigger('change:dimensions');
79
+ });
80
+ },
81
+
82
+ unsetMask: function() {
83
+ this.set({
84
+ marker: 'no_marker',
85
+ mask_perma_id: undefined
86
+ });
87
+ this.trigger('change:dimensions');
88
+ },
89
+
90
+ setDimensions: function(left, top, width, height) {
91
+ this.set({
92
+ left: left,
93
+ top: top,
94
+ width: width,
95
+ height: height
96
+ });
97
+ this.trigger('change:dimensions');
98
+ },
99
+
64
100
  highlight: function() {
65
101
  this.set('highlighted', true);
66
102
  },
@@ -0,0 +1,16 @@
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
+ });
@@ -3,6 +3,7 @@ pageflow.linkmapPage.NewAreaFileSelectionHandler = function(options) {
3
3
 
4
4
  this.call = function(file) {
5
5
  page.configuration.linkmapAreas().addAudioFile(file.id);
6
+ return false;
6
7
  };
7
8
 
8
9
  this.getReferer = function() {
@@ -1,33 +1,90 @@
1
- pageflow.linkmapPage.pageConfigurationMixin = {
2
- linkmapPageLinks: function() {
3
- this._linkmapPageLinks = this._linkmapPageLinks || new pageflow.linkmapPage.PageLinksCollection({
4
- areas: this.linkmapAreas()
5
- });
6
-
7
- return this._linkmapPageLinks;
8
- },
9
-
10
- linkmapAreas: function() {
11
- var configuration = this;
12
-
13
- this._linkmapAreas = this._linkmapAreas || create();
14
- return this._linkmapAreas;
15
-
16
- function create() {
17
- var collection = new pageflow.linkmapPage.AreasCollection(
18
- configuration.get('linkmap_areas'),
19
- {
20
- page: configuration.page
1
+ (function() {
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);
21
8
  }
22
- );
9
+ else {
10
+ resetMaskSprite(this);
11
+ }
12
+ });
13
+ },
23
14
 
24
- configuration.listenTo(collection, 'add remove change', function() {
25
- configuration.set('linkmap_areas', collection.map(function(area) {
26
- return _.omit(area.attributes, 'highlighted');
27
- }));
15
+ linkmapPageLinks: function() {
16
+ this._linkmapPageLinks = this._linkmapPageLinks || new pageflow.linkmapPage.PageLinksCollection({
17
+ areas: this.linkmapAreas()
28
18
  });
29
19
 
30
- return collection;
20
+ return this._linkmapPageLinks;
21
+ },
22
+
23
+ linkmapAreas: function() {
24
+ var configuration = this;
25
+
26
+ this._linkmapAreas = this._linkmapAreas || create();
27
+ return this._linkmapAreas;
28
+
29
+ function create() {
30
+ var collection = new pageflow.linkmapPage.AreasCollection(
31
+ configuration.get('linkmap_areas'),
32
+ {
33
+ page: configuration.page
34
+ }
35
+ );
36
+
37
+ configuration.listenTo(collection, 'add remove change', function() {
38
+ configuration.set('linkmap_areas', collection.map(function(area) {
39
+ return _.omit(area.attributes, 'highlighted', 'editing', 'selected');
40
+ }));
41
+ });
42
+
43
+ return collection;
44
+ }
45
+ },
46
+
47
+ getLinkmapAreaMask: function(masks, permaId) {
48
+ if (this.get('background_type') !== 'hover_video') {
49
+ return masks.findByPermaId(permaId);
50
+ }
51
+ }
52
+ };
53
+
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
+ });
31
62
  }
32
63
  }
33
- };
64
+
65
+ function generateMaskSprite(configuration, imageFile) {
66
+ pageflow.linkmapPage.StoredMaskSprite
67
+ .findOrCreateForImageFileId(imageFile.id,
68
+ imageFile.get('panorama_url'))
69
+ .then(
70
+ function(masks) {
71
+ configuration.set('linkmap_masks', masks);
72
+ },
73
+ function(error) {
74
+ configuration.unset('linkmap_masks');
75
+ configuration.unset('linkmap_color_map_image_id');
76
+
77
+ if (error.i18nKey) {
78
+ alert(I18n.t(error.i18nKey));
79
+ }
80
+ else {
81
+ throw(error);
82
+ }
83
+ }
84
+ );
85
+ }
86
+
87
+ function resetMaskSprite(configuration) {
88
+ configuration.unset('linkmap_masks');
89
+ }
90
+ }());
@@ -0,0 +1,25 @@
1
+ pageflow.linkmapPage.StoredMaskSprite = Backbone.Model.extend({
2
+ modelName: 'mask_sprite',
3
+ paramRoot: 'mask_sprite',
4
+
5
+ url: function() {
6
+ return '/linkmap_page/image_files/' + this.get('image_file_id') + '/mask_sprite';
7
+ }
8
+ });
9
+
10
+ pageflow.linkmapPage.StoredMaskSprite.findOrCreateForImageFileId = function(imageFileId, imageFileUrl) {
11
+ return new $.Deferred(function(deferred) {
12
+ pageflow.linkmapPage.Masks.loadColorMapImage(imageFileUrl).then(function(masks) {
13
+ var storedMaskSprite = new pageflow.linkmapPage.StoredMaskSprite({
14
+ image_file_id: imageFileId,
15
+ attachment: masks.getSpriteDataUrl()
16
+ });
17
+
18
+ storedMaskSprite.save(null, {
19
+ success: function() {
20
+ deferred.resolve(masks.serialize(storedMaskSprite.id));
21
+ }
22
+ });
23
+ }, deferred.reject);
24
+ }).promise();
25
+ };
@@ -1,5 +1,7 @@
1
1
  pageflow.linkmapPage.SideBarRouter = Backbone.Marionette.AppRouter.extend({
2
2
  appRoutes: {
3
- 'linkmap_pages/:pageId/areas/:index': 'area'
3
+ 'linkmap_pages/:pageId/areas/:index': 'area',
4
+
5
+ 'linkmap_pages/:pageId/select_area_position': 'selectAreaPosition',
4
6
  }
5
7
  });
@@ -1,11 +1,20 @@
1
- <div class="background_image visited_image" data-style-group="panorama"></div>
2
- <div class="background_image hover_image" data-style-group="panorama"></div>
1
+ <canvas class="visited_image" />
2
+ <canvas class="hover_image" />
3
3
  <div class="linkmap_marker"></div>
4
4
  <span class="area_type_pictogram"></span>
5
5
  <div class="linkmap_description">
6
6
  <div class="link_title"></div>
7
7
  <div class="link_description"></div>
8
8
  </div>
9
- <a class="toggle_marker" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.toggle_marker') %>">
10
- <a class="edit" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.edit') %>">
11
- </a>
9
+
10
+ <div class="click_trap"></div>
11
+ <div class="action_buttons">
12
+ <a class="action_button show_marker toggle_marker" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.show_marker') %>">
13
+ </a>
14
+ <a class="action_button hide_marker toggle_marker" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.hide_marker') %>">
15
+ </a>
16
+ <a class="action_button set_mask" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.set_mask') %>">
17
+ </a>
18
+ <a class="action_button unset_mask" href="" title="<%= I18n.t('pageflow.linkmap_page.editor.templates.embedded.area_item.unset_mask') %>">
19
+ </a>
20
+ </div>
@@ -0,0 +1,2 @@
1
+ <canvas class="all" />
2
+ <canvas class="current" />
@@ -0,0 +1,2 @@
1
+ <canvas class="all" />
2
+ <canvas class="highlighted" />
@@ -0,0 +1,4 @@
1
+ <p></p>
2
+ <button class="cancel">
3
+ <%= I18n.t('pageflow.linkmap_page.editor.templates.select_area_position_hint.cancel') %>
4
+ </button>
@@ -2,6 +2,12 @@ pageflow.linkmapPage.AreasListView = Backbone.Marionette.View.extend({
2
2
  className: 'linkmap_page_areas_list',
3
3
 
4
4
  render: function() {
5
+ this.model.linkmapAreas().resetSelection();
6
+
7
+ this.subview(new pageflow.linkmapPage.EditableAreasModeView({
8
+ model: this.model.page
9
+ }));
10
+
5
11
  this.appendSubview(new pageflow.ListView({
6
12
  label: I18n.t('pageflow.linkmap_page.editor.views.areas_list.label'),
7
13
  collection: this.model.linkmapAreas(),
@@ -59,6 +59,15 @@ pageflow.linkmapPage.ConfigurationEditorView = pageflow.ConfigurationEditorView.
59
59
  visibleBindingValue: 'hover_video'
60
60
  });
61
61
 
62
+ this.input('linkmap_color_map_image_id', pageflow.FileInputView, {
63
+ collection: pageflow.imageFiles,
64
+ positioning: false,
65
+ visibleBinding: 'background_type',
66
+ visible: function(backgroundType) {
67
+ return _(['image', 'video']).contains(backgroundType);
68
+ }
69
+ });
70
+
62
71
  this.input('visited_image_id', pageflow.FileInputView, {
63
72
  collection: pageflow.imageFiles,
64
73
  positioning: false
@@ -78,10 +87,6 @@ pageflow.linkmapPage.ConfigurationEditorView = pageflow.ConfigurationEditorView.
78
87
  this.view(pageflow.linkmapPage.AreasListView, {
79
88
  model: this.model
80
89
  });
81
-
82
- this.view(pageflow.linkmapPage.EditableAreasModeView, {
83
- model: this.model.page
84
- });
85
90
  });
86
91
 
87
92
  this.tab('options', function() {
@@ -16,27 +16,23 @@ pageflow.linkmapPage.EditAreaView = Backbone.Marionette.Layout.extend({
16
16
  },
17
17
 
18
18
  onRender: function() {
19
- var view = this;
20
- var area = this.model;
21
- var areaCollection = this.model.collection;
22
19
  var configurationEditor = new pageflow.ConfigurationEditorView({
23
20
  model: this.model
24
21
  });
25
22
 
26
23
  this.configure(configurationEditor);
27
-
28
24
  this.formContainer.show(configurationEditor);
29
- this.model.set('highlighted', true);
30
- this.model.collection.page.set('areas_editable', true);
31
25
 
32
- this.on('close', function() {
33
- area.unset('highlighted');
34
- areaCollection.page.unset('areas_editable');
35
- });
26
+ this.subview(new pageflow.linkmapPage.EditableAreasModeView({
27
+ model: this.model.collection.page
28
+ }));
29
+
30
+ this.model.select();
36
31
  },
37
32
 
38
33
  configure: function(configurationEditor) {
39
34
  var view = this;
35
+ var page = this.options.page;
40
36
 
41
37
  configurationEditor.tab('general', function() {
42
38
  this.input('name', pageflow.TextInputView);
@@ -83,7 +79,15 @@ pageflow.linkmapPage.EditAreaView = Backbone.Marionette.Layout.extend({
83
79
  });
84
80
 
85
81
  configurationEditor.tab('appearance', function() {
86
- this.input('marker', pageflow.SelectInputView, {values: pageflow.linkmapPage.toggleMarkerOptions});
82
+ this.input('marker', pageflow.SelectInputView, {values: pageflow.linkmapPage.markerOptions});
83
+ this.input('mask_perma_id', pageflow.linkmapPage.AreaMaskInputView, {
84
+ visibleBinding: 'marker',
85
+ visible: function(value) {
86
+ return value !== 'dynamic_marker';
87
+ },
88
+ disabled: !page.configuration.has('linkmap_masks') ||
89
+ page.configuration.get('background_type') === 'hover_video'
90
+ });
87
91
  this.input('inverted', pageflow.CheckBoxInputView, {
88
92
  visibleBinding: 'target_type',
89
93
  visible: function(value) {
@@ -1,10 +1,15 @@
1
1
  pageflow.linkmapPage.EditableAreasModeView = Backbone.Marionette.View.extend({
2
2
  render: function() {
3
- this.model.set('areas_editable', true);
3
+ this.model.set({
4
+ areas_editable: true,
5
+ areas_outlined: true
6
+ });
7
+
4
8
  return this;
5
9
  },
6
10
 
7
11
  onClose: function() {
8
12
  this.model.unset('areas_editable');
13
+ this.model.unset('areas_outlined');
9
14
  }
10
15
  });