![]() |
VOOZH | about |
Called by {{AdvancementRow}} and {{Load advancements}}
localadvancement_page='Advancement' localp={} localnamespace=mw.title.getCurrentTitle().nsText localpage_title=mw.title.getCurrentTitle().text localfull_title=mw.title.getCurrentTitle().fullText localhtml localframe localfunctionsanitize(str) -- remove anything between < and > (simple way to remove span tag) -- return lower case alpha numeric characters and spaces returnmw.text.trim(str:gsub('<.->',''):gsub('[^%w%s]*',''):lower()) end -- Adds one row of advancement data to html object localfunctionprintLine(line,is_input) localtr=html:tag('tr'):attr('id',line.title):cssText('text-align:left') locallink=nil ifnotis_inputthen link=advancement_page..'#'..line.title end localimage=require('Module:Aicon').aIcon(line.image,line.background,'raw',(linkor'')) tr:tag('td'):wikitext(image) localtitle_extra='' ifline.upcoming_verthen title_extra=title_extra..frame:expandTemplate{title='Upcoming',args={ver=line.upcoming_ver}} end ifline.until_verthen title_extra=title_extra..frame:expandTemplate{title='Until',args={ver=line.until_ver}} end tr:tag('td'):wikitext('[['..(linkorfull_title)..'|'..line.title..']]',title_extra) tr:tag('td'):wikitext(line.game_description) ifis_inputthen-- These are only displayed on the input page, not on individual content pages tr:tag('td'):wikitext(line.parent) end tr:tag('td'):wikitext(line.wiki_description) ifis_inputthen-- These are only displayed on the input page, not on individual content pages tr:tag('td'):attr('id',line.internal_id):wikitext('<code>',line.internal_id,'</code>') tr:tag('td'):wikitext(line.reward) end end -- Puts one line of data into Bucket for later querying localfunctionstoreLine(line) -- Put data into Bucket -- The only top level params that are needed is stuff that would be used as selectors -- everything else is put into a json blob for flexibility ifnot(namespace==''ornamespace=='Minecraft_Wiki')then return-- only store data if we are in main or Minecraft_Wiki namespaces end localsanitized_title=sanitize(line.title) -- mw.text.unstrip gets rid of parser artifacts that are put there when a <ref> tag is used. line.wiki_description=mw.text.unstrip(line.wiki_description) line.game_description=mw.text.unstrip(line.game_description) bucket('advancement').put({ title=sanitized_title, json=mw.text.jsonEncode(line)-- serializes all data into a json blob }) end -- Public function - Called by {{AdvancementRow}} functionp.inputLine(_frame) frame=_frame-- store frame for later use by expandTemplate localargs=frame:getParent().args -- Normalize inputs and set defaults localline={ title=args['title'],-- name background=args['bg']or'plain',-- background for icon upcoming_ver=args['upcoming'],-- version where advancement will be introduced until_ver=args['until'],-- version where advancement will be removed image=mw.text.trim(args[1]), game_description=mw.text.trim(args[2]), parent=mw.text.trim(args[3]), wiki_description=mw.text.trim(args[4]), internal_id=mw.text.trim(args[5]or'—'), reward=mw.text.trim(args[6]or'—') } html=mw.html.create() printLine(line,true) storeLine(line) returnhtml end localfunctionprintHeader(header_text,short_header,collapsed) ifcollapsedthen collapsed=' collapsed' else collapsed='' end -- Can't use table tag because it will close itself, but we need to close it with footer html=mw.html.create():wikitext('<div style="overflow: auto;"><table class="wikitable collapsible',collapsed,'" style="text-align:center">') ifheader_textandheader_text~=''then html:tag('th') :attr('colspan',7) :attr('data-description',header_text) :wikitext(header_text) end localtr=html:tag('tr') tr:tag('th'):wikitext('Icon') tr:tag('th'):wikitext('Advancement') tr:tag('th'):wikitext('In-game description') ifnotshort_headerthen tr:tag('th'):wikitext('Parent') end tr:tag('th'):wikitext('Actual requirements (if different)') ifnotshort_headerthen tr:tag('th'):wikitext('[[Resource location]]') tr:tag('th'):wikitext('Rewards') end returnhtml end localfunctionprintFooter() return'</table></div>' end -- Public function - called by {{AdvancementTable}} functionp.table(frame) localargs=frame:getParent().args ifargs[1]=='foot'then returnprintFooter() else returnprintHeader(args[1],false,args['collapsed']) end end -- Public function - called by {{Load advancements}} functionp.load(frame_) frame=frame_-- store frame for later use by expandTemplate localargs=frame:getParent().args advancement_page=args.pageoradvancement_page printHeader('',true,false) localconditions={} fornameinstring.gmatch(args[1],"[^;]+")do conditions[#conditions+1]={'title',sanitize(name)} end localquery=bucket('advancement') .select('title','json') .where('page_name',advancement_page) .where(bucket.Or(unpack(conditions))) .run() ifquerythen fori,vinipairs(query)do localline=mw.text.jsonDecode(v['json']or'{}') printLine(line,false) end end if#conditions~=#querythen html:wikitext('[[Category:Missing advancement]]') end html:wikitext(printFooter()) returnhtml end returnp