https://en.wikipedia.org/w/index.php?action=history&feed=atom&title=Module%3ALoadData%2Fsandbox Module:LoadData/sandbox - Revision history 2025-05-27T19:34:34Z Revision history for this page on the wiki MediaWiki 1.45.0-wmf.2 https://en.wikipedia.org/w/index.php?title=Module:LoadData/sandbox&diff=1060898444&oldid=prev GKFX: Create sandbox version of Module:LoadData 2021-12-18T10:54:18Z <p>Create sandbox version of <a href="/wiki/Module:LoadData" title="Module:LoadData">Module:LoadData</a></p> <p><b>New page</b></p><div>local p = {}<br /> <br /> -- Finds the next key key &lt;= or &gt;= the given i.<br /> -- operator is ±1<br /> local function findItemRange(data, i, operator)<br /> local bestIndex = nil<br /> i = i * operator<br /> for k, v in pairs(data) do<br /> local kop = type(k) == &#039;number&#039; and k * operator<br /> if kop and kop &lt;= i and (bestIndex == nil or kop &gt; bestIndex * operator) then<br /> bestIndex = k<br /> end<br /> end<br /> if bestIndex then return data[bestIndex] else return nil end<br /> end<br /> <br /> local function load(datamodule, frame)<br /> local args = frame.args<br /> local data = mw.loadData(datamodule)<br /> for i = 1, 20 do<br /> if args[i] then data = data[tonumber(args[i]) or args[i]]<br /> elseif args[i .. &#039; lteq&#039;] then<br /> data = findItemRange(data, tonumber(args[i .. &#039; lteq&#039;]), 1)<br /> elseif args[i .. &#039; gteq&#039;] then<br /> data = findItemRange(data, tonumber(args[i .. &#039; gteq&#039;]), -1)<br /> else break end<br /> end<br /> <br /> if data == nil then<br /> return args[&#039;if_nil&#039;] -- not a required argument, OK to return nil here.<br /> end<br /> <br /> if type(data) == &#039;table&#039; then<br /> -- Put the table into another table because the return value of loadData<br /> -- is a &quot;fake&quot; table that only has certain metamethods.<br /> local realdata = {}<br /> for k, v in pairs(data) do<br /> realdata[k] = v<br /> end<br /> data = realdata<br /> else<br /> data = { data }<br /> end<br /> <br /> if args[&#039;template&#039;] then<br /> return mw.text.unstripNoWiki(args[&#039;template&#039;]):format(unpack(data))<br /> elseif args[&#039;preprocess&#039;] then<br /> return frame:preprocess(mw.text.unstripNoWiki(args[&#039;preprocess&#039;]):format(unpack(data)))<br /> else<br /> return table.concat(data)<br /> end<br /> end<br /> <br /> return setmetatable({}, {<br /> __index = function(t, k)<br /> return function(frame)<br /> if k:sub(-5) == &#039;.json&#039; then<br /> return load(mw.text.jsonDecode(mw.title.new(k).getContent()), frame)<br /> else<br /> return load(mw.loadData(&#039;Module:&#039; .. k), frame)<br /> end<br /> end<br /> end<br /> })</div> GKFX