![]() |
VOOZH | about |
Called by:
{{MusicTable}}{{MusicRow}}require('strict') localp={} localfunctionformatNumber(n) ifnotnorn==0then return'—' end returntostring(n) end localfunctionformatPercent(ratio) ifnotratioorratio==0then return'—' end localval=ratio*100 val=math.floor(val*100+0.5)/100 ifval%1==0then returntostring(math.floor(val))..'%' end returnstring.format('%.2f%%',val) end localfunctionstripAccents(s) s=mw.ustring.toNFD(s) s=string.gsub(s,"\204[\128-\191]","") returns end localfunctionformatFileName(title) locallower=mw.ustring.lower(title) returnmw.language.getContentLanguage():ucfirst(stripAccents(lower)) end localfunctiongetDisplayTitle(title) returnmw.text.trim( mw.ustring.gsub(title,'%s*%b()','') ) end functionp.row(frame) localargs=frame:getParent().args localdata={ title=args[1], java=tonumber(args[2])or0, bedrock=tonumber(args[3])or0, file=args.file } returnmw.text.jsonEncode(data) end localfunctionparseTracks(input) localrows={} localjavaTotal=0 localbedrockTotal=0 forlineinmw.text.gsplit(inputor'','\n')do line=mw.text.trim(line) ifline~=''then localok,parsed=pcall(mw.text.jsonDecode,line) ifokandparsedthen table.insert(rows,parsed) javaTotal=javaTotal+(parsed.javaor0) bedrockTotal=bedrockTotal+(parsed.bedrockor0) end end end returnrows,javaTotal,bedrockTotal end functionp.table(frame) localargs=frame:getParent().args locallocation=args.locationor'unknown' localcreative=tonumber(args.creative)or0 localcollapsed=tonumber(args.collapsed)or0 localignoreusage=tonumber(args.ignoreusage)or0 localrows,javaTotal,bedrockTotal= parseTracks(args.tracks) localroot=mw.html.create('table') :addClass( 'wikitable collapsible sortable col-3-center col-4-center col-5-center col-6-center'.. (collapsed==1and' collapsed'or'') ) :css('width','50%') localtr1=root:tag('tr') tr1:tag('th'):attr('rowspan',2):wikitext('Title') tr1:tag('th'):attr('rowspan',2):addClass('unsortable'):wikitext('Preview') tr1:tag('th'):attr('colspan',2):wikitext(frame:expandTemplate{title='JE',args={nl=1}}) tr1:tag('th'):attr('colspan',2):wikitext(frame:expandTemplate{title='BE',args={nl=1}}) localtr2=root:tag('tr') tr2:tag('th'):wikitext('Weight') tr2:tag('th'):wikitext('Probability') tr2:tag('th'):wikitext('Weight') tr2:tag('th'):wikitext('Probability') for_,rowinipairs(rows)do localjavaRatio=(javaTotal>0)and(row.java/javaTotal)or0 localbedrockRatio=(bedrockTotal>0)and(row.bedrock/bedrockTotal)or0 ifignoreusage~=1then bucket('music_table').put({ music=row.title, location=location, java_prob=javaRatio, bedrock_prob=bedrockRatio, creative=creative }) end localtr=root:tag('tr') localdisplayTitle=getDisplayTitle(row.title) localfileName=row.fileorformatFileName(displayTitle) tr:tag('td') :wikitext(string.format('[[%s|%s]]',row.title,displayTitle)) tr:tag('td') :wikitext(string.format( '[[File:%s.ogg]]', fileName )) tr:tag('td') :wikitext(formatNumber(row.java)) tr:tag('td') :wikitext(formatPercent(javaRatio)) tr:tag('td') :wikitext(formatNumber(row.bedrock)) tr:tag('td') :wikitext(formatPercent(bedrockRatio)) end returntostring(root) end returnp