User:MEMlae/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