pageflow-linkmap-page 0.2.0 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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
  });