Module:debug/track
Jump to navigation
Jump to search
- The following documentation is located at Module:debug/track/documentation. [edit]
- Useful links: root page • root page’s subpages • links • transclusions • testcases • sandbox (diff)
-- Transclusion-based tracking as subpages of [[Wiktionary:Tracking]].
-- Tracked pages can be found at [[Special:WhatLinksHere/Wiktionary:Tracking/KEY]].
local error = error
local find = string.find
local makeTitle = mw.title.makeTitle
local type = type
local memo = {}
local function track(key)
if memo[key] then
return
end
local key_type = type(key)
if key_type ~= "string" then
error("Tracking keys supplied to [[Module:debug/track]] must be strings; received " .. key_type .. ".", 3)
end
-- makeTitle returns nil for invalid titles, but "#" is treated as a
-- fragment separator (e.g. "foo#bar" generates the title "foo"), so we
-- need to manually exclude it.
local title = not find(key, "#", 1, true) and makeTitle(4, "Tracking/" .. key)
-- Getting the raw page content is the fastest way to trigger transclusion,
-- as it avoids any parser expansion of the target page.
if title then
title:getContent()
else
-- Track uses of invalid keys. Replace with error message once all have been eliminated.
-- [[Special:WhatLinksHere/Wiktionary:Tracking/debug/track/invalid key]]
track("debug/track/invalid key")
-- error("Tracking key \"" .. key .. "\" supplied to [[Module:debug/track]] is invalid: key must be a [[mw:Help:Bad title|valid page name]].", 3)
end
memo[key] = true
end
return function(input)
if input == nil then
error("No tracking key supplied to [[Module:debug/track]].", 2)
elseif type(input) ~= "table" then
track(input)
return true
end
local key = input[1]
if key == nil then
error("No tracking keys in table supplied to [[Module:debug/track]].", 2)
end
local i = 1
repeat
track(key)
i = i + 1
key = input[i]
until key == nil
return true
end