Skip to content

Commit 0998b70

Browse files
authored
Merge pull request #10 from boostorg/develop
Add V3 Features to QA
2 parents 4f966af + f35b24f commit 0998b70

30 files changed

Lines changed: 1344 additions & 206 deletions

config/settings.py

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,17 @@
227227

228228
# Password validation
229229
# Only used in production
230-
AUTH_PASSWORD_VALIDATORS = []
230+
AUTH_PASSWORD_VALIDATORS = [
231+
{
232+
"NAME": "django.contrib.auth.password_validation.UserAttributeSimilarityValidator"
233+
},
234+
{
235+
"NAME": "django.contrib.auth.password_validation.MinimumLengthValidator",
236+
"OPTIONS": {"min_length": 9},
237+
},
238+
{"NAME": "django.contrib.auth.password_validation.CommonPasswordValidator"},
239+
{"NAME": "django.contrib.auth.password_validation.NumericPasswordValidator"},
240+
]
231241

232242
# Sessions
233243

core/views.py

Lines changed: 89 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1111,10 +1111,39 @@ def get_context_data(self, **kwargs):
11111111
# Install bjam tool user config: https://www.bfgroup.xyz/b2/manual/release/index.html
11121112
cp ./libs/beast/tools/user-config.jam $HOME"""
11131113

1114+
INSTALL_CARD_PKG_MANAGERS = [
1115+
{"label": "Conan", "value": "conan", "command": "conan install boost"},
1116+
{"label": "Vcpkg", "value": "vcpkg", "command": "vcpkg install boost"},
1117+
]
1118+
INSTALL_CARD_SYSTEM_INSTALL = [
1119+
{
1120+
"label": "Ubuntu",
1121+
"value": "ubuntu",
1122+
"command": "sudo apt install libboost-all-dev",
1123+
},
1124+
{
1125+
"label": "Fedora",
1126+
"value": "fedora",
1127+
"command": "sudo dnf install boost-devel",
1128+
},
1129+
{
1130+
"label": "CentOS",
1131+
"value": "centos",
1132+
"command": "sudo yum install boost-devel",
1133+
},
1134+
{"label": "Arch", "value": "arch", "command": "sudo pacman -S boost"},
1135+
{"label": "Homebrew", "value": "homebrew", "command": "brew install boost"},
1136+
]
1137+
11141138
context = super().get_context_data(**kwargs)
11151139
context["code_demo_beast"] = CODE_DEMO_BEAST
11161140
context["code_demo_hello"] = CODE_DEMO_HELLO
11171141
context["code_demo_install"] = CODE_DEMO_INSTALL
1142+
context["install_card_title"] = (
1143+
"Install Boost and get started in your terminal."
1144+
)
1145+
context["install_card_pkg_managers"] = INSTALL_CARD_PKG_MANAGERS
1146+
context["install_card_system_install"] = INSTALL_CARD_SYSTEM_INSTALL
11181147
context["popular_terms"] = [
11191148
{"label": "Networking"},
11201149
{"label": "Math"},
@@ -1290,6 +1319,66 @@ def get_context_data(self, **kwargs):
12901319
],
12911320
}
12921321

1322+
context["banner_data"] = {
1323+
"icon_name": "alert",
1324+
"banner_message": "This is an older version of Boost and was released in 2017. The <a href='https://www.example.com'>current version</a> is 1.90.0.",
1325+
}
1326+
1327+
context["account_connections_mixed"] = [
1328+
{
1329+
"platform": "github",
1330+
"label": "GitHub",
1331+
"connected": True,
1332+
"status_text": "Connected",
1333+
"action_label": "Manage",
1334+
"action_url": "#",
1335+
},
1336+
{
1337+
"platform": "google",
1338+
"label": "Google",
1339+
"connected": False,
1340+
"status_text": "Not connected",
1341+
"action_label": "Connect",
1342+
"action_url": "#",
1343+
},
1344+
]
1345+
context["account_connections_all_connected"] = [
1346+
{
1347+
"platform": "github",
1348+
"label": "GitHub",
1349+
"connected": True,
1350+
"status_text": "Connected",
1351+
"action_label": "Manage",
1352+
"action_url": "#",
1353+
},
1354+
{
1355+
"platform": "google",
1356+
"label": "Google",
1357+
"connected": True,
1358+
"status_text": "Connected",
1359+
"action_label": "Manage",
1360+
"action_url": "#",
1361+
},
1362+
]
1363+
context["account_connections_none_connected"] = [
1364+
{
1365+
"platform": "github",
1366+
"label": "GitHub",
1367+
"connected": False,
1368+
"status_text": "Not connected",
1369+
"action_label": "Connect",
1370+
"action_url": "#",
1371+
},
1372+
{
1373+
"platform": "google",
1374+
"label": "Google",
1375+
"connected": False,
1376+
"status_text": "Not connected",
1377+
"action_label": "Connect",
1378+
"action_url": "#",
1379+
},
1380+
]
1381+
12931382
latest = Version.objects.most_recent()
12941383
if latest:
12951384
lv = (

flake.nix

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@
6767
python313.pkgs.black
6868
python313.pkgs.isort
6969
python313.pkgs.pip-tools
70+
git
7071
];
7172
# Host system installation workflow goes into the bootstrap justfile target.
7273
# Project specific installation and execution workflow should go here.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
/*
2+
Account Connections Card
3+
Shows linked social/OAuth account status with management actions.
4+
Extends the base .card component.
5+
6+
account-connections__items — vertical list of connection rows
7+
account-connections__item — single connection row (icon + name | status | button)
8+
account-connections__platform — icon + platform name group
9+
account-connections__platform-icon — brand icon (16x16)
10+
account-connections__platform-name — platform display name
11+
account-connections__status — connection status text (fills remaining space)
12+
*/
13+
14+
.account-connections-card {
15+
max-width: 696px;
16+
}
17+
18+
.account-connections__items {
19+
display: flex;
20+
flex-direction: column;
21+
gap: var(--space-large, 16px);
22+
padding: 0 var(--space-large, 16px);
23+
width: 100%;
24+
list-style: none;
25+
margin: 0;
26+
}
27+
28+
.account-connections__item {
29+
display: flex;
30+
align-items: center;
31+
gap: var(--space-xlarge, 24px);
32+
}
33+
34+
.account-connections__platform {
35+
display: flex;
36+
align-items: center;
37+
gap: var(--space-default, 8px);
38+
flex-shrink: 0;
39+
}
40+
41+
.account-connections__platform-icon {
42+
width: 16px;
43+
height: 16px;
44+
flex-shrink: 0;
45+
color: var(--color-text-primary, #050816);
46+
}
47+
48+
.account-connections__platform-name {
49+
font-family: var(--font-sans, 'Mona Sans VF'), sans-serif;
50+
font-size: var(--font-size-base, 16px);
51+
font-weight: var(--font-weight-medium, 500);
52+
line-height: var(--line-height-default, 1.2);
53+
letter-spacing: var(--letter-spacing-tight, -0.01em);
54+
color: var(--color-text-secondary, #585A64);
55+
white-space: nowrap;
56+
}
57+
58+
.account-connections__status {
59+
flex: 1 1 0;
60+
font-family: var(--font-sans, 'Mona Sans VF'), sans-serif;
61+
font-size: var(--font-size-base, 16px);
62+
font-weight: var(--font-weight-regular, 400);
63+
line-height: var(--line-height-default, 1.2);
64+
letter-spacing: var(--letter-spacing-tight, -0.01em);
65+
color: var(--color-text-secondary, #585A64);
66+
}

static/css/v3/animations.css

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
/*
2+
This animaiton controls the fade out of banners and other items that are hidden after a delay.
3+
*/
4+
5+
@keyframes fade-out {
6+
from {
7+
opacity: 1;
8+
}
9+
to {
10+
opacity: 0;
11+
display: none;
12+
}
13+
}
14+
15+
.banner--fade {
16+
/*
17+
Set the --fade-delay variable on the element with the class to control
18+
how quickly the element is hidden
19+
*/
20+
animation: fade-out 1s var(--fade-delay, 0ms) forwards;
21+
animation-timing-function: ease;
22+
transition-behavior: allow-discrete;
23+
}

static/css/v3/banner.css

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
.banner {
2+
width: 100%;
3+
display: flex;
4+
padding: var(--space-default, 8px) var(--space-large, 16px);
5+
justify-content: center;
6+
align-items: center;
7+
gap: var(--space-large, 16px);
8+
9+
border-radius: var(--border-radius-l, 8px);
10+
background: var(--color-surface-brand-accent-default, #FFA000);
11+
}
12+
13+
.banner__message {
14+
color: var(--color-text-on-accent, #050816);
15+
16+
/* Sans/Desktop/Regular/XS/Tight */
17+
font-family: var(--font-sans, "Mona Sans VF");
18+
font-size: var(--font-size-xs, 12px);
19+
font-weight: var(--font-weight-regular);
20+
line-height: var(--line-height-tight);
21+
/* 12px */
22+
letter-spacing: -0.12px;
23+
}
24+
25+
.banner__message a {
26+
text-decoration-line: underline;
27+
text-decoration-style: solid;
28+
text-decoration-skip-ink: auto;
29+
text-decoration-thickness: auto;
30+
text-underline-offset: auto;
31+
}
32+
33+
.banner__icon {
34+
width: 16px;
35+
height: 16px;
36+
flex-shrink: 0;
37+
aspect-ratio: 1/1;
38+
fill: var(--color-text-on-accent);
39+
}

static/css/v3/buttons.css

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -63,6 +63,7 @@
6363
}
6464

6565
.btn-secondary {
66+
background: var(--color-surface-weak);
6667
border-color: var(--color-stroke-strong);
6768
color: var(--color-text-primary);
6869
}

static/css/v3/code-block.css

Lines changed: 6 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,4 @@
1-
2-
3-
:root {
1+
:root {
42
--code-block-bg: var(--color-bg-secondary);
53
--code-block-border: var(--color-border);
64
--code-block-text: var(--color-syntax-text);
@@ -16,7 +14,6 @@
1614

1715
.code-block--standalone {
1816
background: var(--code-block-bg-standalone);
19-
border: 1px dashed var(--code-block-border-standalone);
2017
overflow: visible;
2118
}
2219

@@ -32,13 +29,13 @@
3229

3330
.code-block--white-bg {
3431
background: var(--color-bg-secondary);
32+
border: 1px solid var(--code-block-border);
3533
}
3634

3735
.code-block {
3836
position: relative;
3937
margin: 0;
4038
padding: var(--space-card);
41-
border: 1px solid var(--code-block-border);
4239
border-radius: var(--border-radius-l);
4340
overflow: auto;
4441
font-family: var(--font-code);
@@ -68,13 +65,7 @@
6865
overflow-wrap: break-word;
6966
}
7067

71-
.code-block__inner code{
72-
font-weight: 500;
73-
color: var(--color-syntax-text) !important;
74-
white-space: break-spaces !important;
75-
}
76-
77-
.code-block__inner code{
68+
.code-block__inner code {
7869
font-weight: 500;
7970
color: var(--color-syntax-text) !important;
8071
white-space: break-spaces !important;
@@ -153,14 +144,15 @@ html.dark .code-block-card--grey {
153144
}
154145

155146
.code-block-card__description {
156-
padding: var(--space-card) var(--space-card) var(--space-default) var(--space-card);
147+
padding: var(--space-card) var(--space-card) var(--space-default)
148+
var(--space-card);
157149
margin: 0 0 var(--space-medium);
158150
font-size: var(--font-size-medium);
159151
line-height: var(--line-height-relaxed);
160152
color: var(--color-text-secondary);
161153
}
162154

163-
.code-block-card .code-block-card__description{
155+
.code-block-card .code-block-card__description {
164156
border-top: 1px solid var(--color-border);
165157
}
166158

static/css/v3/components.css

Lines changed: 33 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,33 @@
1-
@import './fonts.css';
2-
@import './foundations.css';
3-
@import './button-tooltip.css';
4-
@import './post-cards.css';
5-
@import './buttons.css';
6-
@import './avatar.css';
7-
@import './carousel-buttons.css';
8-
@import './v3-examples-section.css';
9-
@import './header.css';
10-
@import './footer.css';
11-
@import './forms.css';
12-
@import './testimonial-card.css';
13-
@import './card.css';
14-
@import './event-cards.css';
15-
@import './content.css';
16-
@import './why-boost-cards.css';
17-
@import './stats.css';
18-
@import './category-tags.css';
19-
@import './code-block.css';
20-
@import './wysiwyg-editor.css';
21-
@import './search-card.css';
22-
@import './create-account-card.css';
23-
@import './privacy-policy.css';
24-
@import './library-intro-card.css';
25-
@import './learn-cards.css';
26-
@import './terms-of-use.css';
27-
@import './thread-archive-card.css';
1+
@import "./fonts.css";
2+
@import "./foundations.css";
3+
@import "./button-tooltip.css";
4+
@import "./post-cards.css";
5+
@import "./buttons.css";
6+
@import "./avatar.css";
7+
@import "./carousel-buttons.css";
8+
@import "./v3-examples-section.css";
9+
@import "./header.css";
10+
@import "./footer.css";
11+
@import "./forms.css";
12+
@import "./testimonial-card.css";
13+
@import "./card.css";
14+
@import "./event-cards.css";
15+
@import "./content.css";
16+
@import "./why-boost-cards.css";
17+
@import "./stats.css";
18+
@import "./category-tags.css";
19+
@import "./code-block.css";
20+
@import "./wysiwyg-editor.css";
21+
@import "./search-card.css";
22+
@import "./create-account-card.css";
23+
@import "./privacy-policy.css";
24+
@import "./library-intro-card.css";
25+
@import "./learn-cards.css";
26+
@import "./terms-of-use.css";
27+
@import "./thread-archive-card.css";
28+
@import "./tab.css";
29+
@import "./install-card.css";
30+
@import "./banner.css";
31+
@import "./animations.css";
32+
@import "./account-connections.css";
33+
@import "./dialog.css";

0 commit comments

Comments
 (0)