diff --git a/docroot/css/lms.css b/docroot/css/lms.css index 4c490cf9..d96843c5 100644 --- a/docroot/css/lms.css +++ b/docroot/css/lms.css @@ -75,6 +75,11 @@ a.Lms-artistname:hover, a.Lms-artistname:focus { margin: auto; border-radius: 3px; box-shadow: 0 2px 3px rgba(0, 0, 0, 0.4); + opacity: 0; + -moz-transition: opacity 1s; + -webkit-transition: opacity 1s; + -o-transition: opacity 1s; + transition: opacity 1s; } .Lms-cover:hover { @@ -90,6 +95,10 @@ a.Lms-artistname:hover, a.Lms-artistname:focus { box-shadow: 0 2px 3px rgba(0, 0, 0, 0.4); } +.Lms-cover-loaded { + opacity: 1; +} + .Lms-entry-playing { font-weight: bold; border-radius: 3px; diff --git a/src/lms/ui/LmsApplication.cpp b/src/lms/ui/LmsApplication.cpp index 6d6eb5aa..0624e917 100644 --- a/src/lms/ui/LmsApplication.cpp +++ b/src/lms/ui/LmsApplication.cpp @@ -426,6 +426,8 @@ LmsApplication::createHome() _audioTranscodeResource = std::make_shared(); _audioFileResource = std::make_shared(); + declareJavaScriptFunction("onLoadCover", "function(id) { id.className += \" Lms-cover-loaded\"}"); + Wt::WTemplate* main {root()->addWidget(std::make_unique(Wt::WString::tr("Lms.template")))}; main->addFunction("tr", &Wt::WTemplate::Functions::tr); diff --git a/src/lms/ui/PlayQueue.cpp b/src/lms/ui/PlayQueue.cpp index 5a531ba5..6f9f0303 100644 --- a/src/lms/ui/PlayQueue.cpp +++ b/src/lms/ui/PlayQueue.cpp @@ -391,16 +391,18 @@ PlayQueue::addSome() { Wt::WAnchor* anchor = entry->bindWidget("cover", LmsApplication::createReleaseAnchor(release, false)); auto cover = std::make_unique(); - cover->setImageLink(LmsApp->getImageResource()->getReleaseUrl(release.id(), ImageResource::Size::Small)); + cover->setImageLink(LmsApp->getImageResource()->getReleaseUrl(release.id(), ImageResource::Size::Large)); cover->setStyleClass("Lms-cover"); + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); anchor->setImage(std::move(cover)); } } else { auto cover = entry->bindNew("cover"); - cover->setImageLink(LmsApp->getImageResource()->getTrackUrl(track.id(), ImageResource::Size::Small)); + cover->setImageLink(LmsApp->getImageResource()->getTrackUrl(track.id(), ImageResource::Size::Large)); cover->setStyleClass("Lms-cover"); + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); } entry->bindString("duration", trackDurationToString(track->getDuration()), Wt::TextFormat::Plain); diff --git a/src/lms/ui/explore/ReleaseListHelpers.cpp b/src/lms/ui/explore/ReleaseListHelpers.cpp index a2810357..b77945dc 100644 --- a/src/lms/ui/explore/ReleaseListHelpers.cpp +++ b/src/lms/ui/explore/ReleaseListHelpers.cpp @@ -46,6 +46,7 @@ namespace UserInterface::ReleaseListHelpers auto cover = std::make_unique(); cover->setImageLink(LmsApp->getImageResource()->getReleaseUrl(release.id(), ImageResource::Size::Large)); cover->setStyleClass("Lms-cover"); + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); anchor->setImage(std::move(cover)); auto artists = release->getReleaseArtists(); diff --git a/src/lms/ui/explore/ReleaseView.cpp b/src/lms/ui/explore/ReleaseView.cpp index 533d55f5..e19f83f9 100644 --- a/src/lms/ui/explore/ReleaseView.cpp +++ b/src/lms/ui/explore/ReleaseView.cpp @@ -126,6 +126,7 @@ Release::refreshView() { Wt::WImage* cover {bindNew("cover", Wt::WLink(LmsApp->getImageResource()->getReleaseUrl(release.id(), ImageResource::Size::Large)))}; cover->setStyleClass("Lms-cover-large"); + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); } Wt::WContainerWidget* clusterContainers {bindNew("clusters")}; diff --git a/src/lms/ui/explore/TrackListHelpers.cpp b/src/lms/ui/explore/TrackListHelpers.cpp index 6480ee3b..72c225ce 100644 --- a/src/lms/ui/explore/TrackListHelpers.cpp +++ b/src/lms/ui/explore/TrackListHelpers.cpp @@ -74,6 +74,7 @@ namespace UserInterface::TrackListHelpers auto cover = std::make_unique(); cover->setImageLink(LmsApp->getImageResource()->getReleaseUrl(release.id(), ImageResource::Size::Large)); cover->setStyleClass("Lms-cover"); + cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); anchor->setImage(std::move(cover)); } }