https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Module%3AScripts%2Fchain
Module:Scripts/chain - Revision history
2025-05-30T04:31:00Z
Revision history for this page on the wiki
MediaWiki 1.45.0-wmf.3
https://en.wikipedia.org/w/index.php?title=Module:Scripts/chain&diff=1185976333&oldid=prev
Alexis Jazz: Imported page from https://en.wiktionary.org/wiki/Module:scripts/chain AJsImportTool]
2023-11-20T04:05:01Z
<p>Imported page from https://en.wiktionary.org/wiki/Module:scripts/chain [<a href="/w/index.php?title=User:Alexis_Jazz/AJsImportTool.js&action=edit&redlink=1" class="new" title="User:Alexis Jazz/AJsImportTool.js (page does not exist)">AJsImportTool</a>]</p>
<p><b>New page</b></p><div>local p = {}<br />
<br />
local scripts = mw.loadData("Module:scripts/data")<br />
<br />
local function format(code)<br />
local name = scripts[code][1]<br />
if not name:find("[Ss]script$") then<br />
name = name .. " script"<br />
end<br />
return "<code>[[:Category:" .. name .. "|" .. scripts[code][1] .. " <span style=\"color:green;\">(" .. code .. ")</span>]]</code>"<br />
end<br />
<br />
local function dump(data, prefix)<br />
if type(data) == "string" then<br />
return format(data)<br />
else<br />
local result = ""<br />
local branch = "├───"<br />
local next_level = prefix .. "│ "<br />
local current = ""<br />
for i,val in ipairs(data) do<br />
if i == #data then<br />
branch = "└───"<br />
next_level = prefix .. " "<br />
end<br />
if #val == 0 then<br />
result = result .. prefix .. branch .. dump(val.name) .. "<br/>"<br />
else<br />
result = result .. "{{(!}} class=mw-collapsible style=border-collapse:collapse\n{{!}}"<br />
result = result .. prefix .. branch .. dump(val.name)<br />
result = result .. "\n{{!-}}\n{{!}}"<br />
result = result .. dump(val, next_level)<br />
result = result .. "\n{{!)}}\n"<br />
end <br />
end <br />
return result<br />
end <br />
end<br />
<br />
local function deep_sort(current)<br />
local result = {}<br />
local is_table = {}<br />
for key,val in pairs(current) do<br />
if type(key) == "number" then<br />
table.insert(result, val)<br />
else<br />
is_table[key] = true<br />
table.insert(result, key)<br />
end<br />
end<br />
<br />
table.sort(result, function(a,b)<br />
return (scripts[a] or error(a))[1] < (scripts[b] or error(b))[1]<br />
end)<br />
<br />
local i = 2<br />
while i<#result do<br />
while scripts[result[i-1]] == scripts[result[i]] do<br />
table.remove(result,i)<br />
end<br />
i = i + 1<br />
end<br />
<br />
for i=1,#result do<br />
if is_table[result[i]] then<br />
local name = result[i]<br />
result[i] = deep_sort(current[result[i]])<br />
result[i].name = name<br />
else<br />
result[i] = {name = result[i]}<br />
end<br />
end<br />
<br />
return result<br />
end<br />
<br />
function p.show(frame)<br />
local children = {}<br />
<br />
local function find_ancestors(origin,key,val)<br />
if val.parent then<br />
return {val.parent}<br />
end<br />
end<br />
<br />
for key,val in pairs(scripts) do<br />
local ancestors = find_ancestors(key,key,val)<br />
if ancestors then<br />
for _, ancestor in ipairs(ancestors) do<br />
if ancestor ~= key then<br />
if children[ancestor] then<br />
table.insert(children[ancestor], key)<br />
else<br />
children[ancestor] = {key}<br />
end<br />
end<br />
end<br />
end<br />
end<br />
<br />
local function make_nested(data)<br />
local make_nil = {}<br />
for key,val in pairs(data) do<br />
if type(key) == "number" then<br />
if children[val] then<br />
data[val] = make_nested(children[val])<br />
table.insert(make_nil, key)<br />
children[val] = nil<br />
end<br />
else<br />
data[key] = make_nested(val)<br />
end<br />
end<br />
for _,key in ipairs(make_nil) do<br />
data[key] = nil<br />
end<br />
return data<br />
end<br />
<br />
local nested = make_nested(children)<br />
<br />
nested = deep_sort(nested)<br />
<br />
local result = ""<br />
for i=1,#nested do<br />
result = result .. "\n\n\n{| class=mw-collapsible style=border-collapse:collapse\n|" .. format(nested[i].name) .. "\n|-\n|"<br />
result = result .. dump(nested[i], " ")<br />
result = result .. "\n|}"<br />
end<br />
return frame:preprocess(result)<br />
end<br />
<br />
return p</div>
Alexis Jazz