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