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&amp;action=edit&amp;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(&quot;Module:scripts/data&quot;)<br /> <br /> local function format(code)<br /> local name = scripts[code][1]<br /> if not name:find(&quot;[Ss]script$&quot;) then<br /> name = name .. &quot; script&quot;<br /> end<br /> return &quot;&lt;code&gt;[[:Category:&quot; .. name .. &quot;|&quot; .. scripts[code][1] .. &quot; &lt;span style=\&quot;color:green;\&quot;&gt;(&quot; .. code .. &quot;)&lt;/span&gt;]]&lt;/code&gt;&quot;<br /> end<br /> <br /> local function dump(data, prefix)<br /> if type(data) == &quot;string&quot; then<br /> return format(data)<br /> else<br /> local result = &quot;&quot;<br /> local branch = &quot;├───&quot;<br /> local next_level = prefix .. &quot;│    &quot;<br /> local current = &quot;&quot;<br /> for i,val in ipairs(data) do<br /> if i == #data then<br /> branch = &quot;└───&quot;<br /> next_level = prefix .. &quot;     &quot;<br /> end<br /> if #val == 0 then<br /> result = result .. prefix .. branch .. dump(val.name) .. &quot;&lt;br/&gt;&quot;<br /> else<br /> result = result .. &quot;{{(!}} class=mw-collapsible style=border-collapse:collapse\n{{!}}&quot;<br /> result = result .. prefix .. branch .. dump(val.name)<br /> result = result .. &quot;\n{{!-}}\n{{!}}&quot;<br /> result = result .. dump(val, next_level)<br /> result = result .. &quot;\n{{!)}}\n&quot;<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) == &quot;number&quot; 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] &lt; (scripts[b] or error(b))[1]<br /> end)<br /> <br /> local i = 2<br /> while i&lt;#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) == &quot;number&quot; 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 = &quot;&quot;<br /> for i=1,#nested do<br /> result = result .. &quot;\n\n\n{| class=mw-collapsible style=border-collapse:collapse\n|&quot; .. format(nested[i].name) .. &quot;\n|-\n|&quot;<br /> result = result .. dump(nested[i], &quot;  &quot;)<br /> result = result .. &quot;\n|}&quot;<br /> end<br /> return frame:preprocess(result)<br /> end<br /> <br /> return p</div> Alexis Jazz