Still converting to bootstrap 5. Updated filter badges

This commit is contained in:
emeric
2022-05-20 13:36:00 +02:00
parent 2282127d86
commit 158f1bc65c
8 changed files with 77 additions and 54 deletions
+18 -8
View File
@@ -8,20 +8,21 @@ body {
padding-bottom: 78px; padding-bottom: 78px;
} }
a img:hover {
filter: brightness(85%);
}
.Lms-badge-cluster:hover {
filter: brightness(85%);
cursor: pointer;
}
.Lms-notification-container { .Lms-notification-container {
position: fixed; position: fixed;
bottom: 78px; bottom: 78px;
right: 0px; right: 0px;
} }
.Lms-player {
height: 70px;
}
.fixed-bottom.Lms-player {
z-index: 999;
}
.Lms-entry-playing { .Lms-entry-playing {
background-color: var(--bs-dark); background-color: var(--bs-dark);
} }
@@ -57,6 +58,15 @@ body {
min-width: 64px; min-width: 64px;
} }
.Lms-player {
height: 70px;
}
.fixed-bottom.Lms-player {
z-index: 999;
}
.Lms-responsive-square { .Lms-responsive-square {
width: 100%; width: 100%;
} }
-29
View File
@@ -300,35 +300,6 @@ LmsApplication::createReleaseAnchor(Database::Release::pointer release, bool add
return res; return res;
} }
std::unique_ptr<Wt::WText>
LmsApplication::createCluster(Database::Cluster::pointer cluster, bool canDelete)
{
auto getStyleClass = [](const Database::Cluster::pointer cluster)
{
switch (cluster->getType()->getId().getValue() % 8)
{
case 0: return "bg-primary";
case 1: return "bg-secondary";
case 2: return "bg-success";
case 3: return "bg-danger";
case 4: return "bg-warning text-dark";
case 5: return "bg-info text-dark";
case 6: return "bg-light text-dark";
case 7: return "bg-dark";
}
return "bg-primary";
};
const std::string styleClass {getStyleClass(cluster)};
auto res {std::make_unique<Wt::WText>(std::string {} + (canDelete ? "<i class=\"fa fa-times-circle\"></i> " : "") + Wt::WString::fromUTF8(cluster->getName()), Wt::TextFormat::UnsafeXHTML)};
res->setStyleClass("badge me-1 " + styleClass);
res->setToolTip(cluster->getType()->getName(), Wt::TextFormat::Plain);
res->setInline(true);
return res;
}
void void
LmsApplication::handleException(LmsApplicationException& e) LmsApplication::handleException(LmsApplicationException& e)
{ {
-1
View File
@@ -83,7 +83,6 @@ class LmsApplication : public Wt::WApplication
static std::unique_ptr<Wt::WAnchor> createArtistAnchor(Database::ObjectPtr<Database::Artist> artist, bool addText = true); static std::unique_ptr<Wt::WAnchor> createArtistAnchor(Database::ObjectPtr<Database::Artist> artist, bool addText = true);
static Wt::WLink createReleaseLink(Database::ObjectPtr<Database::Release> release); static Wt::WLink createReleaseLink(Database::ObjectPtr<Database::Release> release);
static std::unique_ptr<Wt::WAnchor> createReleaseAnchor(Database::ObjectPtr<Database::Release> release, bool addText = true); static std::unique_ptr<Wt::WAnchor> createReleaseAnchor(Database::ObjectPtr<Database::Release> release, bool addText = true);
static std::unique_ptr<Wt::WText> createCluster(Database::ObjectPtr<Database::Cluster> cluster, bool canDelete = false);
MediaPlayer& getMediaPlayer() const { return *_mediaPlayer; } MediaPlayer& getMediaPlayer() const { return *_mediaPlayer; }
PlayQueue& getPlayQueue() const { return *_playQueue; } PlayQueue& getPlayQueue() const { return *_playQueue; }
+40
View File
@@ -22,6 +22,10 @@
#include <iomanip> #include <iomanip>
#include <sstream> #include <sstream>
#include <Wt/WText.h>
#include "services/database/Cluster.hpp"
#include "services/database/Session.hpp"
#include "LmsApplication.hpp" #include "LmsApplication.hpp"
namespace UserInterface::Utils namespace UserInterface::Utils
@@ -60,4 +64,40 @@ namespace UserInterface::Utils
cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); // HACK cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); // HACK
return cover; return cover;
} }
std::unique_ptr<Wt::WInteractWidget>
createCluster(Database::ClusterId clusterId, bool canDelete)
{
auto transaction {LmsApp->getDbSession().createSharedTransaction()};
const Database::Cluster::pointer cluster {Database::Cluster::find(LmsApp->getDbSession(), clusterId)};
if (!cluster)
return {};
auto getStyleClass {[](const Database::Cluster::pointer& cluster) -> const char*
{
switch (cluster->getType()->getId().getValue() % 8)
{
case 0: return "bg-primary";
case 1: return "bg-secondary";
case 2: return "bg-success";
case 3: return "bg-danger";
case 4: return "bg-warning text-dark";
case 5: return "bg-info text-dark";
case 6: return "bg-light text-dark";
case 7: return "bg-dark";
}
return "bg-primary";
}};
const std::string styleClass {getStyleClass(cluster)};
auto res {std::make_unique<Wt::WText>(std::string {} + (canDelete ? "<i class=\"fa fa-times-circle\"></i> " : "") + Wt::WString::fromUTF8(cluster->getName()), Wt::TextFormat::UnsafeXHTML)};
res->setStyleClass("Lms-badge-cluster badge me-1 " + styleClass); // HACK
res->setToolTip(cluster->getType()->getName(), Wt::TextFormat::Plain);
res->setInline(true);
return res;
}
} }
+4 -1
View File
@@ -23,7 +23,9 @@
#include <string> #include <string>
#include <Wt/WImage.h> #include <Wt/WImage.h>
#include <Wt/WInteractWidget.h>
#include "services/database/ClusterId.hpp"
#include "services/database/ReleaseId.hpp" #include "services/database/ReleaseId.hpp"
#include "services/database/TrackId.hpp" #include "services/database/TrackId.hpp"
@@ -36,5 +38,6 @@ namespace UserInterface::Utils
std::unique_ptr<Wt::WImage> createCover(Database::ReleaseId releaseId, CoverResource::Size size); std::unique_ptr<Wt::WImage> createCover(Database::ReleaseId releaseId, CoverResource::Size size);
std::unique_ptr<Wt::WImage> createCover(Database::TrackId trackId, CoverResource::Size size); std::unique_ptr<Wt::WImage> createCover(Database::TrackId trackId, CoverResource::Size size);
}
std::unique_ptr<Wt::WInteractWidget> createCluster(Database::ClusterId clusterId, bool canDelete = false);
}
+5 -4
View File
@@ -41,6 +41,7 @@
#include "LmsApplicationException.hpp" #include "LmsApplicationException.hpp"
#include "ReleaseListHelpers.hpp" #include "ReleaseListHelpers.hpp"
#include "TrackListHelpers.hpp" #include "TrackListHelpers.hpp"
#include "Utils.hpp"
using namespace Database; using namespace Database;
@@ -115,7 +116,7 @@ Artist::refreshView()
refreshLinks(artist); refreshLinks(artist);
refreshSimilarArtists(similarArtistIds); refreshSimilarArtists(similarArtistIds);
Wt::WContainerWidget* clusterContainers = bindNew<Wt::WContainerWidget>("clusters"); Wt::WContainerWidget* clusterContainers {bindNew<Wt::WContainerWidget>("clusters")};
{ {
auto clusterTypes = ScanSettings::get(LmsApp->getDbSession())->getClusterTypes(); auto clusterTypes = ScanSettings::get(LmsApp->getDbSession())->getClusterTypes();
@@ -123,10 +124,10 @@ Artist::refreshView()
for (auto clusters : clusterGroups) for (auto clusters : clusterGroups)
{ {
for (auto cluster : clusters) for (const Database::Cluster::pointer& cluster : clusters)
{ {
auto clusterId = cluster->getId(); const Database::ClusterId clusterId = cluster->getId();
auto entry = clusterContainers->addWidget(LmsApp->createCluster(cluster)); Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
entry->clicked().connect([=] entry->clicked().connect([=]
{ {
_filters->add(clusterId); _filters->add(clusterId);
+10 -11
View File
@@ -28,6 +28,7 @@
#include "services/database/Session.hpp" #include "services/database/Session.hpp"
#include "LmsApplication.hpp" #include "LmsApplication.hpp"
#include "Utils.hpp"
#include "ModalManager.hpp" #include "ModalManager.hpp"
namespace UserInterface { namespace UserInterface {
@@ -124,23 +125,21 @@ void
Filters::add(ClusterId clusterId) Filters::add(ClusterId clusterId)
{ {
Wt::WInteractWidget* filter {};
{
auto transaction {LmsApp->getDbSession().createSharedTransaction()};
Cluster::pointer cluster {Cluster::find(LmsApp->getDbSession(), clusterId)};
if (!cluster)
return;
if (std::find(std::cbegin(_clusterIds), std::cend(_clusterIds), clusterId) != std::cend(_clusterIds)) if (std::find(std::cbegin(_clusterIds), std::cend(_clusterIds), clusterId) != std::cend(_clusterIds))
return; return;
_clusterIds.push_back(clusterId); Wt::WInteractWidget* filter {};
filter = _filters->addWidget(LmsApp->createCluster(cluster, true)); {
auto cluster {Utils::createCluster(clusterId, true)};
if (!cluster)
return;
filter = _filters->addWidget(std::move(cluster));
} }
_clusterIds.push_back(clusterId);
filter->clicked().connect([=] filter->clicked().connect([=]
{ {
_filters->removeWidget(filter); _filters->removeWidget(filter);
+2 -2
View File
@@ -139,10 +139,10 @@ Release::refreshView()
for (const auto& clusters : clusterGroups) for (const auto& clusters : clusterGroups)
{ {
for (const auto& cluster : clusters) for (const Database::Cluster::pointer& cluster : clusters)
{ {
const ClusterId clusterId {cluster->getId()}; const ClusterId clusterId {cluster->getId()};
auto entry {clusterContainers->addWidget(LmsApp->createCluster(cluster))}; Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
entry->clicked().connect([=] entry->clicked().connect([=]
{ {
_filters->add(clusterId); _filters->add(clusterId);