From a1b0439bd0aa2c830a18b35571b0271cc110b85a Mon Sep 17 00:00:00 2001 From: suroh Date: Wed, 11 Oct 2023 18:06:52 +0200 Subject: [PATCH] final touches to interface to include album covers, and more --- package.json | 1 + .../data/documentaries_interviews_audio.json | 79 +- .../data/documentaries_interviews_video.json | 122 +- public/data/films.json | 49 +- public/data/images.json | 19 +- public/data/music_sound_ecm.json | 1019 +++++++++++++---- public/data/music_sound_unpublished.json | 9 +- public/data/music_sound_various.json | 570 +++++++-- public/data/recordings_live.json | 1 - public/data/theatre.json | 88 +- scripts/files2json.js | 190 ++- src/App.js | 50 +- src/api/Router.js | 18 +- src/assets/styles/main.scss | 2 +- src/components/AudioCard.js | 34 +- src/components/Footer.js | 6 +- src/components/HorizontalScroller.js | 3 +- src/components/ImageCarousel.js | 1 + src/components/ModularPlayer.js | 69 +- src/components/NavCard.js | 43 +- src/components/VerticalCard.js | 8 +- src/views/audio.js | 37 +- src/views/images.js | 76 +- src/views/videos.js | 8 +- vite.config.js | 6 + 25 files changed, 1840 insertions(+), 668 deletions(-) delete mode 100644 public/data/recordings_live.json diff --git a/package.json b/package.json index 93a5a4d..4ccb5d5 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "urlpattern-polyfill": "^9.0.0" }, "devDependencies": { + "chokidar": "^3.5.3", "eslint": "^8.49.0", "eslint-plugin-lit": "^1.9.1", "sass": "^1.67.0", diff --git a/public/data/documentaries_interviews_audio.json b/public/data/documentaries_interviews_audio.json index b9e0e27..49bdf7e 100644 --- a/public/data/documentaries_interviews_audio.json +++ b/public/data/documentaries_interviews_audio.json @@ -1,50 +1,51 @@ [ { - "title": "Late Junction", - "details": "BBC, 2019", + "title": "Fireside Chat", + "details": "Mark \"Frosty\" McNeil, Red Bull Radio, 2019", "parent_dir": "documentaries_interviews_audio", - "media": "-21 08_Late Junction_2019 - Meredith Monk v2 BBC" + "media": "Fireside Chat_Mark \"Frosty\" McNeil, Red Bull Radio, 2019.mp3", + "image": "Fireside Chat_Mark \"Frosty\" McNeil, Red Bull Radio, 2019.png" }, { - "title": "Speaking of Music", - "details": "Meredith Monk, 1984 Part 1 of 2", + "title": "Irene Ferchl, Bayerischer Rundfunk", + "details": "Kulturjournal, 1986", "parent_dir": "documentaries_interviews_audio", - "media": "-22 02_Speaking of Music Meredith Monk 1984 Part 1 of 2" - }, - { - "title": "Speaking of Music", - "details": "Meredith Monk, 1984 Part 2 of 2", - "parent_dir": "documentaries_interviews_audio", - "media": "-23 03_Speaking of Music_ Meredith Monk 1984 Part 2 of 2" - }, - { - "title": "Interview with I Frechl-Bayn Rundfunk", - "details": "1986", - "parent_dir": "documentaries_interviews_audio", - "media": "-24 04 Meredith Monk Interview with I Ferchl_Bayn Rundfunk 1986" - }, - { - "title": "Terry Gross Interview", - "details": "1987", - "parent_dir": "documentaries_interviews_audio", - "media": "-25 05 Terry Gross interview_1987" - }, - { - "title": "Interview with David Garland", - "details": "WNYC, Sacred Sundays, 2008", - "parent_dir": "documentaries_interviews_audio", - "media": "-26 06 WNYC Interview w_ David Garland_SacredSundays_2008" - }, - { - "title": "Frosty McNeil and Meredith Monk", - "details": "Fireside Chat, Red Bull Radio", - "parent_dir": "documentaries_interviews_audio", - "media": "-27 07_Red Bull Radio_Fireside Chat_M frosty McNeil and MM_41119" + "media": "Irene Ferchl, Bayerischer Rundfunk_Kulturjournal, 1986.mp3", + "image": "Irene Ferchl, Bayerischer Rundfunk_Kulturjournal, 1986.png" }, { "title": "Late Junction", - "details": "BBC, 2019", + "details": "Jennifer Lucy Allan, BBC Radio 3, 2019", "parent_dir": "documentaries_interviews_audio", - "media": "-28 08_Late Junction_2019 - Meredith Monk v2 BBC" + "media": "Late Junction_Jennifer Lucy Allan, BBC Radio 3, 2019.mp3", + "image": "Late Junction_Jennifer Lucy Allan, BBC Radio 3, 2019.png" + }, + { + "title": "Sacred Sundays", + "details": "David Garland, WNYC, 2008", + "parent_dir": "documentaries_interviews_audio", + "media": "Sacred Sundays_David Garland, WNYC, 2008.mp3", + "image": "Sacred Sundays_David Garland, WNYC, 2008.png" + }, + { + "title": "Speaking of Music", + "details": "Charles Amirkhanian, Other Minds, 1984. Part 1 of 2", + "parent_dir": "documentaries_interviews_audio", + "media": "Speaking of Music_Charles Amirkhanian, Other Minds, 1984. Part 1 of 2..mp3", + "image": "Speaking of Music_Charles Amirkhanian, Other Minds, 1984. Part 1 of 2..png" + }, + { + "title": "Speaking of Music", + "details": "Charles Amirkhanian, Other Minds, 1984. Part 2 of 2", + "parent_dir": "documentaries_interviews_audio", + "media": "Speaking of Music_Charles Amirkhanian, Other Minds, 1984. Part 2 of 2..mp3", + "image": "Speaking of Music_Charles Amirkhanian, Other Minds, 1984. Part 2 of 2..png" + }, + { + "title": "Terry Gross", + "details": "unedited, 1987", + "parent_dir": "documentaries_interviews_audio", + "media": "Terry Gross_unedited, 1987.mp3", + "image": "Terry Gross_unedited, 1987.png" } -] +] \ No newline at end of file diff --git a/public/data/documentaries_interviews_video.json b/public/data/documentaries_interviews_video.json index 720032b..e230dbd 100644 --- a/public/data/documentaries_interviews_video.json +++ b/public/data/documentaries_interviews_video.json @@ -1,92 +1,114 @@ [ { - "title": "Michael Blackwood Making Dances", - "details": "", + "title": "4 American Composers", + "details": "documentary by Peter Greenaway, 1983", "parent_dir": "documentaries_interviews_video", - "media": "--2 MichaelBlackwoodMakingDances.m4v" - }, - { - "title": "ECM 1981", - "details": "2019", - "parent_dir": "documentaries_interviews_video", - "media": "--3 ECM1981 Video Meredith Monk V2_2019.m4v" + "media": "4 American Composers_documentary by Peter Greenaway, 1983.m4v", + "image": "4 American Composers_documentary by Peter Greenaway, 1983.jpg" }, { "title": "Andere Avantgarde", - "details": "TV Interview 1982", + "details": "television documentary by Peter Greenaway, 1983", "parent_dir": "documentaries_interviews_video", - "media": "--4 Meredith Monk_Andere Avantgarde_TV Interview_1982_.m4v" - }, - { - "title": "New Sounds for a New World", - "details": "1982", - "parent_dir": "documentaries_interviews_video", - "media": "--5 New Sounds for a New World_1982.m4v" - }, - { - "title": "Four American Composers", - "details": "PeterGreenaway", - "parent_dir": "documentaries_interviews_video", - "media": "--6 Four American Composers_Peter Greenaway.m4v" + "media": "Andere Avantgarde_television documentary by Peter Greenaway, 1983.m4v", + "image": "Andere Avantgarde_television documentary by Peter Greenaway, 1983.jpg" }, { "title": "BBC Late Show", - "details": "", + "details": "television interview, 1991", "parent_dir": "documentaries_interviews_video", - "media": "--7 bbc_late_show (Original).m4v" + "media": "BBC Late Show_television interview, 1991.m4v", + "image": "BBC Late Show_television interview, 1991.jpg" }, { - "title": "Documentary by Sidsel Mundal", - "details": "Norwegian Television, 1994", + "title": "Coffee and Composition", + "details": "Meredith Monk and Robert Kyr, online, 2021", "parent_dir": "documentaries_interviews_video", - "media": "--8 1994 documentary by Sidsel Mundal_for Norwegian Telev.m4v" + "media": "Coffee and Composition_Meredith Monk and Robert Kyr, online, 2021.m4v", + "image": "Coffee and Composition_Meredith Monk and Robert Kyr, online, 2021.jpg" }, { - "title": "Television Documentary", - "details": "Polish Television, 1995", + "title": "Dorothy and Lillian Gish Award", + "details": "portrait interview with Meredith Monk, 2017", "parent_dir": "documentaries_interviews_video", - "media": "--9 Meredith Monk - Polish Television Documentary (1995).m4v" + "media": "Dorothy and Lillian Gish Award_portrait interview with Meredith Monk, 2017.m4v", + "image": "Dorothy and Lillian Gish Award_portrait interview with Meredith Monk, 2017.jpg" }, { - "title": "Inner Voice", - "details": "", + "title": "ECM 50 | 1981 Meredith Monk", + "details": "documentary by Ingo Berhman for ECM Records' 50th Anniversary, 2019", "parent_dir": "documentaries_interviews_video", - "media": "-12 MeredithMonk_Inner Voice.m4v" + "media": "ECM 50 | 1981 Meredith Monk_documentary by Ingo Berhman for ECM Records' 50th Anniversary, 2019.m4v", + "image": "ECM 50 | 1981 Meredith Monk_documentary by Ingo Berhman for ECM Records' 50th Anniversary, 2019.jpg" }, { - "title": "Lecutre Performance", - "details": "Bennington College, 11 March 2011", + "title": "Girlchild Diary", + "details": "documentary on Education of the Girlchild, ed. Joëlle Schon, 2015", "parent_dir": "documentaries_interviews_video", - "media": "-13 Bennington College lecture performance 3.11.11.m4v" + "media": "Girlchild Diary_documentary on Education of the Girlchild, ed. Joëlle Schon, 2015.m4v", + "image": "Girlchild Diary_documentary on Education of the Girlchild, ed. Joëlle Schon, 2015.jpg" }, { - "title": "", + "title": "MMonk", + "details": "TheSoulsMessenger", "parent_dir": "documentaries_interviews_video", - "media": "-14 MMonk_TheSoulsMessenger_Lublin_2012.m4v" + "media": "MMonk_TheSoulsMessenger_Lublin_2012.m4v", + "image": "MMonk_TheSoulsMessenger_Lublin_2012.jpg" }, { - "title": "", + "title": "Making Dances", + "details": "documentary by Michael Blackwood, 1980", "parent_dir": "documentaries_interviews_video", - "media": "-15 Girlchild Diary_61116.m4v" + "media": "Making Dances_documentary by Michael Blackwood, 1980.m4v", + "image": "Making Dances_documentary by Michael Blackwood, 1980.jpg" }, { - "title": "", + "title": "Meredith Monk and Adam Shatz", + "details": "conversation on Book of Days, online, 2020", "parent_dir": "documentaries_interviews_video", - "media": "-16 Q2 Spaces_Meredith Monk_2014.m4v" + "media": "Meredith Monk and Adam Shatz_conversation on Book of Days, online, 2020.m4v", + "image": "Meredith Monk and Adam Shatz_conversation on Book of Days, online, 2020.jpg" }, { - "title": "", + "title": "Meredith Monk lecture", + "details": "Bennington College, Vermont, 2011", "parent_dir": "documentaries_interviews_video", - "media": "-17 Gish Prize Ceremony Camera A.m4v" + "media": "Meredith Monk lecture_Bennington College, Vermont, 2011.m4v", + "image": "Meredith Monk lecture_Bennington College, Vermont, 2011.jpg" }, { - "title": "", + "title": "Meredith Monk: Inner Voice", + "details": "documentary by Babeth M. VanLoo, Buddhist Broadcasting Foundation, 2009", "parent_dir": "documentaries_interviews_video", - "media": "-18 MM and Adam Shatz - Book of Days conversation_2020.m4v" + "media": "Meredith Monk: Inner Voice_documentary by Babeth M. VanLoo, Buddhist Broadcasting Foundation, 2009.m4v", + "image": "Meredith Monk: Inner Voice_documentary by Babeth M. VanLoo, Buddhist Broadcasting Foundation, 2009.jpg" }, { - "title": "", + "title": "Meredith Monk", + "details": "documentary by Sidsel Mundal for Norwegian Television, 1994", "parent_dir": "documentaries_interviews_video", - "media": "-19 Coffee and Composition with Meredith Monk_2021.m4v" + "media": "Meredith Monk_documentary by Sidsel Mundal for Norwegian Television, 1994.m4v", + "image": "Meredith Monk_documentary by Sidsel Mundal for Norwegian Television, 1994.jpg" + }, + { + "title": "Meredith", + "details": "documentary by Mariusz Grzegorzeki for Polish Television, 1995", + "parent_dir": "documentaries_interviews_video", + "media": "Meredith_documentary by Mariusz Grzegorzeki for Polish Television, 1995.m4v", + "image": "Meredith_documentary by Mariusz Grzegorzeki for Polish Television, 1995.jpg" + }, + { + "title": "Neue Töne aus der Neuen Welt", + "details": "(New Sounds for a New World) documentary by Birgitta Ashoff for German Telelvision (in German), 1983", + "parent_dir": "documentaries_interviews_video", + "media": "Neue Töne aus der Neuen Welt_(New Sounds for a New World) documentary by Birgitta Ashoff for German Telelvision (in German), 1983.m4v", + "image": "Neue Töne aus der Neuen Welt_(New Sounds for a New World) documentary by Birgitta Ashoff for German Telelvision (in German), 1983.jpg" + }, + { + "title": "Q2 Spaces: Meredith Monk", + "details": "documentary, 2014", + "parent_dir": "documentaries_interviews_video", + "media": "Q2 Spaces: Meredith Monk_documentary, 2014.m4v", + "image": "Q2 Spaces: Meredith Monk_documentary, 2014.jpg" } -] +] \ No newline at end of file diff --git a/public/data/films.json b/public/data/films.json index 7f96053..f6b4610 100644 --- a/public/data/films.json +++ b/public/data/films.json @@ -1,27 +1,44 @@ [ { - "title": "", - "parent_dir": "films", - "media": "_72 01 16_Millimeter_Earrings_1980_Color_IN_HD_23-98_ProRes4444_Pillar Scan GOOD copy v4 2023 0812.m4v" + "title": "16 Millimeter Earrings", + "details": "Robert S. Withers, 1979", + "parent_dir": "Films", + "media": "16 Millimeter Earrings_Robert S. Withers, 1979.m4v", + "image": "16 Millimeter Earrings_Robert S. Withers, 1979.jpg" }, { - "title": "", - "parent_dir": "films", - "media": "_74 Ellis Island.m4v" + "title": "Book of Days", + "details": "Meredith Monk, 1988", + "parent_dir": "Films", + "media": "Book of Days_Meredith Monk, 1988.m4v", + "image": "Book of Days_Meredith Monk, 1988.jpg" }, { - "title": "", - "parent_dir": "films", - "media": "_75 Book of Days.m4v" + "title": "Ellis Island", + "details": "Meredith Monk and Bob Rosen, 1981", + "parent_dir": "Films", + "media": "Ellis Island_Meredith Monk and Bob Rosen, 1981.m4v", + "image": "Ellis Island_Meredith Monk and Bob Rosen, 1981.jpg" }, { - "title": "", - "parent_dir": "films", - "media": "_76 1982 Paris KTCA (full).m4v" + "title": "Paris", + "details": "Meredith Monk and Ping Chong, 1982", + "parent_dir": "Films", + "media": "Paris_Meredith Monk and Ping Chong, 1982.m4v", + "image": "Paris_Meredith Monk and Ping Chong, 1982.jpg" }, { - "title": "", - "parent_dir": "films", - "media": "_77 TurtleDreams(Waltz)_Stereo_Tranfer1inchApril2018.m4v" + "title": "Quarry", + "details": "1977", + "parent_dir": "Films", + "media": "Quarry_1977.m4v", + "image": "Quarry_1977.jpg" + }, + { + "title": "Turtle Dreams (Waltz)", + "details": "Meredith Monk, 1983", + "parent_dir": "Films", + "media": "Turtle Dreams (Waltz)_Meredith Monk, 1983.m4v", + "image": "Turtle Dreams (Waltz)_Meredith Monk, 1983.jpg" } -] \ No newline at end of file +] diff --git a/public/data/images.json b/public/data/images.json index 684d514..0637a08 100644 --- a/public/data/images.json +++ b/public/data/images.json @@ -1,18 +1 @@ -[ - { - "title": "Photo One", - "media": "photo_one.jpg" - }, - { - "title": "Photo Two", - "media": "photo_two.jpg" - }, - { - "title": "Photo Three", - "media": "photo_three.jpg" - }, - { - "title": "Photo Four", - "media": "photo_four.jpg" - } -] +[] \ No newline at end of file diff --git a/public/data/music_sound_ecm.json b/public/data/music_sound_ecm.json index e5f9fa1..588e620 100644 --- a/public/data/music_sound_ecm.json +++ b/public/data/music_sound_ecm.json @@ -1,281 +1,794 @@ [ { - "title": "Dolmen Music", - "details": "", + "title": "ATLAS an opera in three parts", "parent_dir": "music_sound_ecm", - "media": "-43 Dolmen Music", + "media": "ATLAS an opera in three parts", + "image": "ATLAS an opera in three parts.jpg", "album": true, "tracks": [ - "-43-01 Monk_ Gotham Lullaby.mp3", - "-43-02 Monk_ Travelling.mp3", - "-43-03 Monk_ The Tale.mp3", - "-43-04 Monk_ Biography.mp3", - "-43-05 Monk_ Dolmen Music.mp3" - ] - }, - { - "title": "Turtle Dreams", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-44 Turtle Dreams", - "album": true, - "tracks": [ - "-44-01 Monk_ Turtle Dreams.mp3", - "-44-02 Monk_ View 1.mp3", - "-44-03 Monk_ Engine Steps.mp3", - "-44-04 Monk_ Ester's Song.mp3", - "-44-05 Monk_ View 2.mp3" - ] - }, - { - "title": "Do You Be", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-45 Do You Be", - "album": true, - "tracks": [ - "-45-01 Monk_ Scared Song.mp3", - "-45-02 Monk_ I Don't Know.mp3", - "-45-03 Monk_ Window In 7's.mp3", - "-45-04 Monk_ Double Fiesta.mp3", - "-45-05 Monk_ Do You Be.mp3", - "-45-06 Monk_ Panda Chant 1.mp3", - "-45-07 Monk_ Memory Song.mp3", - "-45-08 Monk_ Panda Chant 2.mp3", - "-45-09 Monk_ Quarry Lullaby.mp3", - "-45-10 Monk_ Shadow Song.mp3", - "-45-11 Monk_ Astronaut Anthem.mp3", - "-45-12 Monk_ Wheel.mp3" + { + "title": "-48-1-01 Monk_ Atlas - Part", + "media": "-48-1-01 Monk_ Atlas - Part.mp3" + }, + { + "title": "-48-1-02 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-02 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-03 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-03 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-04 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-04 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-05 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-05 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-06 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-06 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-07 Monk_ Atlas - Part 1_ Pe", + "media": "-48-1-07 Monk_ Atlas - Part 1_ Pe.mp3" + }, + { + "title": "-48-1-08 Monk_ Atlas - Part 2_ Ni", + "media": "-48-1-08 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-1-09 Monk_ Atlas - Part 2_ Ni", + "media": "-48-1-09 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-1-10 Monk_ Atlas - Part 2_ Ni", + "media": "-48-1-10 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-01 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-01 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-02 Monk_ Atlas - Part", + "media": "-48-2-02 Monk_ Atlas - Part.mp3" + }, + { + "title": "-48-2-03 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-03 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-04 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-04 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-05 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-05 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-06 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-06 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-07 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-07 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-08 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-08 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-09 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-09 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-10 Monk_ Atlas - Part 2_ Ni", + "media": "-48-2-10 Monk_ Atlas - Part 2_ Ni.mp3" + }, + { + "title": "-48-2-11 Monk_ Atlas - Part 3_ In", + "media": "-48-2-11 Monk_ Atlas - Part 3_ In.mp3" + }, + { + "title": "-48-2-12 Monk_ Atlas - Part 3_ In", + "media": "-48-2-12 Monk_ Atlas - Part 3_ In.mp3" + }, + { + "title": "-48-2-13 Monk_ Atlas - Part 3_ In", + "media": "-48-2-13 Monk_ Atlas - Part 3_ In.mp3" + }, + { + "title": "-48-2-14 Monk_ Atlas - Part 3_ In", + "media": "-48-2-14 Monk_ Atlas - Part 3_ In.mp3" + }, + { + "title": "-48-2-15 Monk_ Atlas - Part 3_ In", + "media": "-48-2-15 Monk_ Atlas - Part 3_ In.mp3" + } ] }, { "title": "Book of Days", - "details": "", "parent_dir": "music_sound_ecm", - "media": "-46 Book of Days", + "media": "Book of Days", + "image": "Book of Days.jpg", "album": true, "tracks": [ - "-46-01 Early Morning Melody.mp3", - "-46-02 Travellers 1, 2, 3.mp3", - "-46-03 Dawn.mp3", - "-46-04 Travellers 4 _ Curchyard Entertainment.mp3", - "-46-05 Afternoon Melodies.mp3", - "-46-06 Fields _ Clouds.mp3", - "-46-07 Dusk.mp3", - "-46-08 Eva's Song.mp3", - "-46-09 Evening.mp3", - "-46-10 Travellers 5.mp3", - "-46-11 Jewish Storyteller _ Dance _ Dream.mp3", - "-46-12 Plague.mp3", - "-46-13 Madwoman's Vision.mp3", - "-46-14 Cave Song.mp3" + { + "title": "-46-01 Early Morning Melody", + "media": "-46-01 Early Morning Melody.mp3" + }, + { + "title": "-46-02 Travellers 1, 2, 3", + "media": "-46-02 Travellers 1, 2, 3.mp3" + }, + { + "title": "-46-03 Dawn", + "media": "-46-03 Dawn.mp3" + }, + { + "title": "-46-04 Travellers 4 _ Curchyard Entertainment", + "media": "-46-04 Travellers 4 _ Curchyard Entertainment.mp3" + }, + { + "title": "-46-05 Afternoon Melodies", + "media": "-46-05 Afternoon Melodies.mp3" + }, + { + "title": "-46-06 Fields _ Clouds", + "media": "-46-06 Fields _ Clouds.mp3" + }, + { + "title": "-46-07 Dusk", + "media": "-46-07 Dusk.mp3" + }, + { + "title": "-46-08 Eva's Song", + "media": "-46-08 Eva's Song.mp3" + }, + { + "title": "-46-09 Evening", + "media": "-46-09 Evening.mp3" + }, + { + "title": "-46-10 Travellers 5", + "media": "-46-10 Travellers 5.mp3" + }, + { + "title": "-46-11 Jewish Storyteller _ Dance _ Dream", + "media": "-46-11 Jewish Storyteller _ Dance _ Dream.mp3" + }, + { + "title": "-46-12 Plague", + "media": "-46-12 Plague.mp3" + }, + { + "title": "-46-13 Madwoman's Vision", + "media": "-46-13 Madwoman's Vision.mp3" + }, + { + "title": "-46-14 Cave Song", + "media": "-46-14 Cave Song.mp3" + } + ] + }, + { + "title": "Do You Be", + "parent_dir": "music_sound_ecm", + "media": "Do You Be", + "image": "Do You Be.jpg", + "album": true, + "tracks": [ + { + "title": "-45-01 Monk_ Scared Song", + "media": "-45-01 Monk_ Scared Song.mp3" + }, + { + "title": "-45-02 Monk_ I Don't Know", + "media": "-45-02 Monk_ I Don't Know.mp3" + }, + { + "title": "-45-03 Monk_ Window In 7's", + "media": "-45-03 Monk_ Window In 7's.mp3" + }, + { + "title": "-45-04 Monk_ Double Fiesta", + "media": "-45-04 Monk_ Double Fiesta.mp3" + }, + { + "title": "-45-05 Monk_ Do You Be", + "media": "-45-05 Monk_ Do You Be.mp3" + }, + { + "title": "-45-06 Monk_ Panda Chant 1", + "media": "-45-06 Monk_ Panda Chant 1.mp3" + }, + { + "title": "-45-07 Monk_ Memory Song", + "media": "-45-07 Monk_ Memory Song.mp3" + }, + { + "title": "-45-08 Monk_ Panda Chant 2", + "media": "-45-08 Monk_ Panda Chant 2.mp3" + }, + { + "title": "-45-09 Monk_ Quarry Lullaby", + "media": "-45-09 Monk_ Quarry Lullaby.mp3" + }, + { + "title": "-45-10 Monk_ Shadow Song", + "media": "-45-10 Monk_ Shadow Song.mp3" + }, + { + "title": "-45-11 Monk_ Astronaut Anthem", + "media": "-45-11 Monk_ Astronaut Anthem.mp3" + }, + { + "title": "-45-12 Monk_ Wheel", + "media": "-45-12 Monk_ Wheel.mp3" + } + ] + }, + { + "title": "Dolmen Music", + "parent_dir": "music_sound_ecm", + "media": "Dolmen Music", + "image": "Dolmen Music.jpg", + "album": true, + "tracks": [ + { + "title": "-43-01 Monk_ Gotham Lullaby", + "media": "-43-01 Monk_ Gotham Lullaby.mp3" + }, + { + "title": "-43-02 Monk_ Travelling", + "media": "-43-02 Monk_ Travelling.mp3" + }, + { + "title": "-43-03 Monk_ The Tale", + "media": "-43-03 Monk_ The Tale.mp3" + }, + { + "title": "-43-04 Monk_ Biography", + "media": "-43-04 Monk_ Biography.mp3" + }, + { + "title": "-43-05 Monk_ Dolmen Music", + "media": "-43-05 Monk_ Dolmen Music.mp3" + } ] }, { "title": "Facing North", - "details": "", "parent_dir": "music_sound_ecm", - "media": "-47 Facing North", + "media": "Facing North", + "image": "Facing North.jpg", "album": true, "tracks": [ - "-47-01 Monk_ Facing North - Northern Lights 1.mp3", - "-47-02 Monk_ Facing North - Chinook.mp3", - "-47-03 Monk_ Facing North - Long Shadows 1.mp3", - "-47-04 Monk_ Facing North - Keeping Warm.mp3", - "-47-05 Monk_ Facing North - Northern Lights 2.mp3", - "-47-06 Monk_ Facing North - Chinook Whispers.mp3", - "-47-07 Monk_ Facing North - Arctic Bar.mp3", - "-47-08 Monk_ Facing North - Hocket.mp3", - "-47-09 Monk_ Facing North - Long Shadows 2.mp3", - "-47-10 Monk_ Facing North - Long Shadows 2.mp3", - "-47-11 Monk_ Vessel - Fire Dance.mp3", - "-47-12 Monk_ Vessel - Little Epiphany; Sybil Song.mp3", - "-47-13 Monk_ Vessel - Mill.mp3", - "-47-14 Monk_ Vessel - Mill.mp3" - ] - }, - { - "title": "Atlas", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-48 ATLAS an opera in three parts 2-CD album", - "album": true, - "tracks": [ - "-48-1-01 Monk_ Atlas - Part.mp3", - "-48-1-02 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-03 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-04 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-05 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-06 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-07 Monk_ Atlas - Part 1_ Pe.mp3", - "-48-1-08 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-1-09 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-1-10 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-01 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-02 Monk_ Atlas - Part.mp3", - "-48-2-03 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-04 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-05 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-06 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-07 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-08 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-09 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-10 Monk_ Atlas - Part 2_ Ni.mp3", - "-48-2-11 Monk_ Atlas - Part 3_ In.mp3", - "-48-2-12 Monk_ Atlas - Part 3_ In.mp3", - "-48-2-13 Monk_ Atlas - Part 3_ In.mp3", - "-48-2-14 Monk_ Atlas - Part 3_ In.mp3", - "-48-2-15 Monk_ Atlas - Part 3_ In.mp3" - ] - }, - { - "title": "Volcano Songs", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-49 Volcano Songs", - "album": true, - "tracks": [ - "-49-01 Monk_ Volcano Songs - Walking Song.mp3", - "-49-02 Monk_ Volcano Songs - Lost Wind.mp3", - "-49-03 Monk_ Volcano Songs - Hips Dance.mp3", - "-49-04 Monk_ Volcano Songs - Cry #1.mp3", - "-49-05 Monk_ New York Requiem.mp3", - "-49-06 Monk_ Volcano Songs - Offering.mp3", - "-49-07 Monk_ Volcano Songs - Boat Man.mp3", - "-49-08 Monk_ Volcano Songs - Skip Song.mp3", - "-49-09 Monk_ Volcano Songs - Old Lava.mp3", - "-49-10 Monk_ Volcano Songs - Cry #2.mp3", - "-49-11 Monk_ St. Petersburg Waltz.mp3", - "-49-12 Monk_ Three Heavens & Hells.mp3", - "-49-13 Monk_ Light Songs - Click Song #1.mp3", - "-49-14 Monk_ Light Songs - Click Song #2.mp3" - ] - }, - { - "title": "Mercy", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-50 mercy", - "album": true, - "tracks": [ - "-50-01 Monk_ Braid 1 & Leaping Song.mp3", - "-50-02 Monk_ Braid 2.mp3", - "-50-03 Monk_ Urban March (Shadow).mp3", - "-50-04 Monk_ Masks.mp3", - "-50-05 Monk_ Line 1.mp3", - "-50-06 Monk_ Doctor_Patient.mp3", - "-50-07 Monk_ Line 2.mp3", - "-50-08 Monk_ Woman At The Door.mp3", - "-50-09 Monk_ Line 3 & Prisoner.mp3", - "-50-10 Monk_ Epilogue.mp3", - "-50-11 Monk_ Shaking.mp3", - "-50-12 Monk_ Liquid Air.mp3", - "-50-13 Monk_ Urban March (Light).mp3", - "-50-14 Monk_ Core Chant.mp3" - ] - }, - { - "title": "Impermenance", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-51 impermanance", - "album": true, - "tracks": [ - "-51-01 Monk_ Last Song.mp3", - "-51-02 Monk_ Maybe 1.mp3", - "-51-03 Monk_ Little Breath.mp3", - "-51-04 Monk_ Liminal.mp3", - "-51-05 Monk_ Disequilibrium.mp3", - "-51-06 Monk_ Particular Dance.mp3", - "-51-07 Monk_ Between Song.mp3", - "-51-08 Monk_ Passage.mp3", - "-51-09 Monk_ Maybe 2.mp3", - "-51-10 Monk_ Skeleton Lines.mp3", - "-51-11 Monk_ Slow Dissolve.mp3", - "-51-12 Monk_ Totentanz.mp3", - "-51-13 Hilash_ Sweep 1.mp3", - "-51-14 Monk_ Rocking.mp3", - "_46_15 Hilash_ Sweep 2.mp3", - "_46_16 Hoek_ Mieke's Melody #5.mp3" - ] - }, - { - "title": "Songs of Ascension", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-52 Songs of Ascension", - "album": true, - "tracks": [ - "-52-01 Clusters 1.mp3", - "-52-02 Strand (Gathering).mp3", - "-52-03 Winter Variation.mp3", - "-52-04 Cloud Code.mp3", - "-52-05 Shift.mp3", - "-52-06 Mapping.mp3", - "-52-07 Summer Variation.mp3", - "-52-08 Vow.mp3", - "-52-09 Clusters 2.mp3", - "-52-10 Falling.mp3", - "-52-11 Burn.mp3", - "-52-12 Strand (Inner Psalm).mp3", - "-52-13 Autumn Variation.mp3", - "-52-14 Ledge Dance.mp3", - "-52-15 Traces.mp3", - "-52-16 Respite.mp3", - "-52-17 Mapping Continued.mp3", - "-52-18 Clusters 3.mp3", - "-52-19 Spring Variation.mp3", - "-52-20 Fathom.mp3", - "-52-21 Ascent.mp3" - ] - }, - { - "title": "Piano Songs", - "details": "", - "parent_dir": "music_sound_ecm", - "media": "-53 Piano Songs", - "album": true, - "tracks": [ - "-53-01 Monk_ Obsolete Objects.mp3", - "-53-02 Monk_ Ellis Island.mp3", - "-53-03 Monk_ Folkdance.mp3", - "-53-04 Monk_ Urban March (Shadow).mp3", - "-53-05 Monk_ Tower.mp3", - "-53-06 Monk_ Paris.mp3", - "-53-07 Monk_ Railroad (Travel Song).mp3", - "-53-08 Monk_ Parlour Games.mp3", - "-53-09 Monk_ St. Petersburg Waltz.mp3", - "-53-10 Monk_ Window In 7's.mp3", - "-53-11 Monk_ Totentanz.mp3", - "-53-12 Monk_ Phantom Waltz.mp3" + { + "title": "-47-01 Monk_ Facing North - Northern Lights 1", + "media": "-47-01 Monk_ Facing North - Northern Lights 1.mp3" + }, + { + "title": "-47-02 Monk_ Facing North - Chinook", + "media": "-47-02 Monk_ Facing North - Chinook.mp3" + }, + { + "title": "-47-03 Monk_ Facing North - Long Shadows 1", + "media": "-47-03 Monk_ Facing North - Long Shadows 1.mp3" + }, + { + "title": "-47-04 Monk_ Facing North - Keeping Warm", + "media": "-47-04 Monk_ Facing North - Keeping Warm.mp3" + }, + { + "title": "-47-05 Monk_ Facing North - Northern Lights 2", + "media": "-47-05 Monk_ Facing North - Northern Lights 2.mp3" + }, + { + "title": "-47-06 Monk_ Facing North - Chinook Whispers", + "media": "-47-06 Monk_ Facing North - Chinook Whispers.mp3" + }, + { + "title": "-47-07 Monk_ Facing North - Arctic Bar", + "media": "-47-07 Monk_ Facing North - Arctic Bar.mp3" + }, + { + "title": "-47-08 Monk_ Facing North - Hocket", + "media": "-47-08 Monk_ Facing North - Hocket.mp3" + }, + { + "title": "-47-09 Monk_ Facing North - Long Shadows 2", + "media": "-47-09 Monk_ Facing North - Long Shadows 2.mp3" + }, + { + "title": "-47-10 Monk_ Facing North - Long Shadows 2", + "media": "-47-10 Monk_ Facing North - Long Shadows 2.mp3" + }, + { + "title": "-47-11 Monk_ Vessel - Fire Dance", + "media": "-47-11 Monk_ Vessel - Fire Dance.mp3" + }, + { + "title": "-47-12 Monk_ Vessel - Little Epiphany; Sybil Song", + "media": "-47-12 Monk_ Vessel - Little Epiphany; Sybil Song.mp3" + }, + { + "title": "-47-13 Monk_ Vessel - Mill", + "media": "-47-13 Monk_ Vessel - Mill.mp3" + }, + { + "title": "-47-14 Monk_ Vessel - Mill", + "media": "-47-14 Monk_ Vessel - Mill.mp3" + } ] }, { "title": "On Behalf of Nature", - "details": "", "parent_dir": "music_sound_ecm", - "media": "-54 On Behalf of Nature", + "media": "On Behalf of Nature", + "image": "On Behalf of Nature.jpg", "album": true, "tracks": [ - "-54-01 Monk_ Dark_Light 1.mp3", - "-54-02 Monk_ High Realm.mp3", - "-54-03 Monk_ Fractal Activity.mp3", - "-54-04 Monk_ Environs 1.mp3", - "-54-05 Monk_ Eon.mp3", - "-54-06 Monk_ Duet With Shifting Ground.mp3", - "-54-07 Monk_ Environs 2.mp3", - "-54-08 Monk_ Pavement Steps.mp3", - "-54-09 Monk_ Evolution.mp3", - "-54-10 Monk_ Ritual Zone.mp3", - "-54-11 Monk_ Water_Sky Rant.mp3", - "-54-12 Monk_ Memory Zone.mp3", - "-54-13 Monk_ Environs 3.mp3", - "-54-14 Monk_ Harvest.mp3", - "-54-15 Monk_ Dark_Light 2.mp3", - "-54-16 Monk_ High Realm Reprise.mp3", - "-54-17 Monk_ Fractal Mirror.mp3", - "-54-18 Monk_ Ringing.mp3", - "-54-19 Monk_ Spider Web Anthem.mp3" + { + "title": "-54-01 Monk_ Dark_Light 1", + "media": "-54-01 Monk_ Dark_Light 1.mp3" + }, + { + "title": "-54-02 Monk_ High Realm", + "media": "-54-02 Monk_ High Realm.mp3" + }, + { + "title": "-54-03 Monk_ Fractal Activity", + "media": "-54-03 Monk_ Fractal Activity.mp3" + }, + { + "title": "-54-04 Monk_ Environs 1", + "media": "-54-04 Monk_ Environs 1.mp3" + }, + { + "title": "-54-05 Monk_ Eon", + "media": "-54-05 Monk_ Eon.mp3" + }, + { + "title": "-54-06 Monk_ Duet With Shifting Ground", + "media": "-54-06 Monk_ Duet With Shifting Ground.mp3" + }, + { + "title": "-54-07 Monk_ Environs 2", + "media": "-54-07 Monk_ Environs 2.mp3" + }, + { + "title": "-54-08 Monk_ Pavement Steps", + "media": "-54-08 Monk_ Pavement Steps.mp3" + }, + { + "title": "-54-09 Monk_ Evolution", + "media": "-54-09 Monk_ Evolution.mp3" + }, + { + "title": "-54-10 Monk_ Ritual Zone", + "media": "-54-10 Monk_ Ritual Zone.mp3" + }, + { + "title": "-54-11 Monk_ Water_Sky Rant", + "media": "-54-11 Monk_ Water_Sky Rant.mp3" + }, + { + "title": "-54-12 Monk_ Memory Zone", + "media": "-54-12 Monk_ Memory Zone.mp3" + }, + { + "title": "-54-13 Monk_ Environs 3", + "media": "-54-13 Monk_ Environs 3.mp3" + }, + { + "title": "-54-14 Monk_ Harvest", + "media": "-54-14 Monk_ Harvest.mp3" + }, + { + "title": "-54-15 Monk_ Dark_Light 2", + "media": "-54-15 Monk_ Dark_Light 2.mp3" + }, + { + "title": "-54-16 Monk_ High Realm Reprise", + "media": "-54-16 Monk_ High Realm Reprise.mp3" + }, + { + "title": "-54-17 Monk_ Fractal Mirror", + "media": "-54-17 Monk_ Fractal Mirror.mp3" + }, + { + "title": "-54-18 Monk_ Ringing", + "media": "-54-18 Monk_ Ringing.mp3" + }, + { + "title": "-54-19 Monk_ Spider Web Anthem", + "media": "-54-19 Monk_ Spider Web Anthem.mp3" + } + ] + }, + { + "title": "Piano Songs", + "parent_dir": "music_sound_ecm", + "media": "Piano Songs", + "image": "Piano Songs.jpg", + "album": true, + "tracks": [ + { + "title": "-53-01 Monk_ Obsolete Objects", + "media": "-53-01 Monk_ Obsolete Objects.mp3" + }, + { + "title": "-53-02 Monk_ Ellis Island", + "media": "-53-02 Monk_ Ellis Island.mp3" + }, + { + "title": "-53-03 Monk_ Folkdance", + "media": "-53-03 Monk_ Folkdance.mp3" + }, + { + "title": "-53-04 Monk_ Urban March (Shadow)", + "media": "-53-04 Monk_ Urban March (Shadow).mp3" + }, + { + "title": "-53-05 Monk_ Tower", + "media": "-53-05 Monk_ Tower.mp3" + }, + { + "title": "-53-06 Monk_ Paris", + "media": "-53-06 Monk_ Paris.mp3" + }, + { + "title": "-53-07 Monk_ Railroad (Travel Song)", + "media": "-53-07 Monk_ Railroad (Travel Song).mp3" + }, + { + "title": "-53-08 Monk_ Parlour Games", + "media": "-53-08 Monk_ Parlour Games.mp3" + }, + { + "title": "-53-09 Monk_ St. Petersburg Waltz", + "media": "-53-09 Monk_ St. Petersburg Waltz.mp3" + }, + { + "title": "-53-10 Monk_ Window In 7's", + "media": "-53-10 Monk_ Window In 7's.mp3" + }, + { + "title": "-53-11 Monk_ Totentanz", + "media": "-53-11 Monk_ Totentanz.mp3" + }, + { + "title": "-53-12 Monk_ Phantom Waltz", + "media": "-53-12 Monk_ Phantom Waltz.mp3" + } + ] + }, + { + "title": "Songs of Ascension", + "parent_dir": "music_sound_ecm", + "media": "Songs of Ascension", + "image": "Songs of Ascension.jpg", + "album": true, + "tracks": [ + { + "title": "-52-01 Clusters 1", + "media": "-52-01 Clusters 1.mp3" + }, + { + "title": "-52-02 Strand (Gathering)", + "media": "-52-02 Strand (Gathering).mp3" + }, + { + "title": "-52-03 Winter Variation", + "media": "-52-03 Winter Variation.mp3" + }, + { + "title": "-52-04 Cloud Code", + "media": "-52-04 Cloud Code.mp3" + }, + { + "title": "-52-05 Shift", + "media": "-52-05 Shift.mp3" + }, + { + "title": "-52-06 Mapping", + "media": "-52-06 Mapping.mp3" + }, + { + "title": "-52-07 Summer Variation", + "media": "-52-07 Summer Variation.mp3" + }, + { + "title": "-52-08 Vow", + "media": "-52-08 Vow.mp3" + }, + { + "title": "-52-09 Clusters 2", + "media": "-52-09 Clusters 2.mp3" + }, + { + "title": "-52-10 Falling", + "media": "-52-10 Falling.mp3" + }, + { + "title": "-52-11 Burn", + "media": "-52-11 Burn.mp3" + }, + { + "title": "-52-12 Strand (Inner Psalm)", + "media": "-52-12 Strand (Inner Psalm).mp3" + }, + { + "title": "-52-13 Autumn Variation", + "media": "-52-13 Autumn Variation.mp3" + }, + { + "title": "-52-14 Ledge Dance", + "media": "-52-14 Ledge Dance.mp3" + }, + { + "title": "-52-15 Traces", + "media": "-52-15 Traces.mp3" + }, + { + "title": "-52-16 Respite", + "media": "-52-16 Respite.mp3" + }, + { + "title": "-52-17 Mapping Continued", + "media": "-52-17 Mapping Continued.mp3" + }, + { + "title": "-52-18 Clusters 3", + "media": "-52-18 Clusters 3.mp3" + }, + { + "title": "-52-19 Spring Variation", + "media": "-52-19 Spring Variation.mp3" + }, + { + "title": "-52-20 Fathom", + "media": "-52-20 Fathom.mp3" + }, + { + "title": "-52-21 Ascent", + "media": "-52-21 Ascent.mp3" + } + ] + }, + { + "title": "Turtle Dreams", + "parent_dir": "music_sound_ecm", + "media": "Turtle Dreams", + "image": "Turtle Dreams.jpg", + "album": true, + "tracks": [ + { + "title": "-44-01 Monk_ Turtle Dreams", + "media": "-44-01 Monk_ Turtle Dreams.mp3" + }, + { + "title": "-44-02 Monk_ View 1", + "media": "-44-02 Monk_ View 1.mp3" + }, + { + "title": "-44-03 Monk_ Engine Steps", + "media": "-44-03 Monk_ Engine Steps.mp3" + }, + { + "title": "-44-04 Monk_ Ester's Song", + "media": "-44-04 Monk_ Ester's Song.mp3" + }, + { + "title": "-44-05 Monk_ View 2", + "media": "-44-05 Monk_ View 2.mp3" + } + ] + }, + { + "title": "Volcano Songs", + "parent_dir": "music_sound_ecm", + "media": "Volcano Songs", + "image": "Volcano Songs.jpg", + "album": true, + "tracks": [ + { + "title": "-49-01 Monk_ Volcano Songs - Walking Song", + "media": "-49-01 Monk_ Volcano Songs - Walking Song.mp3" + }, + { + "title": "-49-02 Monk_ Volcano Songs - Lost Wind", + "media": "-49-02 Monk_ Volcano Songs - Lost Wind.mp3" + }, + { + "title": "-49-03 Monk_ Volcano Songs - Hips Dance", + "media": "-49-03 Monk_ Volcano Songs - Hips Dance.mp3" + }, + { + "title": "-49-04 Monk_ Volcano Songs - Cry #1", + "media": "-49-04 Monk_ Volcano Songs - Cry #1.mp3" + }, + { + "title": "-49-05 Monk_ New York Requiem", + "media": "-49-05 Monk_ New York Requiem.mp3" + }, + { + "title": "-49-06 Monk_ Volcano Songs - Offering", + "media": "-49-06 Monk_ Volcano Songs - Offering.mp3" + }, + { + "title": "-49-07 Monk_ Volcano Songs - Boat Man", + "media": "-49-07 Monk_ Volcano Songs - Boat Man.mp3" + }, + { + "title": "-49-08 Monk_ Volcano Songs - Skip Song", + "media": "-49-08 Monk_ Volcano Songs - Skip Song.mp3" + }, + { + "title": "-49-09 Monk_ Volcano Songs - Old Lava", + "media": "-49-09 Monk_ Volcano Songs - Old Lava.mp3" + }, + { + "title": "-49-10 Monk_ Volcano Songs - Cry #2", + "media": "-49-10 Monk_ Volcano Songs - Cry #2.mp3" + }, + { + "title": "-49-11 Monk_ St. Petersburg Waltz", + "media": "-49-11 Monk_ St. Petersburg Waltz.mp3" + }, + { + "title": "-49-12 Monk_ Three Heavens & Hells", + "media": "-49-12 Monk_ Three Heavens & Hells.mp3" + }, + { + "title": "-49-13 Monk_ Light Songs - Click Song #1", + "media": "-49-13 Monk_ Light Songs - Click Song #1.mp3" + }, + { + "title": "-49-14 Monk_ Light Songs - Click Song #2", + "media": "-49-14 Monk_ Light Songs - Click Song #2.mp3" + } + ] + }, + { + "title": "impermanence", + "parent_dir": "music_sound_ecm", + "media": "impermanence", + "image": "impermanence.jpg", + "album": true, + "tracks": [ + { + "title": "-51-01 Monk_ Last Song", + "media": "-51-01 Monk_ Last Song.mp3" + }, + { + "title": "-51-02 Monk_ Maybe 1", + "media": "-51-02 Monk_ Maybe 1.mp3" + }, + { + "title": "-51-03 Monk_ Little Breath", + "media": "-51-03 Monk_ Little Breath.mp3" + }, + { + "title": "-51-04 Monk_ Liminal", + "media": "-51-04 Monk_ Liminal.mp3" + }, + { + "title": "-51-05 Monk_ Disequilibrium", + "media": "-51-05 Monk_ Disequilibrium.mp3" + }, + { + "title": "-51-06 Monk_ Particular Dance", + "media": "-51-06 Monk_ Particular Dance.mp3" + }, + { + "title": "-51-07 Monk_ Between Song", + "media": "-51-07 Monk_ Between Song.mp3" + }, + { + "title": "-51-08 Monk_ Passage", + "media": "-51-08 Monk_ Passage.mp3" + }, + { + "title": "-51-09 Monk_ Maybe 2", + "media": "-51-09 Monk_ Maybe 2.mp3" + }, + { + "title": "-51-10 Monk_ Skeleton Lines", + "media": "-51-10 Monk_ Skeleton Lines.mp3" + }, + { + "title": "-51-11 Monk_ Slow Dissolve", + "media": "-51-11 Monk_ Slow Dissolve.mp3" + }, + { + "title": "-51-12 Monk_ Totentanz", + "media": "-51-12 Monk_ Totentanz.mp3" + }, + { + "title": "-51-13 Hilash_ Sweep 1", + "media": "-51-13 Hilash_ Sweep 1.mp3" + }, + { + "title": "-51-14 Monk_ Rocking", + "media": "-51-14 Monk_ Rocking.mp3" + }, + { + "title": "_46_15 Hilash_ Sweep 2", + "media": "_46_15 Hilash_ Sweep 2.mp3" + }, + { + "title": "_46_16 Hoek_ Mieke's Melody #5", + "media": "_46_16 Hoek_ Mieke's Melody #5.mp3" + } + ] + }, + { + "title": "mercy", + "parent_dir": "music_sound_ecm", + "media": "mercy", + "image": "mercy.jpg", + "album": true, + "tracks": [ + { + "title": "-50-01 Monk_ Braid 1 & Leaping Song", + "media": "-50-01 Monk_ Braid 1 & Leaping Song.mp3" + }, + { + "title": "-50-02 Monk_ Braid 2", + "media": "-50-02 Monk_ Braid 2.mp3" + }, + { + "title": "-50-03 Monk_ Urban March (Shadow)", + "media": "-50-03 Monk_ Urban March (Shadow).mp3" + }, + { + "title": "-50-04 Monk_ Masks", + "media": "-50-04 Monk_ Masks.mp3" + }, + { + "title": "-50-05 Monk_ Line 1", + "media": "-50-05 Monk_ Line 1.mp3" + }, + { + "title": "-50-06 Monk_ Doctor_Patient", + "media": "-50-06 Monk_ Doctor_Patient.mp3" + }, + { + "title": "-50-07 Monk_ Line 2", + "media": "-50-07 Monk_ Line 2.mp3" + }, + { + "title": "-50-08 Monk_ Woman At The Door", + "media": "-50-08 Monk_ Woman At The Door.mp3" + }, + { + "title": "-50-09 Monk_ Line 3 & Prisoner", + "media": "-50-09 Monk_ Line 3 & Prisoner.mp3" + }, + { + "title": "-50-10 Monk_ Epilogue", + "media": "-50-10 Monk_ Epilogue.mp3" + }, + { + "title": "-50-11 Monk_ Shaking", + "media": "-50-11 Monk_ Shaking.mp3" + }, + { + "title": "-50-12 Monk_ Liquid Air", + "media": "-50-12 Monk_ Liquid Air.mp3" + }, + { + "title": "-50-13 Monk_ Urban March (Light)", + "media": "-50-13 Monk_ Urban March (Light).mp3" + }, + { + "title": "-50-14 Monk_ Core Chant", + "media": "-50-14 Monk_ Core Chant.mp3" + } ] } -] +] \ No newline at end of file diff --git a/public/data/music_sound_unpublished.json b/public/data/music_sound_unpublished.json index 396aaa5..fe51488 100644 --- a/public/data/music_sound_unpublished.json +++ b/public/data/music_sound_unpublished.json @@ -1,8 +1 @@ -[ - { - "title": "", - "parent_dir": "music_sound_unpublished", - "media": "no content recieved", - "tracks": [] - } -] \ No newline at end of file +[] diff --git a/public/data/music_sound_various.json b/public/data/music_sound_various.json index d5581c0..9451f60 100644 --- a/public/data/music_sound_various.json +++ b/public/data/music_sound_various.json @@ -1,184 +1,510 @@ [ { - "title": "", + "title": "Beginnings", + "details": "Tzadik, 2009", "parent_dir": "music_sound_various", - "media": "MONK MIX Remixes and Interpretations of Music by Meredith Monk CD1", + "media": "Beginnings_Tzadik, 2009", + "image": "Beginnings_Tzadik, 2009.jpg", "album": true, "tracks": [ - "01 Gotham Lullaby (Featuring Björk With The Brodsky Quartet).mp3", - "02 Caldera Chimera (Featuring Gabriel Prokofiev Remix).mp3", - "03 Click Song #1 (Featuring Don Byron).mp3", - "04 Double Fiesta (Featuring Meredith Monk & Bang On A Can).mp3", - "05 Astronaut Anthem (Featuring Sakamoto Remix).mp3", - "06 Shaking (Featuring Lukas Ligeti) [Pyrolator Remix].mp3", - "07 Last Song (Featuring Caetano Veloso).mp3", - "08 Fat Stream (Featuring Nico_s Piano Homage).mp3", - "09 Wheel (Featuring John Hollenbeck & Theo Bleckmann).mp3", - "10 Scared Song (Featuring Pamela Z).mp3", - "11 Boat Song (Featuring Rubin Kodheli).mp3", - "12 Gathering (Featuring Lee Ranaldo Remix).mp3", - "13 Evening (Featuring Henry Grimes Remix).mp3" + { + "title": "_60_01 Greensleeves", + "media": "_60_01 Greensleeves.mp3" + }, + { + "title": "_60_02 Nota", + "media": "_60_02 Nota.mp3" + }, + { + "title": "_60_03 Duet For Voice And Echoplex", + "media": "_60_03 Duet For Voice And Echoplex.mp3" + }, + { + "title": "_60_04 Candy Bullets And Moon", + "media": "_60_04 Candy Bullets And Moon.mp3" + }, + { + "title": "_60_05 Trance", + "media": "_60_05 Trance.mp3" + }, + { + "title": "_60_06 Epic I", + "media": "_60_06 Epic I.mp3" + }, + { + "title": "_60_07 Paris", + "media": "_60_07 Paris.mp3" + }, + { + "title": "_60_08 Biography", + "media": "_60_08 Biography.mp3" + }, + { + "title": "_60_09 Mill", + "media": "_60_09 Mill.mp3" + }, + { + "title": "_60_10 The Tale", + "media": "_60_10 The Tale.mp3" + }, + { + "title": "_60_11 Quarry Weave", + "media": "_60_11 Quarry Weave.mp3" + }, + { + "title": "_60_12 Epic II", + "media": "_60_12 Epic II.mp3" + }, + { + "title": "_60_13 Tower", + "media": "_60_13 Tower.mp3" + }, + { + "title": "_60_14 Mill", + "media": "_60_14 Mill.mp3" + }, + { + "title": "_60_15 Do You Be_", + "media": "_60_15 Do You Be_.mp3" + }, + { + "title": "_60_16 Quarry Procession", + "media": "_60_16 Quarry Procession.mp3" + }, + { + "title": "_60_17 Porch", + "media": "_60_17 Porch.mp3" + } ] }, { - "title": "", + "title": "Biography (from Education of the Girlchild)", + "details": "Big Ego Records, 1978", "parent_dir": "music_sound_various", - "media": "MONK MIX Remixes and Interpretations of Music by Meredith Monk CD2", + "media": "Biography (from Education of the Girlchild)_Big Ego Records, 1978", + "image": "Biography (from Education of the Girlchild)_Big Ego Records, 1978.jpg", "album": true, "tracks": [ - "01 Dawn (feat. Dj Spooky Remix).mp3", - "02 Rain (feat. Vijay Iyer Revelation Mix Featuring Latasha N. Nevada Diggs).mp3", - "03 Atlas Ascending (feat. Todd Reynolds Remix).mp3", - "04 Epic (feat. Dj Rekha & Raj Star Remix).mp3", - "05 Memory Song (feat. Miho Hatori Remix).mp3", - "06 Travellers (feat. King Britt Idm Mix).mp3", - "07 Night Vs. Lullaby (feat. Matt Marks Remix).mp3", - "08 Double Fiesta (feat. Arto Lindsay Remix).mp3", - "09 Long Shadows (feat. Scanner Entwine Mix).mp3", - "10 Dolmen Music, Part 1 (feat. Shodekeh's Embody & Continuums Remix).mp3", - "11 Braid (feat. High Priest _ Hprizm Ghostlover Remix).mp3", - "12 Vocal_ Mill Feuille (feat. Sussan Deyhim Remix).mp3" + { + "title": "_63_13 Biography_Big Ego album", + "media": "_63_13 Biography_Big Ego album.m4a" + } ] }, { - "title": "", + "title": "KEY: an albm of invisible theater", + "details": "Lovely Music, 1971", "parent_dir": "music_sound_various", - "media": "_55 Songs from the Hill-Tablet", + "media": "KEY: an albm of invisible theater_Lovely Music, 1971", + "image": "KEY: an albm of invisible theater_Lovely Music, 1971.jpg", "album": true, "tracks": [ - "_55_01 Lullaby.mp3", - "_55_02 Mesa.mp3", - "_55_03 Jade (old woman's song).mp3", - "_55_04 Wa-lie-oh.mp3", - "_55_05 Insect.mp3", - "_55_06 Descending.mp3", - "_55_07 Silo.mp3", - "_55_08 Bird Code.mp3", - "_55_09 Jew's Harp.mp3", - "_55_10 Prairie Ghost.mp3", - "_55_11 Tablet.mp3" + { + "title": "_57_01 Porch", + "media": "_57_01 Porch.mp3" + }, + { + "title": "_57_02 Understreet", + "media": "_57_02 Understreet.mp3" + }, + { + "title": "_57_03 What Does It Mean_", + "media": "_57_03 What Does It Mean_.mp3" + }, + { + "title": "_57_04 Vision #1", + "media": "_57_04 Vision #1.mp3" + }, + { + "title": "_57_05 Fat Stream", + "media": "_57_05 Fat Stream.mp3" + }, + { + "title": "_57_06 Vision #2", + "media": "_57_06 Vision #2.mp3" + }, + { + "title": "_57_07 Do You Be_", + "media": "_57_07 Do You Be_.mp3" + }, + { + "title": "_57_08 Vision (#3)", + "media": "_57_08 Vision (#3).mp3" + }, + { + "title": "_57_09 Change", + "media": "_57_09 Change.mp3" + }, + { + "title": "_57_10 Dungeon", + "media": "_57_10 Dungeon.mp3" + } ] }, { - "title": "", + "title": "MEMORY GAME", + "details": "Cantaloupe Music, 2020", "parent_dir": "music_sound_various", - "media": "_56 Our Lady of Late", + "media": "MEMORY GAME_Cantaloupe Music, 2020", + "image": "MEMORY GAME_Cantaloupe Music, 2020.jpg", "album": true, "tracks": [ - "_56_01 Prologue.mp3", - "_56_02 Unison.mp3", - "_56_03 Knee.mp3", - "_56_04 Hey Rhythm.mp3", - "_56_05 Cow Song.mp3", - "_56_06 Sigh.mp3", - "_56_07 Morning.mp3", - "_56_08 Slide.mp3", - "_56_09 Waltz.mp3", - "_56_10 Prophecy.mp3", - "_56_11 Dumb.mp3", - "_56_12 Conversation.mp3", - "_56_13 Low Ring.mp3", - "_56_14 High Ring.mp3", - "_56_15 Free.mp3", - "_56_16 Edge.mp3", - "_56_17 Scale Down.mp3", - "_56_18 Epilogue.mp3" + { + "title": "_58_01 Spaceship", + "media": "_58_01 Spaceship.mp3" + }, + { + "title": "_58_02 Gamemaster's Song", + "media": "_58_02 Gamemaster's Song.mp3" + }, + { + "title": "_58_03 Migration", + "media": "_58_03 Migration.mp3" + }, + { + "title": "_58_04 Memory Song", + "media": "_58_04 Memory Song.mp3" + }, + { + "title": "_58_05 Downfall", + "media": "_58_05 Downfall.mp3" + }, + { + "title": "_58_06 Waltz In 5s", + "media": "_58_06 Waltz In 5s.mp3" + }, + { + "title": "_58_07 Tokyo CHa Cha", + "media": "_58_07 Tokyo CHa Cha.mp3" + }, + { + "title": "_58_08 Totentanz", + "media": "_58_08 Totentanz.mp3" + }, + { + "title": "_58_09 Double Fiesta", + "media": "_58_09 Double Fiesta.mp3" + } ] }, { - "title": "", + "title": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD1)", + "details": "The House Foundation for the Arts, 2012", "parent_dir": "music_sound_various", - "media": "_57 KEY-an album of invisible theater", + "media": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD1)_The House Foundation for the Arts, 2012", + "image": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD1)_The House Foundation for the Arts, 2012.jpg", "album": true, "tracks": [ - "_57_01 Porch.mp3", - "_57_02 Understreet.mp3", - "_57_03 What Does It Mean_.mp3", - "_57_04 Vision #1.mp3", - "_57_05 Fat Stream.mp3", - "_57_06 Vision #2.mp3", - "_57_07 Do You Be_.mp3", - "_57_08 Vision (#3).mp3", - "_57_09 Change.mp3", - "_57_10 Dungeon.mp3" + { + "title": "01 Gotham Lullaby (Featuring Björk With The Brodsky Quartet)", + "media": "01 Gotham Lullaby (Featuring Björk With The Brodsky Quartet).mp3" + }, + { + "title": "02 Caldera Chimera (Featuring Gabriel Prokofiev Remix)", + "media": "02 Caldera Chimera (Featuring Gabriel Prokofiev Remix).mp3" + }, + { + "title": "03 Click Song #1 (Featuring Don Byron)", + "media": "03 Click Song #1 (Featuring Don Byron).mp3" + }, + { + "title": "04 Double Fiesta (Featuring Meredith Monk & Bang On A Can)", + "media": "04 Double Fiesta (Featuring Meredith Monk & Bang On A Can).mp3" + }, + { + "title": "05 Astronaut Anthem (Featuring Sakamoto Remix)", + "media": "05 Astronaut Anthem (Featuring Sakamoto Remix).mp3" + }, + { + "title": "06 Shaking (Featuring Lukas Ligeti) [Pyrolator Remix]", + "media": "06 Shaking (Featuring Lukas Ligeti) [Pyrolator Remix].mp3" + }, + { + "title": "07 Last Song (Featuring Caetano Veloso)", + "media": "07 Last Song (Featuring Caetano Veloso).mp3" + }, + { + "title": "08 Fat Stream (Featuring Nico_s Piano Homage)", + "media": "08 Fat Stream (Featuring Nico_s Piano Homage).mp3" + }, + { + "title": "09 Wheel (Featuring John Hollenbeck & Theo Bleckmann)", + "media": "09 Wheel (Featuring John Hollenbeck & Theo Bleckmann).mp3" + }, + { + "title": "10 Scared Song (Featuring Pamela Z)", + "media": "10 Scared Song (Featuring Pamela Z).mp3" + }, + { + "title": "11 Boat Song (Featuring Rubin Kodheli)", + "media": "11 Boat Song (Featuring Rubin Kodheli).mp3" + }, + { + "title": "12 Gathering (Featuring Lee Ranaldo Remix)", + "media": "12 Gathering (Featuring Lee Ranaldo Remix).mp3" + }, + { + "title": "13 Evening (Featuring Henry Grimes Remix)", + "media": "13 Evening (Featuring Henry Grimes Remix).mp3" + } ] }, { - "title": "", + "title": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD2)", + "details": "The House Foundation for the Arts, 2012", "parent_dir": "music_sound_various", - "media": "_58 MEMORY GAME", + "media": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD2)_The House Foundation for the Arts, 2012", + "image": "MONK MIX Remixes and Interpretations of Music by Meredith Monk (CD2)_The House Foundation for the Arts, 2012.jpg", "album": true, "tracks": [ - "_58_01 Spaceship.mp3", - "_58_02 Gamemaster's Song.mp3", - "_58_03 Migration.mp3", - "_58_04 Memory Song.mp3", - "_58_05 Downfall.mp3", - "_58_06 Waltz In 5s.mp3", - "_58_07 Tokyo CHa Cha.mp3", - "_58_08 Totentanz.mp3", - "_58_09 Double Fiesta.mp3" + { + "title": "01 Dawn (feat. Dj Spooky Remix)", + "media": "01 Dawn (feat. Dj Spooky Remix).mp3" + }, + { + "title": "02 Rain (feat. Vijay Iyer Revelation Mix Featuring Latasha N. Nevada Diggs)", + "media": "02 Rain (feat. Vijay Iyer Revelation Mix Featuring Latasha N. Nevada Diggs).mp3" + }, + { + "title": "03 Atlas Ascending (feat. Todd Reynolds Remix)", + "media": "03 Atlas Ascending (feat. Todd Reynolds Remix).mp3" + }, + { + "title": "04 Epic (feat. Dj Rekha & Raj Star Remix)", + "media": "04 Epic (feat. Dj Rekha & Raj Star Remix).mp3" + }, + { + "title": "05 Memory Song (feat. Miho Hatori Remix)", + "media": "05 Memory Song (feat. Miho Hatori Remix).mp3" + }, + { + "title": "06 Travellers (feat. King Britt Idm Mix)", + "media": "06 Travellers (feat. King Britt Idm Mix).mp3" + }, + { + "title": "07 Night Vs. Lullaby (feat. Matt Marks Remix)", + "media": "07 Night Vs. Lullaby (feat. Matt Marks Remix).mp3" + }, + { + "title": "08 Double Fiesta (feat. Arto Lindsay Remix)", + "media": "08 Double Fiesta (feat. Arto Lindsay Remix).mp3" + }, + { + "title": "09 Long Shadows (feat. Scanner Entwine Mix)", + "media": "09 Long Shadows (feat. Scanner Entwine Mix).mp3" + }, + { + "title": "10 Dolmen Music, Part 1 (feat. Shodekeh's Embody & Continuums Remix)", + "media": "10 Dolmen Music, Part 1 (feat. Shodekeh's Embody & Continuums Remix).mp3" + }, + { + "title": "11 Braid (feat. High Priest _ Hprizm Ghostlover Remix)", + "media": "11 Braid (feat. High Priest _ Hprizm Ghostlover Remix).mp3" + }, + { + "title": "12 Vocal_ Mill Feuille (feat. Sussan Deyhim Remix)", + "media": "12 Vocal_ Mill Feuille (feat. Sussan Deyhim Remix).mp3" + } ] }, { - "title": "", + "title": "Monk and the Abbess", + "details": "BMG, 1996", "parent_dir": "music_sound_various", - "media": "_60 Beginnings", + "media": "Monk and the Abbess_BMG, 1996", + "image": "Monk and the Abbess_BMG, 1996.jpg", "album": true, "tracks": [ - "_60_01 Greensleeves.mp3", - "_60_02 Nota.mp3", - "_60_03 Duet For Voice And Echoplex.mp3", - "_60_04 Candy Bullets And Moon.mp3", - "_60_05 Trance.mp3", - "_60_06 Epic I.mp3", - "_60_07 Paris.mp3", - "_60_08 Biography.mp3", - "_60_09 Mill.mp3", - "_60_10 The Tale.mp3", - "_60_11 Quarry Weave.mp3", - "_60_12 Epic II.mp3", - "_60_13 Tower.mp3", - "_60_14 Mill.mp3", - "_60_15 Do You Be_.mp3", - "_60_16 Quarry Procession.mp3", - "_60_17 Porch.mp3" + { + "title": "_62_05 Dawn (1985)", + "media": "_62_05 Dawn (1985).mp3" + }, + { + "title": "_62_06 Quarry weave 1 (1976)", + "media": "_62_06 Quarry weave 1 (1976).mp3" + }, + { + "title": "_62_07 Quarry lullaby (1976)", + "media": "_62_07 Quarry lullaby (1976).mp3" + }, + { + "title": "_62_08 Quarry weave 2 (1976)", + "media": "_62_08 Quarry weave 2 (1976).mp3" + }, + { + "title": "_62_09 Farmer's song (1974)", + "media": "_62_09 Farmer's song (1974).mp3" + }, + { + "title": "_62_10 Astronaut anthem (1983)", + "media": "_62_10 Astronaut anthem (1983).mp3" + }, + { + "title": "_62_11 Nightfall (1995)", + "media": "_62_11 Nightfall (1995).mp3" + } ] }, { - "title": "", + "title": "Our Lady of Late", + "details": "Minona Records, 1974 and Wergo, 1986", "parent_dir": "music_sound_various", - "media": "_61 Radio Songs", + "media": "Our Lady of Late_Minona Records, 1974 and Wergo, 1986", + "image": "Our Lady of Late_Minona Records, 1974 and Wergo, 1986.jpg", "album": true, "tracks": [ - "_61_01 Quarry Radio.mp3", - "_61_02 Gotham Blues.mp3", - "_61_03 Quarry Waltz.mp3", - "_61_04 Gotham Lullaby.mp3" + { + "title": "_56_01 Prologue", + "media": "_56_01 Prologue.mp3" + }, + { + "title": "_56_02 Unison", + "media": "_56_02 Unison.mp3" + }, + { + "title": "_56_03 Knee", + "media": "_56_03 Knee.mp3" + }, + { + "title": "_56_04 Hey Rhythm", + "media": "_56_04 Hey Rhythm.mp3" + }, + { + "title": "_56_05 Cow Song", + "media": "_56_05 Cow Song.mp3" + }, + { + "title": "_56_06 Sigh", + "media": "_56_06 Sigh.mp3" + }, + { + "title": "_56_07 Morning", + "media": "_56_07 Morning.mp3" + }, + { + "title": "_56_08 Slide", + "media": "_56_08 Slide.mp3" + }, + { + "title": "_56_09 Waltz", + "media": "_56_09 Waltz.mp3" + }, + { + "title": "_56_10 Prophecy", + "media": "_56_10 Prophecy.mp3" + }, + { + "title": "_56_11 Dumb", + "media": "_56_11 Dumb.mp3" + }, + { + "title": "_56_12 Conversation", + "media": "_56_12 Conversation.mp3" + }, + { + "title": "_56_13 Low Ring", + "media": "_56_13 Low Ring.mp3" + }, + { + "title": "_56_14 High Ring", + "media": "_56_14 High Ring.mp3" + }, + { + "title": "_56_15 Free", + "media": "_56_15 Free.mp3" + }, + { + "title": "_56_16 Edge", + "media": "_56_16 Edge.mp3" + }, + { + "title": "_56_17 Scale Down", + "media": "_56_17 Scale Down.mp3" + }, + { + "title": "_56_18 Epilogue", + "media": "_56_18 Epilogue.mp3" + } ] }, { - "title": "", + "title": "Radio Songs", + "details": "The sound of White Columns, 2014", "parent_dir": "music_sound_various", - "media": "_62 Monk and the Abbiss", + "media": "Radio Songs_The sound of White Columns, 2014", + "image": "Radio Songs_The sound of White Columns, 2014.jpg", "album": true, "tracks": [ - "_62_05 Dawn (1985).mp3", - "_62_06 Quarry weave 1 (1976).mp3", - "_62_07 Quarry lullaby (1976).mp3", - "_62_08 Quarry weave 2 (1976).mp3", - "_62_09 Farmer's song (1974).mp3", - "_62_10 Astronaut anthem (1983).mp3", - "_62_11 Nightfall (1995).mp3" + { + "title": "_61_01 Quarry Radio", + "media": "_61_01 Quarry Radio.mp3" + }, + { + "title": "_61_02 Gotham Blues", + "media": "_61_02 Gotham Blues.mp3" + }, + { + "title": "_61_03 Quarry Waltz", + "media": "_61_03 Quarry Waltz.mp3" + }, + { + "title": "_61_04 Gotham Lullaby", + "media": "_61_04 Gotham Lullaby.mp3" + } ] }, { - "title": "", + "title": "Songs from the Hill-Tablet", + "details": "Wergo, 1979", "parent_dir": "music_sound_various", - "media": "_63 Biography (from Education of the Girlchild)", + "media": "Songs from the Hill-Tablet_Wergo, 1979", + "image": "Songs from the Hill-Tablet_Wergo, 1979.jpg", "album": true, "tracks": [ - "_63_13 Biography_Big Ego album.m4a" + { + "title": "_55_01 Lullaby", + "media": "_55_01 Lullaby.mp3" + }, + { + "title": "_55_02 Mesa", + "media": "_55_02 Mesa.mp3" + }, + { + "title": "_55_03 Jade (old woman's song)", + "media": "_55_03 Jade (old woman's song).mp3" + }, + { + "title": "_55_04 Wa-lie-oh", + "media": "_55_04 Wa-lie-oh.mp3" + }, + { + "title": "_55_05 Insect", + "media": "_55_05 Insect.mp3" + }, + { + "title": "_55_06 Descending", + "media": "_55_06 Descending.mp3" + }, + { + "title": "_55_07 Silo", + "media": "_55_07 Silo.mp3" + }, + { + "title": "_55_08 Bird Code", + "media": "_55_08 Bird Code.mp3" + }, + { + "title": "_55_09 Jew's Harp", + "media": "_55_09 Jew's Harp.mp3" + }, + { + "title": "_55_10 Prairie Ghost", + "media": "_55_10 Prairie Ghost.mp3" + }, + { + "title": "_55_11 Tablet", + "media": "_55_11 Tablet.mp3" + } ] } ] \ No newline at end of file diff --git a/public/data/recordings_live.json b/public/data/recordings_live.json deleted file mode 100644 index fe51488..0000000 --- a/public/data/recordings_live.json +++ /dev/null @@ -1 +0,0 @@ -[] diff --git a/public/data/theatre.json b/public/data/theatre.json index 11b86fb..aa9bf31 100644 --- a/public/data/theatre.json +++ b/public/data/theatre.json @@ -1,63 +1,65 @@ [ { - "title": "Specimen Days", - "details": "The Public Theater, New York, 1981. 1:26:17", - "media": "-34 Specimen Days.m4v", + "title": "Cellular Songs", + "details": "UCLA, Los Angeles, California, 2019", + "parent_dir": "theatre", + "media": "Cellular Songs_UCLA, Los Angeles, California, 2019.mp4", + "image": "Cellular Songs_UCLA, Los Angeles, California, 2019.jpg" }, { - "title": "The Games: a science fiction opera", - "details": "Brooklyn Academy of Music (BAM), New York, 1984. 2:00:35", - "media": "-37 MMonk_TheGames_BAM1984.m4v", + "title": "Education of the Girlchild", + "details": "solo, Common Ground, NYC, 1973", + "parent_dir": "theatre", + "media": "Education of the Girlchild_solo, Common Ground, NYC, 1973..m4v", + "image": "Education of the Girlchild_solo, Common Ground, NYC, 1973..jpg" }, { "title": "Facing North", - "details": "George Washington University, Washington, DC, 1992. 54:32", - }, - { - "title": "The Politics of Quiet", - "details": "Brooklyn Academy of Music, BAM, New York, 1996. 1:43:46", - "media": "-36 The Politics of Quiet at BAM - 10.13.96.m4v", + "details": "George Washington University, Washington, DC, 1992", + "parent_dir": "theatre", + "media": "Facing North_George Washington University, Washington, DC, 1992.mp4", + "image": "Facing North_George Washington University, Washington, DC, 1992.jpg" }, { "title": "Magic Frequencies (excerpts)", - "details": "Muffathalle, Munich, Germany, 1998. 25:49", - "media": "-42 1998 Magic Frequencies (excerpts) BetaCamSP transfer 2021.m4v" + "details": "Muffathalle, Munich, Germany, 1998", + "parent_dir": "theatre", + "media": "Magic Frequencies (excerpts)_Muffathalle, Munich, Germany, 1998.m4v", + "image": "Magic Frequencies (excerpts)_Muffathalle, Munich, Germany, 1998.jpg" }, { - "title":"A Celebration Service", - "details": "St. Mark’s Church, NYC, 1999. 55:02", - "media": "-35 Meredith Monk - A Celebration Service_ Danspace at St. Mark's Church_1999.m4v", + "title": "Meredith Monk", + "details": "A Celebration Service", + "parent_dir": "theatre", + "media": "Meredith Monk_A Celebration Service_ Danspace at St. Mark's Church_1999.m4v", + "image": "Meredith Monk_A Celebration Service_ Danspace at St. Mark's Church_1999.jpg" }, { - impermanence, Brooklyn Academy of Music (BAM), New York, 2006. 1:22:03 + "title": "Songs of Ascension", + "details": "Brooklyn Academy of Music (BAM), New York, 2009", + "parent_dir": "theatre", + "media": "Songs of Ascension_Brooklyn Academy of Music (BAM), New York, 2009.mp4", + "image": "Songs of Ascension_Brooklyn Academy of Music (BAM), New York, 2009.jpg" }, { - Songs of Ascension, Brooklyn Academy of Music (BAM), New York, 2009. 1:17:29 + "title": "Specimen Days", + "details": "The Public Theater, New York, 1981", + "parent_dir": "theatre", + "media": "Specimen Days_The Public Theater, New York, 1981.m4v", + "image": "Specimen Days_The Public Theater, New York, 1981.jpg" }, { - "title": "On Behalf of Nature", - "details": "UCLA, Los Angeles, California, 2013. 1:14:55" - "media": "" + "title": "The Games", + "details": "a science fiction opera, Brooklyn Academy of Music (BAM), New York, 1984", + "parent_dir": "theatre", + "media": "The Games_a science fiction opera, Brooklyn Academy of Music (BAM), New York, 1984.m4v", + "image": "The Games_a science fiction opera, Brooklyn Academy of Music (BAM), New York, 1984.jpg" + }, + { + "title": "impermanence", + "details": "Brooklyn Academy of Music (BAM), New York, 2006", + "parent_dir": "theatre", + "media": "impermanence_Brooklyn Academy of Music (BAM), New York, 2006.mp4", + "image": "impermanence_Brooklyn Academy of Music (BAM), New York, 2006.jpg" } - - { - Cellular Songs, UCLA, Los Angeles, California, 2019. 1:24:07 - } - - - - - - - - - - - "media": "-29 Education of the Gildchild solo_Common Ground_1973.m4v", - "media": "-30 Quarry_full film_1977_FINAL_20200127_added to dropbox.m4v", - "media": "-33 MEREDITH_MONK_SOLO_CONCERT_1980.m4v", - "media": "-38 MeredithMonk_SoloConcert_College des Bernadins Paris_20120516.m4v", - "media": "-39 Meredith Monk with Katie Geissinger in Concert, Haus der Kunst, Munich, Germany (2012).m4v", - "media": "-40 Candy_Bullets_and_Moon.m4v", - "media": "-41 Monk_Anthem_Final.m4v", ] diff --git a/scripts/files2json.js b/scripts/files2json.js index 504d418..5140d17 100644 --- a/scripts/files2json.js +++ b/scripts/files2json.js @@ -1,6 +1,29 @@ import fs from 'fs/promises' import path from 'path' +import { exec } from 'child_process' +// WAVEFORM GENERATION +// TODO@mx use node-js library +async function generateWaveform(audioFile, outputDir) { + const inputFile = path.join(outputDir, audioFile) + audioFile = audioFile.replace(/\.[^/.]+$/, '.png') + const outputPath = path.join(outputDir || '.', audioFile) + + return new Promise((resolve, reject) => { + exec( + `audiowaveform -i '${inputFile}' -o '${outputPath}' --output-format png -z auto -w 640 -h 180 --background-color 00000000 --waveform-color FFFFFF50 --waveform-style bars --bar-style rounded --border-color 00000000 --bar-width 4 --bar-gap 6 --no-axis-labels`, + (error, stdOut) => { + if (error) { + console.error(error) + reject(error) + } else { + resolve(audioFile) + } + }) + }) +} + +// MAIN FUNCTION async function main() { // variable for incoming variable let mediaDir = '' @@ -8,90 +31,189 @@ async function main() { let recurse = false let imagesOnly = false let dryRun = false + let formatted = null + let waveform = false + let update = [] // get command line arguments process.argv.forEach(function (val, index) { // console.log(index + ': ' + val) - if (val == '-dir') { - // console.log(process.argv[index + 1]) - mediaDir = process.argv[index + 1] || '' - } + switch (val) { + case '-dir': + mediaDir = process.argv[index + 1] || '' + break + case '-o': + outputDir = process.argv[index + 1] || '' + break + case '-u': + update = process.argv[index + 1].match(/(title|details|media|image[s]*|tracks|)/i) + ? process.argv[index + 1] + .split(',') + .filter(a => [ + 'title', + 'details', + 'media', + 'image', + 'tracks', + 'images' + ].includes(a)) + : true + break + case '-r': + recurse = true + break + case '--images-only': + imagesOnly = true + break + case '--dry-run': + dryRun = true + break + case '--formatted': + formatted = ['parent', 'recurse', 'both' ].includes(process.argv[index + 1]) ? process.argv[index + 1] : 'both' + break + case '--gen-waveform': + waveform = true + break - if (val == '--dry-run') { - dryRun = true - } - - if (val == '--images') { - imagesOnly = true - } - - if (val == '-r' || val == '-R') { - recurse = true - } - - if (val == '-o') { - outputDir = process.argv[index + 1] + default: + break } }) - // if no media dir jump out + // if no media dir passed jump out if (!mediaDir) { console.log('no directory passed to script') return 0 } + // + // read directory + const dirList = await fs.readdir(mediaDir) // variable to hold media let media = [] let images = [] - // read directory - const dirList = await fs.readdir(mediaDir) - if (!recurse) { + // If recursing we are making the "media" the directories where we will find the + // acutal media to playback or see + if (recurse) { + media = dirList.filter(i => !i.match(/\.[^/.]+$/)) + } else { media = dirList.filter(i => i.match(/.(mp\d|m\d\w)$/i)) - images = dirList.filter(i => i.match(/.(jp\w*g|png)$/i)) } + // create an array of images found in the directory as well + images = dirList.filter(i => i.match(/.(jp\w*g|png)$/i)) - // clean up directory for json + // clean up passed directory for json let parent_dir = mediaDir .match(/(?<=\/)(\w|\d)+\/*$/i)[0] .replace(/\/$/i, '') + // set an output directory if not set by flags if (!outputDir) { outputDir = '.' } - const obj = await Promise.all(media.map(async (m, i) => { + // THE MAIN EVENT + const obj = await Promise.all(media.map(async m => { + // setup structure const _r = { - title: '', - details: '', + ...genMetadata(m, formatted == 'parent' || formatted == 'both'), parent_dir, media: m, - image: images[i], + image: '' } + // if we are scanning for images only, remove the 'image' property + // as it will be saved in the media property + if (imagesOnly) { + delete _r.image + } else { + if (waveform) { + // if waveform generate waveform + _r.image = await generateWaveform(m, mediaDir) + } else { + // if not compare the media name with the image name + // and if a match assign it to 'image' variable from earlier + _r.image = linkImage(m.replace(/\.[^/.]+$/, ''), images) + } + } + + // if recurse (again) now we are looking for the media in the folders if (recurse) { + // create full path from the passed dir, and the recuring dir const rDir = path.join(mediaDir, m) - const files = await fs.readdir(rDir) + // read the dir + let files = await fs.readdir(rDir) + // filterout any rogue folders + // generate the metadata for each file + files = files.filter(f => f.match(/\.[^/.]+$/)) + files = files.map(f => { + const { title, details } = genMetadata(f, formatted == 'recurse' || formatted == 'both') + return { title, details, media: f } + }) - _r.album = true - _r.tracks = files + // if images only + if (imagesOnly) { + // setup object per image in array + _r.images = files + } else { + _r.album = true + _r.tracks = files + } } + // return the result to the 'obj' variable return _r })) - const json = JSON.stringify(obj, null, 2) - let output = `${parent_dir}.json` + // turn the obj variable into JSON + const json = JSON.stringify(obj, null, 2) + // set the output filename + let outputFile = `${parent_dir}.json` + + // check if file already exists at location + // const dataFile = await fs.readFile(path.join(outputDir, outputFile), 'utf8') + // console.log(JSON.parse(dataFile) || 'no data file exists') + // update only new fields + + // if dryrun if (dryRun) { + // just console it out console.log(json) } else { - fs.writeFile(path.join(outputDir, output), json) + // write it to a file + fs.writeFile(path.join(outputDir, outputFile), json) } } +function genMetadata(dir, formatted) { + let title, details + + // if formatted flag set + if (formatted) { + // split the incoming name from the map on the '_' + // and set the first element to title, and the second to details + let [ t, d ] = dir.split('_') + // assign to return object + title = t + details = d ? d.replace(/\.+(mp\d|m\dv)$/i, '') : '' + } else { + // else just set title to filename without extensions + title = dir.replace(/\.[^/.]+$/, '') + } + + return { title, details } +} + +function linkImage(name, images) { + return images.find(i => { + return i.replace(/\.[^/.]+$/, '') == name + }) +} + main() diff --git a/src/App.js b/src/App.js index c4847f4..5237c52 100644 --- a/src/App.js +++ b/src/App.js @@ -1,5 +1,6 @@ import { LitElement, css, html, unsafeCSS } from 'lit' import Router from './api/Router.js' +import { Task } from '@lit-labs/task' import MainCSS from './assets/styles/main.scss?inline' @@ -10,13 +11,17 @@ import './components/Footer.js' import './assets/styles/main.scss' export class App extends LitElement { - static properties = {} + static properties = { + dialogEl: { state: true } + } constructor() { super() } firstUpdated() { + this.dialogEl = this.shadowRoot.querySelector('dialog') + Router.addEventListener('route-changed', () => { if ('startViewTransition' in document) { return document.startViewTransition(() => { @@ -28,6 +33,27 @@ export class App extends LitElement { } }) + this.addEventListener('single-fullscreen-image', ({ detail }) => { + const { src, details } = detail + const img = new Image() + img.src = src + this.dialogEl.appendChild(img) + + if (detail.details) { + const div = document.createElement('div') + const p = document.createElement('p') + p.textContent = details + div.appendChild(p) + this.dialogEl.appendChild(div) + } + + this.dialogEl.showModal() + + this.dialogEl.addEventListener('click', () => { + this.dialogEl.close() + this.dialogEl.innerHTML = '' + }, { once: true }) + }) } render() { @@ -35,6 +61,8 @@ export class App extends LitElement { ${Router.route.path == '/' ? '' : html``} ${Router.render()} ${Router.route.path == '/' ? '' : html``} + + ` } @@ -45,6 +73,26 @@ export class App extends LitElement { flex-direction: column; height: 100vh; } + + dialog { + margin: auto; + border: none; + + & div { + padding-block-start: 1em; + font-size: 1.25em; + } + + & img { + display: block; + max-height: calc(100vmin - 2em); + max-width: calc(100vmin - 2em); + } + } + + dialog::backdrop { + background-color: #00000090; + } ` ] } diff --git a/src/api/Router.js b/src/api/Router.js index 0f03e55..b0ebd1f 100644 --- a/src/api/Router.js +++ b/src/api/Router.js @@ -74,6 +74,7 @@ export default new Router({ short: 'Unpublished', icon: 'headphones', group: 'Music & Sound', + disabled: true, plugins: [ lazy(() => import('../views/audio.js')) ], @@ -81,23 +82,23 @@ export default new Router({ }, { path: resolveRouterPath('theatre'), - title: 'Music - Theatre Works', - short: 'Theatre Works', - icon: 'headphones', + title: 'Music-Theatre Works', + short: 'Music-Theatre', + icon: 'film', plugins: [ - lazy(() => import('../views/audio.js')) + lazy(() => import('../views/videos.js')) ], - render: () => html`` + render: () => html`` }, { path: resolveRouterPath('concerts'), title: 'Concert Recordings', short: 'Concerts', - icon: 'headphones', + icon: 'film', plugins: [ - lazy(() => import('../views/audio.js')) + lazy(() => import('../views/videos.js')) ], - render: () => html`` + render: () => html`` }, { path: resolveRouterPath('films'), @@ -114,6 +115,7 @@ export default new Router({ title: 'Scores, Posters, Ephemera', short: 'images', icon: 'camera', + disabled: true, plugins: [ lazy(() => import('../views/images.js')) ], diff --git a/src/assets/styles/main.scss b/src/assets/styles/main.scss index eed1f37..2dc5fa6 100644 --- a/src/assets/styles/main.scss +++ b/src/assets/styles/main.scss @@ -6,7 +6,6 @@ body { line-height: 1; font-size: 16px; - --neutral-900: hsl(0 0% 0%); --neutral-700: hsl(220 10% 44%); --neutral-400: hsl(220 10% 88%); @@ -18,6 +17,7 @@ body { --green-400: hsl(147 100% 34%); --green-200: hsl(147 100% 50%); + --neutral-gradient-600: linear-gradient(to top,rgba(208,210,214,1) 0%, rgba(141,142,145,1) 100%); --neutral-gradient-400: linear-gradient(to bottom, hsl(228, 5%, 82%) 0%, var(--neutral-400) 100%); --green-gradient-400: linear-gradient(to bottom, var(--green-400) 0%, var(--green-500) 100%); --green-inside-gradient-400: linear-gradient(to bottom, rgba(0, 154, 69, 1) 0%,rgba(177, 178, 181, 0) 100%), linear-gradient(rgba(0, 173, 78, 1),rgba(0, 173, 78, 1)); diff --git a/src/components/AudioCard.js b/src/components/AudioCard.js index 2b325a6..f64ca54 100644 --- a/src/components/AudioCard.js +++ b/src/components/AudioCard.js @@ -19,18 +19,26 @@ class AudioCard extends LitElement { } clickHandler() { - const event = new CustomEvent('select-audio', { - bubbles: true, composed: true, - detail: { ...this.details, idx: this.idx } - }) + if (!this.selected) { + const event = new CustomEvent('select-audio', { + bubbles: true, composed: true, + detail: { ...this.details, idx: this.idx } + }) - this.dispatchEvent(event) + this.dispatchEvent(event) + } } render() { return html`
- + ${this.details.album && this.details.image + ? html`` + : html`` + }

${this.details?.title}

@@ -54,10 +62,18 @@ class AudioCard extends LitElement { font-size: 3em; } + .albumCover { + display: block; + height: 3em; + aspect-ratio: 1 / 1; + object-fit: cover; + background: lightgrey; + } + .card { display: grid; grid-auto-flow: column; - grid-template-columns: min-content 1fr; + grid-template-columns: auto 1fr; gap: 1em; align-items: center; padding-inline: 0.75em; @@ -73,6 +89,10 @@ class AudioCard extends LitElement { .card.selected { outline: 2px solid var(--green-400, black); } + + .info { + max-width: 30ch; + } ` ] } diff --git a/src/components/Footer.js b/src/components/Footer.js index d2acabc..cdd3039 100644 --- a/src/components/Footer.js +++ b/src/components/Footer.js @@ -43,13 +43,13 @@ class Footer extends LitElement { renderLink(r, first = false) { return html` - ${first ? html`` : '' } - + ${first && !r.disabled ? html`` : '' } + ${!r.disabled ? html` ${r.short} - + ` : '' } ` } diff --git a/src/components/HorizontalScroller.js b/src/components/HorizontalScroller.js index a2ea687..6a52fdd 100644 --- a/src/components/HorizontalScroller.js +++ b/src/components/HorizontalScroller.js @@ -18,9 +18,8 @@ class HorizontalScroller extends LitElement { static styles = css` :host { --col-width: 10em; - --gap: 1em; + --gap: 0.75em; display: flex; - padding-block-end: 0.5em; } .scroller { diff --git a/src/components/ImageCarousel.js b/src/components/ImageCarousel.js index 6a6af75..bccbca3 100644 --- a/src/components/ImageCarousel.js +++ b/src/components/ImageCarousel.js @@ -39,6 +39,7 @@ class ImageCarousel extends LitElement { padding-inline-end: 0.5em; padding-block-start: 0.25em; padding-block-end: 0.75em; + background: black; } mm-image { diff --git a/src/components/ModularPlayer.js b/src/components/ModularPlayer.js index bccac66..b64cb1b 100644 --- a/src/components/ModularPlayer.js +++ b/src/components/ModularPlayer.js @@ -37,15 +37,19 @@ class ModularPlayer extends LitElement { this._initAudio() } + firstUpdated() { + console.log(this.details) + } + _getTrack = new Task( this, async () => { try { if (this.details) { if (this.details?.tracks) { - this.audio.src = `/media${this.details.media}/${this.details.tracks[this.track]}` + this.audio.src = `${this.details.media}/${this.details.tracks[this.track].media}` } else { - this.audio.src = `/media${this.details.media}.mp3` + this.audio.src = `${this.details.media}` } this.audio.load() if (this.playing && this.audio.paused) { @@ -95,7 +99,7 @@ class ModularPlayer extends LitElement { this.track = 0 } - this.audio.src = `/media${this.details.media}/${this.details.tracks[this.track]}` + this.audio.src = `${this.details.media}/${this.details.tracks[this.track].media}` this.audio.load() } }) @@ -170,20 +174,35 @@ class ModularPlayer extends LitElement { return `${percentage}%` } + showImage() { + const event = new CustomEvent('single-fullscreen-image', { + bubbles: true, composed: true, + detail: { src: this.details.image } + }) + + this.dispatchEvent(event) + } + + render() { return html` ${ this.details ? html`
${this.details.tracks ? html`
-

${this.details.title}

+
+ +

${this.details.title}

+
    ${this.details.tracks.map((t, i) => html`
  • - ${t} + ${t.title}
  • `)}
@@ -191,7 +210,7 @@ ${ this.details ? ` : html``}
-

${this.details.tracks ? this.details?.tracks[this.track] : this.details.title}

+

${this.details.tracks ? this.details?.tracks[this.track].title : this.details.title}

${this.details.tracks ? '' : html`

${this.details.details}

`}
@@ -216,7 +235,7 @@ ${ this.details ? @input=${this._seekTrack} class="progress" > - +
` } @@ -263,11 +282,11 @@ ${ this.details ? } .player:has(.tracklist) { - grid-template-rows: 60% 0.5fr 0.3fr 1fr; + grid-template-rows: 67% 0.5fr 0.3fr 1fr; padding-block-end: 2em; gap: 0; - & header { + & > header { margin-block-start: 1.5em; margin-block-end: 2em; } @@ -300,23 +319,36 @@ ${ this.details ? .tracklist { --tracklist-padding: calc(var(--padding) * 2); - position: relative; + display: flex; + flex-direction: column; background: var(--neutral-gradient-400); height: 100%; - > h2 { + & header { margin-inline: var(--tracklist-padding); - margin-block-start: 0.75em; + margin-block-start: 1em; + margin-block-end: 0.75em; padding-block-start: 0.75em; border-block-start: thin solid var(--green-400); + display: flex; + gap: 0.5em; + align-items: end; + color: black; + + & img { + height: 4em; + aspect-ratio: 1 / 1; + } + + & > h2 { + line-height: 1; + max-width: 15ch; + } } - > .list { - position: absolute; - bottom: 0; - top: calc(var(--tracklist-padding) * 2.5); - right: var(--tracklist-padding); - left: var(--tracklist-padding); + & .list { + flex-grow: 1; + margin-inline: var(--tracklist-padding); overflow-x: hidden; overflow-y: auto; border-radius: 0.75em 0.75em 0 0; @@ -391,6 +423,7 @@ ${ this.details ? } .info:has(.waveform) { + & .time_pos, & .time_dur { position: absolute; diff --git a/src/components/NavCard.js b/src/components/NavCard.js index 473ab32..5736ac7 100644 --- a/src/components/NavCard.js +++ b/src/components/NavCard.js @@ -18,34 +18,42 @@ class NavCard extends LitElement { firstUpdated() { console.log(this.route) this.shadowRoot.host.addEventListener('click', () => { - Router.navigate(this.route.path) + if (!this.route.disabled) { + Router.navigate(this.route.path) + } }) } navigate(path) { - path = path || this.route.path - Router.navigate(path) + if (!this.route.disabled) { + path = path || this.route.path + Router.navigate(path) + } } render() { return html`
${Array.isArray(this.route) ? html` -

${this.route[0].group}

+
+ ${this.route[0].group} +
${this.route.map(r => - html` + !r.disabled ? html` - ` + ` : '' )} ` : html` -

${this.route?.title}

- ` } @@ -88,6 +96,15 @@ class NavCard extends LitElement { font-size: 0.75em; text-align: center; border-bottom: thin solid var(--highlight-color); + display: flex; + align-items: center; + min-height: 2.5em; + + & > span { + display: block; + max-width: 18ch; + margin-inline: auto; + } } button { @@ -105,6 +122,10 @@ class NavCard extends LitElement { text-shadow: 0 0 5px #ffffff; margin: 0; + &:has(span) { + background: var(--neutral-gradient-600); + } + &.iconOnly { display: flex; gap: 0; @@ -112,6 +133,10 @@ class NavCard extends LitElement { justify-content: center; font-size: 1.5em; padding: 1em; + + & > span { + font-size: 0.5em; + } } & mm-icon { diff --git a/src/components/VerticalCard.js b/src/components/VerticalCard.js index 9afe6e0..9d491f8 100644 --- a/src/components/VerticalCard.js +++ b/src/components/VerticalCard.js @@ -13,6 +13,7 @@ class VerticalCard extends LitElement { super() this.details = {} this.selected = false + } select() { @@ -30,7 +31,7 @@ class VerticalCard extends LitElement { return html`
- +