pageflow-linkmap-page 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.jshintignore +1 -0
  4. data/.jshintrc +23 -0
  5. data/CHANGELOG.md +8 -0
  6. data/Gemfile +18 -0
  7. data/README.md +62 -0
  8. data/Rakefile +11 -0
  9. data/app/assets/images/pageflow/linkmap_page/text_only_area_type_pictogram.png +0 -0
  10. data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/sprite.png +0 -0
  11. data/app/assets/images/pageflow/linkmap_page/themes/default/pictograms/wide.png +0 -0
  12. data/app/assets/images/pageflow/linkmap_page_pictogram.png +0 -0
  13. data/app/assets/images/pageflow/linkmap_page_pictogram_small.png +0 -0
  14. data/app/assets/javascript/pageflow/linkmap_page.js +9 -0
  15. data/app/assets/javascript/pageflow/linkmap_page/editor.js +25 -0
  16. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/areas_collection.js +57 -0
  17. data/app/assets/javascript/pageflow/linkmap_page/editor/collections/page_links_collection.js +29 -0
  18. data/app/assets/javascript/pageflow/linkmap_page/editor/config.js +51 -0
  19. data/app/assets/javascript/pageflow/linkmap_page/editor/controllers/side_bar_controller.js +15 -0
  20. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area.js +79 -0
  21. data/app/assets/javascript/pageflow/linkmap_page/editor/models/area_file_selection_handler.js +12 -0
  22. data/app/assets/javascript/pageflow/linkmap_page/editor/models/audio_file_area_type.js +17 -0
  23. data/app/assets/javascript/pageflow/linkmap_page/editor/models/external_link_area_type.js +19 -0
  24. data/app/assets/javascript/pageflow/linkmap_page/editor/models/new_area_file_selection_handler.js +11 -0
  25. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_configuration_mixin.js +33 -0
  26. data/app/assets/javascript/pageflow/linkmap_page/editor/models/page_link_area_type.js +29 -0
  27. data/app/assets/javascript/pageflow/linkmap_page/editor/models/text_only_area_type.js +15 -0
  28. data/app/assets/javascript/pageflow/linkmap_page/editor/routers/side_bar_router.js +5 -0
  29. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/edit_area.jst.ejs +3 -0
  30. data/app/assets/javascript/pageflow/linkmap_page/editor/templates/embedded/area_item.jst.ejs +11 -0
  31. data/app/assets/javascript/pageflow/linkmap_page/editor/views/areas_list_view.js +44 -0
  32. data/app/assets/javascript/pageflow/linkmap_page/editor/views/configuration_editor_view.js +90 -0
  33. data/app/assets/javascript/pageflow/linkmap_page/editor/views/edit_area_view.js +103 -0
  34. data/app/assets/javascript/pageflow/linkmap_page/editor/views/editable_areas_mode_view.js +10 -0
  35. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/area_item_embedded_view.js +190 -0
  36. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/areas_embedded_view.js +26 -0
  37. data/app/assets/javascript/pageflow/linkmap_page/editor/views/embedded/panorama_embedded_view.js +14 -0
  38. data/app/assets/javascript/pageflow/linkmap_page/features.js +9 -0
  39. data/app/assets/javascript/pageflow/linkmap_page/page_type.js +302 -0
  40. data/app/assets/javascript/pageflow/linkmap_page/vendor/gyro.js +3 -0
  41. data/app/assets/javascript/pageflow/linkmap_page/widgets/hover_video.js +77 -0
  42. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap.js +112 -0
  43. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_player_controls.js +132 -0
  44. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_audio_players_controller.js +48 -0
  45. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround.js +154 -0
  46. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_lookaround_strategies/target_speed.js +99 -0
  47. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_panorama.js +421 -0
  48. data/app/assets/javascript/pageflow/linkmap_page/widgets/linkmap_scroll_indicators.js +17 -0
  49. data/app/assets/stylesheets/pageflow/linkmap_page.css.scss +266 -0
  50. data/app/assets/stylesheets/pageflow/linkmap_page/animations/rotate.css.scss +8 -0
  51. data/app/assets/stylesheets/pageflow/linkmap_page/audio_player_controls.scss +134 -0
  52. data/app/assets/stylesheets/pageflow/linkmap_page/editor.css.scss +122 -0
  53. data/app/assets/stylesheets/pageflow/linkmap_page/editor/areas_list.scss +15 -0
  54. data/app/assets/stylesheets/pageflow/linkmap_page/editor/file_areas.css.scss +70 -0
  55. data/app/assets/stylesheets/pageflow/linkmap_page/editor/resizable.css.scss +80 -0
  56. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default.css.scss +341 -0
  57. data/app/assets/stylesheets/pageflow/linkmap_page/themes/default/scroll_indicators.scss +82 -0
  58. data/app/controllers/pageflow/external_links/sites_controller.rb +40 -0
  59. data/app/helpers/pageflow/linkmap_page/areas_helper.rb +93 -0
  60. data/app/models/pageflow/linkmap_page/site.rb +11 -0
  61. data/app/views/pageflow/linkmap_page/areas/_div.html.erb +33 -0
  62. data/app/views/pageflow/linkmap_page/page.html +51 -0
  63. data/config/locales/de.yml +119 -0
  64. data/config/locales/en.yml +119 -0
  65. data/config/locales/new/inverted.de.yml +10 -0
  66. data/config/locales/new/inverted.en.yml +10 -0
  67. data/config/locales/new/text_only_area_type.de.yml +11 -0
  68. data/config/locales/new/text_only_area_type.en.yml +11 -0
  69. data/config/routes.rb +5 -0
  70. data/config/spring.rb +1 -0
  71. data/exec/rspec +15 -0
  72. data/exec/spring +18 -0
  73. data/lib/pageflow-linkmap-page.rb +13 -0
  74. data/lib/pageflow/linkmap_page/engine.rb +17 -0
  75. data/lib/pageflow/linkmap_page/page_type.rb +19 -0
  76. data/lib/pageflow/linkmap_page/plugin.rb +9 -0
  77. data/lib/pageflow/linkmap_page/version.rb +5 -0
  78. data/pageflow-linkmap-page.gemspec +37 -0
  79. data/spec/helpers/pageflow/linkmap_page/areas_helper_spec.rb +68 -0
  80. data/spec/spec_helper.rb +15 -0
  81. metadata +265 -0
