-
Notifications
You must be signed in to change notification settings - Fork 30
Expand file tree
/
Copy pathcard_grid.py
More file actions
73 lines (66 loc) · 2.09 KB
/
card_grid.py
File metadata and controls
73 lines (66 loc) · 2.09 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
import dash
from dash import html
import uuid
import random
import dash_bootstrap_components as dbc
rd = random.Random(0)
def make_hover_image(page):
return html.Div(
[
html.Img(
src=dash.get_asset_url(page["image"]),
className="img-fluid hover-image",
),
html.Div(
dbc.Button("See app", color="secondary"),
className="hover-overlay",
),
],
className="hover-container",
)
def make_card(page):
tooltip_id = str(uuid.UUID(int=rd.randint(0, 2 ** 128)))
return dbc.Card(
[
dbc.CardHeader(
[
dbc.NavLink(
page["title"],
href=page["relative_path"],
),
]
),
dbc.CardBody(
[
html.A(
make_hover_image(page),
href=page["relative_path"],
id=tooltip_id,
),
html.P(
page["description"],
className="card-text p-2 border-top",
),
],
),
# tooltip disabled for now
# dbc.Tooltip(page["description"], target=tooltip_id),
],
className="m-2 shadow",
style={'border': 'var(--bs-card-border-width) solid var(--bs-card-border-color)', "maxWidth":"33%"}
#There is a strange media query removing this border, had to shim it
)
def make_card_grid(cards_per_row=3, registry=None):
if registry is None:
registry = dash.page_registry.values()
row = []
grid = []
for page in registry:
if page["relative_path"] != dash.get_relative_path("/"):
if len(row) < cards_per_row:
row.append(make_card(page))
if len(row) == cards_per_row:
grid.append(dbc.CardGroup(row, className="mb-4"))
row = []
grid.append(dbc.CardGroup(row))
return grid