Eine freie Initiative von Menschen bei ![]() ![]() ![]() ![]() mit online Lesekreisen, Übungsgruppen, Vorträgen ... |
![]() |
Use Google Translate for a raw translation of our pages into more than 100 languages. Please note that some mistranslations can occur due to machine translation. |
Modul:Vorlage:LuaModuleDoc
Aus AnthroWiki
Modul:LuaWiki:168: No transclude page 'Wikipedia:Lua/Modul-Navigationsfehler'
--[=[ 2013-10-25 Support {{LuaModuleDoc}} * nav() require: LuaWiki ]=] -- Module globals local lucky, LuaWiki = pcall( require, "Module:LuaWiki" ) local currentTitle local function navDevelop( nsDocs, start, script ) -- Most interesting test and development page -- Precondition: -- nsDocs -- number; central documentation namespace number -- start -- string; central documentation root -- script -- string; basic module name -- Return: -- string or false: full page name, if any -- Uses: -- mw.title.makeTitle() local n = nsDocs local r = false local sub = "/" .. LuaWiki.getArg( "subTest", "Test" ) local s = string.format( "%s/%s%s", start, script, sub ) local t = mw.title.makeTitle( n, s ) if not t.exists then local low = false local subLow = mw.ustring.lower( sub ) if subLow ~= sub then s = string.format( "%s/%s%s", start, script, subLow ) t = mw.title.makeTitle( n, s ) low = t.exists end if not low then n = mw.site.namespaces.Module.id s = string.format( "%s/%s", script, sub ) t = mw.title.makeTitle( n, s ) if not t.exists and subLow ~= sub then s = script .. subLow t = mw.title.makeTitle( n, s ) t = t.exists end end end if t then r = mw.site.namespaces[ n ].name .. ":" .. s end return r end -- navDevelop() 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() -- LuaWiki.error() 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 = LuaWiki.error( "arg 'pageErr' missing" ) end return r end -- navError() 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( nsDocs, start, script ) -- Analyze languages -- Precondition: -- current page is supposed to transclude LuaModuleDoc -- nsDocs -- number; central documentation namespace number -- start -- string; central documentation root -- script -- string; basic module name -- 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() -- mw.title.makeTitle() local e, i, s, t local r = { } local specified = LuaWiki.getArg( "langsRequest", false ) local super = start .. "/" .. script .. "/" if type( specified ) == "string" then if specified:match( "^%s*$" ) then specified = false end end navLang( LuaWiki.getArg( "langsDefault" ), r, specified ) navLang( LuaWiki.getArg( "langsMore" ), r, true ) 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 t = mw.title.makeTitle( nsDocs, super .. s ) if not t.exists 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 navMerge( start, swift, ns, nsDocs, script, sub, lead ) -- Include various external content into page -- Precondition: -- start -- string; defined pageDocRoot argument -- swift -- string; defined pageNav argument -- ns -- number; current namespace number -- nsDocs -- number; central documentation namespace number -- script -- string; module name (main) -- sub -- string or false; possible sub-module name -- lead -- true: Module: namespace; false: text namespace -- Uses: -- >< currentTitle -- navLangs() -- LuaWiki.transclude() -- navError() -- mw.title.makeTitle() -- LuaWiki.getArg() -- LuaWiki.isExisting() local r local s local super = false local collect = navLangs( nsDocs, start, script ) local t = navDevelop( nsDocs, start, script ) if t then collect.Test = t end if ns == nsDocs then s = string.format( "%s/%s", start, script ) if currentTitle.text == s then super = currentTitle.text .. "/" elseif sub then collect.subDoc = sub collect.subModule = sub s = string.format( "%s/%s/%s", start, script, sub ) if currentTitle.text == s then s = string.format( "%s/%s", s, collect[ 3 ] ) t = mw.title.makeTitle( nsDocs, s ) if t.exists then super = currentTitle.text .. "/" end end end elseif lead and sub then s = string.format( "%s/%s/%s", start, script, sub ) t = mw.title.makeTitle( nsDocs, s ) if t.exists then collect.subDoc = sub end end r = LuaWiki.transclude( swift, collect ) t = currentTitle.talkPageTitle if t then s = t.exists else s = false 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 local d = "{{%s*[lL]uaModuleDoc[^}]*}}%s*" local p1 = "^%s*" .. d .. "<onlyinclude>" local p2 = "%s*<noinclude>" .. d .. "</noinclude>" for i = 3, #collect do t = mw.title.makeTitle( nsDocs, super .. collect[ i ] ) s = t:getContent() if s then s = s:gsub( p1, "" ):gsub( p2, "" ) if s:match( d ) then r = r .. "<br />" .. navError( "BadInclude", t.prefixedText ) .. "<br />" else r = r .. LuaWiki.transclude( t.prefixedText ) break -- for i end end end -- for i s = LuaWiki.getArg( "pageTemplateInsert", "" ) if LuaWiki.isExisting( s ) then local suppress = LuaWiki.getArg( "noHint", "" ) if #suppress == 0 then local swift = collect[ 1 ] if sub then swift = string.format( "%s/%s", swift, sub ) end r = r .. LuaWiki.transclude( s, { swift } ) end end s = LuaWiki.getArg( "categoryDocs", "" ) if #s > 0 then i = mw.title.makeTitle( "Category", s ) if i.exists then r = r .. "[[" .. i.prefixedText .. "|" .. collect[ 1 ] .. "]]" end end r = r .. "__NOEDITSECTION__" end return r end -- navMerge() 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: -- >< currentTitle -- LuaWiki.getArg() -- navError() -- navMerge() local r local start = LuaWiki.getArg( "pageDocRoot" ) if type( start ) == "string" then local s = "^" local script if not lead then s = "^" .. start .. "/" end s = s .. "([^/]+)/(.*/?)$" script, s = mw.ustring.match( currentTitle.text .. "/", s ) if type( script ) == "string" then local sub = false local swift = LuaWiki.getArg( "pageNav" ) if type( s ) == "string" then if #s > 1 then local q s = s:match( "^([^/]+)/.*/?$" ) q = mw.title.makeTitle( "Module", script .. "/" .. s ) if q.exists and q.contentModel == "Scribunto" then sub = s end end end if type( swift ) == "string" then r = navMerge( start, swift, ns, nsDocs, script, sub, lead ) else r = navError( "configMissing", "pageNav" ) end else r = navError( "BadPage" ) .. currentTitle.text 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 local lucky lucky, r = pcall( navigation ) r = r or "" else r = string.format( "<span class=\"error\">%s</span>", LuaWiki ) end return r end return p