Happy 2nd Anniversary! Check out the Character Models page for the new faces & hairstyles, available via the brand new Barbershop!
Please help to contribute towards the Anniversary 2024 page!
Module:ProcessJobs
From HorizonXI Wiki
Documentation for this module may be created at Module:ProcessJobs/doc
--- Job Processor for ITEMS, uses the Scribunto module (LUA). -- Let's users enter in jobs without tags or worring about -- what era the specific job comes from. -- Output will be a clean and uniform, correctly displayed, -- job list for any equipable item, era tagged and all. -- --- Usage -- {{#invoke:}} method -- --- Example Input -- mnk WaR COR BLm -- --- Example Output -- [[WAR]] / [[MNK]] / [[BLM]] <span class='toau'>/ [[COR]]</span> -- --- Written by edwardcd -- last modification: 24 March 2024 -- version 0.1a (testing) -- -- Module:ProcessJobsModule local p = {} function p.processJobs(frame) local jobsString = frame.args.jobs or '' -- Convert the jobs string into an array -- Removes spaces and punctuation local jobsArray = {} for job in jobsString:upper():gmatch("%w+") do table.insert(jobsArray, job) end -- Define job codes in the desired order, as per ASB local jobCodes = { "WAR", "MNK", "WHM", "BLM", "RDM", "THF", "PLD", "DRK", "BST", "BRD", "RNG", "SAM", "NIN", "DRG", "SMN", "BLU", "COR", "PUP", "DNC", "SCH", "GEO", "RUN" } -- Create a lookup table for jobCodes local jobCodesLookup = {} for i, v in ipairs(jobCodes) do jobCodesLookup[v] = i end -- Define era spans for specific jobs local specialSpans = { toau = {["BLU"] = true, ["COR"] = true, ["PUP"] = true}, wotg = {["DNC"] = true, ["SCH"] = true}, soa = {["GEO"] = true, ["RUN"] = true} } -- Filter out invalid codes -- Sort the valid codes local processedJobs = {} for _, job in ipairs(jobsArray) do if jobCodesLookup[job] then table.insert(processedJobs, job) end end local processedJobs = {} for _, job in ipairs(jobsArray) do if jobCodesLookup[job] then local spanStart, spanEnd = "", "" if specialSpans.toau[job] then spanStart, spanEnd = '<span class="toau">', '</span>' elseif specialSpans.wotg[job] then spanStart, spanEnd = '<span class="wotg">', '</span>' elseif specialSpans.soa[job] then spanStart, spanEnd = '<span class="soa">', '</span>' end table.insert(processedJobs, spanStart .. "[[" .. job .. "]]" .. spanEnd) end end table.sort(processedJobs, function(a, b) return jobCodesLookup[a:match("%w+")] < jobCodesLookup[b:match("%w+")] end) local output = table.concat(processedJobs, ' / ') return output end return p