JourneyPage: Difference between revisions
From Dune Awakening DB
Created page with "<templatestyles src="Template:JourneysPage/styles.css" /> <div class="journeys-page-container"> <div class="journeys-main-content"> <div class="journeys-tabs"> <span class="journeys-tab">{{{tab_z_name|Z}}}</span> <span class="journeys-tab">{{{tab_c_name|C}}}</span> <span class="journeys-tab active">{{{tab_story_name|STORY}}}</span> </div> {{#get_external_data:source=externaldb |from=data_journ..." |
mNo edit summary |
||
| Line 1: | Line 1: | ||
<templatestyles src="Template: | <includeonly><templatestyles src="Template:JourneyPage/styles.css" /> | ||
<div class="dune-breadcrumb-nav"> | |||
<span id="menuRadialTrigger" class="menu-button-wrapper" style="cursor:pointer;">[[File:MenuButton.png|100px|link=|alt=Menu]]</span><span class="dune-breadcrumb-separator">/</span>[[Main Page|Home]]<span class="dune-breadcrumb-separator">/</span>[[Journeys]]<span class="dune-breadcrumb-separator">/</span><span>Journey Tracker</span> | |||
</div> | |||
< | <!-- Alternative: Let JavaScript build the data structure from HTML data attributes --> | ||
<!-- This avoids complex JSON generation in templates --> | |||
<!-- Main Journey Container --> | |||
<div class="journey-main-container"> | |||
<!-- Journey Categories (Left Column - 60%) --> | |||
<div class="journey-categories"> | |||
<!-- Get unique journey groups --> | |||
{{#get_external_data:source=externaldb | |||
|from=data_journeys | |||
|data=Group=journey_group | |||
|cache=yes | |||
|group by=journey_group | |||
|order by=journey_group | |||
}} | |||
{{#for_external_table:| | |||
<div class="journey-section" data-group="{{{Group}}}"> | |||
<div class="journey-section-header"> | |||
<span class="section-icon">{{#invoke:JourneySystem|getGroupIcon|{{{Group}}}}}</span> | |||
<span class="section-title">{{{Group}}}</span> | |||
</div> | </div> | ||
<div class="journey-grid"> | |||
<!-- Get journeys for this group --> | |||
{{#get_external_data:source=externaldb | |||
|from=data_journeys | |||
|data=ID=id,Slug=slug,Name=name,Description=description,Tier=tier,Icon=journey_icon,Category=journey_category,Location=location,Reward=reward_json | |||
|cache=yes | |||
|where=journey_group='{{{Group}}}' | |||
|order by=tier, id | |||
}} | |||
{{#for_external_table:| | |||
<div class="journey-card" | |||
data-journey-id="{{{ID}}}" | |||
data-group="{{{Group}}}" | |||
data-name="{{{Name}}}" | |||
data-description="{{#invoke:JourneySystem|escapeHtml|{{{Description}}}}}" | |||
data-tier="{{{Tier}}}" | |||
data-slug="{{{Slug}}}" | |||
data-category="{{{Category}}}" | |||
data-location="{{{Location|}}}" | |||
data-reward='{{{Reward|}}}'> | |||
<div class="journey-card-inner"> | |||
<div class="journey-icon">{{#invoke:JourneySystem|getIcon|{{{Icon}}}|{{{Group}}}}}</div> | |||
<div class="journey-name">{{{Name}}}</div> | |||
<div class="journey-tier">Tier {{{Tier}}}</div> | |||
</div> | |||
</div> | </div> | ||
}} | |||
</div> | </div> | ||
</div> | |||
}} | |||
</div> | |||
<!-- Journey Details Panel (Right Column - 40%) --> | |||
<div class="journey-details-panel" id="journeyDetailsPanel"> | |||
<div class="journey-details-header"> | |||
<div class="journey-tier-badge"> | |||
<span class="tier-number">1</span> | |||
</div> | |||
<h2 class="journey-title">SELECT A JOURNEY</h2> | |||
<span class="completion-status">0% COMPLETE</span> | |||
</div> | |||
<div class="journey-description">Click on any journey card to view objectives and track your progress.</div> | |||
<div class="journey-rewards"> | |||
<div class="rewards-header">REWARD</div> | |||
<div class="rewards-content"> | |||
<span class="xp-icon">XP</span> | |||
<span class="xp-amount">--</span> | |||
</div> | |||
</div> | |||
<div class="journey-objectives"> | |||
<div class="objectives-header">OBJECTIVES</div> | |||
<div class="objectives-list"> | |||
<div class="objective-item"> | |||
<div class="objective-header"> | |||
<div class="objective-title" style="color: var(--color-secondary);">Select a journey to view objectives</div> | |||
</div> | |||
</div> | </div> | ||
</div> | |||
</div> | </div> | ||
<div class="journey-actions"> | |||
<button class="action-button view-items" disabled> | |||
<span class="button-icon">📋</span> | |||
View Item Prep List | |||
</button> | |||
<button class="action-button view-guide" disabled> | |||
<span class="button-icon">▶️</span> | |||
View Guide | |||
</button> | |||
</div> | </div> | ||
</div> | |||
</div> | </div> | ||
<!-- Initialize journey data from HTML attributes --> | |||
<script> | |||
// Build journey data from HTML data attributes | |||
(function() { | |||
var journeyData = {}; | |||
document.querySelectorAll('.journey-card').forEach(function(card) { | |||
var group = card.getAttribute('data-group'); | |||
var journey = { | |||
id: parseInt(card.getAttribute('data-journey-id')), | |||
name: card.getAttribute('data-name'), | |||
slug: card.getAttribute('data-slug'), | |||
description: card.getAttribute('data-description'), | |||
tier: parseInt(card.getAttribute('data-tier')), | |||
category: card.getAttribute('data-category'), | |||
location: card.getAttribute('data-location'), | |||
group: group, | |||
reward_json: {} | |||
}; | |||
// Parse reward JSON | |||
var rewardStr = card.getAttribute('data-reward'); | |||
if (rewardStr) { | |||
try { | |||
journey.reward_json = JSON.parse(rewardStr); | |||
} catch(e) {} | |||
} | |||
if (!journeyData[group]) { | |||
journeyData[group] = []; | |||
} | |||
journeyData[group].push(journey); | |||
}); | |||
// Store in global variable for JavaScript to use | |||
window.journeyDataFromHTML = journeyData; | |||
})(); | |||
</script> | |||
</includeonly><noinclude> | |||
{{Documentation}} | |||
</noinclude> | |||
