Module:Asbox stubtree/sandbox

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,"" .. 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,"" .. 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('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