musora-content-services 1.3.19 → 2.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.editorconfig +16 -0
- package/CHANGELOG.md +1 -3
- package/docs/config.js.html +14 -5
- package/docs/content.js.html +425 -0
- package/docs/global.html +3026 -0
- package/docs/index.html +2 -2
- package/docs/module-Config.html +60 -7
- package/docs/module-Content-Services-V2.html +2433 -0
- package/docs/module-Railcontent-Services.html +522 -2
- package/docs/module-Sanity-Services.html +57 -43
- package/docs/module-Session-Management.html +575 -0
- package/docs/module-User-Permissions.html +406 -0
- package/docs/railcontent.js.html +42 -5
- package/docs/sanity.js.html +290 -103
- package/docs/user_permissions.js.html +110 -0
- package/docs/user_sessions.js.html +139 -0
- package/docs/user_types.js.html +188 -0
- package/jsdoc.json +2 -0
- package/package.json +1 -1
- package/publish.sh +2 -2
- package/src/contentMetaData.js +307 -1088
- package/src/contentTypeConfig.js +108 -4
- package/src/filterBuilder.js +6 -6
- package/src/index.d.ts +61 -6
- package/src/index.js +61 -6
- package/src/{services → lib}/lastUpdated.js +17 -1
- package/src/services/config.js +0 -0
- package/src/services/content.js +371 -0
- package/src/services/dataContext.js +0 -0
- package/src/services/forum.js +57 -0
- package/src/services/railcontent.js +124 -11
- package/src/services/recommendations.js +19 -0
- package/src/services/sanity.js +278 -104
- package/src/services/{userPermissions.js → user/permissions.js} +16 -2
- package/src/services/user/sessions.js +67 -0
- package/src/services/user/types.js +116 -0
- package/src/services/userActivity.js +32 -0
- package/test/content.test.js +116 -0
- package/test/contentLikes.test.js +0 -0
- package/test/contentProgress.test.js +83 -5
- package/test/forum.test.js +18 -0
- package/test/initializeTests.js +6 -1
- package/test/{lastUpdated.test.js → lib/lastUpdated.test.js} +2 -5
- package/test/sanityQueryService.test.js +66 -18
- package/test/{userPermissions.test.js → user/permissions.test.js} +3 -3
- package/tools/generate-index.cjs +16 -3
package/src/contentMetaData.js
CHANGED
|
@@ -1,5 +1,55 @@
|
|
|
1
1
|
// Metadata is taken from the 'common' element and then merged with the <brand> metadata.
|
|
2
2
|
// Brand values are prioritized and will override the same property in the 'common' element.
|
|
3
|
+
|
|
4
|
+
const PROGRESS_NAMES = ['All', 'In Progress', 'Completed', 'Not Started']
|
|
5
|
+
const DIFFICULTY_STRINGS = ['Introductory', 'Beginner', 'Intermediate', 'Advanced', 'Expert']
|
|
6
|
+
|
|
7
|
+
class SortingOptions {
|
|
8
|
+
static Popularity = { value: '-popularity', name: 'Most Popular' }
|
|
9
|
+
static PopularityDesc = { value: 'recommended', name: 'Recommended' }
|
|
10
|
+
static PublishedOn = { value: '-published_on', name: 'Newest First' }
|
|
11
|
+
static PublishedOnDesc = { value: 'published_on', name: 'Oldest First' }
|
|
12
|
+
static Slug = { value: 'slug', name: 'Name: A to Z' }
|
|
13
|
+
static SlugDesc = { value: '-slug', name: 'Name: Z to A' }
|
|
14
|
+
static AllSortingOptions = [
|
|
15
|
+
this.PopularityDesc,
|
|
16
|
+
this.Popularity,
|
|
17
|
+
this.PublishedOn,
|
|
18
|
+
this.PublishedOnDesc,
|
|
19
|
+
this.Slug,
|
|
20
|
+
this.SlugDesc,
|
|
21
|
+
]
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export class Tabs {
|
|
25
|
+
static ForYou = { name: 'For You', short_name: 'For You' }
|
|
26
|
+
static Individuals = { name: 'Individuals', short_name: 'Individuals', value: 'type,individuals', cardType: 'big' }
|
|
27
|
+
static Collections = { name: 'Collections', short_name: 'Collections', value: 'type,collections', cardType: 'big' }
|
|
28
|
+
static ExploreAll = { name: 'Explore All', short_name: 'Explore All', icon: 'icon-filters', cardType: 'big'}
|
|
29
|
+
static All = { name: 'All', short_name: 'All', value: '' }
|
|
30
|
+
static Courses = { name: 'Courses', short_name: 'Courses', value: '' }
|
|
31
|
+
static SkillLevel = { name: 'Skill Level', short_name: 'SKILL LEVEL', is_group_by: true, value: 'difficulty_string' }
|
|
32
|
+
static Genres = { name: 'Genres', short_name: 'Genres', is_group_by: true, value: 'genre' }
|
|
33
|
+
static Completed = { name: 'Completed', short_name: 'COMPLETED', is_group_by: false, value: 'completed' }
|
|
34
|
+
static InProgress = { name: 'In Progress', short_name: 'IN PROGRESS', is_group_by: false, value: 'in progress' }
|
|
35
|
+
static OwnedChallenges = { name: 'Owned Challenges!!', short_name: 'OWNED CHALLENGES!!', value: 'owned' }
|
|
36
|
+
static Instructors = { name: 'Instructors', short_name: 'INSTRUCTORS', is_group_by: true, value: 'instructor' }
|
|
37
|
+
static Lessons = { name: 'Lessons', short_name: 'LESSONS', value: '' }
|
|
38
|
+
static Artists = { name: 'Artists', short_name: 'ARTISTS', is_group_by: true, value: 'artist' }
|
|
39
|
+
static Songs = { name: 'Songs', short_name: 'Songs', value: '' }
|
|
40
|
+
static Tutorials = { name: 'Tutorials', short_name: 'Tutorials', value: 'type,tutorials', cardType: 'big' }
|
|
41
|
+
static Transcriptions = { name: 'Transcriptions', short_name: 'Transcriptions', value: 'type,trancription', cardType: 'small' }
|
|
42
|
+
static PlayAlongs = { name: 'Play-Alongs', short_name: 'Play-Alongs', value:'type,play along', cardType: 'small' }
|
|
43
|
+
static RecentAll = { name: 'All', short_name: 'All' }
|
|
44
|
+
static RecentIncomplete = { name: 'Incomplete', short_name: 'Incomplete' }
|
|
45
|
+
static RecentCompleted = { name: 'Completed', short_name: 'Completed' }
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
export const TabResponseType = {
|
|
49
|
+
SECTIONS: 'sections',
|
|
50
|
+
CATALOG: 'catalog'
|
|
51
|
+
};
|
|
52
|
+
|
|
3
53
|
const commonMetadata = {
|
|
4
54
|
instructor: {
|
|
5
55
|
name: 'Coaches',
|
|
@@ -14,35 +64,13 @@ const commonMetadata = {
|
|
|
14
64
|
allowableFilters: ['difficulty', 'topic', 'genre'],
|
|
15
65
|
sortBy: '-published_on',
|
|
16
66
|
modalText:
|
|
17
|
-
|
|
67
|
+
'Challenges are a series of guided lessons designed to build your skills day-by-day.',
|
|
18
68
|
tabs: [
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
{
|
|
25
|
-
name: 'Skill Level',
|
|
26
|
-
short_name: 'SKILL LEVEL',
|
|
27
|
-
is_group_by: true,
|
|
28
|
-
value: 'difficulty_string',
|
|
29
|
-
},
|
|
30
|
-
{
|
|
31
|
-
name: 'Genres',
|
|
32
|
-
short_name: 'Genres',
|
|
33
|
-
is_group_by: true,
|
|
34
|
-
value: 'genre',
|
|
35
|
-
},
|
|
36
|
-
{
|
|
37
|
-
name: 'Completed',
|
|
38
|
-
short_name: 'COMPLETED',
|
|
39
|
-
value: 'completed',
|
|
40
|
-
},
|
|
41
|
-
{
|
|
42
|
-
name: 'Owned Challenges',
|
|
43
|
-
short_name: 'OWNED CHALLENGES',
|
|
44
|
-
value: 'owned',
|
|
45
|
-
},
|
|
69
|
+
Tabs.All,
|
|
70
|
+
Tabs.SkillLevel,
|
|
71
|
+
Tabs.Genres,
|
|
72
|
+
Tabs.Completed,
|
|
73
|
+
Tabs.OwnedChallenges,
|
|
46
74
|
],
|
|
47
75
|
},
|
|
48
76
|
'challenge-part': {
|
|
@@ -57,23 +85,9 @@ const commonMetadata = {
|
|
|
57
85
|
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'creativity', 'lifestyle'],
|
|
58
86
|
icon: 'icon-courses',
|
|
59
87
|
tabs: [
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
value: '',
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
name: 'Instructors',
|
|
67
|
-
short_name: 'INSTRUCTORS',
|
|
68
|
-
is_group_by: true,
|
|
69
|
-
value: 'instructor',
|
|
70
|
-
},
|
|
71
|
-
{
|
|
72
|
-
name: 'Genres',
|
|
73
|
-
short_name: 'Genres',
|
|
74
|
-
is_group_by: true,
|
|
75
|
-
value: 'genre',
|
|
76
|
-
},
|
|
88
|
+
Tabs.Courses,
|
|
89
|
+
Tabs.Instructors,
|
|
90
|
+
Tabs.Genres,
|
|
77
91
|
],
|
|
78
92
|
},
|
|
79
93
|
pack: {
|
|
@@ -85,82 +99,40 @@ const commonMetadata = {
|
|
|
85
99
|
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'creativity', 'lifestyle'],
|
|
86
100
|
sortBy: '-published_on',
|
|
87
101
|
tabs: [
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
value: '',
|
|
92
|
-
},
|
|
93
|
-
{
|
|
94
|
-
name: 'Instructors',
|
|
95
|
-
short_name: 'INSTRUCTORS',
|
|
96
|
-
is_group_by: true,
|
|
97
|
-
value: 'instructor',
|
|
98
|
-
},
|
|
99
|
-
{
|
|
100
|
-
name: 'Genres',
|
|
101
|
-
short_name: 'Genres',
|
|
102
|
-
is_group_by: true,
|
|
103
|
-
value: 'genre',
|
|
104
|
-
},
|
|
102
|
+
Tabs.Lessons,
|
|
103
|
+
Tabs.Instructors,
|
|
104
|
+
Tabs.Genres,
|
|
105
105
|
],
|
|
106
106
|
},
|
|
107
107
|
song: {
|
|
108
108
|
name: 'Songs',
|
|
109
109
|
icon: 'icon-songs',
|
|
110
110
|
description:
|
|
111
|
-
|
|
111
|
+
'Play the songs you love with note-for-note transcriptions and handy practice tools.',
|
|
112
112
|
allowableFilters: ['difficulty', 'genre', 'lifestyle', 'instrumentless'],
|
|
113
113
|
tabs: [
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
value: '',
|
|
118
|
-
},
|
|
119
|
-
{
|
|
120
|
-
name: 'Artists',
|
|
121
|
-
short_name: 'ARTISTS',
|
|
122
|
-
is_group_by: true,
|
|
123
|
-
value: 'artist',
|
|
124
|
-
},
|
|
125
|
-
{
|
|
126
|
-
name: 'Genres',
|
|
127
|
-
short_name: 'Genres',
|
|
128
|
-
is_group_by: true,
|
|
129
|
-
value: 'genre',
|
|
130
|
-
},
|
|
114
|
+
Tabs.Songs,
|
|
115
|
+
Tabs.Artists,
|
|
116
|
+
Tabs.Genres,
|
|
131
117
|
],
|
|
132
118
|
},
|
|
133
119
|
'quick-tips': {
|
|
134
120
|
name: 'Quick Tips',
|
|
135
121
|
icon: 'icon-shows',
|
|
136
122
|
description:
|
|
137
|
-
|
|
123
|
+
'Only have 10 minutes? These short lessons are designed to inspire you with quick tips and exercises, even if you don’t have lots of time to practice.',
|
|
138
124
|
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle', 'creativity'],
|
|
139
125
|
sortBy: '-published_on',
|
|
140
126
|
tabs: [
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
value: '',
|
|
145
|
-
},
|
|
146
|
-
{
|
|
147
|
-
name: 'Instructors',
|
|
148
|
-
short_name: 'INSTRUCTORS',
|
|
149
|
-
is_group_by: true,
|
|
150
|
-
value: 'instructor',
|
|
151
|
-
},
|
|
152
|
-
{
|
|
153
|
-
name: 'Genres',
|
|
154
|
-
short_name: 'Genres',
|
|
155
|
-
is_group_by: true,
|
|
156
|
-
value: 'genre',
|
|
157
|
-
},
|
|
127
|
+
Tabs.Lessons,
|
|
128
|
+
Tabs.Instructors,
|
|
129
|
+
Tabs.Genres,
|
|
158
130
|
],
|
|
159
131
|
},
|
|
160
132
|
'question-and-answer': {
|
|
161
133
|
name: 'Q&A',
|
|
162
134
|
description:
|
|
163
|
-
|
|
135
|
+
'Each week we go live to answer your questions. Submit your questions in advance using the button below, in the Q&A thread in the forums, or live in the community chat.',
|
|
164
136
|
allowableFilters: ['difficulty', 'genre', 'essential', 'theory'],
|
|
165
137
|
sortBy: '-published_on',
|
|
166
138
|
},
|
|
@@ -177,11 +149,7 @@ const commonMetadata = {
|
|
|
177
149
|
shortname: 'Workouts',
|
|
178
150
|
allowableFilters: ['difficulty', 'genre', 'topic'],
|
|
179
151
|
tabs: [
|
|
180
|
-
|
|
181
|
-
name: 'All',
|
|
182
|
-
short_name: 'ALL',
|
|
183
|
-
value: '',
|
|
184
|
-
},
|
|
152
|
+
Tabs.All,
|
|
185
153
|
{
|
|
186
154
|
name: '5 Minutes',
|
|
187
155
|
short_name: '5 MINS',
|
|
@@ -203,15 +171,10 @@ const commonMetadata = {
|
|
|
203
171
|
value: 'length_in_seconds,750+',
|
|
204
172
|
value_web: ['length_in_seconds > 750'],
|
|
205
173
|
},
|
|
206
|
-
|
|
207
|
-
name: 'Instructors',
|
|
208
|
-
short_name: 'INSTRUCTORS',
|
|
209
|
-
is_group_by: true,
|
|
210
|
-
value: 'instructor',
|
|
211
|
-
},
|
|
174
|
+
Tabs.Instructors,
|
|
212
175
|
],
|
|
213
176
|
modalText:
|
|
214
|
-
|
|
177
|
+
'Workouts are fun play-along lessons that help hone your musical skills. They cover various topics, and have multiple difficulty and duration options — so there’s always a perfect Workout for you. Just pick one, press start, and play along!',
|
|
215
178
|
},
|
|
216
179
|
'coach-lessons': {
|
|
217
180
|
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle', 'type'],
|
|
@@ -223,32 +186,60 @@ const commonMetadata = {
|
|
|
223
186
|
allowableFilters: ['difficulty', 'type'],
|
|
224
187
|
sortBy: '-published_on',
|
|
225
188
|
tabs: [
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
short_name: 'IN PROGRESS',
|
|
229
|
-
is_group_by: false,
|
|
230
|
-
value: 'in progress',
|
|
231
|
-
},
|
|
232
|
-
{
|
|
233
|
-
name: 'Completed',
|
|
234
|
-
short_name: 'COMPLETED',
|
|
235
|
-
is_group_by: false,
|
|
236
|
-
value: 'completed',
|
|
237
|
-
},
|
|
189
|
+
Tabs.InProgress,
|
|
190
|
+
Tabs.Completed,
|
|
238
191
|
],
|
|
239
192
|
},
|
|
240
193
|
'new-release': {
|
|
241
194
|
name: 'New Releases',
|
|
242
195
|
description:
|
|
243
|
-
|
|
196
|
+
"Here's a list of all lessons recently added to Drumeo. Browse on your own or use search to find whatever it is you'd like to learn!",
|
|
244
197
|
allowableFilters: ['type'],
|
|
245
198
|
sortBy: '-published_on',
|
|
246
199
|
tabs: [
|
|
247
|
-
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
200
|
+
Tabs.Lessons,
|
|
201
|
+
],
|
|
202
|
+
},
|
|
203
|
+
'lessons': {
|
|
204
|
+
name: 'Lessons',
|
|
205
|
+
filterOptions: {
|
|
206
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
207
|
+
style: ['Country/Folk', 'Funk/Disco', 'Hard Rock/Metal', 'Hip-Hop/Rap/EDM', 'Holiday/Soundtrack', 'Jazz/Blues', 'Latin/World', 'Pop/Rock', 'R&B/Soul', 'Worship/Gospel'],
|
|
208
|
+
type: ['Single Lessons', 'Practice Alongs', 'Performances', 'Courses', 'Shows', 'Documentaries', 'Live Archives', 'Student Archives'],
|
|
209
|
+
progress: PROGRESS_NAMES,
|
|
210
|
+
},
|
|
211
|
+
sortingOptions: {
|
|
212
|
+
title: 'Sort By',
|
|
213
|
+
type: 'radio',
|
|
214
|
+
items: SortingOptions.AllSortingOptions,
|
|
215
|
+
},
|
|
216
|
+
tabs: [
|
|
217
|
+
Tabs.ForYou,
|
|
218
|
+
Tabs.Individuals,
|
|
219
|
+
Tabs.Collections,
|
|
220
|
+
Tabs.ExploreAll
|
|
221
|
+
],
|
|
222
|
+
},
|
|
223
|
+
'songs': {
|
|
224
|
+
name: 'Songs',
|
|
225
|
+
filterOptions: {
|
|
226
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
227
|
+
style: ['Blues','Christian','Classical','Country','Disco','Electronic','Folk','Funk','Hip-Hop/Rap','Holiday','Jazz','Soundtrack',
|
|
228
|
+
'World','Metal','Pop','R&B/Soul','Rock'],
|
|
229
|
+
type: ['Tutorials', 'Transcriptions', 'Jam Tracks'],
|
|
230
|
+
progress: PROGRESS_NAMES,
|
|
231
|
+
},
|
|
232
|
+
sortingOptions: {
|
|
233
|
+
title: 'Sort By',
|
|
234
|
+
type: 'radio',
|
|
235
|
+
items: SortingOptions.AllSortingOptions,
|
|
236
|
+
},
|
|
237
|
+
tabs: [
|
|
238
|
+
Tabs.ForYou,
|
|
239
|
+
Tabs.Tutorials,
|
|
240
|
+
Tabs.Transcriptions,
|
|
241
|
+
Tabs.PlayAlongs,
|
|
242
|
+
Tabs.ExploreAll
|
|
252
243
|
],
|
|
253
244
|
},
|
|
254
245
|
}
|
|
@@ -256,86 +247,41 @@ const contentMetadata = {
|
|
|
256
247
|
drumeo: {
|
|
257
248
|
instructor: {
|
|
258
249
|
description:
|
|
259
|
-
|
|
250
|
+
'Your drumming journey is unique. You need personalized coaching that helps you reach your goals. Learn from some of the best drummers in the world!',
|
|
260
251
|
},
|
|
261
|
-
|
|
252
|
+
live: {
|
|
253
|
+
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/show-live.jpg',
|
|
254
|
+
name: 'Live',
|
|
255
|
+
url: '/live-streams',
|
|
256
|
+
shortname: 'Live Lessons',
|
|
257
|
+
icon: 'icon-shows',
|
|
262
258
|
description:
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
},
|
|
266
|
-
song: {
|
|
267
|
-
sortBy: '-published_on',
|
|
268
|
-
},
|
|
269
|
-
'song-tutorial': {
|
|
270
|
-
name: 'Song Tutorials',
|
|
271
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/songs.jpg',
|
|
272
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
259
|
+
'Practice sessions, Q&A, celebrations, and more are available during Drumeo live lessons. Subscribe to an event or the whole calendar, so you don’t miss out!',
|
|
260
|
+
allowableFilters: ['difficulty', 'genre', 'essential', 'theory'],
|
|
273
261
|
sortBy: '-published_on',
|
|
274
|
-
shortname: 'song tutorials',
|
|
275
|
-
icon: 'play-progress',
|
|
276
|
-
description: '',
|
|
277
|
-
amountOfFutureLessonsToShow: 3,
|
|
278
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
279
262
|
tabs: [
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
value: '',
|
|
284
|
-
},
|
|
285
|
-
{
|
|
286
|
-
name: 'Artists',
|
|
287
|
-
short_name: 'ARTISTS',
|
|
288
|
-
is_group_by: true,
|
|
289
|
-
value: 'artist',
|
|
290
|
-
},
|
|
291
|
-
{
|
|
292
|
-
name: 'Genres',
|
|
293
|
-
short_name: 'Genres',
|
|
294
|
-
is_group_by: true,
|
|
295
|
-
value: 'genre',
|
|
296
|
-
},
|
|
263
|
+
Tabs.Lessons,
|
|
264
|
+
Tabs.Instructors,
|
|
265
|
+
Tabs.Genres,
|
|
297
266
|
],
|
|
298
267
|
},
|
|
299
|
-
'
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
allowableFilters: [
|
|
306
|
-
sortBy: '
|
|
307
|
-
tabs: [
|
|
308
|
-
{
|
|
309
|
-
name: 'Lessons',
|
|
310
|
-
short_name: 'LESSONS',
|
|
311
|
-
value: '',
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
name: 'Instructors',
|
|
315
|
-
short_name: 'INSTRUCTORS',
|
|
316
|
-
is_group_by: true,
|
|
317
|
-
value: 'instructor',
|
|
318
|
-
},
|
|
319
|
-
{
|
|
320
|
-
name: 'Genres',
|
|
321
|
-
short_name: 'Genres',
|
|
322
|
-
is_group_by: true,
|
|
323
|
-
value: 'genre',
|
|
324
|
-
},
|
|
325
|
-
],
|
|
268
|
+
'odd-times': {
|
|
269
|
+
thumbnailUrl:
|
|
270
|
+
'https://musora.com/cdn-cgi/imagedelivery/0Hon__GSkIjm-B_W77SWCA/1bf6fc7a-d1a5-4934-d322-b9f6da454000/public',
|
|
271
|
+
name: 'Odd Times With Aaron Edgar',
|
|
272
|
+
shortname: 'Episodes',
|
|
273
|
+
icon: 'icon-shows',
|
|
274
|
+
allowableFilters: [],
|
|
275
|
+
sortBy: 'sort',
|
|
326
276
|
},
|
|
327
277
|
rudiment: {
|
|
328
278
|
name: 'Rudiments',
|
|
329
279
|
icon: 'icon-drums',
|
|
330
280
|
description:
|
|
331
|
-
|
|
281
|
+
'The 40 drum rudiments are essential for any drummer, no matter the style, genre, or scenario. You can use the videos below to help you learn, practice, and perfect every single one.',
|
|
332
282
|
allowableFilters: ['difficulty', 'genre', 'gear', 'topic'],
|
|
333
283
|
tabs: [
|
|
334
|
-
|
|
335
|
-
name: 'All',
|
|
336
|
-
short_name: 'ALL',
|
|
337
|
-
value: '',
|
|
338
|
-
},
|
|
284
|
+
Tabs.All,
|
|
339
285
|
{
|
|
340
286
|
name: 'Drags',
|
|
341
287
|
short_name: 'DRAGS',
|
|
@@ -363,951 +309,184 @@ const contentMetadata = {
|
|
|
363
309
|
],
|
|
364
310
|
sortBy: 'sort',
|
|
365
311
|
},
|
|
366
|
-
'
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
icon: 'icon-shows',
|
|
370
|
-
url: '/gear-guides',
|
|
371
|
-
description:
|
|
372
|
-
'Drummers love their gear - and in here you will find videos on gear demos, reviews, maintenance, tuning tips and much more.',
|
|
373
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
374
|
-
sortBy: '-published_on',
|
|
375
|
-
tabs: [
|
|
376
|
-
{
|
|
377
|
-
name: 'Lessons',
|
|
378
|
-
short_name: 'LESSONS',
|
|
379
|
-
value: '',
|
|
380
|
-
},
|
|
381
|
-
{
|
|
382
|
-
name: 'Instructors',
|
|
383
|
-
short_name: 'INSTRUCTORS',
|
|
384
|
-
is_group_by: true,
|
|
385
|
-
value: 'instructor',
|
|
386
|
-
},
|
|
387
|
-
{
|
|
388
|
-
name: 'Genres',
|
|
389
|
-
short_name: 'Genres',
|
|
390
|
-
is_group_by: true,
|
|
391
|
-
value: 'genre',
|
|
392
|
-
},
|
|
393
|
-
],
|
|
394
|
-
},
|
|
395
|
-
challenges: {
|
|
396
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/challenges.jpg',
|
|
397
|
-
name: 'Challenges',
|
|
398
|
-
icon: 'icon-shows',
|
|
399
|
-
description:
|
|
400
|
-
'Like drumming puzzles, our challenges are lessons that will take a little more brain power and practice to get down. They are a great way to motivate you to get behind the kit or pad to practice, and cover the entire gamut of drumming skill level.',
|
|
401
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
402
|
-
sortBy: '-published_on',
|
|
403
|
-
tabs: [
|
|
404
|
-
{
|
|
405
|
-
name: 'Lessons',
|
|
406
|
-
short_name: 'LESSONS',
|
|
407
|
-
value: '',
|
|
408
|
-
},
|
|
409
|
-
{
|
|
410
|
-
name: 'Instructors',
|
|
411
|
-
short_name: 'INSTRUCTORS',
|
|
412
|
-
is_group_by: true,
|
|
413
|
-
value: 'instructor',
|
|
414
|
-
},
|
|
415
|
-
{
|
|
416
|
-
name: 'Genres',
|
|
417
|
-
short_name: 'Genres',
|
|
418
|
-
is_group_by: true,
|
|
419
|
-
value: 'genre',
|
|
420
|
-
},
|
|
421
|
-
],
|
|
422
|
-
},
|
|
423
|
-
'boot-camp': {
|
|
424
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/bootcamps.jpg',
|
|
425
|
-
name: 'Boot Camps',
|
|
426
|
-
icon: 'icon-shows',
|
|
427
|
-
url: '/boot-camps',
|
|
428
|
-
description:
|
|
429
|
-
'Grab your sticks and practice along while watching a lesson! These boot camps are designed like workout videos so you can follow along and push your drumming at the same time.',
|
|
430
|
-
allowableFilters: ['difficulty', 'genre', 'essential'],
|
|
431
|
-
sortBy: '-published_on',
|
|
432
|
-
tabs: [
|
|
433
|
-
{
|
|
434
|
-
name: 'Lessons',
|
|
435
|
-
short_name: 'LESSONS',
|
|
436
|
-
value: '',
|
|
437
|
-
},
|
|
438
|
-
{
|
|
439
|
-
name: 'Instructors',
|
|
440
|
-
short_name: 'INSTRUCTORS',
|
|
441
|
-
is_group_by: true,
|
|
442
|
-
value: 'instructor',
|
|
443
|
-
},
|
|
444
|
-
{
|
|
445
|
-
name: 'Genres',
|
|
446
|
-
short_name: 'Genres',
|
|
447
|
-
is_group_by: true,
|
|
448
|
-
value: 'genre',
|
|
449
|
-
},
|
|
450
|
-
],
|
|
451
|
-
},
|
|
452
|
-
'quick-tips': {
|
|
453
|
-
thumbnailUrl:
|
|
454
|
-
'https://musora.com/cdn-cgi/imagedelivery/0Hon__GSkIjm-B_W77SWCA/78e68540-2b93-4445-882c-a19eef6b5d00/public',
|
|
455
|
-
},
|
|
456
|
-
podcast: {
|
|
457
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/show-podcast.jpg',
|
|
458
|
-
name: 'The Drumeo Podcast',
|
|
459
|
-
shortname: 'Episodes',
|
|
460
|
-
icon: 'icon-shows',
|
|
461
|
-
description:
|
|
462
|
-
'Enjoy our official Drumeo Podcasts in video form! Whether it be discussions about drum topics or interviews with the greats you are looking for, these are an entertaining and educational way to pass the time.',
|
|
463
|
-
allowableFilters: [],
|
|
464
|
-
sortBy: '-sort',
|
|
465
|
-
url: '/podcasts',
|
|
466
|
-
},
|
|
467
|
-
'on-the-road': {
|
|
468
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/on-the-road.jpg',
|
|
469
|
-
name: 'On The Road',
|
|
470
|
-
shortname: 'Episodes',
|
|
471
|
-
icon: 'icon-shows',
|
|
472
|
-
description:
|
|
473
|
-
'See Drumeo in action outside of the studio! This is your backstage pass to some of the biggest drum/music events in the world, as well as factory tours of your favorite drum brands.',
|
|
474
|
-
allowableFilters: [],
|
|
475
|
-
sortBy: '-published_on',
|
|
476
|
-
},
|
|
477
|
-
'behind-the-scenes': {
|
|
478
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/behind-the-scenes.jpg',
|
|
479
|
-
name: 'Behind the Scenes',
|
|
480
|
-
shortname: 'Episodes',
|
|
481
|
-
icon: 'icon-shows',
|
|
482
|
-
description:
|
|
483
|
-
'Have you ever wondered what it’s like to work at the Drumeo office? This is your behind the scenes look at what we do and all the shenanigans that happen day to day.',
|
|
484
|
-
allowableFilters: [],
|
|
485
|
-
sortBy: '-sort',
|
|
486
|
-
},
|
|
487
|
-
'study-the-greats': {
|
|
488
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/study-the-greats.jpg',
|
|
489
|
-
name: 'Study the Greats',
|
|
490
|
-
shortname: 'Episodes',
|
|
491
|
-
icon: 'icon-shows',
|
|
492
|
-
description:
|
|
493
|
-
'Study the greats with Austin Burcham! These lessons break down the beats, licks, and ideas of some of the most famous drummers we have had out on Drumeo.',
|
|
494
|
-
allowableFilters: [],
|
|
495
|
-
sortBy: 'sort',
|
|
496
|
-
},
|
|
497
|
-
live: {
|
|
498
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/show-live.jpg',
|
|
499
|
-
name: 'Live',
|
|
500
|
-
url: '/live-streams',
|
|
501
|
-
shortname: 'Live Lessons',
|
|
502
|
-
icon: 'icon-shows',
|
|
312
|
+
'play-along': {
|
|
313
|
+
name: 'Play Alongs',
|
|
314
|
+
icon: 'icon-play-alongs',
|
|
503
315
|
description:
|
|
504
|
-
|
|
505
|
-
allowableFilters: ['difficulty', 'genre', '
|
|
506
|
-
sortBy: '-published_on',
|
|
316
|
+
'Add your drumming to high-quality drumless play-along tracks - with handy playback tools to help you create the perfect performance.',
|
|
317
|
+
allowableFilters: ['difficulty', 'genre', 'bpm'],
|
|
507
318
|
tabs: [
|
|
508
319
|
{
|
|
509
|
-
name: '
|
|
510
|
-
short_name: '
|
|
320
|
+
name: 'All Play-Alongs',
|
|
321
|
+
short_name: 'ALL',
|
|
511
322
|
value: '',
|
|
512
323
|
},
|
|
513
|
-
{
|
|
514
|
-
name: 'Instructors',
|
|
515
|
-
short_name: 'INSTRUCTORS',
|
|
516
|
-
is_group_by: true,
|
|
517
|
-
value: 'instructor',
|
|
518
|
-
},
|
|
519
|
-
{
|
|
520
|
-
name: 'Genres',
|
|
521
|
-
short_name: 'Genres',
|
|
522
|
-
is_group_by: true,
|
|
523
|
-
value: 'genre',
|
|
524
|
-
},
|
|
525
324
|
],
|
|
526
325
|
},
|
|
527
|
-
|
|
528
|
-
|
|
529
|
-
|
|
530
|
-
|
|
531
|
-
|
|
532
|
-
|
|
533
|
-
|
|
534
|
-
|
|
535
|
-
sortBy: '-published_on',
|
|
326
|
+
'lessons': {
|
|
327
|
+
name: 'Lessons',
|
|
328
|
+
filterOptions: {
|
|
329
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
330
|
+
style: ['Country/Folk', 'Funk/Disco', 'Hard Rock/Metal', 'Hip-Hop/Rap/EDM', 'Holiday/Soundtrack', 'Jazz/Blues', 'Latin/World', 'Pop/Rock', 'R&B/Soul', 'Worship/Gospel'],
|
|
331
|
+
type: ['Single Lessons', 'Practice Alongs', 'Performances', 'Courses', 'Shows', 'Documentaries', 'Live Archives', 'Student Archives'],
|
|
332
|
+
progress: PROGRESS_NAMES,
|
|
333
|
+
},
|
|
536
334
|
tabs: [
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
},
|
|
542
|
-
{
|
|
543
|
-
name: 'Instructors',
|
|
544
|
-
short_name: 'INSTRUCTORS',
|
|
545
|
-
is_group_by: true,
|
|
546
|
-
value: 'instructor',
|
|
547
|
-
},
|
|
548
|
-
{
|
|
549
|
-
name: 'Genres',
|
|
550
|
-
short_name: 'Genres',
|
|
551
|
-
is_group_by: true,
|
|
552
|
-
value: 'genre',
|
|
553
|
-
},
|
|
335
|
+
Tabs.ForYou,
|
|
336
|
+
Tabs.Individuals,
|
|
337
|
+
Tabs.Collections,
|
|
338
|
+
Tabs.ExploreAll
|
|
554
339
|
],
|
|
555
340
|
},
|
|
556
|
-
|
|
557
|
-
|
|
558
|
-
name: 'Performances',
|
|
559
|
-
icon: 'icon-shows',
|
|
560
|
-
url: '/performances',
|
|
561
|
-
description:
|
|
562
|
-
"Watch the world's best drummers perform songs, duets, and other inspirational pieces. Sit back, relax, and get ready to be inspired by these amazing performances!",
|
|
563
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
564
|
-
sortBy: '-published_on',
|
|
341
|
+
'recent': {
|
|
342
|
+
name: 'Recent Lessons',
|
|
565
343
|
tabs: [
|
|
566
|
-
|
|
567
|
-
|
|
568
|
-
|
|
569
|
-
value: '',
|
|
570
|
-
},
|
|
571
|
-
{
|
|
572
|
-
name: 'Instructors',
|
|
573
|
-
short_name: 'INSTRUCTORS',
|
|
574
|
-
is_group_by: true,
|
|
575
|
-
value: 'instructor',
|
|
576
|
-
},
|
|
577
|
-
{
|
|
578
|
-
name: 'Genres',
|
|
579
|
-
short_name: 'Genres',
|
|
580
|
-
is_group_by: true,
|
|
581
|
-
value: 'genre',
|
|
582
|
-
},
|
|
344
|
+
Tabs.RecentAll,
|
|
345
|
+
Tabs.RecentIncomplete,
|
|
346
|
+
Tabs.RecentCompleted
|
|
583
347
|
],
|
|
584
348
|
},
|
|
585
|
-
'
|
|
586
|
-
|
|
587
|
-
|
|
588
|
-
|
|
589
|
-
|
|
590
|
-
|
|
591
|
-
|
|
592
|
-
sortBy: 'sort',
|
|
593
|
-
},
|
|
594
|
-
sonor: {
|
|
595
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/sonor-drums.jpg',
|
|
596
|
-
name: 'Sonor Drums: A Drumeo Documentary',
|
|
597
|
-
shortname: 'Videos',
|
|
598
|
-
icon: 'icon-shows',
|
|
599
|
-
description:
|
|
600
|
-
'Take a closer look at Sonor Drums with Jared as he explores the Sonor Factory in Bad Berleburg Germany and interviews the people behind the amazing brand.',
|
|
601
|
-
allowableFilters: [],
|
|
602
|
-
sortBy: 'published_on',
|
|
603
|
-
url: '/sonor-drums',
|
|
604
|
-
},
|
|
605
|
-
'paiste-cymbals': {
|
|
606
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/paiste-cymbals.jpg',
|
|
607
|
-
name: 'Paiste Cymbals: A Drumeo Documentary',
|
|
608
|
-
shortname: 'Videos',
|
|
609
|
-
icon: 'icon-shows',
|
|
610
|
-
description:
|
|
611
|
-
'Take a closer look at Paiste Cymbals with Jared as he explores the Paiste factory in Switzerland and interviews the people behind the amazing brand.',
|
|
612
|
-
allowableFilters: [],
|
|
613
|
-
sortBy: 'published_on',
|
|
614
|
-
},
|
|
615
|
-
'rhythms-from-another-planet': {
|
|
616
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/rythms-from-another-planet.jpg',
|
|
617
|
-
name: 'Rhythms From Another Planet',
|
|
618
|
-
shortname: 'Videos',
|
|
619
|
-
icon: 'icon-shows',
|
|
620
|
-
description:
|
|
621
|
-
'Flying Saucers Over Canada! Aliens from the Horsehead Nebula are here glitching humans! Aaron assembles an assortment of numerically nimble nerds to save the day! Tag along for the adventure, Glitchings, Quintuplet Panteradies, and save the world to learn some phenomenally fancy fives!',
|
|
622
|
-
allowableFilters: [],
|
|
623
|
-
sortBy: 'sort',
|
|
624
|
-
},
|
|
625
|
-
tama: {
|
|
626
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/tama-drums.jpg',
|
|
627
|
-
name: 'Tama Drums',
|
|
628
|
-
shortname: 'Episodes',
|
|
629
|
-
icon: 'icon-shows',
|
|
630
|
-
description:
|
|
631
|
-
'Take a closer look at Tama Drums with Jared as he explores the Tama factory in Japan, learns about Japanese Culture, experiments with traditional Taiko drummers, and interviews the people behind the amazing brand.',
|
|
632
|
-
allowableFilters: [],
|
|
633
|
-
sortBy: 'published_on',
|
|
634
|
-
url: '/tama-drums',
|
|
635
|
-
},
|
|
636
|
-
'question-and-answer': {
|
|
637
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/question-answer.jpg',
|
|
638
|
-
shortname: 'Lessons',
|
|
639
|
-
icon: 'icon-shows',
|
|
640
|
-
description:
|
|
641
|
-
'Get any drum related question answered by a Drumeo instructor on our weekly Q&A episodes! You can submit as many questions as you like by clicking the button below, and either join us live for the next episode, or check for your answer in the archived videos below!',
|
|
642
|
-
},
|
|
643
|
-
'student-collaboration': {
|
|
644
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/student-collaborations.jpg',
|
|
645
|
-
name: 'Drumeo Monthly Collaborations',
|
|
646
|
-
shortname: 'Collaborations',
|
|
647
|
-
icon: 'icon-shows',
|
|
648
|
-
description:
|
|
649
|
-
'Collaborate with the community with Drumeo Monthly Collaborations! Each month a new Play-Along is chosen and members are tasked to submit their videos playing along to the song. At the end of each month, every video is joined together to create a single performance!',
|
|
650
|
-
allowableFilters: [],
|
|
651
|
-
sortBy: '-published_on',
|
|
652
|
-
url: '/student-collaborations',
|
|
653
|
-
trailer1: {
|
|
654
|
-
vimeo_video_id: 448684113,
|
|
655
|
-
video_playback_endpoints: [
|
|
656
|
-
{
|
|
657
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/240p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=7f75733de09ec3266322845bdd2dd9a0e740c916b9a824710d6272b8d51793ae',
|
|
658
|
-
width: 426,
|
|
659
|
-
height: 240,
|
|
660
|
-
},
|
|
661
|
-
{
|
|
662
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/360p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=c55155a36018e86d6f008d905075bb749f2ee5fb12989845a3d2e5a9c28141e6',
|
|
663
|
-
width: 640,
|
|
664
|
-
height: 360,
|
|
665
|
-
},
|
|
666
|
-
{
|
|
667
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/540p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=d71e1f8771e78e398c17ee0167611c1619ef11f90b0287b6dff1678279cb67a3',
|
|
668
|
-
width: 960,
|
|
669
|
-
height: 540,
|
|
670
|
-
},
|
|
671
|
-
{
|
|
672
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/720p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=538b5eec06dd01591f156a96c4108e217bd7ad8903e5084e8fb3428e0f8a69a6',
|
|
673
|
-
width: 1280,
|
|
674
|
-
height: 720,
|
|
675
|
-
},
|
|
676
|
-
{
|
|
677
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/1080p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=589537c220ca4c99e746a2d24e2dad8017da016d195485a17a2c8409b3ea8c60',
|
|
678
|
-
width: 1920,
|
|
679
|
-
height: 1080,
|
|
680
|
-
},
|
|
681
|
-
{
|
|
682
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/1440p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=dda9240afee2489dbedda42499d432ebc1454e5ff2bb615bf2af8b8a298d6044',
|
|
683
|
-
width: 2560,
|
|
684
|
-
height: 1440,
|
|
685
|
-
},
|
|
686
|
-
{
|
|
687
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684113/rendition/2160p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=92997d941ff58b9cf8e17d6cf8ec07b332bcf61138e8ea0805fba091501e0e7c',
|
|
688
|
-
width: 3840,
|
|
689
|
-
height: 2160,
|
|
690
|
-
},
|
|
349
|
+
'songs': {
|
|
350
|
+
name: 'Songs',
|
|
351
|
+
filterOptions: {
|
|
352
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
353
|
+
style: [
|
|
354
|
+
'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
|
|
355
|
+
'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
|
|
691
356
|
],
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
'https://player.vimeo.com/external/448684113.m3u8?s=dfb6ad351fcc3f2e5d98c7e7fac7303fa2b0a416&oauth2_token_id=1284792283',
|
|
357
|
+
type: ['Tutorials', 'Transcriptions', 'Play Alongs', 'Jam Tracks'],
|
|
358
|
+
progress: PROGRESS_NAMES,
|
|
695
359
|
},
|
|
696
|
-
|
|
697
|
-
|
|
698
|
-
|
|
699
|
-
|
|
700
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/240p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=1c9adb344eaf45a1f854a209e62616e19feea57516c37f5eb1f884cac928fb06',
|
|
701
|
-
width: 426,
|
|
702
|
-
height: 240,
|
|
703
|
-
},
|
|
704
|
-
{
|
|
705
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/360p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=cde9f4fb028217960e5a2612688d8d18550db81964f1bf21f003fced6b9f63dd',
|
|
706
|
-
width: 640,
|
|
707
|
-
height: 360,
|
|
708
|
-
},
|
|
709
|
-
{
|
|
710
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/540p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=eb870305e3c2719aad514b07026030d7738b5a107693794d0745574e5392fd12',
|
|
711
|
-
width: 960,
|
|
712
|
-
height: 540,
|
|
713
|
-
},
|
|
714
|
-
{
|
|
715
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/720p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=309527ab8047731ace6a103a24536f952a5dc3bd8be2c5c2529385cc2377f8f6',
|
|
716
|
-
width: 1280,
|
|
717
|
-
height: 720,
|
|
718
|
-
},
|
|
719
|
-
{
|
|
720
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/1080p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=f93e002d6d73facf146a3cdcb2d74d8b42677897282d0f89abb02871c664d6d4',
|
|
721
|
-
width: 1920,
|
|
722
|
-
height: 1080,
|
|
723
|
-
},
|
|
724
|
-
{
|
|
725
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/1440p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=4b83c2a73161532bbe36dfae5a1203aa4b6475c60554117533dcd303e76cb67b',
|
|
726
|
-
width: 2560,
|
|
727
|
-
height: 1440,
|
|
728
|
-
},
|
|
729
|
-
{
|
|
730
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/448684140/rendition/2160p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=3108a1db7e86bd133fe01fd4384980ffaa62e854af5588d94a7f8befb92db563',
|
|
731
|
-
width: 3840,
|
|
732
|
-
height: 2160,
|
|
733
|
-
},
|
|
734
|
-
],
|
|
735
|
-
length_in_seconds: 106,
|
|
736
|
-
hlsManifestUrl:
|
|
737
|
-
'https://player.vimeo.com/external/448684140.m3u8?s=06db72bb51f3bc10cde8367452c3cb19ed8834b2&oauth2_token_id=1284792283',
|
|
360
|
+
sortingOptions: {
|
|
361
|
+
title: 'Sort By',
|
|
362
|
+
type: 'radio',
|
|
363
|
+
items: SortingOptions.AllSortingOptions,
|
|
738
364
|
},
|
|
739
|
-
},
|
|
740
|
-
'diy-drum-experiment': {
|
|
741
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/diy-drum-experiments.jpg',
|
|
742
|
-
name: 'DIY Drum Experiments',
|
|
743
|
-
shortname: 'Episodes',
|
|
744
|
-
icon: 'icon-shows',
|
|
745
|
-
description:
|
|
746
|
-
'Step into David Raouf’s workshop where he will show you how to repurpose old and broken drum gear into usable and functional items! Whether you are a handyman or not, this show will give you unique and creative ideas and drum hacks that you have never seen before!',
|
|
747
|
-
allowableFilters: [],
|
|
748
|
-
sortBy: 'sort',
|
|
749
|
-
url: '/diy-drum-experiments',
|
|
750
|
-
},
|
|
751
|
-
'rhythmic-adventures-of-captain-carson': {
|
|
752
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/raocc-showcard.jpg',
|
|
753
|
-
name: 'Rhythmic Adventures of Captain Carson',
|
|
754
|
-
shortname: 'Episodes',
|
|
755
|
-
icon: 'icon-shows',
|
|
756
|
-
description:
|
|
757
|
-
'In The Rhythmic Adventures of Captain Carson, kids will join Captain Carson and his best friends Ricky (the robot) and Gary (the alien) as they fly through space and learn fun musical grooves. But they’ve got to be quick, because the tricky Groove Troll is trying to steal their groove!',
|
|
758
|
-
allowableFilters: [],
|
|
759
|
-
sortBy: 'sort',
|
|
760
|
-
},
|
|
761
|
-
'in-rhythm': {
|
|
762
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/in-rhythm-show-card.jpg',
|
|
763
|
-
name: 'In Rhythm',
|
|
764
|
-
shortname: 'Episodes',
|
|
765
|
-
icon: 'icon-shows',
|
|
766
|
-
description:
|
|
767
|
-
'Witness a day in the life of a professional touring drummer on the road! “In Rhythm” gives you an inside look into professional drummers, what they do on the road outside of performing, and how they warm-up and prepare for the big stage!',
|
|
768
|
-
allowableFilters: [],
|
|
769
|
-
sortBy: 'sort',
|
|
770
|
-
},
|
|
771
|
-
'backstage-secret': {
|
|
772
|
-
thumbnailUrl:
|
|
773
|
-
'https://www.musora.com/musora-cdn/image/width=500,height=500,quality=95,fit=cover/https://d1923uyy6spedc.cloudfront.net/RushDoc-Neil-02.jpg',
|
|
774
|
-
name: 'Backstage Secrets',
|
|
775
|
-
shortname: 'Episodes',
|
|
776
|
-
icon: 'icon-shows',
|
|
777
|
-
description:
|
|
778
|
-
"Join the roadies of Rush and get a firsthand look at what it's like to be part of one of our favorite bands. You’re going on an exciting, behind-the-scenes journey to their 2008 Snakes & Arrows Concert Tour - an exclusive invitation to witness the reveal of all of the band’s backstage secrets. Roadies are the unsung heroes of any band - and being a roadie with a top-rated, world-famous rock and roll band is a highly coveted job. It may appear to be all glamour and adventure, but it can be a grueling marathon of 18-hour workdays!",
|
|
779
|
-
allowableFilters: [],
|
|
780
|
-
sortBy: 'sort',
|
|
781
|
-
url: '/backstage-secrets',
|
|
782
|
-
},
|
|
783
|
-
'the-history-of-electronic-drums': {
|
|
784
|
-
thumbnailUrl:
|
|
785
|
-
'https://imagedelivery.net/0Hon__GSkIjm-B_W77SWCA/31847ba4-02d4-4c6a-4507-32b40284a000/width=500,height=500,quality=95,fit=cover',
|
|
786
|
-
name: 'The History Of Electronic Drums',
|
|
787
|
-
shortname: 'Episodes',
|
|
788
|
-
icon: 'icon-shows',
|
|
789
|
-
description:
|
|
790
|
-
'The music industry is dominated by electronic music and electronic drums. For the first time ever, we’ve gathered 14 of the most innovative electronic drum kits to learn more about how they were made, how they work, and most importantly, how they sound.',
|
|
791
|
-
allowableFilters: [],
|
|
792
|
-
sortBy: 'sort',
|
|
793
|
-
amountOfFutureLessonsToShow: 10,
|
|
794
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
795
|
-
},
|
|
796
|
-
'drum-fest-international-2022': {
|
|
797
|
-
thumbnailUrl:
|
|
798
|
-
'https://musora.com/cdn-cgi/imagedelivery/0Hon__GSkIjm-B_W77SWCA/2c12c9ae-5a67-4767-f257-d1fa3693bd00/public',
|
|
799
|
-
name: '2022 Drum Fest International',
|
|
800
|
-
shortname: 'Episodes',
|
|
801
|
-
icon: 'icon-shows',
|
|
802
|
-
description:
|
|
803
|
-
'In 2022, Drumeo had the exclusive honor of filming Ralph Angelillo’s Drum Fest International. It was an incredible gathering of some of the best drummers in the world. Tune in to see a spectrum of unforgettable performances - from Greyson Nekrutman’s show-stopping jazz, to Simon Phillips’ fancy fusion work, these are videos you do not want to miss.',
|
|
804
|
-
allowableFilters: [],
|
|
805
|
-
sortBy: 'sort',
|
|
806
|
-
},
|
|
807
|
-
spotlight: {
|
|
808
|
-
thumbnailUrl:
|
|
809
|
-
'https://imagedelivery.net/0Hon__GSkIjm-B_W77SWCA/0b67bd7f-220f-41f3-1797-8c6883a00a00/width=500,height=500,quality=95,fit=cover',
|
|
810
|
-
name: 'Spotlight',
|
|
811
|
-
shortname: 'Spotlight',
|
|
812
|
-
icon: 'icon-shows',
|
|
813
|
-
description:
|
|
814
|
-
"We're standing on the shoulders of giants. Those who came before us paved the way for everyone who came after by developing most of what we take for granted today, in the world of drum-set playing. Learning about these giants and their contributions to our craft is essential to fully appreciate and understand what we do as musicians. This is the journey Todd Sucherman is inviting you to take on with him, as he navigates the incredible world of Spotlight.",
|
|
815
|
-
allowableFilters: [],
|
|
816
|
-
sortBy: 'sort',
|
|
817
365
|
tabs: [
|
|
818
|
-
|
|
819
|
-
|
|
820
|
-
|
|
821
|
-
|
|
822
|
-
|
|
366
|
+
Tabs.ForYou,
|
|
367
|
+
Tabs.Tutorials,
|
|
368
|
+
Tabs.Transcriptions,
|
|
369
|
+
Tabs.PlayAlongs,
|
|
370
|
+
Tabs.ExploreAll
|
|
823
371
|
],
|
|
824
372
|
},
|
|
825
|
-
'play-along': {
|
|
826
|
-
name: 'Play Alongs',
|
|
827
|
-
icon: 'icon-play-alongs',
|
|
828
|
-
description:
|
|
829
|
-
'Add your drumming to high-quality drumless play-along tracks - with handy playback tools to help you create the perfect performance.',
|
|
830
|
-
allowableFilters: ['difficulty', 'genre', 'bpm'],
|
|
831
|
-
tabs: [
|
|
832
|
-
{
|
|
833
|
-
name: 'All Play-Alongs',
|
|
834
|
-
short_name: 'ALL',
|
|
835
|
-
value: '',
|
|
836
|
-
},
|
|
837
|
-
],
|
|
838
|
-
},
|
|
839
|
-
pack: {
|
|
840
|
-
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle'],
|
|
841
|
-
},
|
|
842
|
-
'odd-times': {
|
|
843
|
-
thumbnailUrl:
|
|
844
|
-
'https://musora.com/cdn-cgi/imagedelivery/0Hon__GSkIjm-B_W77SWCA/1bf6fc7a-d1a5-4934-d322-b9f6da454000/public',
|
|
845
|
-
name: 'Odd Times With Aaron Edgar',
|
|
846
|
-
shortname: 'Episodes',
|
|
847
|
-
icon: 'icon-shows',
|
|
848
|
-
allowableFilters: [],
|
|
849
|
-
sortBy: 'sort',
|
|
850
|
-
},
|
|
851
373
|
},
|
|
852
374
|
pianote: {
|
|
853
|
-
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
862
|
-
sortBy: '-published_on',
|
|
863
|
-
},
|
|
864
|
-
course: {
|
|
865
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/courses.jpg',
|
|
866
|
-
sortBy: '-published_on',
|
|
867
|
-
shortname: 'Courses',
|
|
868
|
-
icon: 'icon-courses',
|
|
869
|
-
description:
|
|
870
|
-
"Tackle your next piano goal with bite-sized courses from many of the world's best pianists.",
|
|
871
|
-
amountOfFutureLessonsToShow: 3,
|
|
872
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
873
|
-
},
|
|
874
|
-
'quick-tips': {
|
|
875
|
-
thumbnailUrl:
|
|
876
|
-
'https://imagedelivery.net/0Hon__GSkIjm-B_W77SWCA/7979495d-d06a-4f78-161f-2f670f6f9800/public',
|
|
877
|
-
shortname: 'Quick Tips',
|
|
878
|
-
icon: 'fa-lightbulb',
|
|
879
|
-
amountOfFutureLessonsToShow: 3,
|
|
880
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
881
|
-
},
|
|
882
|
-
'student-review': {
|
|
883
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/student-review.jpg',
|
|
884
|
-
shortname: 'Student Reviews',
|
|
885
|
-
description:
|
|
886
|
-
'Want feedback on your playing? Submit a video for student review. We will watch your submission and then provide helpful encouragement and feedback. This is a great way to build accountability and benefit from the expertise of our teachers.',
|
|
887
|
-
amountOfFutureLessonsToShow: 3,
|
|
888
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
889
|
-
},
|
|
890
|
-
'question-and-answer': {
|
|
891
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/question-answer.jpg',
|
|
892
|
-
shortname: 'Q&A',
|
|
893
|
-
icon: 'icon-student-focus',
|
|
894
|
-
description:
|
|
895
|
-
'Each week we go live to answer your questions. Submit your questions in advance using the button below, in the Q&A thread in the forums, or live in the community chat.',
|
|
896
|
-
amountOfFutureLessonsToShow: 3,
|
|
897
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
898
|
-
tabs: [
|
|
899
|
-
{
|
|
900
|
-
name: 'Lessons',
|
|
901
|
-
short_name: 'LESSONS',
|
|
902
|
-
value: '',
|
|
903
|
-
},
|
|
904
|
-
{
|
|
905
|
-
name: 'Instructors',
|
|
906
|
-
short_name: 'INSTRUCTORS',
|
|
907
|
-
is_group_by: true,
|
|
908
|
-
value: 'instructor',
|
|
909
|
-
},
|
|
910
|
-
{
|
|
911
|
-
name: 'Genres',
|
|
912
|
-
short_name: 'Genres',
|
|
913
|
-
is_group_by: true,
|
|
914
|
-
value: 'genre',
|
|
915
|
-
},
|
|
916
|
-
],
|
|
917
|
-
},
|
|
918
|
-
'boot-camp': {
|
|
919
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/bootcamps.jpg',
|
|
920
|
-
name: 'Bootcamps',
|
|
921
|
-
allowableFilters: ['difficulty', 'genre', 'essential'],
|
|
922
|
-
sortBy: '-published_on',
|
|
923
|
-
shortname: 'Bootcamps',
|
|
924
|
-
url: '/boot-camps',
|
|
925
|
-
icon: 'icon-chords-scales-icon',
|
|
926
|
-
description:
|
|
927
|
-
'These bootcamps deliver results, but they also require commitment. Select a topic that you want to become an expert in, and get ready to learn!',
|
|
928
|
-
amountOfFutureLessonsToShow: 3,
|
|
929
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
930
|
-
tabs: [
|
|
931
|
-
{
|
|
932
|
-
name: 'Lessons',
|
|
933
|
-
short_name: 'LESSONS',
|
|
934
|
-
value: '',
|
|
935
|
-
},
|
|
936
|
-
{
|
|
937
|
-
name: 'Instructors',
|
|
938
|
-
short_name: 'INSTRUCTORS',
|
|
939
|
-
is_group_by: true,
|
|
940
|
-
value: 'instructor',
|
|
941
|
-
},
|
|
942
|
-
{
|
|
943
|
-
name: 'Genres',
|
|
944
|
-
short_name: 'Genres',
|
|
945
|
-
is_group_by: true,
|
|
946
|
-
value: 'genre',
|
|
947
|
-
},
|
|
948
|
-
],
|
|
949
|
-
},
|
|
950
|
-
podcast: {
|
|
951
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/podcast.png',
|
|
952
|
-
name: 'The Pianote Podcast',
|
|
953
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
954
|
-
sortBy: '-published_on',
|
|
955
|
-
shortname: 'Podcast',
|
|
956
|
-
icon: 'icon-podcast',
|
|
957
|
-
url: '/podcasts',
|
|
958
|
-
description:
|
|
959
|
-
'Join Lisa in her quest to unify piano players around the world, build community, and make playing the piano cool!',
|
|
960
|
-
amountOfFutureLessonsToShow: 3,
|
|
961
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
375
|
+
'lessons': {
|
|
376
|
+
name: 'Lessons',
|
|
377
|
+
filterOptions: {
|
|
378
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
379
|
+
style: ['Classical', 'Country/Folk', 'Funk/Disco', 'Hip-Hop/Rap/EDM', 'Holiday/Soundtrack', 'Jazz/Blues', 'Latin/World', 'Pop/Rock', 'R&B/Soul', 'Worship/Gospel'],
|
|
380
|
+
type: ['Single Lessons', 'Practice Alongs', 'Performances', 'Courses', 'Shows', 'Documentaries', 'Live Archives', 'Student Archives'],
|
|
381
|
+
progress: PROGRESS_NAMES,
|
|
382
|
+
},
|
|
962
383
|
tabs: [
|
|
963
|
-
|
|
964
|
-
|
|
965
|
-
|
|
966
|
-
|
|
967
|
-
},
|
|
968
|
-
{
|
|
969
|
-
name: 'Instructors',
|
|
970
|
-
short_name: 'INSTRUCTORS',
|
|
971
|
-
is_group_by: true,
|
|
972
|
-
value: 'instructor',
|
|
973
|
-
},
|
|
974
|
-
{
|
|
975
|
-
name: 'Genres',
|
|
976
|
-
short_name: 'Genres',
|
|
977
|
-
is_group_by: true,
|
|
978
|
-
value: 'genre',
|
|
979
|
-
},
|
|
384
|
+
Tabs.ForYou,
|
|
385
|
+
Tabs.Individuals,
|
|
386
|
+
Tabs.Collections,
|
|
387
|
+
Tabs.ExploreAll
|
|
980
388
|
],
|
|
981
389
|
},
|
|
982
|
-
'
|
|
983
|
-
name:
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
390
|
+
'songs': {
|
|
391
|
+
name: 'Songs',
|
|
392
|
+
filterOptions: {
|
|
393
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
394
|
+
style: [
|
|
395
|
+
'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
|
|
396
|
+
'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
|
|
397
|
+
],
|
|
398
|
+
type: ['Tutorials', 'Sheet Music', 'Play Alongs', 'Jam Tracks'],
|
|
399
|
+
progress: PROGRESS_NAMES,
|
|
400
|
+
},
|
|
401
|
+
sortingOptions: {
|
|
402
|
+
title: 'Sort By',
|
|
403
|
+
type: 'radio',
|
|
404
|
+
items: SortingOptions.AllSortingOptions,
|
|
405
|
+
},
|
|
992
406
|
tabs: [
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
{
|
|
999
|
-
name: 'Artists',
|
|
1000
|
-
short_name: 'ARTISTS',
|
|
1001
|
-
is_group_by: true,
|
|
1002
|
-
value: 'artist',
|
|
1003
|
-
},
|
|
1004
|
-
{
|
|
1005
|
-
name: 'Genres',
|
|
1006
|
-
short_name: 'Genres',
|
|
1007
|
-
is_group_by: true,
|
|
1008
|
-
value: 'genre',
|
|
1009
|
-
},
|
|
407
|
+
Tabs.ForYou,
|
|
408
|
+
Tabs.Tutorials,
|
|
409
|
+
Tabs.Transcriptions,
|
|
410
|
+
Tabs.PlayAlongs,
|
|
411
|
+
Tabs.ExploreAll
|
|
1010
412
|
],
|
|
1011
413
|
},
|
|
1012
414
|
},
|
|
1013
415
|
guitareo: {
|
|
1014
416
|
instructor: {
|
|
1015
417
|
description:
|
|
1016
|
-
|
|
1017
|
-
},
|
|
1018
|
-
course: {
|
|
1019
|
-
description:
|
|
1020
|
-
'These jam-packed training courses cover various lesson topics in detail. Find one that suits your guitar goals, and get started!',
|
|
1021
|
-
},
|
|
1022
|
-
challenge: {
|
|
1023
|
-
tabs: [
|
|
1024
|
-
{
|
|
1025
|
-
name: 'All',
|
|
1026
|
-
short_name: 'All',
|
|
1027
|
-
value: '',
|
|
1028
|
-
},
|
|
1029
|
-
{
|
|
1030
|
-
name: 'Completed',
|
|
1031
|
-
short_name: 'COMPLETED',
|
|
1032
|
-
value: 'completed',
|
|
1033
|
-
},
|
|
1034
|
-
{
|
|
1035
|
-
name: 'Owned Challenges',
|
|
1036
|
-
short_name: 'OWNED CHALLENGES',
|
|
1037
|
-
value: 'owned',
|
|
1038
|
-
},
|
|
1039
|
-
],
|
|
1040
|
-
},
|
|
1041
|
-
song: {
|
|
1042
|
-
allowableFilters: ['difficulty', 'genre', 'lifestyle', 'instrumentless'],
|
|
1043
|
-
},
|
|
1044
|
-
'song-tutorial': {
|
|
1045
|
-
name: 'Song Tutorials',
|
|
1046
|
-
thumbnailUrl: 'https://dpwjbsxqtam5n.cloudfront.net/shows/pianote/songs.jpg',
|
|
1047
|
-
allowableFilters: ['difficulty', 'genre'],
|
|
1048
|
-
sortBy: '-published_on',
|
|
1049
|
-
shortname: 'song tutorials',
|
|
1050
|
-
icon: 'play-progress',
|
|
1051
|
-
description: '',
|
|
1052
|
-
amountOfFutureLessonsToShow: 3,
|
|
1053
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
1054
|
-
tabs: [
|
|
1055
|
-
{
|
|
1056
|
-
name: 'Lessons',
|
|
1057
|
-
short_name: 'Lessons',
|
|
1058
|
-
value: '',
|
|
1059
|
-
},
|
|
1060
|
-
{
|
|
1061
|
-
name: 'Artists',
|
|
1062
|
-
short_name: 'ARTISTS',
|
|
1063
|
-
is_group_by: true,
|
|
1064
|
-
value: 'artist',
|
|
1065
|
-
},
|
|
1066
|
-
{
|
|
1067
|
-
name: 'Genres',
|
|
1068
|
-
short_name: 'Genres',
|
|
1069
|
-
is_group_by: true,
|
|
1070
|
-
value: 'genre',
|
|
1071
|
-
},
|
|
1072
|
-
],
|
|
1073
|
-
},
|
|
1074
|
-
'play-along': {
|
|
1075
|
-
name: 'Play Alongs',
|
|
1076
|
-
icon: 'icon-play-alongs',
|
|
1077
|
-
description:
|
|
1078
|
-
'Our play-along feature teaches you chords, strumming patterns, riffs, and song layouts -- with handy playback tools to help you create the perfect performance.',
|
|
1079
|
-
allowableFilters: ['difficulty', 'genre', 'essential', 'theory', 'lifestyle'],
|
|
1080
|
-
tabs: [
|
|
1081
|
-
{
|
|
1082
|
-
name: 'All Play-Alongs',
|
|
1083
|
-
short_name: 'ALL',
|
|
1084
|
-
value: '',
|
|
1085
|
-
},
|
|
1086
|
-
],
|
|
418
|
+
'Tackle your next guitar goal with bite-sized courses from many of the world\'s best guitarists.',
|
|
1087
419
|
},
|
|
1088
420
|
recording: {
|
|
1089
421
|
name: 'Archives',
|
|
1090
422
|
shortname: 'Lessons',
|
|
1091
423
|
icon: 'icon-library',
|
|
1092
424
|
description:
|
|
1093
|
-
|
|
425
|
+
'Miss a live event or just want to watch a particular episode again? This is the place to do it. All of the Guitareo live broadcasts are archived here for you to watch at your leisure. If you have any questions or want to discuss the topics mentioned in the videos you can always post in the forum.',
|
|
1094
426
|
allowableFilters: ['difficulty', 'genre'],
|
|
1095
427
|
tabs: [
|
|
1096
|
-
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
value: '',
|
|
1100
|
-
},
|
|
1101
|
-
{
|
|
1102
|
-
name: 'Instructors',
|
|
1103
|
-
short_name: 'INSTRUCTORS',
|
|
1104
|
-
is_group_by: true,
|
|
1105
|
-
value: 'instructor',
|
|
1106
|
-
},
|
|
1107
|
-
{
|
|
1108
|
-
name: 'Genres',
|
|
1109
|
-
short_name: 'Genres',
|
|
1110
|
-
is_group_by: true,
|
|
1111
|
-
value: 'genre',
|
|
1112
|
-
},
|
|
428
|
+
Tabs.Lessons,
|
|
429
|
+
Tabs.Instructors,
|
|
430
|
+
Tabs.Genres,
|
|
1113
431
|
],
|
|
1114
432
|
},
|
|
1115
|
-
'
|
|
1116
|
-
|
|
1117
|
-
|
|
1118
|
-
|
|
1119
|
-
|
|
1120
|
-
|
|
1121
|
-
|
|
1122
|
-
|
|
1123
|
-
|
|
1124
|
-
|
|
1125
|
-
|
|
1126
|
-
|
|
1127
|
-
|
|
1128
|
-
|
|
1129
|
-
|
|
1130
|
-
|
|
1131
|
-
description:
|
|
1132
|
-
'Want feedback on your playing? Submit a video for student review. We will watch your submission and then provide helpful encouragement and feedback. This is a great way to build accountability and benefit from the expertise of our teachers.',
|
|
1133
|
-
},
|
|
1134
|
-
},
|
|
1135
|
-
singeo: {
|
|
1136
|
-
instructor: {
|
|
1137
|
-
description:
|
|
1138
|
-
'Your singing journey is unique. You need personalized coaching that helps you reach your goals. Learn from some of the best singers and vocal coaches in the world!',
|
|
1139
|
-
},
|
|
1140
|
-
course: {
|
|
1141
|
-
description:
|
|
1142
|
-
"Tackle your next singing goal with bite-sized courses from many of the world's best vocalists.",
|
|
1143
|
-
},
|
|
1144
|
-
'quick-tips': {
|
|
1145
|
-
thumbnailUrl:
|
|
1146
|
-
'https://imagedelivery.net/0Hon__GSkIjm-B_W77SWCA/8464033e-9b4e-458e-d613-e89fb47e2a00/public',
|
|
1147
|
-
icon: 'icon-shows',
|
|
1148
|
-
},
|
|
1149
|
-
challenge: {
|
|
1150
|
-
tabs: [
|
|
1151
|
-
{
|
|
1152
|
-
name: 'All',
|
|
1153
|
-
short_name: 'All',
|
|
1154
|
-
value: '',
|
|
1155
|
-
},
|
|
1156
|
-
{
|
|
1157
|
-
name: 'Completed',
|
|
1158
|
-
short_name: 'COMPLETED',
|
|
1159
|
-
value: 'completed',
|
|
1160
|
-
},
|
|
1161
|
-
{
|
|
1162
|
-
name: 'Owned Challenges',
|
|
1163
|
-
short_name: 'OWNED CHALLENGES',
|
|
1164
|
-
value: 'owned',
|
|
1165
|
-
},
|
|
1166
|
-
],
|
|
1167
|
-
},
|
|
1168
|
-
'question-and-answer': {
|
|
1169
|
-
thumbnailUrl: 'https://d1923uyy6spedc.cloudfront.net/question-answer.png',
|
|
1170
|
-
icon: 'fas fa-question-circle',
|
|
433
|
+
'songs': {
|
|
434
|
+
name: 'Songs',
|
|
435
|
+
filterOptions: {
|
|
436
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
437
|
+
style: [
|
|
438
|
+
'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
|
|
439
|
+
'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
|
|
440
|
+
],
|
|
441
|
+
type: ['Tutorials', 'Tabs', 'Play Alongs', 'Jam Tracks'],
|
|
442
|
+
progress: PROGRESS_NAMES,
|
|
443
|
+
},
|
|
444
|
+
sortingOptions: {
|
|
445
|
+
title: 'Sort By',
|
|
446
|
+
type: 'radio',
|
|
447
|
+
items: SortingOptions.AllSortingOptions,
|
|
448
|
+
},
|
|
1171
449
|
tabs: [
|
|
1172
|
-
|
|
1173
|
-
|
|
1174
|
-
|
|
1175
|
-
|
|
1176
|
-
|
|
1177
|
-
{
|
|
1178
|
-
name: 'Instructors',
|
|
1179
|
-
short_name: 'INSTRUCTORS',
|
|
1180
|
-
is_group_by: true,
|
|
1181
|
-
value: 'instructor',
|
|
1182
|
-
},
|
|
1183
|
-
{
|
|
1184
|
-
name: 'Genres',
|
|
1185
|
-
short_name: 'Genres',
|
|
1186
|
-
is_group_by: true,
|
|
1187
|
-
value: 'genre',
|
|
1188
|
-
},
|
|
450
|
+
Tabs.ForYou,
|
|
451
|
+
Tabs.Tutorials,
|
|
452
|
+
Tabs.Transcriptions,
|
|
453
|
+
Tabs.PlayAlongs,
|
|
454
|
+
Tabs.ExploreAll
|
|
1189
455
|
],
|
|
1190
456
|
},
|
|
457
|
+
},
|
|
458
|
+
singeo: {
|
|
1191
459
|
'student-review': {
|
|
1192
460
|
thumbnailUrl: 'https://d1923uyy6spedc.cloudfront.net/student-reviews.png',
|
|
1193
461
|
icon: 'icon-student-focus',
|
|
1194
462
|
description:
|
|
1195
|
-
|
|
463
|
+
'Want feedback on your singing? Submit a video for student review. We will watch your submission and then provide helpful encouragement and feedback. This is a great way to build accountability and benefit from the expertise of our teachers.',
|
|
1196
464
|
},
|
|
1197
|
-
'
|
|
1198
|
-
name:
|
|
1199
|
-
|
|
1200
|
-
|
|
1201
|
-
|
|
1202
|
-
|
|
1203
|
-
|
|
1204
|
-
description: '',
|
|
1205
|
-
amountOfFutureLessonsToShow: 3,
|
|
1206
|
-
showFutureLessonAtTopOrBottom: 'bottom',
|
|
1207
|
-
tabs: [
|
|
1208
|
-
{
|
|
1209
|
-
name: 'Lessons',
|
|
1210
|
-
short_name: 'Lessons',
|
|
1211
|
-
value: '',
|
|
1212
|
-
},
|
|
1213
|
-
{
|
|
1214
|
-
name: 'Artists',
|
|
1215
|
-
short_name: 'ARTISTS',
|
|
1216
|
-
is_group_by: true,
|
|
1217
|
-
value: 'artist',
|
|
1218
|
-
},
|
|
1219
|
-
{
|
|
1220
|
-
name: 'Genres',
|
|
1221
|
-
short_name: 'Genres',
|
|
1222
|
-
is_group_by: true,
|
|
1223
|
-
value: 'genre',
|
|
1224
|
-
},
|
|
1225
|
-
],
|
|
1226
|
-
},
|
|
1227
|
-
routine: {
|
|
1228
|
-
name: 'Routines',
|
|
1229
|
-
icon: 'icon-shows',
|
|
1230
|
-
description:
|
|
1231
|
-
'Warm up your voice for any occasion with our bite-sized routines - ranging from 5 to 20 minutes - perfect for busy days or when you need motivation.',
|
|
1232
|
-
allowableFilters: ['difficulty', 'genre', 'type'],
|
|
1233
|
-
tabs: [
|
|
1234
|
-
{
|
|
1235
|
-
name: 'All Routines',
|
|
1236
|
-
short_name: 'ALL ROUTINES',
|
|
1237
|
-
value: '',
|
|
1238
|
-
},
|
|
1239
|
-
],
|
|
1240
|
-
trailer: {
|
|
1241
|
-
vimeo_video_id: 578243377,
|
|
1242
|
-
video_playback_endpoints: [
|
|
1243
|
-
{
|
|
1244
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/360p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=9eff053636a9b8abc19a0e44ae437f7fa50a0cf0a83c39373e8ae29b50dff9b6',
|
|
1245
|
-
width: 640,
|
|
1246
|
-
height: 360,
|
|
1247
|
-
},
|
|
1248
|
-
{
|
|
1249
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/540p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=f8a01157cd5707e6ade5f84a867edbd4f549f091c6c284c5352ec290b9db7bf7',
|
|
1250
|
-
width: 960,
|
|
1251
|
-
height: 540,
|
|
1252
|
-
},
|
|
1253
|
-
{
|
|
1254
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/720p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=8ccd1473aae48a510d44d38df2312a72c254e210e230f79cc0c3efae7b82f6b6',
|
|
1255
|
-
width: 1280,
|
|
1256
|
-
height: 720,
|
|
1257
|
-
},
|
|
1258
|
-
{
|
|
1259
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/1080p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=a3b326c9c79746ddf4915133220f70e4f9498e5fb089ebba0361583d2a55376d',
|
|
1260
|
-
width: 1920,
|
|
1261
|
-
height: 1080,
|
|
1262
|
-
},
|
|
1263
|
-
{
|
|
1264
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/1440p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=c0309249419ce7f80d9bbc89c63851fbb194e623fca6046b7e685611627eceac',
|
|
1265
|
-
width: 2560,
|
|
1266
|
-
height: 1440,
|
|
1267
|
-
},
|
|
1268
|
-
{
|
|
1269
|
-
file: 'https://player.vimeo.com/progressive_redirect/playback/578243377/rendition/2160p/file.mp4?loc=external&oauth2_token_id=1284792283&signature=6ea971d1165f0f1df7af46ccdc33041a70e917028d1c1cd7af4279edd2ef9550',
|
|
1270
|
-
width: 3840,
|
|
1271
|
-
height: 2160,
|
|
1272
|
-
},
|
|
465
|
+
'songs': {
|
|
466
|
+
name: 'Songs',
|
|
467
|
+
filterOptions: {
|
|
468
|
+
difficulty: DIFFICULTY_STRINGS,
|
|
469
|
+
style: [
|
|
470
|
+
'Blues', 'Christian', 'Classical', 'Country', 'Disco', 'Electronic', 'Folk', 'Funk', 'Hip-Hop/Rap', 'Holiday', 'Jazz', 'Soundtrack',
|
|
471
|
+
'World', 'Metal', 'Pop', 'R&B/Soul', 'Rock'
|
|
1273
472
|
],
|
|
1274
|
-
|
|
1275
|
-
|
|
1276
|
-
|
|
473
|
+
type: ['Tutorials', 'Sheet Music', 'Play Alongs', 'Jam Tracks'],
|
|
474
|
+
progress: PROGRESS_NAMES,
|
|
475
|
+
},
|
|
476
|
+
sortingOptions: {
|
|
477
|
+
title: 'Sort By',
|
|
478
|
+
type: 'radio',
|
|
479
|
+
items: SortingOptions.AllSortingOptions,
|
|
1277
480
|
},
|
|
1278
|
-
},
|
|
1279
|
-
workout: {
|
|
1280
|
-
name: 'Workouts',
|
|
1281
|
-
shortname: 'Workouts',
|
|
1282
481
|
tabs: [
|
|
1283
|
-
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
{
|
|
1289
|
-
name: '5 Minutes',
|
|
1290
|
-
short_name: '5 MINS',
|
|
1291
|
-
is_required_field: true,
|
|
1292
|
-
value: 'length_in_seconds,-450',
|
|
1293
|
-
value_web: ['length_in_seconds < 450'],
|
|
1294
|
-
},
|
|
1295
|
-
{
|
|
1296
|
-
name: '10 Minutes',
|
|
1297
|
-
short_name: '10 MINS',
|
|
1298
|
-
is_required_field: true,
|
|
1299
|
-
value: 'length_in_seconds,450-750',
|
|
1300
|
-
value_web: ['length_in_seconds > 451', 'length_in_seconds < 751'],
|
|
1301
|
-
},
|
|
1302
|
-
{
|
|
1303
|
-
name: 'Instructors',
|
|
1304
|
-
short_name: 'INSTRUCTORS',
|
|
1305
|
-
is_group_by: true,
|
|
1306
|
-
value: 'instructor',
|
|
1307
|
-
},
|
|
482
|
+
Tabs.ForYou,
|
|
483
|
+
Tabs.Tutorials,
|
|
484
|
+
Tabs.Transcriptions,
|
|
485
|
+
Tabs.PlayAlongs,
|
|
486
|
+
Tabs.ExploreAll
|
|
1308
487
|
],
|
|
1309
488
|
},
|
|
1310
|
-
}
|
|
489
|
+
}
|
|
1311
490
|
}
|
|
1312
491
|
|
|
1313
492
|
export const typeWithSortOrder = [
|
|
@@ -1315,6 +494,7 @@ export const typeWithSortOrder = [
|
|
|
1315
494
|
'diy-drum-experiments',
|
|
1316
495
|
'rhythmic-adventures-of-captain-carson',
|
|
1317
496
|
]
|
|
497
|
+
|
|
1318
498
|
export function processMetadata(brand, type, withFilters = false) {
|
|
1319
499
|
let brandMetaData = contentMetadata[brand]?.[type]
|
|
1320
500
|
// If the type is explicitly defined as null or the brand doesn't exist return null
|
|
@@ -1333,9 +513,15 @@ export function processMetadata(brand, type, withFilters = false) {
|
|
|
1333
513
|
name: brandMetaData.name || null,
|
|
1334
514
|
description: brandMetaData.description || null,
|
|
1335
515
|
url: brandMetaData.url ? brand + brandMetaData.url : brand + '/' + type,
|
|
516
|
+
sort: brandMetaData.sortingOptions || null,
|
|
517
|
+
tabs: brandMetaData.tabs || [],
|
|
1336
518
|
}
|
|
1337
519
|
|
|
1338
|
-
if (withFilters) {
|
|
520
|
+
if (withFilters && brandMetaData.filterOptions) {
|
|
521
|
+
processedData.filters = transformFilters(brandMetaData.filterOptions)
|
|
522
|
+
}
|
|
523
|
+
|
|
524
|
+
if (withFilters && !brandMetaData.filterOptions) {
|
|
1339
525
|
Object.keys(brandMetaData).forEach((key) => {
|
|
1340
526
|
if (!['thumbnailUrl', 'name', 'description'].includes(key)) {
|
|
1341
527
|
processedData[key] = brandMetaData[key]
|
|
@@ -1345,3 +531,36 @@ export function processMetadata(brand, type, withFilters = false) {
|
|
|
1345
531
|
|
|
1346
532
|
return processedData
|
|
1347
533
|
}
|
|
534
|
+
|
|
535
|
+
/**
|
|
536
|
+
* Defines the filter types for each key
|
|
537
|
+
*/
|
|
538
|
+
const filterTypes = {
|
|
539
|
+
difficulty: 'checkbox',
|
|
540
|
+
genre: 'checkbox',
|
|
541
|
+
topic: 'checkbox',
|
|
542
|
+
type: 'checkbox',
|
|
543
|
+
progress: 'radio',
|
|
544
|
+
}
|
|
545
|
+
|
|
546
|
+
/**
|
|
547
|
+
* Transforms filterOptions into the required format
|
|
548
|
+
*/
|
|
549
|
+
function transformFilters(filterOptions) {
|
|
550
|
+
return Object.entries(filterOptions).map(([key, values]) => ({
|
|
551
|
+
title: capitalizeFirstLetter(key),
|
|
552
|
+
type: filterTypes[key] || 'checkbox',
|
|
553
|
+
key,
|
|
554
|
+
items: values.map(value => ({
|
|
555
|
+
name: value,
|
|
556
|
+
value: `${key},${key === 'progress' ? value.toLowerCase() : value}`,
|
|
557
|
+
})),
|
|
558
|
+
}))
|
|
559
|
+
}
|
|
560
|
+
|
|
561
|
+
/**
|
|
562
|
+
* Capitalizes the first letter of a string
|
|
563
|
+
*/
|
|
564
|
+
export function capitalizeFirstLetter(string) {
|
|
565
|
+
return string.charAt(0).toUpperCase() + string.slice(1)
|
|
566
|
+
}
|