Module:CRTModel: Difference between revisions
No edit summary Tag: Reverted |
Tag: Undo |
||
| Line 196: | Line 196: | ||
-- Documents section | -- Documents section | ||
addSectionRow(container, 'Documents') | addSectionRow(container, 'Documents') | ||
-- Build the upload link with UUID-like unique identifier | |||
local timestamp = os.time() | |||
local random = math.random(1000, 9999) | |||
local target = pageName .. " - document " .. timestamp .. "-" .. random | |||
local uploadUrl = mw.uri.fullUrl( | |||
"Special:FormEdit", | |||
{ | |||
form = "Document", | |||
target = target, | |||
["Document[crt_models]"] = pageName | |||
} | |||
) | |||
-- Query for document count | -- Query for document count | ||
| Line 279: | Line 292: | ||
docsDiv:node(ul) | docsDiv:node(ul) | ||
-- Add upload link as a button | -- Add upload link as a button | ||
local uploadDiv = mw.html.create('div') | local uploadDiv = mw.html.create('div') | ||
uploadDiv:css('margin-top', '0.5em'):css('text-align', 'center') | uploadDiv:css('margin-top', '0.5em'):css('text-align', 'center') | ||
uploadDiv:wikitext('[' .. tostring(uploadUrl) .. ' <span style="display:inline-block;padding:0.5rem 1rem;background-color:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;border-radius:0.375rem;font-size:0.875rem;font-weight:500;text-decoration:none;">Upload a document</span>]') | |||
docsDiv:node(uploadDiv) | docsDiv:node(uploadDiv) | ||
else | else | ||
-- Just show the upload link as a button | -- Just show the upload link as a button | ||
local uploadDiv = mw.html.create('div') | local uploadDiv = mw.html.create('div') | ||
uploadDiv:css('text-align', 'center') | uploadDiv:css('text-align', 'center') | ||
uploadDiv:wikitext('[' .. tostring(uploadUrl) .. ' <span style="display:inline-block;padding:0.5rem 1rem;background-color:#eff6ff;color:#1d4ed8;border:1px solid #bfdbfe;border-radius:0.375rem;font-size:0.875rem;font-weight:500;text-decoration:none;">Upload a document</span>]') | |||
docsDiv:node(uploadDiv) | docsDiv:node(uploadDiv) | ||
end | |||
-- Links section: Query for link subobjects and display by type | |||
local linksQueryWikitext = | |||
'{{#ask:\n' .. | |||
' [[CRT model::' .. fullPageName .. ']]\n' .. | |||
' |?Model link type\n' .. | |||
' |?Model link source\n' .. | |||
' |?Model link URL\n' .. | |||
' |format=broadtable\n' .. | |||
' |headers=hide\n' .. | |||
' |link=none\n' .. | |||
'}}' | |||
local linksResult = frame:preprocess(linksQueryWikitext) | |||
-- Parse links and organize by type | |||
local linksByType = { | |||
Manufacturer = {}, | |||
Retailer = {}, | |||
Database = {} | |||
} | |||
local hasLinks = false | |||
if linksResult then | |||
-- Match each table row | |||
for rowContent in linksResult:gmatch('<tr[^>]*>(.-)</tr>') do | |||
local cells = {} | |||
-- Extract content from each <td> | |||
for cellContent in rowContent:gmatch('<td[^>]*>(.-)</td>') do | |||
-- Strip any remaining HTML tags and get just the text | |||
local cleanContent = cellContent:gsub('<[^>]+>', '') | |||
table.insert(cells, trim(cleanContent)) | |||
end | |||
-- cells[1] = page/subobject, cells[2] = type, cells[3] = source, cells[4] = URL | |||
if #cells >= 4 then | |||
local linkType = cells[2] | |||
local linkSource = cells[3] | |||
local linkUrl = cells[4] | |||
if linkType and linkSource and linkUrl and linkUrl ~= '' then | |||
if linksByType[linkType] then | |||
table.insert(linksByType[linkType], {source = linkSource, url = linkUrl}) | |||
hasLinks = true | |||
end | |||
end | |||
end | |||
end | |||
end | end | ||