Module:Asbox stubtree/sandbox
Appearance
This is the module sandbox page for Module:Asbox stubtree (diff). |
This module is subject to page protection. It is a highly visible module in use by a very large number of pages, or is substituted very frequently. Because vandalism or mistakes would affect many pages, and even trivial editing might cause substantial load on the servers, it is protected from editing. |
This Lua module is used on approximately 37,000 pages and changes may be widely noticed. Test changes in the module's /sandbox or /testcases subpages, or in your own module sandbox. Consider discussing changes on the talk page before implementing them. |
This module is used by Module:Asbox to create stub hierarchy boxes for stub template documentations. It also implements {{asbox/stubtree}} and served the same function via {{Asbox/templatepage}} prior to being converted to Lua.
Acknowledgements
[edit]In addition to the contributors listed in the contribution histories of Template:Asbox stubtree and Module:Asbox stubtree, this module also implements ideas from the deleted Template:Asbox/templatepage, which primary authors are User:MSGJ and User:WOSlinker.
local p = {}
function p.exists(pagename)
return mw.title.new(pagename, "Template").exists
end
function p.pcase(word)
return mw.ustring.upper(mw.ustring.sub(word,1,1)) .. mw.ustring.sub(word,2)
end
function p._subtree(pagename)
-- split items on dash into table
local r = 0
local t = {}
for token in mw.ustring.gmatch(pagename, "[^-]+") do
-- don't add numbered items to list
if tonumber(mw.ustring.sub(token,1,1)) == nil then
table.insert(t,token)
else
r = 1
end
end
table.remove(t, #t)
local out = {"",pagename}
local temppage
local temppageexists
local removeditem1 = ""
local removeditem2 = ""
while (#t > 1) do
if r == 1 then
r = 0
else
-- Remove 1st item from list
removeditem1 = t[1]
table.remove(t, 1)
end
temppage = table.concat(t, "-") .. "-stub"
temppageexists = p.exists(temppage)
if temppageexists == true then
table.insert(out,"[[Template:" .. temppage .. "|" .. p.pcase(temppage) .. "]]")
else
-- If template with first item does not exist, try removing last item
removeditem2 = t[#t]
table.remove(t, #t)
temppage = removeditem1 .. "-" .. table.concat(t, "-") .. "-stub"
if #t == 0 then
temppage = removeditem1 .. "-stub"
end
temppageexists = p.exists(temppage)
if temppageexists == true then
-- if exists then add first item back to list
table.insert(t,1,removeditem1)
table.insert(out,"[[Template:" .. temppage .. "|" .. p.pcase(temppage) .. "]]")
else
-- if exists then add last item back to list
table.insert(t,removeditem2)
end
end
end
local list = mw.html.create('ul')
for _, item in ipairs(out) do
list:tag('li'):wikitext(item):done()
end
list:tag('li'):wikitext('[[Template:Stub|Stub]]'):allDone()
local finalresult = mw.html.create('div')
finalresult:cssText('float:right; border-style:dotted; border-width:2px; padding:5px; margin:5px;')
:tag('span')
:attr('title', 'This shows the hierarchy of the stub template in relation to other templates.')
:cssText('font-size:125%; font-weight:bold;')
:wikitext('Stub hierarchy')
:done()
:addNode(list)
:done()
return tostring(finalresult)
end
function p.subtree(frame)
return p._subtree(frame.args["pagename"])
end
return p