pageflow-linkmap-page 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +21 -0
- data/.jshintignore +1 -0
- data/.jshintrc +23 -0
- data/CHANGELOG.md +8 -0
- data/Gemfile +18 -0
- data/README.md +62 -0
- data/Rakefile +11 -0
- data/app/assets/images/pageflow/linkmap_page/text_only_area_type_pictogram.png +0 -0
- data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/sprite.png +0 -0
- data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/wide.png +0 -0
- data/app/assets/images/pageflow/linkmap_page_pictogram.png +0 -0
- data/app/assets/images/pageflow/linkmap_page_pictogram_small.png +0 -0
- data/app/assets/javascript/pageflow/linkmap_page.js +9 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor.js +25 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +57 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/collections/page_links_collection.js +29 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/config.js +51 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +15 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +79 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/area_file_selection_handler.js +12 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/audio_file_area_type.js +17 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/external_link_area_type.js +19 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js +11 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +33 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_link_area_type.js +29 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/models/text_only_area_type.js +15 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +5 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/edit_area.jst.ejs +3 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +11 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +44 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +90 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +103 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/editable_areas_mode_view.js +10 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +190 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +26 -0
- data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/panorama_embedded_view.js +14 -0
- data/app/assets/javascript/pageflow/linkmap_page/features.js +9 -0
- data/app/assets/javascript/pageflow/linkmap_page/page_type.js +302 -0
- data/app/assets/javascript/pageflow/linkmap_page/vendor/gyro.js +3 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js +77 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +112 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js +132 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_players_controller.js +48 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround.js +154 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround_strategies/target_speed.js +99 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +421 -0
- data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js +17 -0
- data/app/assets/stylesheets/pageflow/linkmap_page.css.scss +266 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/animations/rotate.css.scss +8 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/audio_player_controls.scss +134 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor.css.scss +122 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/areas_list.scss +15 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/file_areas.css.scss +70 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/editor/resizable.css.scss +80 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default.css.scss +341 -0
- data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss +82 -0
- data/app/controllers/pageflow/external_links/sites_controller.rb +40 -0
- data/app/helpers/pageflow/linkmap_page/areas_helper.rb +93 -0
- data/app/models/pageflow/linkmap_page/site.rb +11 -0
- data/app/views/pageflow/linkmap_page/areas/_div.html.erb +33 -0
- data/app/views/pageflow/linkmap_page/page.html +51 -0
- data/config/locales/de.yml +119 -0
- data/config/locales/en.yml +119 -0
- data/config/locales/new/inverted.de.yml +10 -0
- data/config/locales/new/inverted.en.yml +10 -0
- data/config/locales/new/text_only_area_type.de.yml +11 -0
- data/config/locales/new/text_only_area_type.en.yml +11 -0
- data/config/routes.rb +5 -0
- data/config/spring.rb +1 -0
- data/exec/rspec +15 -0
- data/exec/spring +18 -0
- data/lib/pageflow-linkmap-page.rb +13 -0
- data/lib/pageflow/linkmap_page/engine.rb +17 -0
- data/lib/pageflow/linkmap_page/page_type.rb +19 -0
- data/lib/pageflow/linkmap_page/plugin.rb +9 -0
- data/lib/pageflow/linkmap_page/version.rb +5 -0
- data/pageflow-linkmap-page.gemspec +37 -0
- data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +68 -0
- data/spec/spec_helper.rb +15 -0
- metadata +265 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
pageflow.linkmapPage.AreasEmbeddedView = Backbone.Marionette.View.extend({
|
2
|
+
render: function() {
|
3
|
+
this.subview(new pageflow.CollectionView({
|
4
|
+
el: this.$el,
|
5
|
+
collection: this.model.linkmapAreas(this.options.propertyName),
|
6
|
+
itemViewConstructor: pageflow.linkmapPage.AreaItemEmbeddedView,
|
7
|
+
itemViewOptions: {
|
8
|
+
pageConfiguration: this.model,
|
9
|
+
page: this.model.page,
|
10
|
+
container: this.options.container
|
11
|
+
}
|
12
|
+
}));
|
13
|
+
|
14
|
+
this.listenTo(this.model.page, 'change:areas_editable', function() {
|
15
|
+
this.updateClassName();
|
16
|
+
});
|
17
|
+
|
18
|
+
return this;
|
19
|
+
},
|
20
|
+
|
21
|
+
updateClassName: function() {
|
22
|
+
var editable = this.model.page.get('areas_editable');
|
23
|
+
|
24
|
+
this.$el.toggleClass('editable', !!editable);
|
25
|
+
}
|
26
|
+
});
|
data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/panorama_embedded_view.js
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
pageflow.linkmapPage.PanoramaEmbeddedView = Backbone.Marionette.View.extend({
|
2
|
+
render: function() {
|
3
|
+
this.listenTo(this.model.page, 'change:' + this.options.disableMarginScrollingPropertyName, function(model, disabled) {
|
4
|
+
if (disabled) {
|
5
|
+
this.$el.linkmapLookaround('disable');
|
6
|
+
}
|
7
|
+
else {
|
8
|
+
this.$el.linkmapLookaround('enable');
|
9
|
+
}
|
10
|
+
});
|
11
|
+
|
12
|
+
return this;
|
13
|
+
}
|
14
|
+
});
|
@@ -0,0 +1,9 @@
|
|
1
|
+
pageflow.features.register('slideshow', 'page_type.linkmap_page', function() {
|
2
|
+
pageflow.linkmapPage.visitedPages = [];
|
3
|
+
|
4
|
+
pageflow.events.on('page:change', function(page) {
|
5
|
+
if (pageflow.linkmapPage.visitedPages.indexOf(page.getPermaId()) < 0) {
|
6
|
+
pageflow.linkmapPage.visitedPages.push(page.getPermaId());
|
7
|
+
}
|
8
|
+
});
|
9
|
+
});
|
@@ -0,0 +1,302 @@
|
|
1
|
+
pageflow.pageType.register('linkmap_page', _.extend({
|
2
|
+
scrollerOptions: {
|
3
|
+
freeScroll: true,
|
4
|
+
scrollX: true,
|
5
|
+
noMouseWheelScrollX: true
|
6
|
+
},
|
7
|
+
|
8
|
+
noHideTextOnSwipe: true,
|
9
|
+
|
10
|
+
enhance: function(pageElement, configuration) {
|
11
|
+
this.setupPanoramaBackground(pageElement, configuration);
|
12
|
+
this.setupHoverImages(pageElement, configuration);
|
13
|
+
this.setupVideoPlayer(pageElement);
|
14
|
+
|
15
|
+
this.content = pageElement.find('.scroller');
|
16
|
+
this.panorama = pageElement.find('.panorama');
|
17
|
+
|
18
|
+
this.content.linkmapPanorama({
|
19
|
+
page: pageElement,
|
20
|
+
panorama: function() {
|
21
|
+
return pageElement.find('.panorama.active');
|
22
|
+
},
|
23
|
+
scroller: this.scroller,
|
24
|
+
activeAreasSelector: '.linkmap_areas > *',
|
25
|
+
limitScrolling: configuration.limit_scrolling,
|
26
|
+
addEnvironment: configuration.add_environment,
|
27
|
+
marginScrollingDisabled: configuration.margin_scrolling_disabled,
|
28
|
+
startScrollPosition: this.getPanoramaStartScrollPosition(configuration)
|
29
|
+
});
|
30
|
+
|
31
|
+
this.content.linkmapLookaround({
|
32
|
+
scroller: this.scroller,
|
33
|
+
marginScrollingDisabled: configuration.margin_scrolling_disabled
|
34
|
+
});
|
35
|
+
|
36
|
+
pageElement.find('.linkmap_page').linkmapScrollIndicators({
|
37
|
+
scroller: this.scroller
|
38
|
+
});
|
39
|
+
|
40
|
+
pageElement.find('.hover_video').linkmapHoverVideo({
|
41
|
+
video: pageElement.find('.panorama_video')
|
42
|
+
});
|
43
|
+
|
44
|
+
this.linkmapAreas = pageElement.find('.linkmap_areas');
|
45
|
+
this.linkmapAreas.linkmap({
|
46
|
+
baseImage: function() {
|
47
|
+
return pageElement.find('.panorama.active');
|
48
|
+
},
|
49
|
+
|
50
|
+
hoverVideo: pageElement.find('.hover_video').linkmapHoverVideo('instance'),
|
51
|
+
hoverVideoEnabled: configuration.background_type === 'hover_video'
|
52
|
+
});
|
53
|
+
|
54
|
+
this.setupPageLinkAreas(pageElement);
|
55
|
+
this.setupAudioFileAreas(pageElement, configuration);
|
56
|
+
this.setupTextOnlyAreas(pageElement);
|
57
|
+
},
|
58
|
+
|
59
|
+
getPanoramaStartScrollPosition: function(configuration) {
|
60
|
+
function getRatio(attributeName) {
|
61
|
+
if (attributeName in configuration) {
|
62
|
+
return configuration[attributeName] / 100;
|
63
|
+
}
|
64
|
+
else {
|
65
|
+
return 0.5;
|
66
|
+
}
|
67
|
+
}
|
68
|
+
|
69
|
+
if (configuration.background_type === 'video') {
|
70
|
+
return {
|
71
|
+
x: getRatio('panorama_video_x'),
|
72
|
+
y: getRatio('panorama_video_y')
|
73
|
+
};
|
74
|
+
}
|
75
|
+
else {
|
76
|
+
return {
|
77
|
+
x: getRatio('panorama_image_x'),
|
78
|
+
y: getRatio('panorama_image_y')
|
79
|
+
};
|
80
|
+
}
|
81
|
+
},
|
82
|
+
|
83
|
+
setupPanoramaBackground: function(pageElement, configuration) {
|
84
|
+
pageElement.find('.panorama_image')
|
85
|
+
.toggleClass('active', !this.isBackgroundVideoEnabled(configuration));
|
86
|
+
|
87
|
+
pageElement.find('.panorama_video')
|
88
|
+
.toggleClass('active', this.isBackgroundVideoEnabled(configuration));
|
89
|
+
},
|
90
|
+
|
91
|
+
setupHoverImages: function(pageElement, configuration) {
|
92
|
+
pageElement.find('.hover_image')
|
93
|
+
.toggle(!this.isHoverVideoEnabled(configuration));
|
94
|
+
},
|
95
|
+
|
96
|
+
setupVideoPlayer: function(pageElement) {
|
97
|
+
var wrapper = pageElement.find('.panorama_video');
|
98
|
+
var template = wrapper.find('[data-template=video]');
|
99
|
+
|
100
|
+
wrapper
|
101
|
+
.attr('data-width', template.data('videoWidth'))
|
102
|
+
.attr('data-height', template.data('videoHeight'));
|
103
|
+
|
104
|
+
this.videoPlayer = new pageflow.VideoPlayer.Lazy(template, {
|
105
|
+
volumeFading: true,
|
106
|
+
|
107
|
+
width: '100%',
|
108
|
+
height: '100%'
|
109
|
+
});
|
110
|
+
|
111
|
+
wrapper.data('videoPlayer', this.videoPlayer);
|
112
|
+
},
|
113
|
+
|
114
|
+
setupPageLinkAreas: function(pageElement) {
|
115
|
+
pageElement.on('click', '[data-target-type="page"]', function(e) {
|
116
|
+
var area = $(this);
|
117
|
+
|
118
|
+
pageflow.slides.goToByPermaId(area.data('targetId'), {
|
119
|
+
transition: area.data('pageTransition')
|
120
|
+
});
|
121
|
+
return false;
|
122
|
+
});
|
123
|
+
},
|
124
|
+
|
125
|
+
setupAudioFileAreas: function(pageElement, configuration) {
|
126
|
+
this.multiPlayer = pageflow.audio.createMultiPlayer({
|
127
|
+
playFromBeginning: true,
|
128
|
+
fadeDuration: 1000,
|
129
|
+
hooks: pageflow.atmo.createMediaPlayerHooks(configuration)
|
130
|
+
});
|
131
|
+
|
132
|
+
pageElement.linkmapAudioPlayersController({
|
133
|
+
player: this.multiPlayer
|
134
|
+
});
|
135
|
+
|
136
|
+
pageElement.find('[data-target-type="audio_file"]').linkmapAudioPlayerControls();
|
137
|
+
},
|
138
|
+
|
139
|
+
setupTextOnlyAreas: function(pageElement) {
|
140
|
+
pageElement.on('click', '[data-target-type="text_only"]', function(e) {
|
141
|
+
return false;
|
142
|
+
});
|
143
|
+
},
|
144
|
+
|
145
|
+
resize: function(pageElement, configuration) {
|
146
|
+
this.content.linkmapPanorama('refresh');
|
147
|
+
this.linkmapAreas.linkmap('refresh');
|
148
|
+
},
|
149
|
+
|
150
|
+
prepare: function(pageElement, configuration) {
|
151
|
+
if (this.isVideoEnabled(configuration)) {
|
152
|
+
return this.videoPlayer.ensureCreated();
|
153
|
+
}
|
154
|
+
},
|
155
|
+
|
156
|
+
unprepare: function(pageElement, configuration) {
|
157
|
+
if (this.isVideoEnabled(configuration)) {
|
158
|
+
return this.videoPlayer.scheduleDispose();
|
159
|
+
}
|
160
|
+
},
|
161
|
+
|
162
|
+
linkedPages: function(pageElement, configuration) {
|
163
|
+
return _(configuration.linkmap_areas)
|
164
|
+
.select(function(area) {
|
165
|
+
return area.target_type === 'page';
|
166
|
+
})
|
167
|
+
.map(function(area) {
|
168
|
+
return area.target_id;
|
169
|
+
});
|
170
|
+
},
|
171
|
+
|
172
|
+
preload: function(pageElement, configuration) {
|
173
|
+
return pageflow.preload.backgroundImage(pageElement.find('.background_image'));
|
174
|
+
},
|
175
|
+
|
176
|
+
activating: function(pageElement, configuration) {
|
177
|
+
if (this.isVideoEnabled(configuration)) {
|
178
|
+
this.playVideo(configuration);
|
179
|
+
}
|
180
|
+
|
181
|
+
this.content.linkmapPanorama('refresh');
|
182
|
+
this.linkmapAreas.linkmap('refresh');
|
183
|
+
|
184
|
+
this.content.linkmapLookaround('activate');
|
185
|
+
this.content.linkmapPanorama('resetScrollPosition');
|
186
|
+
|
187
|
+
this.content.linkmapPanorama('resetAreaHighlighting');
|
188
|
+
},
|
189
|
+
|
190
|
+
activated: function(pageElement, configuration) {
|
191
|
+
this.content.linkmapPanorama('highlightAreas');
|
192
|
+
},
|
193
|
+
|
194
|
+
deactivating: function(pageElement, configuration) {
|
195
|
+
this.multiPlayer.pause();
|
196
|
+
|
197
|
+
this.content.linkmapLookaround('deactivate');
|
198
|
+
},
|
199
|
+
|
200
|
+
deactivated: function(pageElement, configuration) {
|
201
|
+
if (this.isVideoEnabled(configuration)) {
|
202
|
+
this.pauseVideo(configuration);
|
203
|
+
}
|
204
|
+
},
|
205
|
+
|
206
|
+
update: function(pageElement, configuration) {
|
207
|
+
this.setupDefaultAreaPositions(configuration);
|
208
|
+
this.setupPanoramaBackground(pageElement, configuration.attributes);
|
209
|
+
this.updateCommonPageCssClasses(pageElement, configuration);
|
210
|
+
|
211
|
+
this.linkmapAreas.linkmap('updateHoverVideoEnabled', configuration.get('background_type') === 'hover_video');
|
212
|
+
|
213
|
+
this.afterEmbeddedViewsUpdate(function() {
|
214
|
+
var minScaling = false;
|
215
|
+
|
216
|
+
this.content.linkmapPanorama('update',
|
217
|
+
configuration.get('add_environment'),
|
218
|
+
configuration.get('limit_scrolling'),
|
219
|
+
this.getPanoramaStartScrollPosition(configuration.attributes),
|
220
|
+
minScaling);
|
221
|
+
|
222
|
+
this.content.linkmapLookaround('update',
|
223
|
+
configuration.get('margin_scrolling_disabled'));
|
224
|
+
this.setupHoverImages(pageElement, configuration.attributes);
|
225
|
+
this.updateVideoPlayState(configuration);
|
226
|
+
|
227
|
+
this.linkmapAreas.linkmap('refresh');
|
228
|
+
this.scroller.refresh();
|
229
|
+
});
|
230
|
+
},
|
231
|
+
|
232
|
+
updateVideoPlayState: function(configuration) {
|
233
|
+
if (configuration.hasChanged('background_type')) {
|
234
|
+
if (this.isVideoEnabled(configuration.attributes)) {
|
235
|
+
this.playVideo(configuration.attributes);
|
236
|
+
}
|
237
|
+
else {
|
238
|
+
this.pauseVideo(configuration.attributes);
|
239
|
+
}
|
240
|
+
}
|
241
|
+
},
|
242
|
+
|
243
|
+
setupDefaultAreaPositions: function(configuration) {
|
244
|
+
if (!this.defaultPositionDefined) {
|
245
|
+
var scroller = this.scroller;
|
246
|
+
|
247
|
+
_.each(['linkmap_page_link_areas', 'linkmap_audio_file_areas'], function(propertyName) {
|
248
|
+
configuration.linkmapAreas(propertyName).setDefaultPosition(function() {
|
249
|
+
return {
|
250
|
+
left: getPercent(scroller.positionX(), scroller.maxX()),
|
251
|
+
top: getPercent(scroller.positionY(), scroller.maxY())
|
252
|
+
};
|
253
|
+
});
|
254
|
+
});
|
255
|
+
this.defaultPositionDefined = true;
|
256
|
+
}
|
257
|
+
|
258
|
+
function getPercent(value, max) {
|
259
|
+
if (max === 0) {
|
260
|
+
return 20;
|
261
|
+
}
|
262
|
+
|
263
|
+
return Math.max(3, Math.min(90, value / max * 100));
|
264
|
+
}
|
265
|
+
},
|
266
|
+
|
267
|
+
afterEmbeddedViewsUpdate: function(fn) {
|
268
|
+
setTimeout(_.bind(fn, this), 10);
|
269
|
+
},
|
270
|
+
|
271
|
+
isVideoEnabled: function(configuration) {
|
272
|
+
return !pageflow.browser.has('mobile platform') &&
|
273
|
+
(configuration.background_type === 'video' || configuration.background_type === 'hover_video');
|
274
|
+
},
|
275
|
+
|
276
|
+
isBackgroundVideoEnabled: function(configuration) {
|
277
|
+
return !pageflow.browser.has('mobile platform') &&
|
278
|
+
configuration.background_type === 'video';
|
279
|
+
},
|
280
|
+
|
281
|
+
isHoverVideoEnabled: function(configuration) {
|
282
|
+
return !pageflow.browser.has('mobile platform') &&
|
283
|
+
configuration.background_type === 'hover_video';
|
284
|
+
},
|
285
|
+
|
286
|
+
playVideo: function(configuration) {
|
287
|
+
var that = this;
|
288
|
+
|
289
|
+
this.videoPlayer.ensureCreated();
|
290
|
+
|
291
|
+
this.prebufferingPromise = this.videoPlayer.prebuffer().then(function() {
|
292
|
+
if (configuration.background_type === 'video') {
|
293
|
+
that.videoPlayer.playAndFadeIn(1000);
|
294
|
+
}
|
295
|
+
});
|
296
|
+
},
|
297
|
+
|
298
|
+
pauseVideo: function(configuration) {
|
299
|
+
this.videoPlayer.fadeOutAndPause(1000);
|
300
|
+
this.videoPlayer.scheduleDispose();
|
301
|
+
}
|
302
|
+
}, pageflow.commonPageCssClasses));
|
@@ -0,0 +1,3 @@
|
|
1
|
+
(function(a,b){"function"===typeof define&&define.amd?define(b):"object"===typeof exports?module.exports=b():a.gyro=b()})(this,function(){var a={x:null,y:null,z:null,alpha:null,beta:null,gamma:null},b={x:0,y:0,z:0,alpha:0,beta:0,gamma:0},g=null,e=[],h={frequency:500,calibrate:function(){for(var f in a)b[f]="number"===typeof a[f]?a[f]:0},getOrientation:function(){return a},startTracking:function(b){g=setInterval(function(){b(a)},h.frequency)},stopTracking:function(){clearInterval(g)},hasFeature:function(a){for(var b in e)if(a==
|
2
|
+
e[b])return!0;return!1},getFeatures:function(){return e}};window&&window.addEventListener&&function(){function f(d){e.push("MozOrientation");d.target.removeEventListener("MozOrientation",f,!0);d.target.addEventListener("MozOrientation",function(c){a.x=c.x-b.x;a.y=c.y-b.y;a.z=c.z-b.z},!0)}function g(d){e.push("devicemotion");d.target.removeEventListener("devicemotion",g,!0);d.target.addEventListener("devicemotion",function(c){a.x=c.accelerationIncludingGravity.x-b.x;a.y=c.accelerationIncludingGravity.y-
|
3
|
+
b.y;a.z=c.accelerationIncludingGravity.z-b.z},!0)}function h(d){e.push("deviceorientation");d.target.removeEventListener("deviceorientation",h,!0);d.target.addEventListener("deviceorientation",function(c){a.alpha=c.alpha-b.alpha;a.beta=c.beta-b.beta;a.gamma=c.gamma-b.gamma},!0)}window.addEventListener("MozOrientation",f,!0);window.addEventListener("devicemotion",g,!0);window.addEventListener("deviceorientation",h,!0)}();return h});
|
@@ -0,0 +1,77 @@
|
|
1
|
+
(function($) {
|
2
|
+
$.widget('pageflow.linkmapHoverVideo', {
|
3
|
+
activate: function() {
|
4
|
+
var video = this.options.video;
|
5
|
+
|
6
|
+
if (!this.hoverVideoParent) {
|
7
|
+
this.hoverVideoParent = video.parent();
|
8
|
+
video.appendTo(this.element);
|
9
|
+
}
|
10
|
+
},
|
11
|
+
|
12
|
+
deactivate: function() {
|
13
|
+
var video = this.options.video;
|
14
|
+
|
15
|
+
if (this.hoverVideoParent) {
|
16
|
+
video.prependTo(this.hoverVideoParent);
|
17
|
+
this.hoverVideoParent = null;
|
18
|
+
|
19
|
+
video.css({
|
20
|
+
left: 'auto',
|
21
|
+
top: 'auto',
|
22
|
+
width: 'auto',
|
23
|
+
height: 'auto'
|
24
|
+
});
|
25
|
+
}
|
26
|
+
},
|
27
|
+
|
28
|
+
schedulePlay: function(options) {
|
29
|
+
if (this.currentArea !== options.area) {
|
30
|
+
clearTimeout(this.playTimeout);
|
31
|
+
|
32
|
+
this.currentArea = options.area;
|
33
|
+
this.playTimeout = setTimeout(_.bind(function() {
|
34
|
+
this.play(options);
|
35
|
+
}, this), 500);
|
36
|
+
}
|
37
|
+
},
|
38
|
+
|
39
|
+
play: function(options) {
|
40
|
+
var video = this.options.video;
|
41
|
+
var position = options.area.position();
|
42
|
+
|
43
|
+
video
|
44
|
+
.width(options.baseImage.width())
|
45
|
+
.height(options.baseImage.height());
|
46
|
+
|
47
|
+
this.element
|
48
|
+
.css({
|
49
|
+
left: position.left + 'px',
|
50
|
+
top: position.top + 'px'
|
51
|
+
})
|
52
|
+
.width(options.area.width())
|
53
|
+
.height(options.area.height());
|
54
|
+
|
55
|
+
this.element.linkmapAreaClip(position);
|
56
|
+
|
57
|
+
var videoPlayer = video.data('videoPlayer');
|
58
|
+
videoPlayer.play();
|
59
|
+
|
60
|
+
this.element.addClass('playing');
|
61
|
+
},
|
62
|
+
|
63
|
+
pause: function() {
|
64
|
+
clearTimeout(this.playTimeout);
|
65
|
+
this.currentArea = null;
|
66
|
+
|
67
|
+
var videoPlayer = this.options.video.data('videoPlayer');
|
68
|
+
|
69
|
+
setTimeout(function() {
|
70
|
+
videoPlayer.currentTime(0);
|
71
|
+
videoPlayer.pause();
|
72
|
+
}, 300);
|
73
|
+
|
74
|
+
this.element.removeClass('playing');
|
75
|
+
}
|
76
|
+
});
|
77
|
+
}(jQuery));
|
@@ -0,0 +1,112 @@
|
|
1
|
+
(function($) {
|
2
|
+
var markerMargin = 32;
|
3
|
+
var smallSizeBreakpoint = 190;
|
4
|
+
|
5
|
+
$.widget('pageflow.linkmap', {
|
6
|
+
_create: function() {
|
7
|
+
var widget = this;
|
8
|
+
|
9
|
+
this.refresh();
|
10
|
+
|
11
|
+
if (widget.options.hoverVideoEnabled) {
|
12
|
+
widget.options.hoverVideo.activate();
|
13
|
+
}
|
14
|
+
|
15
|
+
this.element.on('mousemove', '.hover_area', function() {
|
16
|
+
var hoverArea = $(this);
|
17
|
+
|
18
|
+
if (widget.options.hoverVideoEnabled) {
|
19
|
+
widget.options.hoverVideo.schedulePlay({
|
20
|
+
area: hoverArea,
|
21
|
+
baseImage: widget.options.baseImage()
|
22
|
+
});
|
23
|
+
}
|
24
|
+
});
|
25
|
+
|
26
|
+
this.element.on('mouseleave', '.hover_area', function() {
|
27
|
+
if (widget.options.hoverVideoEnabled) {
|
28
|
+
widget.options.hoverVideo.pause();
|
29
|
+
}
|
30
|
+
});
|
31
|
+
},
|
32
|
+
|
33
|
+
updateHoverVideoEnabled: function(value) {
|
34
|
+
if (value) {
|
35
|
+
this.options.hoverVideo.activate();
|
36
|
+
}
|
37
|
+
else {
|
38
|
+
this.options.hoverVideo.deactivate();
|
39
|
+
}
|
40
|
+
|
41
|
+
this.options.hoverVideoEnabled = value;
|
42
|
+
},
|
43
|
+
|
44
|
+
refresh: function() {
|
45
|
+
var hoverAreas = this.element.find('.hover_area'),
|
46
|
+
hoverImages = this.element.find('.background_image');
|
47
|
+
|
48
|
+
this._resizeToBaseImage(hoverImages);
|
49
|
+
|
50
|
+
hoverAreas.linkmapAreaClip();
|
51
|
+
hoverAreas.linkmapAreaFormat();
|
52
|
+
hoverAreas.linkmapAreaVisited();
|
53
|
+
},
|
54
|
+
|
55
|
+
_resizeToBaseImage: function(target) {
|
56
|
+
var baseImage = this.options.baseImage();
|
57
|
+
|
58
|
+
target
|
59
|
+
.width(baseImage.width())
|
60
|
+
.height(baseImage.height());
|
61
|
+
}
|
62
|
+
});
|
63
|
+
|
64
|
+
$.fn.linkmapAreaClip = function(optionalPosition) {
|
65
|
+
this.each(function() {
|
66
|
+
var hoverArea = $(this);
|
67
|
+
var clippedElement = hoverArea.find('.panorama_video, .background_image');
|
68
|
+
var position = optionalPosition || hoverArea.position();
|
69
|
+
|
70
|
+
clippedElement.css({
|
71
|
+
left: -position.left + 'px',
|
72
|
+
top: -position.top + 'px'
|
73
|
+
});
|
74
|
+
});
|
75
|
+
};
|
76
|
+
|
77
|
+
$.fn.linkmapAreaFormat = function() {
|
78
|
+
this.each(function() {
|
79
|
+
var hoverArea = $(this);
|
80
|
+
var linkmapMarker = hoverArea.find('.linkmap_marker');
|
81
|
+
|
82
|
+
hoverArea.toggleClass('portrait', hoverArea.width() <= hoverArea.height());
|
83
|
+
hoverArea.toggleClass('landscape', hoverArea.width() > hoverArea.height());
|
84
|
+
hoverArea.toggleClass('small', hoverArea.width() <= smallSizeBreakpoint ||
|
85
|
+
hoverArea.height() <= smallSizeBreakpoint);
|
86
|
+
|
87
|
+
if (hoverArea.width() <= hoverArea.height()) {
|
88
|
+
linkmapMarker.css({
|
89
|
+
'width': hoverArea.width() - markerMargin,
|
90
|
+
'height': hoverArea.width() - markerMargin,
|
91
|
+
});
|
92
|
+
}
|
93
|
+
else {
|
94
|
+
linkmapMarker.css({
|
95
|
+
'width': hoverArea.height() - markerMargin,
|
96
|
+
'height': hoverArea.height() - markerMargin,
|
97
|
+
});
|
98
|
+
}
|
99
|
+
});
|
100
|
+
};
|
101
|
+
|
102
|
+
$.fn.linkmapAreaVisited = function() {
|
103
|
+
this.each(function() {
|
104
|
+
var hoverArea = $(this);
|
105
|
+
var visited =
|
106
|
+
hoverArea.data('targetType') === 'page' &&
|
107
|
+
pageflow.linkmapPage.visitedPages.indexOf(hoverArea.data('targetId')) >= 0;
|
108
|
+
|
109
|
+
hoverArea.toggleClass('visited', visited);
|
110
|
+
});
|
111
|
+
};
|
112
|
+
}(jQuery));
|