Module:Selected current events
Appearance
![]() | This module is rated as ready for general use. It has reached a mature form and is thought to be relatively bug-free and ready for use wherever appropriate. It is ready to mention on help pages and other Wikipedia resources as an option for new users to learn. To reduce server load and bad output, it should be improved by sandbox testing rather than repeated trial-and-error editing. |
![]() | This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
Usage
{{#invoke:Selected current events|main}}
Arguments come from the parent template {{Transclude selected current events}}; see documentation there for details.
See also
function setCleanArgs(argsTable)
local cleanArgs = {}
for key, val in pairs(argsTable) do
if type(val) == 'string' then
val = val:match('^%s*(.-)%s*$')
if val ~= '' then
cleanArgs[key] = val
end
else
cleanArgs[key] = val
end
end
return cleanArgs
end
-- Get current events for a "YYYY Month" date. Returns a table of list items.
function getCurrentEvents(date)
local frame = mw.getCurrentFrame()
local raw = mw.text.killMarkers( frame:expandTemplate{ title="Portal:Current events/Month Inclusion", args={date} } )
local items = string.gsub( raw, pattern, repl, n )
local lines = mw.text.split( raw , '\n')
local items = {}
for i, v in ipairs(lines) do
if string.sub( v, 0, 2 ) == '**' then
local item = mw.ustring.gsub(v, "%*+","*")
table.insert(items, item)
end
end
return items
end
-- TODO: Filter items to those that match keywords/matches
function filterEvents(items, keywords)
local filteredItems = {}
for i, item in ipairs(items) do
local done = false
for k, patt in pairs(keywords) do
if not done and mw.ustring.find(v, patt) then
table.insert(filteredItems, item)
end
end
end
return filteredItems
end
local p = {}
p.main = function(frame)
local parent = frame.getParent(frame)
local parentArgs = parent.args
local lang = mw.language.new('en')
local thisMonth = lang:formatDate('Y F')
local lastMonth = lang:formatDate('Y F', 'now - 1 month')
-- TODO: get keywords from args
local keywords = {"Japan"}
local currentEventsThisMonth = filterEvents(getCurrentEvents(thisMonth), keywords)
local currentEventsLastMonth = filterEvents(getCurrentEvents(lastMonth), keowords)
if not currentEventsThisMonth and not currentEventsLastMonth then
return 'No recent news'
end
return currentEventsThisMonth.reverse().concat('/n') .. currentEventsLastMonth.reverse().concat('/n')
end
return p