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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +32 -44
- data/README.md +14 -4
- data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +21 -12
- data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +23 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +36 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/masks_delegator.js +16 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js +1 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +84 -27
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/stored_mask_sprite.js +25 -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 +14 -5
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_masks_preview.jst.ejs +2 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_outlines.jst.ejs +2 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/select_area_position_hint.jst.ejs +4 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +6 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +9 -4
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +15 -11
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/editable_areas_mode_view.js +6 -1
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +78 -56
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_masks_preview_embedded_view.js +219 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_outlines_embedded_view.js +126 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +34 -3
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/inputs/area_mask_input_view.js +35 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/select_area_position_hint_view.js +39 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor.js +12 -1
- data/app/assets/javascript/pageflow/linkmap_page/page_type.js +35 -35
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_contains.js +18 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/area_redraw.js +29 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/color_map.js +122 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/image_data.js +59 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask.js +37 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/mask_sprite.js +68 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/masks.js +99 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap/remote_image.js +38 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +137 -9
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js +1 -1
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +24 -18
- data/app/assets/javascript/pageflow/linkmap_page.js +1 -1
- data/app/assets/stylesheets/pageflow/linkmap_page/animations/{rotate.css.scss → rotate.scss} +0 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/action_buttons.scss +66 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/area_outlines.scss +13 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/{file_areas.css.scss → file_areas.scss} +0 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/inputs/area_mask.scss +3 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/masks_preview.scss +15 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/{resizable.css.scss → resizable.scss} +0 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/select_area_position_hint.scss +9 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/{editor.css.scss → editor.scss} +28 -41
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/{default.css.scss → default.scss} +2 -3
- data/app/assets/stylesheets/pageflow/{linkmap_page.css.scss → linkmap_page.scss} +15 -18
- data/app/controllers/pageflow/linkmap_page/mask_sprites_controller.rb +26 -0
- data/app/helpers/pageflow/linkmap_page/areas_helper.rb +19 -4
- data/app/models/pageflow/linkmap_page/mask_sprite.rb +15 -0
- data/app/views/pageflow/linkmap_page/areas/_div.html.erb +4 -7
- data/config/locales/de.yml +184 -6
- data/config/locales/en.yml +149 -7
- data/config/routes.rb +2 -2
- data/db/migrate/20170330201200_create_mask_sprites.rb +12 -0
- data/lib/generators/pageflow_linkmap_page/install/install_generator.rb +1 -0
- data/lib/pageflow/linkmap_page/version.rb +1 -1
- data/pageflow-linkmap-page.gemspec +10 -11
- data/spec/controllers/pageflow/linkmap_page/mask_sprites_controller_spec.rb +108 -0
- data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +23 -2
- metadata +75 -59
- data/config/locales/new/inverted.de.yml +0 -10
- data/config/locales/new/inverted.en.yml +0 -10
- data/config/locales/new/scaled_on_phone_hint.de.yml +0 -11
- data/config/locales/new/scaled_on_phone_hint.en.yml +0 -11
- data/config/locales/new/scroll_indicators_v.de.yml +0 -6
- data/config/locales/new/scroll_indicators_v.en.yml +0 -6
- data/config/locales/new/text_only_area_type.de.yml +0 -11
- data/config/locales/new/text_only_area_type.en.yml +0 -11
- data/config/locales/new/typo.en.yml +0 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2ace1b5edf88295b6d1e8d602bdf11cfd4f28800
|
4
|
+
data.tar.gz: f264b4eac26073ef030b801d3cf17e34299030ee
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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.
|
4
|
-
|
5
|
-
2017-
|
6
|
-
|
7
|
-
[Compare changes](
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
-
|
24
|
-
([#
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
-
|
29
|
-
|
30
|
-
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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.
|
35
|
+
# app/assets/stylesheets/pageflow/application.scss
|
31
36
|
@import "pageflow/linkmap_page";
|
32
37
|
|
33
|
-
# app/assets/stylesheets/pageflow/editor.
|
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.
|
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-
|
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
|
-
|
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
|
52
|
-
|
53
|
-
|
54
|
-
|
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
|
+
});
|
@@ -1,33 +1,90 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
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
|
-
|
25
|
-
|
26
|
-
|
27
|
-
}));
|
15
|
+
linkmapPageLinks: function() {
|
16
|
+
this._linkmapPageLinks = this._linkmapPageLinks || new pageflow.linkmapPage.PageLinksCollection({
|
17
|
+
areas: this.linkmapAreas()
|
28
18
|
});
|
29
19
|
|
30
|
-
return
|
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
|
});
|
data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs
CHANGED
@@ -1,11 +1,20 @@
|
|
1
|
-
<
|
2
|
-
<
|
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
|
-
|
10
|
-
<
|
11
|
-
|
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>
|
@@ -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.
|
33
|
-
|
34
|
-
|
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.
|
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(
|
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
|
});
|