Toggle menu
Toggle preferences menu
Toggle personal menu
Not logged in
Your IP address will be publicly visible if you make any edits.

Module:Card: Difference between revisions

From Vault Hunters Official Wiki
mNo edit summary
Tag: Reverted
m Reverted edits by Mnooseman (talk) to last revision by JoshuaEpstein
Tag: Rollback
 
Line 110: Line 110:
     local description = args.description or ''
     local description = args.description or ''
      
      
     -- If there's no link, create the card as before (non-clickable)
     local html = mw.html.create('div')
    if link == '' then
        :addClass('vh-quick-link-card')
        local html = mw.html.create('div')
            :addClass('vh-quick-link-card')
       
        if icon ~= '' then
            html:tag('div')
                :addClass('vh-quick-link-icon')
                :wikitext(icon)
        end
       
        if title ~= '' then
            html:tag('div')
                :addClass('vh-quick-link-title')
                :wikitext(title)
        end
       
        if description ~= '' then
            html:tag('div')
                :addClass('vh-quick-link-desc')
                :wikitext(description)
        end
       
        return tostring(html)
    end
   
    -- Build the card content as wikitext that will create the proper link structure
    local cardContent = '[[' .. link .. '|'
      
      
    -- Add icon if exists
     if icon ~= '' then
     if icon ~= '' then
         cardContent = cardContent .. '<div class="vh-quick-link-icon">' .. icon .. '</div>'
         html:tag('div')
            :addClass('vh-quick-link-icon')
            :wikitext(icon)
     end
     end
      
      
    -- Add title if exists
     if title ~= '' then
     if title ~= '' then
         cardContent = cardContent .. '<div class="vh-quick-link-title">' .. title .. '</div>'
         local titleDiv = html:tag('div')
            :addClass('vh-quick-link-title')
       
        if link ~= '' then
            titleDiv:wikitext('[[' .. link .. '|' .. title .. ']]')
        else
            titleDiv:wikitext(title)
        end
     end
     end
      
      
    -- Add description if exists
     if description ~= '' then
     if description ~= '' then
         cardContent = cardContent .. '<div class="vh-quick-link-desc">' .. description .. '</div>'
         html:tag('div')
            :addClass('vh-quick-link-desc')
            :wikitext(description)
     end
     end
   
    cardContent = cardContent .. ']]'
   
    -- Create the wrapper div and insert the wikitext
    local html = mw.html.create('div')
        :addClass('vh-quick-link-card')
        :addClass('vh-quick-link-card--linked')  -- Add a class to identify linked cards
        :wikitext(cardContent)
      
      
     return tostring(html)
     return tostring(html)

Latest revision as of 04:02, 23 July 2025

Documentation for this module may be created at Module:Card/doc

local p = {}

local validTypes = {
    default = true,
    primary = true,
    success = true,
    warning = true,
    destructive = true,
    spacer = true,
}

function p.main(frame)
    local args = frame:getParent().args
    return p._main(args)
end

function p._main(args)
    local cardType = args.type or 'default'
    local icon = args.icon or ''
    local title = args.title or ''
    local content = args.content or ''
    local footer = args.footer or ''
    local link = args.link or ''
    
    
    if not validTypes[cardType] then
        cardType = 'default'
    end
    
    if cardType == 'spacer' then
        -- Spacers should be completely empty elements. The grid will handle the rest.
        local div = mw.html.create('div')
            :addClass('vh-card--spacer')
        return tostring(div)
    end
    
    -- Build the card HTML
    local html = mw.html.create('div')
        :addClass('vh-card')
        :addClass('vh-card--' .. cardType)
    
    -- Add header if title or icon exists
    if title ~= '' or icon ~= '' then
        local header = html:tag('div')
            :addClass('vh-card-header')
        
        if icon ~= '' then
            header:tag('span')
                :addClass('vh-card-icon')
                :wikitext(icon)
        end
        
        if title ~= '' then
            local titleElement = header:tag('h3')
                :addClass('vh-card-title')
            
            if link ~= '' then
                titleElement:wikitext('[[' .. link .. '|' .. title .. ']]')
            else
                titleElement:wikitext(title)
            end
        end
    end
    
    -- Add content
    if content ~= '' then
        html:tag('div')
            :addClass('vh-card-content')
            :wikitext(content)
    end
    
    -- Add footer if exists
    if footer ~= '' then
        html:tag('div')
            :addClass('vh-card-footer')
            :wikitext(footer)
    end
    
    return tostring(html)
end

--[[
    MODIFIED FUNCTION
    This function is changed to prevent MediaWiki from wrapping cards in <p> tags.
    It now preprocesses the content to expand the templates (e.g., {{Card}})
    and then builds the final HTML as a raw string. This bypasses the parser
    issue and ensures the .vh-card divs are direct children of the .vh-card-group.
]]
function p.group(frame)
    local args = frame:getParent().args
    local content = args.content or args[1] or ''
    
    -- Preprocess the content to expand the templates into HTML
    local processedContent = frame:preprocess(content)
    
    -- Return the container div with the processed content as a raw string
    return frame:extensionTag{
	    name = 'div',
	    content = processedContent,
	    args = { class = 'vh-card-group' }
	}
end


function p.quickLink(frame)
    local args = frame:getParent().args
    local icon = args.icon or ''
    local title = args.title or ''
    local link = args.link or ''
    local description = args.description or ''
    
    local html = mw.html.create('div')
        :addClass('vh-quick-link-card')
    
    if icon ~= '' then
        html:tag('div')
            :addClass('vh-quick-link-icon')
            :wikitext(icon)
    end
    
    if title ~= '' then
        local titleDiv = html:tag('div')
            :addClass('vh-quick-link-title')
        
        if link ~= '' then
            titleDiv:wikitext('[[' .. link .. '|' .. title .. ']]')
        else
            titleDiv:wikitext(title)
        end
    end
    
    if description ~= '' then
        html:tag('div')
            :addClass('vh-quick-link-desc')
            :wikitext(description)
    end
    
    return tostring(html)
end

return p