@@ -0,0 +1,17 @@
1
+ (function($) {
2
+ $.widget('pageflow.linkmapScrollIndicators', {
3
+ _create: function() {
4
+ var element = this.element;
5
+ var scroller = this.options.scroller;
6
+
7
+ scroller.onScroll(toggle);
8
+ scroller.onScrollEnd(toggle);
9
+ toggle();
10
+
11
+ function toggle() {
12
+ element.toggleClass('can_scroll_left', Math.ceil(scroller.positionX()) < 0);
13
+ element.toggleClass('can_scroll_right', Math.floor(scroller.positionX()) > scroller.maxX());
14
+ }
15
+ }
16
+ });
17
+ }(jQuery))
@@ -0,0 +1,266 @@
1
+ @include pageflow-page-type(linkmap_page);
2
+
3
+ @import "./linkmap_page/animations/rotate";
4
+
5
+ @mixin inline-loading-spinner {
6
+ left: 50%;
7
+ @include transform-origin(center left);
8
+ @include animation(linkmap_page_rotate 0.5s linear infinite);
9
+ display: none;
10
+
11
+ .circle_inner {
12
+ left: auto;
13
+ right: 100%;
14
+ @include transform-origin(center right);
15
+ @include transform(rotate(-120deg));
16
+ }
17
+ }
18
+
19
+ .js .page .scroller > div.linkmap {
20
+ padding: 0 !important;
21
+ width: auto;
22
+ height: auto;
23
+
24
+ }
25
+ .linkmap_page {
26
+ @import "./linkmap_page/audio_player_controls";
27
+
28
+ @include user-select(none);
29
+
30
+ .content {
31
+ /* pointer-events: none; */
32
+ }
33
+
34
+ .scroller {
35
+ overflow: hidden;
36
+
37
+ > div {
38
+ min-height: 0;
39
+ }
40
+ }
41
+
42
+ .linkmap {
43
+ pointer-events: none;
44
+ position: absolute;
45
+ height: 100%;
46
+ width: 100%;
47
+ left:0;
48
+
49
+ &.moving_background {
50
+ @include transition(none);
51
+ }
52
+
53
+ &.measuring {
54
+ @include transition(none);
55
+ }
56
+ }
57
+
58
+ .panorama_wrapper {
59
+ position: absolute;
60
+ }
61
+
62
+ .linkmap_areas {
63
+ position: absolute;
64
+ top: 0;
65
+ left: 0;
66
+ right: 0;
67
+ bottom: 0;
68
+ }
69
+
70
+ .panorama {
71
+ height: 120%;
72
+ width: auto;
73
+ vertical-align: middle;
74
+ position: relative;
75
+ display: none;
76
+
77
+ &.active {
78
+ display: block;
79
+ }
80
+ }
81
+
82
+ .hover_video {
83
+ visibility: hidden;
84
+ opacity: 0;
85
+ position: absolute;
86
+ overflow: hidden;
87
+ @include transition(opacity 0.2s, visibility 0.2s);
88
+
89
+ .panorama_video {
90
+ display: block;
91
+ }
92
+
93
+ &.playing {
94
+ visibility: visible;
95
+ opacity: 1;
96
+ }
97
+ }
98
+
99
+ .vjs-loading-spinner,
100
+ .vjs-control-bar {
101
+ display: none !important;
102
+ }
103
+
104
+ .arrow_left,
105
+ .arrow_right {
106
+ display: none;
107
+ }
108
+
109
+ .hover_area {
110
+ position: absolute;
111
+ top: 50%;
112
+ left: 10%;
113
+ height: 30%;
114
+ width: 20%;
115
+ overflow: hidden;
116
+ cursor: pointer;
117
+ display: block;
118
+ pointer-events: all;
119
+
120
+ .background_image {
121
+ visibility: hidden;
122
+ opacity: 0;
123
+ position: absolute;
124
+ @include transition(opacity 0.5s ease, visibility 0.5s ease);
125
+ }
126
+
127
+ &:hover,
128
+ &.hover,
129
+ &.playing, &:focus, &:active {
130
+ .hover_image {
131
+ opacity: 1;
132
+ visibility: visible;
133
+ }
134
+ }
135
+
136
+ &.visited {
137
+ .visited_image {
138
+ opacity: 1;
139
+ visibility: visible;
140
+ }
141
+ }
142
+
143
+ .panorama_video {
144
+ position: absolute;
145
+ display: block;
146
+ z-index: 1;
147
+ }
148
+
149
+ &.dynamic_marker {
150
+ .linkmap_marker {
151
+ background-color: transparent;
152
+ position: absolute;
153
+ top: 5%;
154
+ left: 5%;
155
+ width: 90%;
156
+ height: 90%;
157
+ border: 3px solid rgba(255,255,255, 1);
158
+ box-sizing: border-box;
159
+ border-radius: 50%;
160
+ @include transition(0.15s);
161
+ opacity: 0.1;
162
+ box-shadow: 1px 2px 3px rgba(0,0,0,0.3);
163
+ z-index: 2;
164
+ }
165
+
166
+ &:hover,
167
+ &.hover,
168
+ &.playing,
169
+ &:focus,
170
+ &:active {
171
+ .linkmap_marker {
172
+ border: 6px solid rgba(255,255,255, 1);
173
+ opacity: 1 !important;
174
+ box-shadow: 1px 2px 3px rgba(0,0,0,0.9);
175
+ }
176
+ }
177
+ }
178
+ &:focus, &:active {
179
+ outline: none;
180
+ border: none;
181
+ }
182
+ }
183
+ .description_overlay {
184
+ position: absolute;
185
+ box-sizing: border-box;
186
+ left: 0;
187
+ top: 0;
188
+ z-index: 1;
189
+ display: block;
190
+ pointer-events: none;
191
+ opacity: 0;
192
+ max-width: 510px;
193
+ max-height: 400px;
194
+
195
+ .description_overlay_wrapper {
196
+ overflow: hidden;
197
+ position: relative;
198
+ }
199
+
200
+ @include transition(opacity 0.15s);
201
+
202
+ &.active {
203
+ display: block;
204
+ opacity: 1;
205
+ }
206
+
207
+ .link_title {
208
+ font-size: 28px;
209
+ color: #55AEBC;
210
+ letter-spacing: 0.31px;
211
+ line-height: 46px;
212
+ }
213
+
214
+ .link_description {
215
+ font-size: 20px;
216
+ color: #999999;
217
+ letter-spacing: 0.22px;
218
+ line-height: 30px;
219
+ }
220
+ }
221
+
222
+ .external_site_area {
223
+
224
+ .inline_loading_spinner {
225
+ position: absolute;
226
+ height: 100%;
227
+ width: 50%;
228
+ top: 0;
229
+ left: 0;
230
+ overflow: hidden;
231
+
232
+ .circle_inner {
233
+ position: absolute;
234
+ height: 100%;
235
+ width: 100%;
236
+ top: 0;
237
+ left: 0;
238
+ overflow: hidden;
239
+ @include transform(rotate(0));
240
+
241
+ .circle_innerst {
242
+ position: absolute;
243
+ height: 100%;
244
+ width: 200%;
245
+ top: 0;
246
+ left: 0;
247
+ border: 3px solid green;
248
+ box-sizing: border-box;
249
+ border-radius: 50%;
250
+ }
251
+ }
252
+
253
+ @include inline-loading-spinner;
254
+ }
255
+
256
+ &.active.target_self {
257
+ .inline_loading_spinner {
258
+ display: block;
259
+ }
260
+ }
261
+ }
262
+
263
+ .text_only_area {
264
+ cursor: default;
265
+ }
266
+ }
@@ -0,0 +1,8 @@
1
+ @include keyframes(linkmap_page_rotate) {
2
+ 0% {
3
+ @include transform(rotate(0deg));
4
+ }
5
+ 100% {
6
+ @include transform(rotate(360deg));
7
+ }
8
+ }
@@ -0,0 +1,134 @@
1
+ .linkmap_audio_player_controls {
2
+ position: relative;
3
+ height: 100%;
4
+ width: 100%;
5
+ top: 0;
6
+ left: 0;
7
+
8
+ .pause {
9
+ display: none;
10
+ }
11
+
12
+ .play, .pause {
13
+ position: absolute;
14
+ z-index: 1;
15
+ }
16
+
17
+ .progress {
18
+ display: none;
19
+ }
20
+
21
+ .progress, .audio_inline_progress {
22
+ position: absolute;
23
+ height: 100%;
24
+ width: 100%;
25
+ top: 0;
26
+ left: 0;
27
+ }
28
+
29
+ .current_time {
30
+ display: none;
31
+ }
32
+
33
+ .progress_inner {
34
+ position: absolute;
35
+ top: 50%;
36
+ left: 50%;
37
+ width: 95%;
38
+ height: 95%;
39
+ @include transform(translate(-50%,-50%));
40
+ }
41
+
42
+ .left_circle, .right_circle, .audio_inline_loading_spinner {
43
+ position: absolute;
44
+ height: 100%;
45
+ width: 50%;
46
+ top: 0;
47
+ left: 0;
48
+ overflow: hidden;
49
+
50
+
51
+ .circle_inner {
52
+ position: absolute;
53
+ height: 100%;
54
+ width: 100%;
55
+ top: 0;
56
+ left: 0;
57
+ overflow: hidden;
58
+ @include transform(rotate(0));
59
+
60
+ .circle_innerst {
61
+ position: absolute;
62
+ height: 100%;
63
+ width: 200%;
64
+ top: 0;
65
+ left: 0;
66
+ border: 3px solid green;
67
+ box-sizing: border-box;
68
+ border-radius: 50%;
69
+ }
70
+ }
71
+ }
72
+
73
+ .left_circle {
74
+ .circle_inner {
75
+ left: 100%;
76
+ @include transform-origin(center left);
77
+
78
+ .circle_innerst {
79
+ left: auto;
80
+ right: 0;
81
+ }
82
+ }
83
+ }
84
+
85
+ .right_circle {
86
+ left: 50%;
87
+
88
+ .circle_inner {
89
+ left: auto;
90
+ right: 100%;
91
+ @include transform-origin(center right);
92
+ }
93
+ }
94
+
95
+ .audio_inline_loading_spinner {
96
+ @include inline-loading-spinner;
97
+ }
98
+ }
99
+
100
+ .hover_area.loading {
101
+ .progress,
102
+ .audio_inline_loading_spinner {
103
+ display: block;
104
+ }
105
+
106
+ .left_circle,
107
+ .right_circle {
108
+ display: none;
109
+ }
110
+ }
111
+
112
+ .hover_area.playing {
113
+ .linkmap_audio_player_controls {
114
+ .play {
115
+ display: none;
116
+ }
117
+
118
+ .pause {
119
+ display: block;
120
+ }
121
+
122
+ .progress, .current_time {
123
+ display: block;
124
+ }
125
+ }
126
+ }
127
+
128
+ .hover_area.small {
129
+ .linkmap_audio_player_controls {
130
+ .current_time {
131
+ display: none;
132
+ }
133
+ }
134
+ }
@@ -0,0 +1,122 @@
1
+ .editor {
2
+ @import "./editor/areas_list";
3
+ }
4
+
5
+ .linkmap_areas {
6
+ @import "./editor/resizable";
7
+
8
+ .edit {
9
+ @include icon-only-button(white);
10
+ @include pencil-icon;
11
+ position: absolute;
12
+ display: none;
13
+ z-index: 2;
14
+ top: 5px;
15
+ right: 5px;
16
+ background-color: #fff;
17
+ border: solid 1px #888;
18
+ }
19
+
20
+ .toggle_marker {
21
+ @include icon-only-button(white);
22
+ @include eye-icon;
23
+ position: absolute;
24
+ display: none;
25
+ z-index: 2;
26
+ top: 5px;
27
+ right: 40px;
28
+ background-color: #fff;
29
+ border: solid 1px #888;
30
+ }
31
+
32
+ .area_type_pictogram {
33
+ @include background-icon-center($color: #fff);
34
+ @include link-icon;
35
+ display: none;
36
+ position: absolute;
37
+ top: 5px;
38
+ left: 5px;
39
+ width: 25px;
40
+ height: 25px;
41
+ border-radius: 5px;
42
+ background-color: rgba(0, 0, 0, 0.4);
43
+ z-index: 2;
44
+ }
45
+
46
+ .page_area,
47
+ .external_site_area,
48
+ .text_only_area {
49
+ .linkmap_audio_player_controls {
50
+ display: none !important;
51
+ }
52
+ }
53
+
54
+ &.editable {
55
+ .hover_area {
56
+ cursor: move;
57
+
58
+ &:hover .edit,
59
+ &:hover .toggle_marker,
60
+ &:hover .area_type_pictogram {
61
+ display: block;
62
+ }
63
+
64
+ &.editing .edit,
65
+ &.editing .toggle_marker,
66
+ &.editing .area_type_pictogram {
67
+ display: none;
68
+ }
69
+
70
+ &.editing {
71
+ z-index: 2;
72
+ }
73
+
74
+ &:before,
75
+ &:after {
76
+ content: "";
77
+ position: absolute;
78
+ top: 0;
79
+ left: 0;
80
+ width: 100%;
81
+ height: 100%;
82
+ z-index: 1;
83
+ @include box-sizing(border-box);
84
+ }
85
+
86
+ &.highlighted:before,
87
+ &.editing:before,
88
+ &:hover:before {
89
+ background-color: rgba(255, 255, 255, 0.3);
90
+ }
91
+
92
+ &:before {
93
+ border: solid 2px #000;
94
+ }
95
+
96
+ &:after {
97
+ border: solid 2px #fff;
98
+ @include animation(blink 3s linear infinite);
99
+ }
100
+ }
101
+
102
+ .audio_file_area {
103
+ &:before {
104
+ border-color: #006add;
105
+ }
106
+
107
+ .area_type_pictogram {
108
+ @include note-icon;
109
+ }
110
+ }
111
+
112
+ .text_only_area {
113
+ &:before {
114
+ border-color: pink;
115
+ }
116
+
117
+ .area_type_pictogram {
118
+ @include feather-icon;
119
+ }
120
+ }
121
+ }
122
+ }