Module:Portal: Difference between revisions

Content deleted Content added
Add tracking category Category:Usage of portal image for non-existent portal
Reapply fixed version
 
(10 intermediate revisions by 3 users not shown)
Line 108:
end
s = mw.ustring.lower(s)
returnlocal image = matchImagePage(s) or matchImagePage(getAlias(s)) or defaultImage
image = mw.ustring.gsub(image,'^File:','') --- strip mistaken leading File: or Image:
image = mw.ustring.gsub(image,'^Image:','')
return resultimage
end
 
local function exists(title)
local success, exists = pcall(function() return title.exists end)
-- If success = false, then we're out of expensive parser function calls and can't check whether it exists
-- in that case, don't throw a Lua error
return not success or exists
end
 
Line 154 ⟶ 164:
local portalTitle = mw.title.new(portal,"Portal")
-- if portal exists, put it into list
if portalTitle and portalTitle.exists(portalTitle) then
table.insert(existingPortals,portal)
-- otherwise set tracking cat
Line 195 ⟶ 205:
end
return root
end
 
local function noviewer(portalImage)
-- Function to add noviewer class to filespec for portalImage
local portalImage, hasClass = mw.ustring.gsub(portalImage, "class%s*=[^%|]+", "%0 noviewer")
if hasClass == 0 then
portalImage = portalImage.."|class=noviewer"
end
return portalImage
end
 
Line 237 ⟶ 256:
local contents = {}
-- Display the portals specified in the positional arguments.
local defaultUsed = falsenil
for _, portal in ipairs(portals) do
local portalImage = getImageName(portal)
if portalImage == defaultImage then
defaultUsed = trueportal
else
portalImage = noviewer(portalImage)
end
local image = string.format('[[File:%s|32x28px|class=noviewer]]',
portalImage)
local link = string.format('[[Portal:%s|%s%sportal]]',
Line 249 ⟶ 270:
table.insert(contents, {image, link})
end
if defaultUsed and args.tracking and checkTracking() then
root:wikitextlocal cat = string.format('[[Category:Portal templates with default image|%s]]'),
defaultUsed)
root:wikitext(cat)
end
return tostring(fillBox(root, contents))
Line 266 ⟶ 289:
-- Display the portals specified in the positional arguments.
for _, fn in ipairs(imageList) do
local image = string.format('[[File:%s|32x28px|class=noviewer]]',noviewer(fn))
local link = string.format('[[:File:%s|%s]]',fn,fn)
table.insert(contents,{image,link})
Line 274 ⟶ 297:
end
 
function p._image(portal,nostripkeep)
-- Wrapper function to allow getImageName() to be accessed through #invoke.
-- backward compatibility: if table passed, take first element
Line 281 ⟶ 304:
end
local name = getImageName(portal)
-- If nostripkeep is yes (or equivalent), then allow all metadata (like image borders) to be returned
-- also, add "noviewer" class to metadata
local stripkeepargs = not yesno(nostripkeep)
local result = strip and name:match('^(.-)|') or name -- FIXME: use a more elegant way to separate borders etc. from the image name
if keepargs then
-- Temporary tracking category to clear out deleted portals
return noviewer(name)
local portalTitle = mw.title.new(portal,"Portal")
end
if not portalTitle.exists then
-- otherwise, just keep filename, plus optional category
result = result .. "|category=[[Category:Usage of portal image for non-existent portal]]"
local args = mw.text.split(name, "|", true)
local result = {args[1]} -- the filename always comes first
local countcategory = 1''
-- parse name, looking for category arguments
for i = 2,#args do
local m = mw.ustring.match(args[i], "^%s*category%s*=")
if m then
table.insert(result, args[i])
end
end
-- reassemble arguments
return result
return table.concat(result,"|")
end
 
 
local function getAllImageTablesgetAllImageTable()
-- Returns an array containing all image subpages (minus aliases) as loaded by mw.loadData.
local images = {}
for i, subpage in ipairs{'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z', 'other'} do
images[i]local imageTable = mw.loadData('Module:Portal/images/' .. subpage .. sandbox)
for portal, image in pairs(imageTable) do
local args = mw.text.split(image,"|")
images[portal] = args[1] -- just use image filename
end
end
return images
Line 307 ⟶ 344:
-- names are capitalized, so the portal links may be broken.
local lang = mw.language.getContentLanguage()
portals = portals or {}
local count = 1
for _, imageTableportal in ipairspairs(getAllImageTablesgetAllImageTable()) do
table.insert(portals[count] = ,lang:ucfirst(portal))
for portal in pairs(imageTable) do
portals[count] = lang:ucfirst(portal)
count = count + 1
end
end
table.sort(portals)
args.redlinks = args.redlinks or "yes"
return p._portal(portals, args)
end
Line 322 ⟶ 358:
-- should be moved to a portal alias for ease of maintenance.
local exists, dupes = {}, {}
for _portal, imageTableimage in ipairspairs(getAllImageTablesgetAllImageTable()) do
if not portalTitle.exists[image] then
for portal, image in pairs(imageTable) do
if not exists[image] then= portal
else
exists[image] = portal
table.insert(dupes, string.format('The image "[[:File:%s|%s]]" is used for both portals "%s" and "%s".', image, image, exists[image], portal))
else
table.insert(dupes, string.format('The image "[[:File:%s|%s]]" is used for both portals "%s" and "%s".', image, image, exists[image], portal))
end
end
end