From f8491848fd6e33ff45eb47e8640961af8a2610ba Mon Sep 17 00:00:00 2001 From: booploops <49113086+booploops@users.noreply.github.com> Date: Mon, 20 Dec 2021 23:48:32 -0800 Subject: [PATCH] merged mediaitem-square and mediaitem-square-large into the same element added observed visibility to mediaitem-square. fixed artist page animated artwork not changing when navigation to another artist with animated artwork --- src/renderer/style.less | 203 ++++++++++++------ .../mediaitem-scroller-horizontal-large.ejs | 4 +- .../components/mediaitem-square-large.ejs | 25 +-- .../views/components/mediaitem-square.ejs | 127 +++++++++-- src/renderer/views/main.ejs | 2 - src/renderer/views/pages/artist.ejs | 2 +- src/renderer/views/pages/collection-list.ejs | 4 +- src/renderer/views/pages/library-albums.ejs | 4 +- .../views/pages/library-recentlyadded.ejs | 4 +- src/renderer/views/pages/madeforyou.ejs | 4 +- src/renderer/views/pages/recordLabel.ejs | 12 +- src/renderer/views/pages/search.ejs | 2 +- 12 files changed, 283 insertions(+), 110 deletions(-) diff --git a/src/renderer/style.less b/src/renderer/style.less index 90bc74f4..5fb7832a 100644 --- a/src/renderer/style.less +++ b/src/renderer/style.less @@ -315,7 +315,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { align-items: center; &.active { - background:rgb(200 200 200 / 15%); + background: rgb(200 200 200 / 15%); animation: usermenuBtnClick .30s cubic-bezier(0.36, 0, 0.66, -0.56); } } @@ -324,9 +324,11 @@ input[type=range].web-slider::-webkit-slider-runnable-track { 0% { transform: translateY(0px); } + 50% { transform: translateY(-6px); } + 100% { transform: translateY(0px); } @@ -387,6 +389,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { padding: 10px; z-index: 1; } + .body { background: #242424; padding: 6px; @@ -394,6 +397,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { width: 100%; box-shadow: var(--mediaItemShadow-Shadow); } + .item { background: transparent; display: block; @@ -407,6 +411,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { appearance: none; border-radius: 6px; margin: 2px 0px; + &:hover { background: var(--keyColor); } @@ -416,8 +421,10 @@ input[type=range].web-slider::-webkit-slider-runnable-track { .search-hints-container { top: 44px; #cmenu.container(); + .search-hints { #cmenu.body(); + .search-hint { #cmenu.item(); } @@ -427,8 +434,10 @@ input[type=range].web-slider::-webkit-slider-runnable-track { .usermenu-container { bottom: 66px; #cmenu.container(); + .usermenu-body { #cmenu.body(); + .usermenu-item { #cmenu.item(); } @@ -469,12 +478,14 @@ input[type=range].web-slider::-webkit-slider-runnable-track { padding: 6px; border-radius: 6px; box-shadow: var(--mediaItemShadow-Shadow); + &.context-menu-open { animation-duration: .10s; animation-name: contextMenuIn; animation-iteration-count: 1; animation-easings: var(--appleEase); } + &.context-menu-close { animation-duration: .10s; animation-name: contextMenuOut; @@ -489,6 +500,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { transform: scale(0.9); opacity: 0; } + 100% { transform: scale(1); opacity: 1; @@ -500,6 +512,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { transform: scale(1); opacity: 1; } + 100% { transform: scale(0.9); opacity: 0; @@ -793,6 +806,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { bottom: 0px; left: 0px; background: @bgColor; + &:hover { >input[type=range] { &::-webkit-slider-thumb { @@ -802,6 +816,7 @@ input[type=range].web-slider::-webkit-slider-runnable-track { } } } + >input[type=range] { appearance: none; width: 100%; @@ -1389,11 +1404,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin-right: 0px; } -.lyric-line.active .verse{ +.lyric-line.active .verse { opacity: 0.6; } -.lyric-line.active .verse.verse-active{ +.lyric-line.active .verse.verse-active { opacity: 1; } @@ -1517,6 +1532,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { backdrop-filter: blur(16px) saturate(180%); box-shadow: 0px 1px 0px rgba(185, 185, 185, 0.08); mix-blend-mode: hard-light; + .nav-item { appearance: none; border: 0px; @@ -1531,18 +1547,21 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { margin: 2px; border-radius: 6px; transition: transform .10s var(--appleEase); + &:active { background: var(--selected-click); transform: scale(0.96); transition: transform 0s var(--appleEase); } - > svg { + + >svg { width: 8px; pointer-events: none; } &:hover { background: var(--selected); + >svg { color: rgba(200, 200, 200, 1.0); } @@ -1705,6 +1724,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { // Collection Page .collection-page { padding-bottom: 128px; + .top-fab { height: 52px; width: 52px; @@ -1730,6 +1750,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { background: var(--keyColor); } } + .header-text { margin-bottom: 32px; } @@ -1739,7 +1760,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { .artist-page { padding: 0px; - top:0; + top: 0; .artist-header { background: linear-gradient(45deg, var(--keyColor), #0e0e0e); @@ -1762,9 +1783,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { border: 0px; cursor: pointer; z-index: 5; + &:hover { background: var(--keyColor-rollover); } + &:active { background: var(--keyColor-pressed); } @@ -1800,30 +1823,34 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { height: 200px; margin: 32px; position: relative; + .overlay-play { position: absolute; - top:0; - left:0; - width:100%; - height:100%; - opacity:0; + top: 0; + left: 0; + width: 100%; + height: 100%; + opacity: 0; background: rgb(0 0 0 / 50%); transition: opacity 0.1s var(--appleEase); border-radius: 100%; - z-index:1; + z-index: 1; display: flex; align-items: center; justify-content: center; cursor: pointer; appearance: none; - border:0px; - padding:0px; + border: 0px; + padding: 0px; + &:hover { - opacity:1; + opacity: 1; } + &:active { background: var(--selected-click); } + >svg { width: 70%; } @@ -1841,16 +1868,19 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { display: none; cursor: pointer; appearance: none; - border:0px; - padding:0px; + border: 0px; + padding: 0px; transform: translateY(3px); + &:hover { background: var(--keyColor-rollover); } + &:active { background: var(--keyColor-pressed); } } + &.artist-animation-on { width: 100%; flex: unset; @@ -1858,6 +1888,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { color: whitesmoke; position: absolute; bottom: 0; + .artist-play { display: block; } @@ -1929,6 +1960,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &.rounded { border-radius: 100%; + &::after { border-radius: 100%; } @@ -1970,9 +2002,10 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } .queue-footer { - width:100%; + width: 100%; padding: 12px; } + .autoplay { background: rgb(200 200 200 / 15%); appearance: none; @@ -1988,10 +2021,13 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { .cd-queue-item { border-bottom: 1px solid rgb(200 200 200 / 10%); padding: 8px; - .row, .col { - padding:0px; - margin:0px; + + .row, + .col { + padding: 0px; + margin: 0px; } + .artwork { width: 32px; height: 32px; @@ -2008,12 +2044,13 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { } .queue-info { - display:flex; + display: flex; flex-direction: column; .queue-title { font-size: 14px; } + .queue-subtitle { font-size: 13px; opacity: 0.85; @@ -2077,9 +2114,11 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { padding: 0px; z-index: 5; cursor: pointer; + &:hover { opacity: 1; } + &:active { background: var(--selected-click); } @@ -2152,16 +2191,17 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &:hover { background: rgb(200 200 200 / 10%); + .overlay-play { opacity: 1; } } &.mediaitem-selected { - background: var(--selected); + background: var(--selected); } - + &:active { background: var(--selected-click); color: #eee; @@ -2264,6 +2304,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { >.cd-mediaitem-square-large-overlay { z-index: 3; + &:hover { opacity: 1; } @@ -2275,7 +2316,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { &:hover+.cd-mediaitem-square-large-overlay { opacity: 1; - + } &:hover { @@ -2456,8 +2497,8 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { /* mediaitem-square */ .cd-mediaitem-square { - width: 200px; - height: 190px; + width: 220px; + height: 260px; display: inline-flex; flex: 0 0 auto; flex-direction: column; @@ -2465,40 +2506,74 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { justify-content: center; align-items: center; border-radius: 6px; - cursor: pointer; -} -.cd-mediaitem-square:hover { - background: rgb(200 200 200 / 10%); -} + .artwork-container { + position: relative; -.cd-mediaitem-square .artwork { - height: 128px; - width: 128px; - background: blue; - border-radius: var(--mediaItemRadius); - background: var(--artwork); - background-size: cover; - box-shadow: var(--mediaItemShadow); - flex: 0 0 auto; - margin: 6px; -} + .artwork { + height: 190px; + width: 190px; + background: blue; + border-radius: var(--mediaItemRadius); + background: var(--artwork); + background-size: cover; + flex: 0 0 auto; + margin: 6px; + cursor: pointer; -.cd-mediaitem-square .artwork.round { - border-radius: var(--mediaItemRadiusRound); -} + &.round { + border-radius: var(--mediaItemRadiusRound); + } + } -.cd-mediaitem-square .title { - width: 90%; - text-align: center; -} + >.play-btn, + >.menu-btn { + display: none; + appearance: none; + padding:0px; + border:0px; + width: 40px; + height: 40px; + border-radius: 50%; + background: rgba(50, 50, 50, 0.7); + cursor: pointer; + backdrop-filter: blur(32px) saturate(180%); + } -.cd-mediaitem-square .subtitle { - width: 100%; - text-align: center; - font-size: 12px; -} + >.play-btn { + position: absolute; + bottom: 16px; + right: 16px; + z-index: 2; + } + >.menu-btn { + position: absolute; + bottom: 16px; + left: 16px; + z-index: 2; + } + + &:hover { + >.play-btn, + >.menu-btn { + display: block; + } + } + } + + + .title { + width: 90%; + text-align: center; + } + + .subtitle { + width: 100%; + text-align: center; + font-size: 12px; + } +} .cd-btn-seeall { background: transparent; @@ -2509,6 +2584,7 @@ input[type="range"].web-slider.display--small::-webkit-slider-thumb { font-size: 16px; border-radius: 4px; padding: 6px; + &:hover { cursor: pointer; background: rgb(200 200 200 / 10%) @@ -2672,21 +2748,21 @@ div#captions { } .item-navigate:hover { - text-decoration: underline; - cursor: pointer; + text-decoration: underline; + cursor: pointer; } -.title-browse-sp{ - width: 100%; - text-align: left; - margin-bottom: 2px; +.title-browse-sp { + width: 100%; + text-align: left; + margin-bottom: 2px; } -.bold{ +.bold { font-weight: bold; } -.semibold{ +.semibold { font-weight: 500; } @@ -2720,6 +2796,7 @@ input[type=checkbox][switch]:checked { &:hover { background: var(--keyColor-rollover); } + &:active { background: var(--keyColor-pressed); } @@ -2761,6 +2838,6 @@ input[type=checkbox][switch]:checked:active::before { /* End Switch Checkbox */ -.madeforyou-body{ +.madeforyou-body { margin-top: 15px; } \ No newline at end of file diff --git a/src/renderer/views/components/mediaitem-scroller-horizontal-large.ejs b/src/renderer/views/components/mediaitem-scroller-horizontal-large.ejs index c7f5b9b1..849dbdb6 100644 --- a/src/renderer/views/components/mediaitem-scroller-horizontal-large.ejs +++ b/src/renderer/views/components/mediaitem-scroller-horizontal-large.ejs @@ -1,8 +1,8 @@ diff --git a/src/renderer/views/components/mediaitem-square-large.ejs b/src/renderer/views/components/mediaitem-square-large.ejs index 0eb21cb8..4c6f8753 100644 --- a/src/renderer/views/components/mediaitem-square-large.ejs +++ b/src/renderer/views/components/mediaitem-square-large.ejs @@ -74,22 +74,22 @@ Vue.component('mediaitem-square-large', { template: '#mediaitem-square-large', props: ['item'], - methods: { - clickContext() { - var evt = document.createEvent('MouseEvent'); + methods: { + clickContext() { + var evt = document.createEvent('MouseEvent'); var rect = this.$refs.main2.getBoundingClientRect(); evt.initMouseEvent( "contextmenu", true /* bubble */, true /* cancelable */, window, null, - 0, 0, rect.x + 100, rect.y +100, /* coordinates */ + 0, 0, rect.x + 100, rect.y + 100, /* coordinates */ false, false, false, false, /* modifier keys */ 0 /*left*/, null ); this.$refs.main.dispatchEvent(evt); - } - ,contextMenu(event) { - if (!event){event = this.$refs.main} else {console.log(event)} + } + , contextMenu(event) { + if (!event) { event = this.$refs.main } else { console.log(event) } let self = this let useMenu = "normal" if (app.selectedMediaItems.length <= 1) { @@ -115,7 +115,7 @@ for (let kind in itemsToPlay) { let ids = itemsToPlay[kind] if (ids.length > 0) { - app.mk.playNext({[kind + "s"]: itemsToPlay[kind]}) + app.mk.playNext({ [kind + "s"]: itemsToPlay[kind] }) } } console.log(itemsToPlay) @@ -136,7 +136,7 @@ for (let kind in itemsToPlay) { let ids = itemsToPlay[kind] if (ids.length > 0) { - app.mk.playLater({[kind + "s"]: itemsToPlay[kind]}) + app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }) } } app.selectedMediaItems = [] @@ -149,7 +149,7 @@ { "name": "Play Next", "action": function () { - app.mk.playNext({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id}) + app.mk.playNext({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id }) app.mk.queue._reindex() app.selectedMediaItems = [] } @@ -157,7 +157,7 @@ { "name": "Play Later", "action": function () { - app.mk.playLater({[self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id}) + app.mk.playLater({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id }) app.mk.queue._reindex() app.selectedMediaItems = [] } @@ -166,6 +166,7 @@ } } CiderContextMenu.Create(event, menus[useMenu]) - },} + }, + } }); \ No newline at end of file diff --git a/src/renderer/views/components/mediaitem-square.ejs b/src/renderer/views/components/mediaitem-square.ejs index a83bc7d2..8caeaf28 100644 --- a/src/renderer/views/components/mediaitem-square.ejs +++ b/src/renderer/views/components/mediaitem-square.ejs @@ -1,19 +1,26 @@ @@ -22,6 +29,96 @@ Vue.component('mediaitem-square', { template: '#mediaitem-square', props: ['item'], - methods: {} + data: function () { + return { + isVisible: false, + addedToLibrary: false, + guid: uuidv4() + } + }, + methods: { + visibilityChanged: function (isVisible, entry) { + this.isVisible = isVisible + }, + contextMenu(event) { + if (!event) { event = this.$refs.main } else { console.log(event) } + let self = this + let useMenu = "normal" + if (app.selectedMediaItems.length <= 1) { + app.selectedMediaItems = [] + app.select_selectMediaItem(this.item.attributes.playParams.id ?? this.item.id, this.item.attributes.playParams.kind ?? this.item.type, this.index, this.guid) + } else { + useMenu = "multiple" + } + let menus = { + multiple: { + items: [ + { + name: `Play ${app.selectedMediaItems.length} tracks next`, + action: () => { + let itemsToPlay = {} + app.selectedMediaItems.forEach(item => { + if (!itemsToPlay[item.kind]) { + itemsToPlay[item.kind] = [] + } + itemsToPlay[item.kind].push(item.id) + }) + // loop through itemsToPlay + for (let kind in itemsToPlay) { + let ids = itemsToPlay[kind] + if (ids.length > 0) { + app.mk.playNext({ [kind + "s"]: itemsToPlay[kind] }) + } + } + console.log(itemsToPlay) + app.selectedMediaItems = [] + } + }, + { + name: `Play ${app.selectedMediaItems.length} tracks later`, + action: () => { + let itemsToPlay = {} + app.selectedMediaItems.forEach(item => { + if (!itemsToPlay[item.kind]) { + itemsToPlay[item.kind] = [] + } + itemsToPlay[item.kind].push(item.id) + }) + // loop through itemsToPlay + for (let kind in itemsToPlay) { + let ids = itemsToPlay[kind] + if (ids.length > 0) { + app.mk.playLater({ [kind + "s"]: itemsToPlay[kind] }) + } + } + app.selectedMediaItems = [] + } + }, + ] + }, + normal: { + items: [ + { + "name": "Play Next", + "action": function () { + app.mk.playNext({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id }) + app.mk.queue._reindex() + app.selectedMediaItems = [] + } + }, + { + "name": "Play Later", + "action": function () { + app.mk.playLater({ [self.item.attributes.playParams.kind ?? self.item.type]: self.item.attributes.playParams.id ?? self.item.id }) + app.mk.queue._reindex() + app.selectedMediaItems = [] + } + }, + ] + } + } + CiderContextMenu.Create(event, menus[useMenu]) + }, + } }); \ No newline at end of file diff --git a/src/renderer/views/main.ejs b/src/renderer/views/main.ejs index 2aa41e66..f5e6d37a 100644 --- a/src/renderer/views/main.ejs +++ b/src/renderer/views/main.ejs @@ -503,8 +503,6 @@ <%- include('components/mediaitem-hrect') %> <%- include('components/mediaitem-square') %> - -<%- include('components/mediaitem-square-large') %> <%- include('components/mediaitem-square-sp') %> diff --git a/src/renderer/views/pages/artist.ejs b/src/renderer/views/pages/artist.ejs index b9c2a49d..a49f8f5d 100644 --- a/src/renderer/views/pages/artist.ejs +++ b/src/renderer/views/pages/artist.ejs @@ -1,6 +1,6 @@