Module:JourneySystem
From Dune Awakening DB
Documentation for this module may be created at Module:JourneySystem/doc
-- Module:JourneySystem
-- Minimal module for Journey display - focuses only on formatting, not data retrieval
-- All external data queries are handled by the wiki template for better caching
local p = {}
local parser = require('Module:DataTableParserV2')
--------------------------------------------------
-- Function: renderObjectives
-- Called via AJAX to render objectives for a specific journey
-- Data should be passed from JavaScript
--------------------------------------------------
function p.renderObjectives(frame)
local journeyId = frame.args.id or frame.args[1] or ""
if journeyId == "" then
return '<div class="objectives-list"><div class="objective-item"><div class="objective-header"><div class="objective-title" style="color: var(--color-secondary);">No journey selected</div></div></div></div>'
end
-- This would be called via AJAX with the journey ID
-- The actual data fetching happens in JavaScript
return string.format([[<div class="loading-objectives" data-journey-id="%s">Loading objectives...</div>]], journeyId)
end
--------------------------------------------------
-- Function: renderMaterials
-- Called via AJAX to render materials for a specific journey
-- Data should be passed from JavaScript
--------------------------------------------------
function p.renderMaterials(frame)
local journeyId = frame.args.id or frame.args[1] or ""
if journeyId == "" then
return '<div class="materials-list">No journey selected</div>'
end
-- This would be called via AJAX with the journey ID
-- The actual data fetching happens in JavaScript
return string.format([[<div class="loading-materials" data-journey-id="%s">Loading materials...</div>]], journeyId)
end
--------------------------------------------------
-- Function: formatObjectiveItem
-- Formats a single objective with its tasks
-- Called from JavaScript with data
--------------------------------------------------
function p.formatObjectiveItem(frame)
local objectiveId = frame.args.id or ""
local title = frame.args.title or ""
local seq = frame.args.seq or "1"
local tasks = frame.args.tasks or ""
local totalTasks = frame.args.totalTasks or "0"
local collapsedClass = tonumber(seq) > 1 and " collapsed" or ""
local output = string.format([[
<div class="objective-item%s">
<div class="objective-header" data-objective-id="%s">
<div class="objective-icon">%s</div>
<div class="objective-title">%s</div>
<div class="objective-progress">0/%s</div>
</div>
<div class="objective-tasks">%s</div>
</div>]], collapsedClass, objectiveId, seq, title, totalTasks, tasks)
return output
end
--------------------------------------------------
-- Function: formatTaskItem
-- Formats a single task item
--------------------------------------------------
function p.formatTaskItem(frame)
local taskId = frame.args.id or ""
local description = frame.args.description or ""
local qty = frame.args.qty or ""
-- Apply iconization to the description
local iconizedDesc = frame:preprocess('{{#invoke:DataTableParserV2|iconize|' .. description .. '}}')
local qtyHtml = ""
if qty ~= "" and qty ~= "0" then
qtyHtml = string.format('<div class="task-qty">%s pcs</div>', qty)
end
return string.format([[
<div class="task-item" data-task-id="%s">
<div class="task-checkbox"></div>
<div class="task-description">%s</div>
%s
</div>]], taskId, iconizedDesc, qtyHtml)
end
--------------------------------------------------
-- Function: formatMaterialItem
-- Formats a single material item
--------------------------------------------------
function p.formatMaterialItem(frame)
local name = frame.args.name or ""
local qty = frame.args.qty or "1"
local index = frame.args.index or "0"
-- Try to get icon
local iconFile = name:gsub("%s+", "_") .. "_-_Icon.png"
local iconHtml = string.format('[[File:%s|20px|link=]]', iconFile)
return string.format([=[
<div class="material-item" data-material-index="%s">
<div class="material-checkbox"></div>
<div class="material-icon">%s</div>
<div class="material-name">[[%s]]</div>
<div class="material-qty">%s</div>
</div>]=], index, iconHtml, name, qty)
end
return p
