User:MEMlae/Module:StoreRedirects

local util_args = require('Module:ArgsUtil') local util_cargo = require("Module:CargoUtil") local util_esports = require("Module:EsportsUtil") local util_map = require("Module:MapUtil") local util_page = require("Module:PageUtil") local util_vars = require("Module:VarsUtil")

local LCS = require('Module:LuaClassSystem')

-- there's some annoying issues responsible for this code (if it weren't for this then just use _pageData gg & this table doesn't exist period) -- cargo ignores special characters unless you use BINARY so when i deleted the BINARY conditions, the special characters became a liability -- lua can't check special-character-agnostic string equality natively -- so i'll rely on cargo's storing bug where it only stores an equivalent-up-to-case-and-special-character-substitution set of rows one time -- so here we re-store so it's unable to tell the difference between actually-different rows -- this code needs to be invoked as the VERY FIRST THING on any page that has it, so it's available immediately to the rest of the page.

-- this code used to be part of Module:InfoboxUtil until Nov 2019

local h = {} local p = {} local Redirects = LCS.class local PlayerRedirects = Redirects:extends

function p.main(frame) local args = util_args.merge if args.type == 'Player' then return PlayerRedirects:init(args) end return Redirects:init(args) end

function Redirects:init(args) local allRedirects = util_page.whatRedirectsHere util_cargo.setStoreNamespace('') util_vars.setVar('whatredirectshere', table.concat(allRedirects,';')) table.insert(allRedirects, 1, mw.title.getCurrentTitle.text) local redirects = self:getUniqueCaseRedirects(allRedirects) for _, redirect in ipairs(redirects) do		self:storeOneRedirect(redirect, args.type) end end

function Redirects:getUniqueCaseRedirects(redirects) local hash = {} local ret = {} for _, v in ipairs(redirects) do		local lc = mw.ustring.lower(v) if not hash[lc] then ret[#ret+1] = v		end hash[lc] = true end return ret end

function Redirects:storeOneRedirect(name, tableType) local toStore = self:getStoreCargo(name, tableType) util_cargo.store(toStore) end

function Redirects:getStoreCargo(name, tableType) return { _table = ('%sRedirects'):format(tableType), AllName = name } end

function PlayerRedirects:getStoreCargo(name, tableType) local toStore = self:super('getStoreCargo', name, 'Player') toStore.OverviewPage = mw.title.getCurrentTitle.text toStore.ID = util_esports.playerDisplay(name) return toStore end

return p