Documentation for this module may be created at Module:New pages/doc
-- Modul:NeuesteSeiten
-- Lists the newest (or most recently edited) pages whose name starts with a given prefix,
-- using the NeoWiki graph.
--
-- Usage:
-- {{#invoke:NeuesteSeiten|list|prefix=Testseite}}
-- {{#invoke:NeuesteSeiten|list|prefix=Testseite|limit=3|sort=edited|date=no}}
--
-- Parameters:
-- prefix Page name prefix (case-sensitive, include namespace prefix if needed). Default: Testseite
-- limit Number of pages, 1-50. Default: 3
-- sort "created" (newest pages) or "edited" (most recently changed). Default: created
-- date "no" hides the date. Default: shown
local p = {}
local SORT_FIELDS = {
created = 'creationTime',
edited = 'lastUpdated',
}
local function errorBox( msg )
return '<span class="error">' .. mw.text.nowiki( msg ) .. '</span>'
end
function p.list( frame )
local args = frame.args
local prefix = mw.text.trim( args.prefix or '' )
if prefix == '' then
prefix = 'Testseite'
end
local limit = tonumber( args.limit ) or 3
limit = math.max( 1, math.min( 50, math.floor( limit ) ) )
local sortField = SORT_FIELDS[ mw.text.trim( args.sort or 'created' ) ] or SORT_FIELDS.created
local showDate = mw.text.trim( args.date or '' ) ~= 'no'
local ok, nw = pcall( require, 'mw.neowiki' )
if not ok or not nw or not nw.query then
return errorBox( 'NeoWiki Lua library or graph backend is not available.' )
end
-- sortField and limit come from a whitelist / are validated numbers,
-- so concatenating them is safe. The prefix is passed as a parameter.
local cypher = 'MATCH (p:Page) WHERE p.name STARTS WITH $prefix '
.. 'RETURN p.name AS name, p.' .. sortField .. ' AS date '
.. 'ORDER BY p.' .. sortField .. ' DESC LIMIT ' .. limit
local success, rows = pcall( nw.query, cypher, { prefix = prefix } )
if not success then
return errorBox( 'Query failed: ' .. tostring( rows ) )
end
if #rows == 0 then
return "''Keine Seiten gefunden.''"
end
local lang = mw.getContentLanguage()
local out = {}
for _, row in ipairs( rows ) do
local line = '* [[' .. row.name .. ']]'
if showDate and row.date then
local okDate, formatted = pcall( lang.formatDate, lang, 'd.m.Y, H:i', row.date, true )
if okDate then
line = line .. ' (' .. formatted .. ')'
end
end
table.insert( out, line )
end
return table.concat( out, '\n' )
end
return p
-- generated with claude.ai