mirror of
https://gerrit.wikimedia.org/r/mediawiki/extensions/Scribunto
synced 2024-11-27 01:30:00 +00:00
ce062407ab
Fixed several accidental leaks to the global namespace due to missing "local" declaration. Removed extension of the string table by mw.uri, same justification as I5d0ddb70. Change-Id: Iba1bf8e651d4ce05812e4a9a7a074cb6679297a0
115 lines
2.7 KiB
Lua
115 lines
2.7 KiB
Lua
local site = {}
|
|
|
|
function site.setupInterface( info )
|
|
-- Boilerplate
|
|
site.setupInterface = nil
|
|
local php = mw_interface
|
|
mw_interface = nil
|
|
|
|
site.siteName = info.siteName
|
|
site.server = info.server
|
|
site.scriptPath = info.scriptPath
|
|
site.stylePath = info.stylePath
|
|
site.currentVersion = info.currentVersion
|
|
site.stats = {
|
|
pagesInCategory = php.pagesInCategory,
|
|
pagesInNamespace = php.pagesInNamespace,
|
|
usersInGroup = php.usersInGroup,
|
|
}
|
|
|
|
-- Process namespace list into more useful tables
|
|
site.namespaces = {}
|
|
local namespacesByName = {}
|
|
site.subjectNamespaces = {}
|
|
site.talkNamespaces = {}
|
|
site.contentNamespaces = {}
|
|
for ns, data in pairs( info.namespaces ) do
|
|
data.subject = info.namespaces[data.subject]
|
|
data.talk = info.namespaces[data.talk]
|
|
data.associated = info.namespaces[data.associated]
|
|
|
|
site.namespaces[ns] = data
|
|
|
|
namespacesByName[data.name] = data
|
|
if data.canonicalName then
|
|
namespacesByName[data.canonicalName] = data
|
|
end
|
|
for i = 1, #data.aliases do
|
|
namespacesByName[data.aliases[i]] = data
|
|
end
|
|
|
|
if data.isSubject then
|
|
site.subjectNamespaces[ns] = data
|
|
end
|
|
if data.isTalk then
|
|
site.talkNamespaces[ns] = data
|
|
end
|
|
if data.isContent then
|
|
site.contentNamespaces[ns] = data
|
|
end
|
|
end
|
|
|
|
-- Set __index for namespacesByName to handle names-with-underscores
|
|
-- and non-standard case
|
|
local getNsIndex = php.getNsIndex
|
|
setmetatable( namespacesByName, {
|
|
__index = function ( t, k )
|
|
if type( k ) == 'string' then
|
|
-- Try with fixed underscores
|
|
k = string.gsub( k, '_', ' ' )
|
|
if rawget( t, k ) then
|
|
return rawget( t, k )
|
|
end
|
|
|
|
-- Ask PHP, because names are case-insensitive
|
|
local ns = getNsIndex( k )
|
|
if ns then
|
|
rawset( t, k, site.namespaces[ns] )
|
|
end
|
|
end
|
|
return rawget( t, k )
|
|
end
|
|
} )
|
|
|
|
-- Set namespacesByName as the lookup table for site.namespaces, so
|
|
-- something like site.namespaces.Wikipedia works without having
|
|
-- pairs( site.namespaces ) iterate all those names.
|
|
setmetatable( site.namespaces, { __index = namespacesByName } )
|
|
|
|
-- Copy the site stats, and set up the metatable to load them if necessary.
|
|
local loadSiteStats = php.loadSiteStats
|
|
site.stats.x = php.loadSiteStats
|
|
if info.stats then
|
|
loadSiteStats = nil
|
|
for k, v in pairs( info.stats ) do
|
|
site.stats[k] = v
|
|
end
|
|
end
|
|
setmetatable( site.stats, {
|
|
__index = function ( t, k )
|
|
if t ~= site.stats then -- cloned
|
|
return site.stats[k]
|
|
end
|
|
|
|
if k == 'admins' then
|
|
t.admins = t.usersInGroup( 'sysop' )
|
|
elseif loadSiteStats then
|
|
for k, v in pairs( loadSiteStats() ) do
|
|
t[k] = v
|
|
end
|
|
loadSiteStats = nil
|
|
end
|
|
|
|
return rawget( t, k )
|
|
end
|
|
} )
|
|
|
|
-- Register this library in the "mw" global
|
|
mw = mw or {}
|
|
mw.site = site
|
|
|
|
package.loaded['mw.site'] = site
|
|
end
|
|
|
|
return site
|