Modul:Vorlage:LuaModuleDoc: Unterschied zwischen den Versionen
(update) |
(update) |
||
Zeile 1: | Zeile 1: | ||
--[=[ 2013-05- | --[=[ 2013-05-10 | ||
Support {{LuaModuleDoc}} | Support {{LuaModuleDoc}} | ||
* nav() | * nav() | ||
Zeile 7: | Zeile 7: | ||
local import, LuaWiki = pcall( require, " | -- Module globals | ||
local import, LuaWiki = pcall( require, "Module:LuaWiki" ) | |||
local currentTitle | |||
Zeile 52: | Zeile 54: | ||
-- args.pageNav defined | -- args.pageNav defined | ||
-- Uses: | -- Uses: | ||
-- >< currentTitle | |||
-- LuaWiki.getArg() | -- LuaWiki.getArg() | ||
-- LuaWiki.transclude() | -- LuaWiki.transclude() | ||
Zeile 58: | Zeile 61: | ||
-- navError() | -- navError() | ||
local r = LuaWiki.transclude( swift, collect ) | local r = LuaWiki.transclude( swift, collect ) | ||
local s = | local s = false | ||
if not | local t = currentTitle.talkPageTitle | ||
if t then | |||
s = t.exists | |||
end | |||
if not s then | |||
if super then | if super then | ||
s = "NoTalkCentral" | s = "NoTalkCentral" | ||
Zeile 142: | Zeile 149: | ||
-- super -- string; central documentation root | -- super -- string; central documentation root | ||
-- Return: | -- Return: | ||
-- table: args for navigation | -- table: args for navigation template | ||
-- [1] basic module name | -- [1] basic module name | ||
-- [2] number of language codes + 1 | -- [2] number of language codes + 1 | ||
Zeile 156: | Zeile 163: | ||
local r = { } | local r = { } | ||
local specified = LuaWiki.getArg( "langsRequest", false ) | local specified = LuaWiki.getArg( "langsRequest", false ) | ||
if type( specified ) == "string" then | |||
if specified:match( "^%s*$" ) then | |||
specified = false | |||
end | |||
end | |||
navLang( LuaWiki.getArg( "langsDefault" ), | navLang( LuaWiki.getArg( "langsDefault" ), | ||
r, | r, | ||
specified ) | |||
navLang( specified, r, false ) | navLang( specified, r, false ) | ||
if #r < 1 then | if #r < 1 then | ||
Zeile 193: | Zeile 205: | ||
-- Uses: | -- Uses: | ||
-- LuaWiki.getArg() | -- LuaWiki.getArg() | ||
-- navError() | -- navError() | ||
-- navLangs() | -- navLangs() | ||
Zeile 202: | Zeile 213: | ||
local light = false | local light = false | ||
local script | local script | ||
local story = | local story = currentTitle.text .. "/" | ||
if lead then | if lead then | ||
-- any template transclusion happens on a doc page | -- any template transclusion happens on a doc page | ||
Zeile 245: | Zeile 256: | ||
-- Start execution; return navigation text; analyze namespace | -- Start execution; return navigation text; analyze namespace | ||
-- Uses: | -- Uses: | ||
-- | -- >< currentTitle | ||
-- LuaWiki.getArg() | -- LuaWiki.getArg() | ||
-- | -- mw.title.getCurrentTitle() | ||
-- navPage() | -- navPage() | ||
-- navError() | -- navError() | ||
local r | local r | ||
local nsDocs = LuaWiki.getArg( "nsDocs" ) | |||
local nsDocs = | |||
if nsDocs then | if nsDocs then | ||
local ns = | currentTitle = mw.title.getCurrentTitle() | ||
local ns = currentTitle.namespace | |||
local lead = ( ns == mw.site.namespaces.Module.id ) | local lead = ( ns == mw.site.namespaces.Module.id ) | ||
nsDocs = tonumber( nsDocs ) | nsDocs = tonumber( nsDocs ) |
Version vom 11. Mai 2013, 22:48 Uhr
Die Dokumentation für dieses Modul kann unter Modul:Vorlage:LuaModuleDoc/doc erstellt werden
--[=[ 2013-05-10 Support {{LuaModuleDoc}} * nav() require: LuaWiki ]=] -- Module globals local import, LuaWiki = pcall( require, "Module:LuaWiki" ) local currentTitle local function navError( say, specific ) -- Return error message, evaluate page .pageErr -- Precondition: -- say -- string; message key -- specific -- string, optional; additional information -- Uses: -- LuaWiki.getArg() -- LuaWiki.transclude() local show = LuaWiki.getArg( "pageErr" ) local r if type( show ) == "string" then local pars = { say } if type( specific ) == "string" then table.insert( pars, specific ) end r = LuaWiki.transclude( show, pars ) else r = "<span class='error'>arg 'pageErr' missing</span>" end return r end -- navError() local function navInclude( collect, swift, super, ns, nsDocs ) -- Include external content into page -- Precondition: -- collect -- table; with arguments for pageNav transclusion -- 1: basic module name -- 2: number of language links + 1 -- 3...: language link codes -- swift -- string; pageNav argument -- super -- string or false -- string: full page name of basic documentation -- terminated by slash; then -- include first existing language version -- and brief template documentation -- ns -- number; current namespace -- nsDocs -- number; namespace for doc -- args.pageNav defined -- Uses: -- >< currentTitle -- LuaWiki.getArg() -- LuaWiki.transclude() -- LuaWiki.getVariable() -- LuaWiki.isExisting() -- navError() local r = LuaWiki.transclude( swift, collect ) local s = false local t = currentTitle.talkPageTitle if t then s = t.exists end if not s then if super then s = "NoTalkCentral" elseif ns == nsDocs + 1 then s = false else s = "NoTalkRedir" end if s then r = r .. navError( s ) end end if super then local i for i = 3, #collect do s = super .. collect[ i ] if LuaWiki.isExisting( s ) then r = r .. LuaWiki.transclude( s ) break end end -- for i s = LuaWiki.getArg( "pageTemplateInsert", "" ) if LuaWiki.isExisting( s ) then local suppress = LuaWiki.getArg( "noHint", "" ) if #suppress == 0 then r = r .. LuaWiki.transclude( s, { collect[ 1 ] } ) end end s = LuaWiki.getArg( "categoryDocs", "" ) if #s > 0 then s = "Category:" .. s if LuaWiki.isExisting( s ) then r = r .. "[[" .. s .. "|" .. collect[ 1 ] .. "]]" end end r = r .. "__NOEDITSECTION__" end return r end -- navInclude() local function navLang( suite, collect, lazy ) -- Append languages from string to collection -- Precondition: -- suite -- string; space separated source -- collect -- table; to be extended -- every element: { langCode, lazy } -- lazy -- true if only existing page is to be linked if type( suite ) == "string" then local raw = mw.text.split( suite, "%s+" ) local e, i, j, s for i = 1, #raw do s = raw[ i ] if #s > 1 then for j = 1, #collect do if s then e = collect[ j ] if e[ 1 ] == s then s = false if not lazy then e[ 2 ] = false end end end end -- for j if s then table.insert( collect, { s, lazy } ) end end end -- for i end end -- navLang() local function navLangs( script, super ) -- Analyze languages -- Precondition: -- current page is supposed to transclude LuaModuleDoc -- script -- string; basic module name -- super -- string; central documentation root -- Return: -- table: args for navigation template -- [1] basic module name -- [2] number of language codes + 1 -- [3] first language code -- [4] second language code -- ... list of further language codes -- Uses: -- LuaWiki.getArg() -- navLang() -- LuaWiki.isExisting() -- navError() local e, i, s local r = { } local specified = LuaWiki.getArg( "langsRequest", false ) if type( specified ) == "string" then if specified:match( "^%s*$" ) then specified = false end end navLang( LuaWiki.getArg( "langsDefault" ), r, specified ) navLang( specified, r, false ) if #r < 1 then r = { { "en", false } } end for i = #r, 1, -1 do e = r[ i ] s = e[ 1 ] if e[ 2 ] then if not LuaWiki.isExisting( super .. "/" .. s ) then s = false end end if s then r[ i ] = s else table.remove( r, i ) end end -- for i -1 table.insert( r, 1, script ) table.insert( r, 2, tostring( #r ) ) return r end -- navLangs() local function navPage( lead, ns, nsDocs ) -- Return navigation text; analyze page location -- Precondition: -- current namespace will support LuaModuleDoc -- lead -- true: Module: namespace; false: text namespace -- ns -- number; current namespace -- nsDocs -- number; namespace for doc -- Uses: -- LuaWiki.getArg() -- navError() -- navLangs() -- navInclude() local r local start = LuaWiki.getArg( "pageDocRoot" ) if type( start ) == "string" then local light = false local script local story = currentTitle.text .. "/" if lead then -- any template transclusion happens on a doc page script = mw.ustring.match( story, "^([^/]+)/" ) else local sub = "/([^/]+)/(.*)$" script, sub = mw.ustring.match( story, "^" .. start .. sub ) if type( script ) == "string" then light = ( #sub > 0 ) else r = navError( "BadPage" ) .. story script = false end end if script then local swift = LuaWiki.getArg( "pageNav" ) if type( swift ) == "string" then -- nsDocs is valid, since it equals ns local super = mw.site.namespaces[ nsDocs ].name super = super .. ":" .. start local collect = navLangs( script, super ) if ns == nsDocs and story == start .. "/" .. script .. "/" then super = super .. "/" .. script .. "/" else super = false end r = navInclude( collect, swift, super, ns, nsDocs ) else r = navError( "configMissing", "pageNav" ) end end else r = navError( "configMissing", "pageDocRoot" ) end return r end -- navPage() local function navigation() -- Start execution; return navigation text; analyze namespace -- Uses: -- >< currentTitle -- LuaWiki.getArg() -- mw.title.getCurrentTitle() -- navPage() -- navError() local r local nsDocs = LuaWiki.getArg( "nsDocs" ) if nsDocs then currentTitle = mw.title.getCurrentTitle() local ns = currentTitle.namespace local lead = ( ns == mw.site.namespaces.Module.id ) nsDocs = tonumber( nsDocs ) if lead or ns == nsDocs or ns == nsDocs + 1 then r = navPage( lead, ns, nsDocs ) else r = navError( "BadNamespace" ) end else r = navError( "configMissing", "nsDocs" ) end return r end -- navigation() -- Provide template access local p = {} function p.nav( frame ) -- Uses: -- > LuaWiki -- navigation() local r if type( LuaWiki ) == "table" then r = navigation() or "" else r = "<span class='error'>" .. LuaWiki .. "</span>" end return r end return p