Module:UpdateExcerpt: Difference between revisions

From The Deadlock Wiki
Jump to navigation Jump to search
No edit summary
No edit summary
Tags: Mobile edit Mobile web edit
Line 73: Line 73:
     if hasMore then
     if hasMore then
         html = html .. '<div style="flex-shrink:0; padding:10px 18px; text-align:center; border-top:1px solid rgba(255,255,255,0.1); font-family:\'Retail Demo\',\'Open Sans\',sans-serif;">'
         html = html .. '<div style="flex-shrink:0; padding:10px 18px; text-align:center; border-top:1px solid rgba(255,255,255,0.1); font-family:\'Retail Demo\',\'Open Sans\',sans-serif;">'
             .. frame:preprocess('[[' .. pageTitle .. '|<span style="color:#e8be86; font-weight:bold;">Read more →</span>]]')
             .. frame:preprocess('[[' .. pageTitle .. '|<span style="class="plain" style="color:#e8be86; font-weight:bold; text-shadow: 0px 2px 2px black, 0px 0px 2px black;">Read more →</span>]]')
             .. '</div>'
             .. '</div>'
     end
     end

Revision as of 01:16, 10 March 2026

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

-- Module:UpdateExcerpt
-- Usage: {{#invoke:UpdateExcerpt|render|Month|Day|Year|number_of_lines}}

local p = {}

function p.render(frame)
    local args = frame.args
    local month    = args[1]
    local day      = args[2]
    local year     = args[3]
    local maxLines = tonumber(args[4]) or 5

    if not month or not day or not year then
        return '<span class="error">Usage: {{#invoke:UpdateExcerpt|render|Month|Day|Year|lines}}</span>'
    end

    local pageTitle = "Update:" .. month .. " " .. day .. ", " .. year

    local titleObj = mw.title.new(pageTitle)
    if not titleObj then
        return '<span class="error">Invalid page title: ' .. pageTitle .. '</span>'
    end

    local content = titleObj:getContent()
    if not content then
        return '<span class="error">Page not found: [[' .. pageTitle .. ']]</span>'
    end

    local notesStart = content:find("|%s*notes%s*=")
    if not notesStart then
        return '<span class="error">No notes parameter found on [[' .. pageTitle .. ']]</span>'
    end

    local sub   = content:sub(notesStart)
    local eqPos = sub:find("=")
    local notesRaw = sub:sub(eqPos + 1)

    local lastClose = notesRaw:find("}}%s*$")
    if lastClose then
        notesRaw = notesRaw:sub(1, lastClose - 1)
    end

    notesRaw = mw.text.trim(notesRaw)

    if notesRaw == "" then
        return ""
    end

    local lines = {}
    for line in notesRaw:gmatch("[^\n]+") do
        if mw.text.trim(line) ~= "" then
            table.insert(lines, line)
        end
    end

    if #lines == 0 then
        return ""
    end

    local count  = math.min(maxLines, #lines)
    local result = {}
    for i = 1, count do
        table.insert(result, lines[i])
    end

    local output = table.concat(result, "\n")
    local hasMore = #lines > maxLines

    local html = '<div style="flex:1; min-height:0; overflow-y:auto; padding:14px 18px; font-family:\'Retail Demo\',\'Open Sans\',sans-serif; font-size:0.92em; line-height:1.7;">\n'
        .. frame:preprocess(output)
        .. '\n</div>'

    if hasMore then
        html = html .. '<div style="flex-shrink:0; padding:10px 18px; text-align:center; border-top:1px solid rgba(255,255,255,0.1); font-family:\'Retail Demo\',\'Open Sans\',sans-serif;">'
            .. frame:preprocess('[[' .. pageTitle .. '|<span style="class="plain" style="color:#e8be86; font-weight:bold; text-shadow: 0px 2px 2px black, 0px 0px 2px black;">Read more →</span>]]')
            .. '</div>'
    end

    return html
end

return p