From 7eaeb022b04a7dc2900c14265555df63f2f417e0 Mon Sep 17 00:00:00 2001 From: suroh Date: Mon, 9 Oct 2023 19:44:18 +0200 Subject: [PATCH] working on fixing compatibility issues with ios --- public/data/audio_interviews.json | 42 --- public/data/documentaries_interviews.json | 32 --- .../data/documentaries_interviews_audio.json | 42 +++ .../data/documentaries_interviews_video.json | 82 ++++++ public/data/films.json | 28 +- public/data/music_sound.json | 163 ----------- public/data/music_sound_ecm.json | 269 ++++++++++++++++++ public/data/music_sound_unpublished.json | 8 + public/data/music_sound_various.json | 153 ++++++++++ public/data/theatre.json | 63 ++++ src/App.js | 3 +- src/api/Router.js | 84 ++++-- src/assets/styles/main.scss | 8 +- src/components/Header.js | 4 + src/components/Image.js | 45 +++ src/components/ImageCarousel.js | 52 ++++ src/components/ImageViewer.js | 13 + src/components/ModularPlayer.js | 1 + src/components/NavCard.js | 70 ++++- src/components/VideoPlayer.js | 1 + src/views/home.js | 40 ++- src/views/images.js | 13 +- src/views/videos.js | 2 +- 23 files changed, 931 insertions(+), 287 deletions(-) delete mode 100644 public/data/audio_interviews.json delete mode 100644 public/data/documentaries_interviews.json create mode 100644 public/data/documentaries_interviews_audio.json create mode 100644 public/data/documentaries_interviews_video.json delete mode 100644 public/data/music_sound.json create mode 100644 public/data/music_sound_ecm.json create mode 100644 public/data/music_sound_unpublished.json create mode 100644 public/data/music_sound_various.json create mode 100644 public/data/theatre.json create mode 100644 src/components/Image.js create mode 100644 src/components/ImageCarousel.js diff --git a/public/data/audio_interviews.json b/public/data/audio_interviews.json deleted file mode 100644 index 5d91db6..0000000 --- a/public/data/audio_interviews.json +++ /dev/null @@ -1,42 +0,0 @@ -[ - { - "title": "Totally Wired with Kimberly Haas", - "details": "1980s", - "media": "01_Meredith Monk_Totally Wired with Kimberly Haas_1980s" - }, - { - "title": "Speaking of Music", - "details": "1984, Other Minds radio program Part 1 of 2", - "media": "02_Speaking of Music, Meredith Monk. 1984 Other Minds radio program_Part 1 of 2" - }, - { - "title": "Speaking of Music", - "details": "1984, Other Minds radio program Part 2 of 2", - "media": "03_Speaking of Music_ Meredith Monk, 1984. Other Minds radio program_Part 2 of 2" - }, - { - "title": "Interview with Irene Ferchl Bayn Rundfunk Vielkurjieunal", - "details": "1986", - "media": "04 Meredith Monk Interview with Irene Ferchl_Bayn Rundfunk Vielkurjieunal_1986" - }, - { - "title": "Terry Gross Interview", - "details": "1988", - "media": "05 Terry Gross interview_1987" - }, - { - "title": "WNYC Interview with David Garland", - "details": "2008, Sacred Sundays", - "media": "06 WNYC Interview w_ David Garland_SacredSundays_2008" - }, - { - "title": "Mark Frosty McNeil and Meredith Monk in Conversation", - "details": "2019, Red Bull Radio, Fireside Chat", - "media": "07_Red Bull Radio_Fireside Chat_Mark frosty McNeil and MM in conversation_4.11.19" - }, - { - "title": "Late Junction", - "details": "2019, BBC", - "media": "08_Late Junction_2019 - Meredith Monk v2 BBC" - } -] diff --git a/public/data/documentaries_interviews.json b/public/data/documentaries_interviews.json deleted file mode 100644 index 9b74b8a..0000000 --- a/public/data/documentaries_interviews.json +++ /dev/null @@ -1,32 +0,0 @@ -[ - { - "title": "Meredith Monk: Inner Voice", - "detail": "2009, 82:00", - "media": "MeredithMonk_Inner Voice.mp4" - }, - { - "title": "Meredith Monk: A Documentary", - "detail": "by Sidsel Mundal, Norwegian Television Documentary, 1994", - "media": "1994 documentary by Sidsel Mundal_for Norwegian Television.m4v" - }, - { - "title": "Meredith Monk: A Documentary", - "detail": "by Mariusz Grzegorzek, Polish Television Documentary, 1995", - "media": "" - }, - { - "title": "Souls messenger", - "detail": "Poland, 2011", - "media": "" - }, - { - "title": "Meredith Monk", - "detail": "by Ingo Berhman, ECM Documentary - ECM50 | 1981, 2019", - "media": "" - }, - { - "title": "4 American Composers", - "detail": "Peter Greenaway Documentary", - "media": "" - } -] diff --git a/public/data/documentaries_interviews_audio.json b/public/data/documentaries_interviews_audio.json new file mode 100644 index 0000000..b4a641f --- /dev/null +++ b/public/data/documentaries_interviews_audio.json @@ -0,0 +1,42 @@ +[ + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-21 08_Late Junction_2019 - Meredith Monk v2 BBC.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-22 02_Speaking of Music Meredith Monk 1984 Part 1 of 2.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-23 03_Speaking of Music_ Meredith Monk 1984 Part 2 of 2.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-24 04 Meredith Monk Interview with I Ferchl_Bayn Rundfunk 1986.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-25 05 Terry Gross interview_1987.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-26 06 WNYC Interview w_ David Garland_SacredSundays_2008.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-27 07_Red Bull Radio_Fireside Chat_M frosty McNeil and MM_41119.mp3" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_audio", + "media": "-28 08_Late Junction_2019 - Meredith Monk v2 BBC.mp3" + } +] \ No newline at end of file diff --git a/public/data/documentaries_interviews_video.json b/public/data/documentaries_interviews_video.json new file mode 100644 index 0000000..a31a54e --- /dev/null +++ b/public/data/documentaries_interviews_video.json @@ -0,0 +1,82 @@ +[ + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--2 MichaelBlackwoodMakingDances.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--3 ECM1981 Video Meredith Monk V2_2019.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--4 Meredith Monk_Andere Avantgarde_TV Interview_1982_.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--5 New Sounds for a New World_1982.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--6 Four American Composers_Peter Greenaway.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--7 bbc_late_show (Original).m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--8 1994 documentary by Sidsel Mundal_for Norwegian Telev.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "--9 Meredith Monk - Polish Television Documentary (1995).m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-12 MeredithMonk_Inner Voice.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-13 Bennington College lecture performance 3.11.11.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-14 MMonk_TheSoulsMessenger_Lublin_2012.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-15 Girlchild Diary_61116.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-16 Q2 Spaces_Meredith Monk_2014.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-17 Gish Prize Ceremony Camera A.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-18 MM and Adam Shatz - Book of Days conversation_2020.m4v" + }, + { + "title": "", + "parent_dir": "documentaries_interviews_video", + "media": "-19 Coffee and Composition with Meredith Monk_2021.m4v" + } +] \ No newline at end of file diff --git a/public/data/films.json b/public/data/films.json index fe51488..7f96053 100644 --- a/public/data/films.json +++ b/public/data/films.json @@ -1 +1,27 @@ -[] +[ + { + "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": "", + "parent_dir": "films", + "media": "_74 Ellis Island.m4v" + }, + { + "title": "", + "parent_dir": "films", + "media": "_75 Book of Days.m4v" + }, + { + "title": "", + "parent_dir": "films", + "media": "_76 1982 Paris KTCA (full).m4v" + }, + { + "title": "", + "parent_dir": "films", + "media": "_77 TurtleDreams(Waltz)_Stereo_Tranfer1inchApril2018.m4v" + } +] \ No newline at end of file diff --git a/public/data/music_sound.json b/public/data/music_sound.json deleted file mode 100644 index 60330b6..0000000 --- a/public/data/music_sound.json +++ /dev/null @@ -1,163 +0,0 @@ -[ - { - "title": "On Behalf of Nature - Album", - "details": "2016", - "media": "on_behalf_of_nature", - "album": true, - "tracks": [ - "01 Monk_ Dark_Light 1.mp3", - "02 Monk_ High Realm.mp3", - "03 Monk_ Fractal Activity.mp3", - "04 Monk_ Environs 1.mp3", - "05 Monk_ Eon.mp3", - "06 Monk_ Duet With Shifting Ground.mp3", - "07 Monk_ Environs 2.mp3", - "08 Monk_ Pavement Steps.mp3", - "09 Monk_ Evolution.mp3", - "10 Monk_ Ritual Zone.mp3", - "11 Monk_ Water_Sky Rant.mp3", - "12 Monk_ Memory Zone.mp3", - "13 Monk_ Environs 3.mp3", - "14 Monk_ Harvest.mp3", - "15 Monk_ Dark_Light 2.mp3", - "16 Monk_ High Realm Reprise.mp3", - "17 Monk_ Fractal Mirror.mp3", - "18 Monk_ Ringing.mp3", - "19 Monk_ Spider Web Anthem.mp3" - ] - }, - { - "title": "Piano Songs - Album", - "details": "2014", - "media": "piano_songs", - "album": true, - "tracks": [ - "01 Monk_ Obsolete Objects.mp3", - "02 Monk_ Ellis Island.mp3", - "03 Monk_ Folkdance.mp3", - "04 Monk_ Urban March (Shadow).mp3", - "05 Monk_ Tower.mp3", - "06 Monk_ Paris.mp3", - "07 Monk_ Railroad (Travel Song).mp3", - "08 Monk_ Parlour Games.mp3", - "09 Monk_ St. Petersburg Waltz.mp3", - "10 Monk_ Window In 7's.mp3", - "11 Monk_ Totentanz.mp3", - "12 Monk_ Phantom Waltz.mp3" - ] - }, - { - "title": "Songs of Ascension", - "details": "2011", - "media": "songs_of_ascension", - "album": true - }, - { - "title": "impermanance", - "details": "2008", - "media": "impermanance", - "album": true - }, - { - "title": "mercy", - "details": "2003", - "media": "mercy", - "album": true - }, - { - "title": "Volcano Songs", - "details": "1997", - "media": "volcano_songs", - "album": true - }, - { - "title": "ATLAS: an opera in three parts", - "details": "2-CD album, 1993", - "media": "atlas", - "album": true - }, - { - "title": "Facing North", - "details": "1992", - "media": "facing_north", - "album": true - }, - { - "title": "Book of Days", - "details": "1990", - "media": "book_of_days", - "album": true - }, - { - "title": "Do You Be", - "details": "1987", - "media": "do_you_be", - "album": true - }, - { - "title": "Turtle Dreams - Album", - "details": "1983", - "media": "turtule_dreams", - "album": true - }, - { - "title": "Dolmen Music - Album", - "details": "1981", - "media": "dolmen_music", - "album": true - }, - { - "title": "Songs from the Hill/Tablet - Album", - "details": "1977", - "media": "songs_from_the_hill", - "album": true - }, - { - "title": "Our Lady of Late - Album", - "details": "1973", - "media": "our_lady_of_late", - "album": true - }, - { - "title": "KEY: an album of invisible theater - Album", - "details": "1971", - "media": "key", - "album": true - }, - { - "title": "MEMORY GAME", - "details": "2020", - "media": "memory_game", - "album": true - }, - { - "title": "MONK MIX: Remixes and Interpretations of Music by Meredith Monk", - "details": "2-CD Album, 2012", - "media": "monk_mix", - "album": true - }, - { - "title": "Beginnings", - "details": "Album, 2009", - "media": "beginnings", - "album": true - }, - { - "title": "Radio Songs", - "details": "LP/Album, 2014", - "media": "radio_songs", - "album": true - }, - { - "title": "Monk and the Abbiss", - "details": "1996", - "media": "monk_and_the_abbiss", - "album": true - }, - { - "title": "Biography (from Education of the Girlchild)", - "details": "recording, 1978", - "media": "biography", - "album": true - } -] diff --git a/public/data/music_sound_ecm.json b/public/data/music_sound_ecm.json new file mode 100644 index 0000000..ef4c5da --- /dev/null +++ b/public/data/music_sound_ecm.json @@ -0,0 +1,269 @@ +[ + { + "title": "", + "parent_dir": "music_sound_ecm", + "media": "-43 Dolmen Music", + "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": "", + "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": "", + "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": "", + "parent_dir": "music_sound_ecm", + "media": "-46 Book of Days", + "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": "", + "parent_dir": "music_sound_ecm", + "media": "-47 Facing North", + "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": "", + "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": "", + "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": "", + "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": "", + "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": "", + "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": "", + "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": "", + "parent_dir": "music_sound_ecm", + "media": "-54 On Behalf of Nature", + "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" + ] + } +] \ No newline at end of file diff --git a/public/data/music_sound_unpublished.json b/public/data/music_sound_unpublished.json new file mode 100644 index 0000000..396aaa5 --- /dev/null +++ b/public/data/music_sound_unpublished.json @@ -0,0 +1,8 @@ +[ + { + "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 new file mode 100644 index 0000000..449063d --- /dev/null +++ b/public/data/music_sound_various.json @@ -0,0 +1,153 @@ +[ + { + "title": "", + "parent_dir": "music_sound_various", + "media": "_55 Songs from the Hill-Tablet", + "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": "", + "parent_dir": "music_sound_various", + "media": "_56 Our Lady of Late", + "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": "", + "parent_dir": "music_sound_various", + "media": "_57 KEY-an album of invisible theater", + "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": "", + "parent_dir": "music_sound_various", + "media": "_58 MEMORY GAME", + "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": "", + "parent_dir": "music_sound_various", + "media": "_59 MONK MIX Remixes and Interpretations of Music by Meredith Monk 2-CD", + "album": true, + "tracks": [ + "MONK MIX CD1", + "MONK MIX CD2" + ] + }, + { + "title": "", + "parent_dir": "music_sound_various", + "media": "_60 Beginnings", + "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": "", + "parent_dir": "music_sound_various", + "media": "_61 Radio Songs", + "album": true, + "tracks": [ + "_61_01 Quarry Radio.mp3", + "_61_02 Gotham Blues.mp3", + "_61_03 Quarry Waltz.mp3", + "_61_04 Gotham Lullaby.mp3" + ] + }, + { + "title": "", + "parent_dir": "music_sound_various", + "media": "_62 Monk and the Abbiss", + "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": "", + "parent_dir": "music_sound_various", + "media": "_63 Biography (from Education of the Girlchild)", + "album": true, + "tracks": [ + "_63_13 Biography_Big Ego album.m4a" + ] + } +] \ No newline at end of file diff --git a/public/data/theatre.json b/public/data/theatre.json new file mode 100644 index 0000000..11b86fb --- /dev/null +++ b/public/data/theatre.json @@ -0,0 +1,63 @@ +[ + { + "title": "Specimen Days", + "details": "The Public Theater, New York, 1981. 1:26:17", + "media": "-34 Specimen Days.m4v", + }, + { + "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": "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", + }, + { + "title": "Magic Frequencies (excerpts)", + "details": "Muffathalle, Munich, Germany, 1998. 25:49", + "media": "-42 1998 Magic Frequencies (excerpts) BetaCamSP transfer 2021.m4v" + }, + { + "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", + }, + { + impermanence, Brooklyn Academy of Music (BAM), New York, 2006. 1:22:03 + }, + { + Songs of Ascension, Brooklyn Academy of Music (BAM), New York, 2009. 1:17:29 + }, + { + "title": "On Behalf of Nature", + "details": "UCLA, Los Angeles, California, 2013. 1:14:55" + "media": "" + } + + { + 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/src/App.js b/src/App.js index 6aa0c94..c4847f4 100644 --- a/src/App.js +++ b/src/App.js @@ -40,7 +40,8 @@ export class App extends LitElement { static styles = [ css`${unsafeCSS(MainCSS)}`, css` :host { - display: flex; + display: grid; + grid-template-rows: auto 1fr auto; flex-direction: column; height: 100vh; } diff --git a/src/api/Router.js b/src/api/Router.js index 5057ab5..24ec7eb 100644 --- a/src/api/Router.js +++ b/src/api/Router.js @@ -1,5 +1,6 @@ -// // Conditional ESM module loading (Node.js and browser) -// // @ts-ignore: Property 'UrlPattern' does not exist +// Conditional ESM module loading (Node.js and browser) +// @ts-ignore: Property 'UrlPattern' does not exist +// eslint-disable-next-line no-undef if (!globalThis.URLPattern) { await import('urlpattern-polyfill') } @@ -24,19 +25,64 @@ export default new Router({ render: () => html`` }, { - path: resolveRouterPath('documentaries_interviews'), - title: 'Video Documentaries & Interviews', - short: 'docs & interviews', + path: resolveRouterPath('documentaries_interviews_video'), + title: 'Video Documentaries, Interviews & Talks', + short: 'VideoDocs', icon: 'film', + group: 'Documentaries, Interviews & Talks', plugins: [ lazy(() => import('../views/videos.js')) ], render: () => html`` }, { - path: resolveRouterPath('audio_interviews'), + path: resolveRouterPath('documentaries_interviews_audio'), title: 'Audio Interviews', - short: 'interviews', + short: 'Interviews', + icon: 'headphones', + group: 'Documentaries, Interviews & Talks', + plugins: [ + lazy(() => import('../views/audio.js')) + ], + render: () => html`` + }, + { + path: resolveRouterPath('music_sound_ecm'), + title: 'ECM', + short: 'ECM', + icon: 'headphones', + group: 'Music & Sound', + plugins: [ + lazy(() => import('../views/audio.js')) + ], + render: () => html``, + }, + { + path: resolveRouterPath('music_sound_various'), + title: 'Recordings on Various Labels', + short: 'Various Labels', + icon: 'headphones', + group: 'Music & Sound', + plugins: [ + lazy(() => import('../views/audio.js')) + ], + render: () => html``, + }, + { + path: resolveRouterPath('music_sound_unpublished'), + title: 'Unpublished Music Recordings', + short: 'Unpublished', + icon: 'headphones', + group: 'Music & Sound', + plugins: [ + lazy(() => import('../views/audio.js')) + ], + render: () => html``, + }, + { + path: resolveRouterPath('theatre'), + title: 'Music - Theatre Works', + short: 'Theatre Works', icon: 'headphones', plugins: [ lazy(() => import('../views/audio.js')) @@ -44,19 +90,9 @@ export default new Router({ render: () => html`` }, { - path: resolveRouterPath('recordings_live'), - title: 'Recordings of Live Works', - short: 'live works', - icon: 'film', - plugins: [ - lazy(() => import('../views/videos.js')) - ], - render: () => html`` - }, - { - path: resolveRouterPath('music_sound'), - title: 'Music & Sound', - short: 'music & sound', + path: resolveRouterPath('concerts'), + title: 'Concert Recordings', + short: 'Concerts', icon: 'headphones', plugins: [ lazy(() => import('../views/audio.js')) @@ -66,16 +102,16 @@ export default new Router({ { path: resolveRouterPath('films'), title: 'Films', - short: 'films', + short: 'Films', icon: 'film', plugins: [ lazy(() => import('../views/videos.js')) ], - render: () => html`` + render: () => html`` }, { path: resolveRouterPath('images'), - title: 'Images', + title: 'Scores, Posters, Ephemera', short: 'images', icon: 'camera', plugins: [ @@ -97,7 +133,7 @@ export default new Router({ export function resolveRouterPath(unresolvedPath) { let resolvedPath = baseURL - if(unresolvedPath) { + if (unresolvedPath) { resolvedPath = resolvedPath + unresolvedPath } diff --git a/src/assets/styles/main.scss b/src/assets/styles/main.scss index f4274f2..eed1f37 100644 --- a/src/assets/styles/main.scss +++ b/src/assets/styles/main.scss @@ -20,12 +20,8 @@ body { --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)); --box-shadow: 0 0 6px 2px #00000010; -} - -@media screen and (min-width: 1280px) { - body { - font-size: 32px; - } + --shadow-invert: 0 0 6px 2px #ffffff40; } diff --git a/src/components/Header.js b/src/components/Header.js index 85121e0..5fa7f8c 100644 --- a/src/components/Header.js +++ b/src/components/Header.js @@ -14,6 +14,10 @@ class Header extends LitElement { super() } + firstUpdated() { + this.title = Router.context.title + } + navHome() { Router.navigate('/') } diff --git a/src/components/Image.js b/src/components/Image.js new file mode 100644 index 0000000..65a6b82 --- /dev/null +++ b/src/components/Image.js @@ -0,0 +1,45 @@ +import { LitElement, css, html } from 'lit' + +class Image extends LitElement { + static properties = { + details: { type: Object } + } + + constructor() { + super() + this.details = {} + } + + firstUpdated() { + console.log(this.details) + } + + render() { + return html` + + ${this.details?.alt} + ${this.detalis?.caption ? html`
+

${this.details.caption}

+
` : '' } +
+ ` + } + + static styles = css` + picture { + position: absolute; + display: grid; + justify-items: center; + inset: 0.5em; + } + + picture > img { + display: block; + max-height: 100%; + max-width: 100%; + object-fit: contain; + } + ` +} + +customElements.define('mm-image', Image) diff --git a/src/components/ImageCarousel.js b/src/components/ImageCarousel.js new file mode 100644 index 0000000..6a6af75 --- /dev/null +++ b/src/components/ImageCarousel.js @@ -0,0 +1,52 @@ +import { LitElement, css, html } from 'lit' + +import '../components/Image.js' + +class ImageCarousel extends LitElement { + static properties = { + images: { type: Array } + } + + constructor() { + super() + this.images = [] + } + + firstUpdated() { + console.log(this.images) + } + + render() { + return html` + ${this.images.map(i => html``)} + ` + } + + static styles = css` + :host { + height: 100%; + width: 100%; + display: grid; + grid-auto-flow: column; + grid-auto-columns: 100%; + grid-template-rows: 100%; + overflow: auto; + justify-items: center; + + scroll-behaviour: smooth; + scroll-padding-inline: 0.5em; + padding-inline-start: 0.5em; + padding-inline-end: 0.5em; + padding-block-start: 0.25em; + padding-block-end: 0.75em; + } + + mm-image { + position: relative; + width: 100%; + height: 100%; + } + ` +} + +customElements.define('mm-img-carousel', ImageCarousel) diff --git a/src/components/ImageViewer.js b/src/components/ImageViewer.js index e68c0ca..79b8387 100644 --- a/src/components/ImageViewer.js +++ b/src/components/ImageViewer.js @@ -28,6 +28,12 @@ class ImageViewer extends LitElement { firstUpdated() { this.figEl = this.shadowRoot.querySelector('figure') + + this.figEl.addEventListener('fullscreenchange', (evt) => { + console.log('figel fullscreen', evt) + + this.captionWidth = `${this.imgEl.offsetWidth}px` + }) } connectedCallback() { @@ -53,6 +59,11 @@ class ImageViewer extends LitElement { this.imgEl.src = this.details.media }) } + + if (att.has('captionWidth') && this.details?.media) { + console.log('captionWidth updated') + this.captionWidth = `${this.imgEl.offsetWidth}px` + } this.update() } @@ -62,10 +73,12 @@ class ImageViewer extends LitElement { return } + if (document.fullscreenElement !== null) { document.exitFullscreen() this.figEl.removeAttribute('data-fullscreen') } else { + console.log(this.captionWidth) this.figEl.requestFullscreen() this.figEl.setAttribute('data-fullscreen', true) } diff --git a/src/components/ModularPlayer.js b/src/components/ModularPlayer.js index fee73b9..56a737a 100644 --- a/src/components/ModularPlayer.js +++ b/src/components/ModularPlayer.js @@ -168,6 +168,7 @@ class ModularPlayer extends LitElement { _volHandler(evt) { if (evt.detail) { this.volCtrl.update(evt.detail.value) + this.audio.volume = this.volCtrl.volume } } diff --git a/src/components/NavCard.js b/src/components/NavCard.js index 1ebfcb5..c0362f2 100644 --- a/src/components/NavCard.js +++ b/src/components/NavCard.js @@ -16,16 +16,39 @@ class NavCard extends LitElement { } firstUpdated() { + console.log(this.route) this.shadowRoot.host.addEventListener('click', () => { Router.navigate(this.route.path) }) } + navigate(path) { + path = path || this.route.path + Router.navigate(path) + } + render() { return html`
- -

${this.route?.title}

+ ${Array.isArray(this.route) ? html` +

${this.route[0].group}

+ ${this.route.map(r => + html` + + ` + )} + ` + : + html` +

${this.route?.title}

+ + ` + }
` } @@ -45,9 +68,9 @@ class NavCard extends LitElement { .card { display: grid; - grid-template-columns: auto 1fr; - border-top: thin solid var(--highlight-color); - padding-block-start: 0.3em; + grid-auto-flow: rows; + gap: 0.5em; + padding: 0.25em; cursor: pointer; font-size: 1.65em; } @@ -56,10 +79,45 @@ class NavCard extends LitElement { --svg-shadow: var(--shadow); margin-inline-end: 0.5em; font-size: 0.8em; + color: currentcolor; } .title { - max-width: 12ch; + padding-bottom: 0.75em; + font-size: 0.75em; + text-align: center; + border-bottom: thin solid var(--highlight-color); + } + + button { + display: grid; + grid-template-columns: 1em auto; + gap: 0.25em; + width: 100%; + background: var(--green-inside-gradient-400); + border: none; + border-radius: 0.5em; + font-size: 0.75em; + color: white; + padding: 0.5em; + text-align: left; + text-shadow: 0 0 5px #ffffff; + margin: 0; + + &.iconOnly { + display: flex; + gap: 0; + align-items: center; + justify-content: center; + font-size: 1.5em; + padding: 1em; + } + + & mm-icon { + margin: 0; + padding: 0; + --svg-shadow: 0 0 5px #ffffff; + } } `] } diff --git a/src/components/VideoPlayer.js b/src/components/VideoPlayer.js index 0ad0fb3..cdf2d73 100644 --- a/src/components/VideoPlayer.js +++ b/src/components/VideoPlayer.js @@ -133,6 +133,7 @@ class VideoPlayer extends LitElement { if (evt.detail) { this.volCtrl.update(evt.detail.value) + this.videoEl.volume = this.volCtrl.volume } } diff --git a/src/views/home.js b/src/views/home.js index 44e639c..287378d 100644 --- a/src/views/home.js +++ b/src/views/home.js @@ -7,12 +7,37 @@ import MainCSS from '../assets/styles/main.scss?inline' import '../components/NavCard.js' class Home extends LitElement { - static properties = {} + static properties = { + navigation: { state: true } + } constructor() { super() } + firstUpdated() { + this.renderRoutes() + + console.log(this.navigation) + } + + renderRoutes() { + const grouped = {} + const ungrouped = Router.routes.filter(r => !r.group && !r.hide) + + Router.routes.forEach(r => { + if (r.group) { + if (!grouped[r.group]) { + grouped[r.group] = [] + } + grouped[r.group].push(r) + } + }) + + + this.navigation = [ ...Object.values(grouped), ...ungrouped ] + } + render() { return html`
@@ -23,7 +48,11 @@ class Home extends LitElement {