mirror of
https://codeberg.org/likwid/likwid.git
synced 2026-02-09 21:13:09 +00:00
ux: improve demo onboarding
This commit is contained in:
parent
c8f7150fac
commit
33dfa8708e
1 changed files with 95 additions and 6 deletions
|
|
@ -17,16 +17,26 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
A governance platform cannot be understood from screenshots or empty interfaces.
|
A governance platform cannot be understood from screenshots or empty interfaces.
|
||||||
Explore a live instance with real communities, ongoing decisions, and visible history.
|
Explore a live instance with real communities, ongoing decisions, and visible history.
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<div class="demo-primary-actions">
|
||||||
|
<a href={`/demo?enter=1${nextQuery || '&next=%2Fcommunities'}`} class="ui-btn ui-btn-primary ui-btn-xl">Enter the Demo</a>
|
||||||
|
<a href="/demo?enter=1&next=%2Fcommunities" class="ui-btn ui-btn-secondary ui-btn-xl">Browse Communities</a>
|
||||||
|
</div>
|
||||||
|
<p class="demo-primary-hint">No registration required to browse. Use a demo account below to vote and participate.</p>
|
||||||
</header>
|
</header>
|
||||||
|
|
||||||
${nextParam ? `
|
{nextParam ? (
|
||||||
<div class="demo-status-banner" id="demo-continue">
|
<div class="demo-status-banner" id="demo-continue">
|
||||||
<p>
|
<p>
|
||||||
You were trying to open <code>${nextParam.replace(/</g, '<')}</code>.
|
You were trying to open <code>{nextParam}</code>.
|
||||||
Enter the demo to continue.
|
Enter the demo to continue.
|
||||||
</p>
|
</p>
|
||||||
|
<div class="state-actions">
|
||||||
|
<a href={`/demo?enter=1${nextQuery}`} class="ui-btn ui-btn-primary">Continue</a>
|
||||||
|
<a href="/demo" class="ui-btn ui-btn-secondary">Stay on the demo page</a>
|
||||||
|
</div>
|
||||||
</div>
|
</div>
|
||||||
` : ''}
|
) : null}
|
||||||
|
|
||||||
<div class="demo-status-banner" id="demo-status">
|
<div class="demo-status-banner" id="demo-status">
|
||||||
<p>Loading demo status...</p>
|
<p>Loading demo status...</p>
|
||||||
|
|
@ -313,6 +323,21 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
line-height: 1.6;
|
line-height: 1.6;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.demo-primary-actions {
|
||||||
|
display: flex;
|
||||||
|
gap: 1rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
margin-top: 1.75rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.demo-primary-hint {
|
||||||
|
margin: 1rem auto 0;
|
||||||
|
max-width: 70ch;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-size: 0.9375rem;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 640px) {
|
@media (max-width: 640px) {
|
||||||
.lead {
|
.lead {
|
||||||
font-size: 1.05rem;
|
font-size: 1.05rem;
|
||||||
|
|
@ -343,6 +368,10 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
margin-top: 2rem;
|
margin-top: 2rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.start-grid .state-card {
|
||||||
|
grid-column: 1 / -1;
|
||||||
|
}
|
||||||
|
|
||||||
@media (max-width: 900px) {
|
@media (max-width: 900px) {
|
||||||
.start-grid {
|
.start-grid {
|
||||||
grid-template-columns: 1fr;
|
grid-template-columns: 1fr;
|
||||||
|
|
@ -826,6 +855,20 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
margin: 0;
|
margin: 0;
|
||||||
font-size: 0.9375rem;
|
font-size: 0.9375rem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.demo-status-banner .hint {
|
||||||
|
margin-top: 0.5rem;
|
||||||
|
color: var(--color-text-muted);
|
||||||
|
font-size: 0.875rem;
|
||||||
|
}
|
||||||
|
|
||||||
|
.state-actions {
|
||||||
|
margin-top: 1.25rem;
|
||||||
|
display: flex;
|
||||||
|
gap: 0.75rem;
|
||||||
|
justify-content: center;
|
||||||
|
flex-wrap: wrap;
|
||||||
|
}
|
||||||
</style>
|
</style>
|
||||||
|
|
||||||
<script define:vars={{ API_BASE }}>
|
<script define:vars={{ API_BASE }}>
|
||||||
|
|
@ -857,7 +900,20 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
if (!grid) return;
|
if (!grid) return;
|
||||||
|
|
||||||
if (!cards || !cards.length) {
|
if (!cards || !cards.length) {
|
||||||
grid.innerHTML = '<div class="start-card ui-card ui-card-pad-lg"><p class="loading-text">No journeys available.</p></div>';
|
grid.innerHTML =
|
||||||
|
'<div class="state-card ui-card">' +
|
||||||
|
'<p class="empty">No journeys available.</p>' +
|
||||||
|
'<p class="hint">You can still enter the demo and browse communities.</p>' +
|
||||||
|
'<div class="state-actions">' +
|
||||||
|
'<a class="ui-btn ui-btn-primary" href="/demo?enter=1&next=%2Fcommunities">Enter the Demo</a>' +
|
||||||
|
'<button type="button" class="ui-btn ui-btn-secondary" id="retry-journeys">Retry</button>' +
|
||||||
|
'</div>' +
|
||||||
|
'</div>';
|
||||||
|
|
||||||
|
var retry = document.getElementById('retry-journeys');
|
||||||
|
if (retry) {
|
||||||
|
retry.addEventListener('click', loadSuggestedJourneys);
|
||||||
|
}
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1012,11 +1068,24 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
// Update demo status indicator if needed
|
// Update demo status indicator if needed
|
||||||
const statusBanner = document.getElementById('demo-status');
|
const statusBanner = document.getElementById('demo-status');
|
||||||
if (statusBanner) {
|
if (statusBanner) {
|
||||||
|
const nextTarget = nextPath || '/communities';
|
||||||
|
const enterHref = '/demo?enter=1&next=' + encodeURIComponent(nextTarget);
|
||||||
|
|
||||||
if (status.demo_mode) {
|
if (status.demo_mode) {
|
||||||
statusBanner.innerHTML = '<p>✓ Demo mode is active. Explore freely!</p>';
|
statusBanner.innerHTML =
|
||||||
|
'<p>✓ Demo mode is active. Explore freely!</p>' +
|
||||||
|
'<div class="state-actions">' +
|
||||||
|
'<a class="ui-btn ui-btn-primary" href="' + enterHref + '">Enter the Demo</a>' +
|
||||||
|
'<a class="ui-btn ui-btn-secondary" href="/demo?enter=1&next=%2Fcommunities">Browse Communities</a>' +
|
||||||
|
'</div>';
|
||||||
statusBanner.classList.remove('inactive');
|
statusBanner.classList.remove('inactive');
|
||||||
} else {
|
} else {
|
||||||
statusBanner.innerHTML = '<p>Demo mode is not currently enabled on this instance.</p>';
|
statusBanner.innerHTML =
|
||||||
|
'<p>Demo mode is not currently enabled on this instance.</p>' +
|
||||||
|
'<p class="hint">You can still explore Likwid on the public site.</p>' +
|
||||||
|
'<div class="state-actions">' +
|
||||||
|
'<a class="ui-btn ui-btn-secondary" href="/">Back to home</a>' +
|
||||||
|
'</div>';
|
||||||
statusBanner.classList.add('inactive');
|
statusBanner.classList.add('inactive');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -1042,6 +1111,26 @@ const nextQuery = nextParam ? `&next=${encodeURIComponent(nextParam)}` : '';
|
||||||
}
|
}
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.log('Demo API not available:', error.message);
|
console.log('Demo API not available:', error.message);
|
||||||
|
|
||||||
|
const statusBanner = document.getElementById('demo-status');
|
||||||
|
if (statusBanner) {
|
||||||
|
statusBanner.innerHTML =
|
||||||
|
'<p>Could not load demo status.</p>' +
|
||||||
|
'<p class="hint">Please try again.</p>' +
|
||||||
|
'<div class="state-actions">' +
|
||||||
|
'<button type="button" class="ui-btn ui-btn-secondary" id="retry-demo-status">Retry</button>' +
|
||||||
|
'</div>';
|
||||||
|
statusBanner.classList.add('inactive');
|
||||||
|
|
||||||
|
const retryBtn = document.getElementById('retry-demo-status');
|
||||||
|
if (retryBtn) {
|
||||||
|
retryBtn.addEventListener('click', function() {
|
||||||
|
loadDemoData();
|
||||||
|
loadSuggestedJourneys();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Show fallback stats
|
// Show fallback stats
|
||||||
['stats-aurora', 'stats-civic-commons', 'stats-makers'].forEach(function(id) {
|
['stats-aurora', 'stats-civic-commons', 'stats-makers'].forEach(function(id) {
|
||||||
const el = document.getElementById(id);
|
const el = document.getElementById(id);
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue