Module:UpdateExcerpt: Difference between revisionsGive feedback
Jump to navigation
Jump to search
Undo revision 62037 by Monster Domosed (talk) Tag: Undo |
No edit summary |
||
| Line 12: | Line 12: | ||
local maxLines = tonumber(args[4]) or 5 | local maxLines = tonumber(args[4]) or 5 | ||
if not month or not day or not year then | if not month or not day or not year then | ||
return '<span class="error">Usage: {{#invoke:UpdateExcerpt|render|Month|Day|Year|lines}}</span>' | return '<span class="error">Usage: {{#invoke:UpdateExcerpt|render|Month|Day|Year|lines}}</span>' | ||
end | end | ||
local pageTitle = "Update:" .. month .. " " .. day .. ", " .. year | local pageTitle = "Update:" .. month .. " " .. day .. ", " .. year | ||
| Line 30: | Line 28: | ||
end | end | ||
local notesStart = content:find("|%s*notes%s*=") | local notesStart = content:find("|%s*notes%s*=") | ||
if not notesStart then | if not notesStart then | ||
| Line 38: | Line 33: | ||
end | end | ||
local sub = content:sub(notesStart) | local sub = content:sub(notesStart) | ||
local eqPos = sub:find("=") | local eqPos = sub:find("=") | ||
local notesRaw = sub:sub(eqPos + 1) | local notesRaw = sub:sub(eqPos + 1) | ||
local lastClose = notesRaw:find("}}%s*$") | local lastClose = notesRaw:find("}}%s*$") | ||
if lastClose then | if lastClose then | ||
| Line 57: | Line 48: | ||
end | end | ||
local lines = {} | local lines = {} | ||
for line in notesRaw:gmatch("[^\n]+") do | for line in notesRaw:gmatch("[^\n]+") do | ||
if mw.text.trim(line) ~= "" then | if mw.text.trim(line) ~= "" then | ||
table.insert(lines, line) | table.insert(lines, line) | ||
| Line 72: | Line 59: | ||
end | end | ||
local count = math.min(maxLines, #lines) | local count = math.min(maxLines, #lines) | ||
local result = {} | local result = {} | ||
| Line 82: | Line 66: | ||
local output = table.concat(result, "\n") | local output = table.concat(result, "\n") | ||
local hasMore = #lines > maxLines | |||
if | -- Wrap content in a scrollable div, put "Read more" outside it | ||
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;">' | |||
.. frame:preprocess(output) | |||
.. '</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="color:#e8be86; font-weight:bold;">Read more →</span>]]') | |||
.. '</div>' | |||
end | end | ||
return | return html | ||
end | end | ||
return p | return p | ||
Revision as of 03:22, 9 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}}
-- Example: {{#invoke:UpdateExcerpt|render|March|6|2026|5}}
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
-- Wrap content in a scrollable div, put "Read more" outside it
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;">'
.. frame:preprocess(output)
.. '</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="color:#e8be86; font-weight:bold;">Read more →</span>]]')
.. '</div>'
end
return html
end
return p