Modul:Pivot: Unterschied zwischen den Versionen
Zur Navigation springen
Zur Suche springen
(Die Seite wurde neu angelegt: „local p = {} function countItems(thedata,tbl,spl,flt) local txt=string.gsub(thedata,"%[%[SMW::on%]%]","") txt=string.gsub(txt,"%[%[SMW::off%]%]","") local…“) |
K (Automatisch synchronisiert.) |
||
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt) | |||
Zeile 2: | Zeile 2: | ||
function countItems(thedata,tbl,spl,flt) | function countItems(thedata,tbl,spl,flt) | ||
local txt= | local txt=mw.ustring.gsub(thedata,"%[%[SMW::on%]%]","") | ||
txt= | txt=mw.ustring.gsub(txt,"%[%[SMW::off%]%]","") | ||
local lines=mw.text.split(txt,spl) | local lines=mw.text.split(txt,spl) | ||
for key, value in pairs(lines) do | for key, value in pairs(lines) do | ||
local v=mw.text.trim(value) | local v=mw.text.trim(value) | ||
if (flt==nil) or ( | if (flt==nil) or (mw.ustring.sub(v,1,mw.ustring.len(flt))==flt) then | ||
if v~="" then | if v~="" then | ||
local a=tbl[v]; | local a=tbl[v]; | ||
Zeile 19: | Zeile 19: | ||
function getCategory(link,cats) | function getCategory(link,cats) | ||
local catbp= | local catbp=mw.ustring.gsub(link,"(%[%[)([^%|]*)(%|.*)","%2") | ||
if catbp==nil then | if catbp==nil then | ||
return "" | return "" | ||
Zeile 31: | Zeile 31: | ||
end | end | ||
function pivotSub(data,data2,spl,srt,flt,bld,cat) | function pivotSub(data,data2,spl,srt,flt,bld,cat,out,dif) | ||
local result="" | local result="" | ||
local cats="" | local cats="" | ||
Zeile 55: | Zeile 55: | ||
table.sort(tbls,compareT) | table.sort(tbls,compareT) | ||
end | end | ||
for key, value in pairs(tbls) do | if out=="L" then | ||
for key, value in pairs(tbls) do | |||
local b="" | |||
if tonumber(value[2])>=bld then b="'''" end | |||
result=result..b..value[1].." ("..(value[2]-dif).."x)"..b..", " | |||
cats=cats..getCategory(value[1],cat) | |||
end | |||
local l=mw.ustring.len(result) | |||
if l>=2 then | |||
result=mw.ustring.sub(result,1,l-2) | |||
end | |||
if cat~="" then | |||
result=result..cats | |||
end | |||
else | |||
result="<table>" | |||
for key, value in pairs(tbls) do | |||
result=result.."<tr><td>"..value[1].."</td><td><div style=\"background-color:#ffcc00;width:"..((value[2]-dif)*5).."px;display:inline-block;\"> </div> "..(value[2]-dif).."</td></tr>" | |||
end | |||
result=result.."</table>" | |||
end | end | ||
return result | return result | ||
Zeile 91: | Zeile 99: | ||
local cat=frame.args[7] --Categorize? | local cat=frame.args[7] --Categorize? | ||
if cat==nil then cat="" end | if cat==nil then cat="" end | ||
return pivotSub(data,data2,spl,srt,flt,bld,cat) | local out=frame.args[8] --Output format ("L"ist or "D"iagram) | ||
if out==nil then out="L" | |||
elseif out~="L" then out="D" end | |||
local dif=frame.args[9] --Difference | |||
if dif==nil then dif=0 else dif=tonumber(dif) end | |||
return pivotSub(data,data2,spl,srt,flt,bld,cat,out,dif) | |||
end | end | ||
function p.createEmpty(frame) | |||
local result="" | |||
local ya=2025 | |||
for y=2006,ya,1 do | |||
--for m=1,12,1 do | |||
--local ms="" | |||
--if m<10 then | |||
--ms="0" | |||
--end | |||
result=result..y..", " --.."-"..ms..m..", " | |||
--end | |||
end | |||
return result | |||
end | |||
return p | return p |
Aktuelle Version vom 4. Juni 2021, 17:26 Uhr
Dokumentation und Testfälle unter Modul:Pivot/Doku.
local p = {} function countItems(thedata,tbl,spl,flt) local txt=mw.ustring.gsub(thedata,"%[%[SMW::on%]%]","") txt=mw.ustring.gsub(txt,"%[%[SMW::off%]%]","") local lines=mw.text.split(txt,spl) for key, value in pairs(lines) do local v=mw.text.trim(value) if (flt==nil) or (mw.ustring.sub(v,1,mw.ustring.len(flt))==flt) then if v~="" then local a=tbl[v]; if a==nil then a=0 end tbl[v]=a+1 end end end return tbl end function getCategory(link,cats) local catbp=mw.ustring.gsub(link,"(%[%[)([^%|]*)(%|.*)","%2") if catbp==nil then return "" end local title=mw.title.new(catbp) if title==nil then return "" end local titletext=title.text return "[[Kategorie:"..titletext.."|"..cats.."]]" end function pivotSub(data,data2,spl,srt,flt,bld,cat,out,dif) local result="" local cats="" local tbl={ } tbl=countItems(data,tbl,spl,flt) tbl=countItems(data2,tbl,spl,flt) local tbls={ } for key, value in pairs(tbl) do table.insert(tbls,{key,value}) end function compareC(a,b) if a[2]~=b[2] then return a[2] > b[2] end return a[1] < b[1] end function compareT(a,b) if a[1]~=b[1] then return a[1] < b[1] end return a[2] < b[2] end if srt=="C" then table.sort(tbls,compareC) else table.sort(tbls,compareT) end if out=="L" then for key, value in pairs(tbls) do local b="" if tonumber(value[2])>=bld then b="'''" end result=result..b..value[1].." ("..(value[2]-dif).."x)"..b..", " cats=cats..getCategory(value[1],cat) end local l=mw.ustring.len(result) if l>=2 then result=mw.ustring.sub(result,1,l-2) end if cat~="" then result=result..cats end else result="<table>" for key, value in pairs(tbls) do result=result.."<tr><td>"..value[1].."</td><td><div style=\"background-color:#ffcc00;width:"..((value[2]-dif)*5).."px;display:inline-block;\"> </div> "..(value[2]-dif).."</td></tr>" end result=result.."</table>" end return result end function p.countAndSort(frame) local data=frame.args[1] --data if data==nil then data="" end local spl=frame.args[2] --Split character if spl==nil then spl="\n" end local srt=frame.args[3] --Sort ("C"ount or "T"ype) if srt==nil then srt="C" elseif srt~="C" then srt="T" end local flt=frame.args[4] --Filter by first character local bld=frame.args[5] --Number to apear bold if bld==nil then bld=5 else bld=tonumber(bld) end local data2=frame.args[6] --additional data (maximum string size) if data2==nil then data2="" end local cat=frame.args[7] --Categorize? if cat==nil then cat="" end local out=frame.args[8] --Output format ("L"ist or "D"iagram) if out==nil then out="L" elseif out~="L" then out="D" end local dif=frame.args[9] --Difference if dif==nil then dif=0 else dif=tonumber(dif) end return pivotSub(data,data2,spl,srt,flt,bld,cat,out,dif) end function p.createEmpty(frame) local result="" local ya=2025 for y=2006,ya,1 do --for m=1,12,1 do --local ms="" --if m<10 then --ms="0" --end result=result..y..", " --.."-"..ms..m..", " --end end return result end return p