Module:Article list

require('strict')

local p = {};

local function makelink(link) return "" .. link.label .. "" end

local function warning(note) return " "..note.."" end

local function removeword(link,removelist) for i,remove in ipairs(removelist) do		local char1 = string.sub(remove,1,1) local regex = "%f[%w][" .. string.upper(char1) .. string.lower(char1) .. "]" .. string.sub(remove,2) .. "*%f[%W]" link = link:gsub(regex,"") end link = link:gsub("^%s*","") -- strip spaces from start link = link:gsub("%s*$","") -- strip spaces from end link = link:gsub("^(%l)", mw.ustring.upper) -- capitalise first letter return link end

function p.getlinks(frame) local args = frame.args local pargs = frame:getParent.args local qids = args[1] or pargs[1] local sort = true -- sort entries unless sort=no if args.sort=='no' or pargs.sort=='no' then sort = false end local redlinks = false -- do not show redlinks unless redlinks=yes if args.redlinks=='yes' or pargs.redlinks=='yes' then redlinks = true end local removes = args.remove or pargs.remove or "" local removelist = mw.text.split(removes,"%s*,%s*") -- split string into table at commas local links = {} -- for constructing the links local notes = "" -- for warning messages on the template if qids then for qid in qids:gmatch("Q%d+") do			local target = mw.wikibase.sitelink(qid) local label = mw.wikibase.getLabel(qid) if target then -- sitelink to enwiki exists local newlink = {} newlink.target = target if label then -- make piped link using English label to avoid unnecessary disambiguation terms newlink.label = removeword(label,removelist) -- remove common words from label else -- there is no label so we are using target as the label newlink.label = removeword(target,removelist) -- remove common words from target end table.insert(links,newlink) else -- no sitelink to enwiki exists yet if label then -- English label exists if redlinks == true then if mw.title.new(label).exists then -- label is already a page linked to a different item notes = notes..warning("Cannot show link to "..label.." because it is not linked to "..qid.."") else -- we can create a redlink to label local newlink = {} newlink.target = label newlink.label = removeword(label,removelist) table.insert(links,newlink) end else -- add warning on template that there is no sitelink notes = notes..warning("No sitelink for "..label.."") end else -- no target and no English label if mw.wikibase.entityExists(qid) then if redlinks == true then -- add warning on template that no redlink can be generated without label notes = notes..warning("Cannot show link to "..qid.." because no label is defined") else -- add warning on template that there is no sitelink available notes = notes..warning("No sitelink for "..qid.."") end else -- add warning on template that qid is invalid notes = notes..warning("Invalid identifier "..qid) end end end end else return "Error: no parameter" end local links2 = {} -- will contain wikilinks sorted alphabetically if #links>0 then if sort then table.sort(links,function (link1,link2) return link1.label'..table.concat(links2) if mw.title.getCurrentTitle:inNamespace(10) then output = output..notes end return output ..'' end

function p.convert(frame) local args = frame.args local pargs = frame:getParent.args local input = args[1] or pargs[1] local prefix = args.prefix or pargs.prefix if prefix == nil then prefix = "Article list|" end if input == nil then return nil end local resolveEntity = require( "Module:ResolveEntityId" ) local articlelist = mw.text.split(input,"%*%s*") local qidlist = {} for i,article in ipairs(articlelist) do		local rawarticle=string.match(article,'%[%[(.+)%|') or string.match(article,'%[%[(.+)%]%]') if rawarticle then local qid = resolveEntity._id(rawarticle) if qid then qidlist[#qidlist+1] = qid.."" else qidlist[#qidlist+1] = "" end end end return "" end

return p