local getArgs = require('Module:Arguments').getArgs local yesno = require('Module:Yesno') local portalModule = require('Module:Portal') local getImageName = portalModule.image local checkPortals = portalModule._checkPortals local processPortalArgs = portalModule._processPortalArgs local p = {} -- these 3 functions were imported from de main portal module -- so we can print link and portal name local function matchImagePage(s) -- Finds the appropriate image subpage given a lower-case -- portal name plus the first letter of that portal name. if type(s) ~= 'string' or #s < 1 then return end local firstLetter = mw.ustring.sub(s, 1, 1) local imagePage, banners if mw.ustring.find(firstLetter, '^[a-z]') then imagePage = 'Module:Portal/images/' .. firstLetter else imagePage = 'Module:Portal/images/other' end local banners = mw.loadData ( imagePage ) if type(banners[s]) == 'string' or #s < 1 then return -- not found end return banners [s] end local function getAlias(s) -- Gets an alias from the image alias data page. local aliasData = mw.loadData('Module:Portal/images/aliases') for portal, aliases in pairs(aliasData) do for _, alias in ipairs(aliases) do if alias == s then return portal end end end end local function getImageName1(s) -- Gets the image name for a given string. local default = {} default['imagem'] = 'Portal-puzzle.svg|link=|alt=' default['link'] = 'Wikipédia' default['nome'] = 'Portal da Wikipédia' if type(s) ~= 'string' or #s < 1 then return default end s = mw.ustring.lower(s) return matchImagePage(s) or matchImagePage(getAlias(s)) or default end -- Function to format error message and tracking category -- Arguments: -- errMsg: string, or nil/false if no error -- trackingCat: string for tracking category (or empty string) local function formatError(errMsg, trackingCat) local result = trackingCat or '' if errMsg then local errTag = mw.html.create('span') errTag:addClass("error") errTag:css("font-size",'100%') errTag:wikitext("Error: "..errMsg) result = tostring(errTag)..result end return result end local function image(portal, args) local tamanho = args.size or args.tamanho local size = tamanho == "tiny" and "16x16px" or "32x28px" return string.format('[[File:%s|class=noviewer|%s]]',getImageName{portal}, size) end local function link(portal, args) local displayName = "" local banners = getImageName1(portal) --local image = banners['imagem'] local link = banners['link'] local name = banners['nome'] local text = args.text or args.texto if not (text == "" or text == nil) then displayName = text elseif args.short or args.curto then displayName = link else displayName = name end return string.format('[[Portal:%s|%s]]',link,displayName) end function p._main(portals, args) mw.logObject(args) -- Normalize all arguments if args.redlinks == 'include' then args.redlinks = true end for key, default in pairs({tracking=true,redlinks=false,short=false}) do if args[key] == nil then args[key] = default end args[key] = yesno(args[key], default) end local trackingCat = '' local errMsg = nil -- Check for existing categories, drop if not. -- Possible generate tracking category & error message if needed args.minPortals = args.minPortals or 1 args.maxPortals = args.maxPortals or 1 portals, trackingCat, errMsg = checkPortals(portals,args) -- use more specific tracking cat for inline portal --trackingCat = mw.ustring.gsub(trackingCat,"Portal templates","Portal-inline template") -- either too many/few portals, or no portals left after filtering, then return if errMsg or #portals == 0 then return formatError(errMsg, trackingCat) end return image(portals[1],args)..' '..link(portals[1],args)..(trackingCat or '') end function p.main(frame) local origArgs = getArgs(frame) local portals, args = processPortalArgs(origArgs) return p._main(portals, args) end return p