Module:Template link with magic
local export = {}
local variables_nullary = {
["CURRENTYEAR"] = "mw:Help:Magic words#Date and time";
["CURRENTMONTH"] = "mw:Help:Magic words#Date and time";
["CURRENTMONTH1"] = "mw:Help:Magic words#Date and time"; -- undocumented
["CURRENTMONTH2"] = "mw:Help:Magic words#Date and time"; -- undocumented
["CURRENTMONTHNAME"] = "mw:Help:Magic words#Date and time";
["CURRENTMONTHNAMEGEN"] = "mw:Help:Magic words#Date and time";
["CURRENTMONTHABBREV"] = "mw:Help:Magic words#Date and time";
["CURRENTDAY"] = "mw:Help:Magic words#Date and time";
["CURRENTDAY2"] = "mw:Help:Magic words#Date and time";
["CURRENTDOW"] = "mw:Help:Magic words#Date and time";
["CURRENTDAYNAME"] = "mw:Help:Magic words#Date and time";
["CURRENTTIME"] = "mw:Help:Magic words#Date and time";
["CURRENTHOUR"] = "mw:Help:Magic words#Date and time";
["CURRENTWEEK"] = "mw:Help:Magic words#Date and time";
["CURRENTTIMESTAMP"] = "mw:Help:Magic words#Date and time";
["LOCALYEAR"] = "mw:Help:Magic words#Date and time";
["LOCALMONTH"] = "mw:Help:Magic words#Date and time";
["LOCALMONTH1"] = "mw:Help:Magic words#Date and time"; -- undocumented
["LOCALMONTH2"] = "mw:Help:Magic words#Date and time"; -- undocumented
["LOCALMONTHNAME"] = "mw:Help:Magic words#Date and time";
["LOCALMONTHNAMEGEN"] = "mw:Help:Magic words#Date and time";
["LOCALMONTHABBREV"] = "mw:Help:Magic words#Date and time";
["LOCALDAY"] = "mw:Help:Magic words#Date and time";
["LOCALDAY2"] = "mw:Help:Magic words#Date and time";
["LOCALDOW"] = "mw:Help:Magic words#Date and time";
["LOCALDAYNAME"] = "mw:Help:Magic words#Date and time";
["LOCALTIME"] = "mw:Help:Magic words#Date and time";
["LOCALHOUR"] = "mw:Help:Magic words#Date and time";
["LOCALWEEK"] = "mw:Help:Magic words#Date and time";
["LOCALTIMESTAMP"] = "mw:Help:Magic words#Date and time";
["SITENAME"] = "mw:Help:Magic words#Technical metadata";
["SERVER"] = "mw:Help:Magic words#Technical metadata";
["SERVERNAME"] = "mw:Help:Magic words#Technical metadata";
["DIRMARK"] = "mw:Help:Magic words#Technical metadata";
["DIRECTIONMARK"] = "mw:Help:Magic words#Technical metadata";
["ARTICLEPATH"] = "mw:Help:Magic words#Technical metadata"; -- undocumented
["SCRIPTPATH"] = "mw:Help:Magic words#Technical metadata";
["STYLEPATH"] = "mw:Help:Magic words#Technical metadata";
["CURRENTVERSION"] = "mw:Help:Magic words#Technical metadata";
["CONTENTLANGUAGE"] = "mw:Help:Magic words#Technical metadata";
["CONTENTLANG"] = "mw:Help:Magic words#Technical metadata";
["PAGEID"] = "mw:Help:Magic words#Technical metadata";
["CASCADINGSOURCES"] = "mw:Help:Magic words#Technical metadata";
["REVISIONID"] = "mw:Help:Magic words#Technical metadata";
["REVISIONDAY"] = "mw:Help:Magic words#Technical metadata";
["REVISIONDAY2"] = "mw:Help:Magic words#Technical metadata";
["REVISIONMONTH"] = "mw:Help:Magic words#Technical metadata";
["REVISIONMONTH1"] = "mw:Help:Magic words#Technical metadata";
["REVISIONYEAR"] = "mw:Help:Magic words#Technical metadata";
["REVISIONTIMESTAMP"] = "mw:Help:Magic words#Technical metadata";
["REVISIONUSER"] = "mw:Help:Magic words#Technical metadata";
["REVISIONSIZE"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFPAGES"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFARTICLES"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFFILES"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFEDITS"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFVIEWS"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFUSERS"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFADMINS"] = "mw:Help:Magic words#Technical metadata";
["NUMBEROFACTIVEUSERS"] = "mw:Help:Magic words#Technical metadata";
["FULLPAGENAME"] = "mw:Help:Magic words#Page names";
["PAGENAME"] = "mw:Help:Magic words#Page names";
["BASEPAGENAME"] = "mw:Help:Magic words#Page names";
["SUBPAGENAME"] = "mw:Help:Magic words#Page names";
["SUBJECTPAGENAME"] = "mw:Help:Magic words#Page names";
["ARTICLEPAGENAME"] = "mw:Help:Magic words#Page names";
["TALKPAGENAME"] = "mw:Help:Magic words#Page names";
["ROOTPAGENAME"] = "mw:Help:Magic words#Page names"; -- undocumented
["FULLPAGENAMEE"] = "mw:Help:Magic words#Page names";
["PAGENAMEE"] = "mw:Help:Magic words#Page names";
["BASEPAGENAMEE"] = "mw:Help:Magic words#Page names";
["SUBPAGENAMEE"] = "mw:Help:Magic words#Page names";
["SUBJECTPAGENAMEE"] = "mw:Help:Magic words#Page names";
["ARTICLEPAGENAMEE"] = "mw:Help:Magic words#Page names";
["TALKPAGENAMEE"] = "mw:Help:Magic words#Page names";
["ROOTPAGENAMEE"] = "mw:Help:Magic words#Page names"; -- undocumented
["NAMESPACE"] = "mw:Help:Magic words#Namespaces";
["NAMESPACENUMBER"] = "mw:Help:Magic words#Namespaces";
["SUBJECTSPACE"] = "mw:Help:Magic words#Namespaces";
["ARTICLESPACE"] = "mw:Help:Magic words#Namespaces";
["TALKSPACE"] = "mw:Help:Magic words#Namespaces";
["NAMESPACEE"] = "mw:Help:Magic words#Namespaces";
["SUBJECTSPACEE"] = "mw:Help:Magic words#Namespaces";
["TALKSPACEE"] = "mw:Help:Magic words#Namespaces";
["!"] = "mw:Help:Magic words#Other";
["="] = "mw:Help:Magic words#Other";
-- case-insensitive!
["noexternallanglinks"] = "mw:Extension:Wikibase Client";
["wbreponame"] = "mw:Extension:Wikibase Client";
["pendingchangelevel"] = "mw:Extension:FlaggedRevs"; -- not documented yet
["numberofwikis"] = "mw:Extension:SiteMatrix";
}
local variables_nonnullary = {
["PROTECTIONLEVEL"] = "mw:Help:Magic words#Technical metadata";
["DISPLAYTITLE"] = "mw:Help:Magic words#Technical metadata";
["DEFAULTSORT"] = "mw:Help:Magic words#Technical metadata";
["PAGESINCATEGORY"] = "mw:Help:Magic words#Technical metadata";
["PAGESINCAT"] = "mw:Help:Magic words#Technical metadata";
["NUMBERINGROUP"] = "mw:Help:Magic words#Technical metadata";
["PAGESINNS"] = "mw:Help:Magic words#Technical metadata";
["PAGESINNAMESPACE"] = "mw:Help:Magic words#Technical metadata";
["FULLPAGENAME"] = "mw:Help:Magic words#Page names";
["PAGENAME"] = "mw:Help:Magic words#Page names";
["BASEPAGENAME"] = "mw:Help:Magic words#Page names";
["SUBPAGENAME"] = "mw:Help:Magic words#Page names";
["SUBJECTPAGENAME"] = "mw:Help:Magic words#Page names";
["ARTICLEPAGENAME"] = "mw:Help:Magic words#Page names";
["TALKPAGENAME"] = "mw:Help:Magic words#Page names";
["ROOTPAGENAME"] = "mw:Help:Magic words#Page names"; -- undocumented
["FULLPAGENAMEE"] = "mw:Help:Magic words#Page names";
["PAGENAMEE"] = "mw:Help:Magic words#Page names";
["BASEPAGENAMEE"] = "mw:Help:Magic words#Page names";
["SUBPAGENAMEE"] = "mw:Help:Magic words#Page names";
["SUBJECTPAGENAMEE"] = "mw:Help:Magic words#Page names";
["ARTICLEPAGENAMEE"] = "mw:Help:Magic words#Page names";
["TALKPAGENAMEE"] = "mw:Help:Magic words#Page names";
["ROOTPAGENAMEE"] = "mw:Help:Magic words#Page names"; -- undocumented
["NAMESPACE"] = "mw:Help:Magic words#Namespaces";
["NAMESPACENUMBER"] = "mw:Help:Magic words#Namespaces";
["SUBJECTSPACE"] = "mw:Help:Magic words#Namespaces";
["ARTICLESPACE"] = "mw:Help:Magic words#Namespaces";
["TALKSPACE"] = "mw:Help:Magic words#Namespaces";
["NAMESPACEE"] = "mw:Help:Magic words#Namespaces";
["SUBJECTSPACEE"] = "mw:Help:Magic words#Namespaces";
["TALKSPACEE"] = "mw:Help:Magic words#Namespaces";
["PAGEID"] = "mw:Help:Magic words#Technical metadata of another page";
["PAGESIZE"] = "mw:Help:Magic words#Technical metadata of another page";
["PROTECTIONLEVEL"] = "mw:Help:Magic words#Technical metadata of another page";
["CASCADINGSOURCES"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONID"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONDAY"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONDAY2"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONMONTH"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONMONTH1"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONYEAR"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONTIMESTAMP"] = "mw:Help:Magic words#Technical metadata of another page";
["REVISIONUSER"] = "mw:Help:Magic words#Technical metadata of another page";
["SHORTDESC"] = "mw:Extension:Wikibase Client";
}
local parser_functions = {
-- built-ins
["localurl"] = "mw:Help:Magic words#URL data";
["localurle"] = "mw:Help:Magic words#URL data";
["fullurl"] = "mw:Help:Magic words#URL data";
["fullurle"] = "mw:Help:Magic words#URL data";
["canonicalurl"] = "mw:Help:Magic words#URL data";
["canonicalurle"] = "mw:Help:Magic words#URL data";
["filepath"] = "mw:Help:Magic words#URL data";
["urlencode"] = "mw:Help:Magic words#URL data";
["urldecode"] = "mw:Help:Magic words#URL data";
["anchorencode"] = "mw:Help:Magic words#URL data";
["ns"] = "mw:Help:Magic words#Namespaces";
["nse"] = "mw:Help:Magic words#Namespaces";
["formatnum"] = "mw:Help:Magic words#Formatting";
["#dateformat"] = "mw:Help:Magic words#Formatting";
["#formatdate"] = "mw:Help:Magic words#Formatting";
["lc"] = "mw:Help:Magic words#Formatting";
["lcfirst"] = "mw:Help:Magic words#Formatting";
["uc"] = "mw:Help:Magic words#Formatting";
["ucfirst"] = "mw:Help:Magic words#Formatting";
["padleft"] = "mw:Help:Magic words#Formatting";
["padright"] = "mw:Help:Magic words#Formatting";
["plural"] = "mw:Help:Magic words#Localization";
["grammar"] = "mw:Help:Magic words#Localization";
["gender"] = "mw:Help:Magic words#Localization";
["int"] = "mw:Help:Magic words#Localization";
["#language"] = "mw:Help:Magic words#Miscellaneous";
["#special"] = "mw:Help:Magic words#Miscellaneous";
["#speciale"] = "mw:Help:Magic words#Miscellaneous";
["#tag"] = "mw:Help:Magic words#Miscellaneous";
-- [[mw:Extension:ParserFunctions]]
["#expr"] = "mw:Help:Extension:ParserFunctions##expr";
["#if"] = "mw:Help:Extension:ParserFunctions##if";
["#ifeq"] = "mw:Help:Extension:ParserFunctions##ifeq";
["#iferror"] = "mw:Help:Extension:ParserFunctions##iferror";
["#ifexpr"] = "mw:Help:Extension:ParserFunctions##ifexpr";
["#ifexist"] = "mw:Help:Extension:ParserFunctions##ifexist";
["#rel2abs"] = "mw:Help:Extension:ParserFunctions##rel2abs";
["#switch"] = "mw:Help:Extension:ParserFunctions##switch";
["#time"] = "mw:Help:Extension:ParserFunctions##time";
["#timel"] = "mw:Help:Extension:ParserFunctions##timel";
["#titleparts"] = "mw:Help:Extension:ParserFunctions##titleparts";
-- other extensions
["#babel"] = "mw:Extension:Babel#Usage";
["#categorytree"] = "mw:Extension:CategoryTree#The {{#categorytree}} parser function";
["#commaseparatedlist"] = "mw:Extension:Wikibase Client";
["#coordinates"] = "mw:Extension:GeoData#Parser function";
["#invoke"] = "mw:Extension:Scribunto#Usage";
["#lst"] = "mw:Extension:Labeled Section Transclusion#How it works";
["#lsth"] = "mw:Extension:Labeled Section Transclusion#How it works"; -- not available, it seems
["#lstx"] = "mw:Extension:Labeled Section Transclusion#How it works";
["noexternallanglinks"] = "mw:Extension:Wikibase Client";
["noreplace"] = "mw:Extension:Wikibase Client";
["pendingchangelevel"] = "mw:Extension:FlaggedRevs"; -- not documented yet
["#property"] = "mw:Extension:Wikibase Client";
["#statements"] = "mw:Extension:Wikibase Client";
["#target"] = "mw:Extension:MassMessage"; -- not documented yet
}
-- rudimentary
local function is_valid_pagename(pagename)
if (pagename == "") or pagename:match("[%[%]%|%{%}#\127<>]") then
return false
end
return true
end
local function hook_special(page)
if is_valid_pagename(page) then
return "[[Special:" .. page .. "|" .. page .. "]]"
else
return page
end
end
local function hook_wdprop(name)
if mw.wikibase.resolvePropertyId(name) then
return ("[[:d:Special:EntityPage/%s|%s]]"):format(mw.wikibase.resolvePropertyId(name), name)
else
return name
end
end
local parser_function_hooks = {
["#special"] = hook_special;
["#speciale"] = hook_special;
["int"] = function (mesg)
if is_valid_pagename(mesg) then
return ("[[:MediaWiki:" .. mesg .. "|" .. mesg .. "]]")
else
return mesg
end
end;
["#categorytree"] = function (cat)
if is_valid_pagename(cat) and not (mw.title.getCurrentTitle().fullText == ("Category:" .. cat)) then
return ("[[:Category:" .. cat .. "|" .. cat .. "]]")
else
return cat
end
end;
["#invoke"] = function (mod)
if is_valid_pagename(mod) and not (mw.title.getCurrentTitle().fullText == ("Module:" .. mod)) then
return ("[[Module:%s|%s]]"):format(mod, mod)
else
return mod
end
end;
-- ["#tag"] = function (tag)
-- local doc_table = require('Module:wikitag link').doc_table
-- if doc_table[tag] then
-- return ("[[%s|%s]]"):format(doc_table[tag], tag)
-- else
-- return tag
-- end
-- end;
["#property"] = hook_wdprop;
["#statements"] = hook_wdprop;
}
function export.format_link(frame)
local args = frame:getParent().args
local output = { frame.args.nested and "{{" or "<code>{{" }
local templ = args[1]
local noargs = true
if not templ then
if mw.title.getCurrentTitle().fullText == frame:getParent():getTitle() then
-- demo mode
return "<code>{{<var>{{{1}}}</var>|<var>{{{2}}}</var>|...}}</code>"
else
error("The template name must be given.")
end
end
for key, value in pairs(args) do
if key ~= 1 then
noargs = false
break
end
end
local function render_title(templ)
local marker, rest
marker, rest = templ:match("^([Ss][Uu][Bb][Ss][Tt]):(.*)")
if not marker then
marker, rest = templ:match("^([Ss][Aa][Ff][Ee][Ss][Uu][Bb][Ss][Tt]):(.*)")
end
if marker then
templ = rest
table.insert(output, ("[[mw:Manual:Substitution|%s]]:"):format(marker))
end
if noargs and variables_nullary[templ] then
table.insert(output, ("[[%s|%s]]"):format(variables_nullary[templ], templ))
return
end
marker, rest = templ:match("^([Mm][Ss][Gg][Nn][Ww]):(.*)")
if marker then
templ = rest
-- not the most accurate documentation ever
table.insert(output, ("[[mw:Help:Magic words#Transclusion modifiers|%s]]:"):format(marker))
else
marker, rest = templ:match("^([Mm][Ss][Gg]):(.*)")
if marker then
templ = rest
table.insert(output, ("[[mw:Help:Magic words#Transclusion modifiers|%s]]:"):format(marker)) -- ditto
end
end
marker, rest = templ:match("^([Rr][Aa][Ww]):(.*)")
if marker then
table.insert(output, ("[[mw:Help:Magic words#Transclusion modifiers|%s]]:"):format(marker)) -- missingno.
templ = rest
end
if templ:match("^%s*/") then
table.insert(output, ("[[%s]]"):format(templ))
return
end
marker, rest = templ:match("^(.-):(.*)")
if marker then
local lcmarker = marker:lower()
if parser_functions[lcmarker] then
if parser_function_hooks[lcmarker] then
rest = parser_function_hooks[lcmarker](rest)
end
table.insert(output, ("[[%s|%s]]:%s"):format(mw.uri.encode(parser_functions[lcmarker], "WIKI"), marker, rest))
return
elseif variables_nonnullary[marker] then
table.insert(output, ("[[%s|%s]]:%s"):format(variables_nonnullary[marker], marker, rest))
return
end
end
if templ:match("[%[%]%|%{%}#\127<>]") then
table.insert(output, templ)
return
end
if marker then
if mw.site.namespaces[marker] then
if (title == "") or (mw.title.getCurrentTitle().fullText == templ) then
table.insert(output, templ)
else
table.insert(output, ("[[:%s|%s]]"):format(templ, templ))
end
return
elseif mw.site.interwikiMap()[marker:lower()] then
-- XXX: not sure what to do now…
table.insert(output, ("[[:%s:|%s]]:%s"):format(marker, marker, rest))
return
end
end
if (templ == "") or (mw.title.getCurrentTitle().fullText == ("Template:" .. templ)) then
table.insert(output, templ)
else
table.insert(output, ("[[Template:%s|%s]]"):format(templ, templ))
end
end
render_title(templ)
local i = 2
while args[i] do
table.insert(output, "|" .. args[i])
i = i + 1
end
for key, value in pairs(args) do
if type(key) == "string" then
table.insert(output, "|" .. key .. "=" .. value)
end
end
table.insert(output, frame.args.nested and "}}" or "}}</code>")
return table.concat(output)
end
return export
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.