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;
}
a img:hover {
filter: brightness(85%);
}
.Lms-badge-cluster:hover {
filter: brightness(85%);
cursor: pointer;
}
.Lms-notification-container {
position: fixed;
bottom: 78px;
right: 0px;
}
.Lms-player {
height: 70px;
}
.fixed-bottom.Lms-player {
z-index: 999;
}
.Lms-entry-playing {
background-color: var(--bs-dark);
}
@@ -57,6 +58,15 @@ body {
min-width: 64px;
}
.Lms-player {
height: 70px;
}
.fixed-bottom.Lms-player {
z-index: 999;
}
.Lms-responsive-square {
width: 100%;
}
-29
View File
@@ -300,35 +300,6 @@ LmsApplication::createReleaseAnchor(Database::Release::pointer release, bool add
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
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 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::WText> createCluster(Database::ObjectPtr<Database::Cluster> cluster, bool canDelete = false);
MediaPlayer& getMediaPlayer() const { return *_mediaPlayer; }
PlayQueue& getPlayQueue() const { return *_playQueue; }
+40
View File
@@ -22,6 +22,10 @@
#include <iomanip>
#include <sstream>
#include <Wt/WText.h>
#include "services/database/Cluster.hpp"
#include "services/database/Session.hpp"
#include "LmsApplication.hpp"
namespace UserInterface::Utils
@@ -60,4 +64,40 @@ namespace UserInterface::Utils
cover->setAttributeValue("onload", LmsApp->javaScriptClass() + ".onLoadCover(this)"); // HACK
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 <Wt/WImage.h>
#include <Wt/WInteractWidget.h>
#include "services/database/ClusterId.hpp"
#include "services/database/ReleaseId.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::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 "ReleaseListHelpers.hpp"
#include "TrackListHelpers.hpp"
#include "Utils.hpp"
using namespace Database;
@@ -115,7 +116,7 @@ Artist::refreshView()
refreshLinks(artist);
refreshSimilarArtists(similarArtistIds);
Wt::WContainerWidget* clusterContainers = bindNew<Wt::WContainerWidget>("clusters");
Wt::WContainerWidget* clusterContainers {bindNew<Wt::WContainerWidget>("clusters")};
{
auto clusterTypes = ScanSettings::get(LmsApp->getDbSession())->getClusterTypes();
@@ -123,10 +124,10 @@ Artist::refreshView()
for (auto clusters : clusterGroups)
{
for (auto cluster : clusters)
for (const Database::Cluster::pointer& cluster : clusters)
{
auto clusterId = cluster->getId();
auto entry = clusterContainers->addWidget(LmsApp->createCluster(cluster));
const Database::ClusterId clusterId = cluster->getId();
Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
entry->clicked().connect([=]
{
_filters->add(clusterId);
+10 -11
View File
@@ -28,6 +28,7 @@
#include "services/database/Session.hpp"
#include "LmsApplication.hpp"
#include "Utils.hpp"
#include "ModalManager.hpp"
namespace UserInterface {
@@ -124,23 +125,21 @@ void
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))
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([=]
{
_filters->removeWidget(filter);
+2 -2
View File
@@ -139,10 +139,10 @@ Release::refreshView()
for (const auto& clusters : clusterGroups)
{
for (const auto& cluster : clusters)
for (const Database::Cluster::pointer& cluster : clusters)
{
const ClusterId clusterId {cluster->getId()};
auto entry {clusterContainers->addWidget(LmsApp->createCluster(cluster))};
Wt::WInteractWidget* entry {clusterContainers->addWidget(Utils::createCluster(clusterId))};
entry->clicked().connect([=]
{
_filters->add(clusterId);