summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua')
-rw-r--r--www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua86
1 files changed, 86 insertions, 0 deletions
diff --git a/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua b/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua
new file mode 100644
index 00000000..09943a83
--- /dev/null
+++ b/www/wiki/extensions/Scribunto/includes/engines/LuaCommon/lualib/mw.site.lua
@@ -0,0 +1,86 @@
+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 = info.stats
+ site.stats.pagesInCategory = php.pagesInCategory
+ site.stats.pagesInNamespace = php.pagesInNamespace
+ site.stats.usersInGroup = php.usersInGroup
+ site.interwikiMap = php.interwikiMap
+
+ -- 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 } )
+
+ -- Register this library in the "mw" global
+ mw = mw or {}
+ mw.site = site
+
+ package.loaded['mw.site'] = site
+end
+
+return site