Home
Random
Log in
Settings
About Brighter Shores Wiki
Disclaimers
Search
Editing
Module:Variants
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
require('Module:Mw.html extension') local p = {} function sort_entries(entry1, entry2) -- Sort the variants based on the sum of the profession levels local entry1_value = (entry1['Profession Level A'] or 0) + (entry1['Profession Level B'] or 0) local entry2_value = (entry2['Profession Level A'] or 0) + (entry2['Profession Level B'] or 0) return entry1_value < entry2_value end function get_table_info(args, get_images) local variant_name = args.variant or mw.title.getCurrentTitle().fullText local query = { '[[Variant of::'..variant_name..']]', '?Profession A #', -- Adding a # to this query makes it return plaintext instead of a link '?Profession B #', '?Profession Level A', '?Profession Level B', '?Profession Level A High', '?Profession Level B High', '?Variant name', get_images and '?Image#64px;x64px = Image' or nil, limit = args.limit or 500, } local smw_data = mw.smw.ask(query) if not smw_data then return nil end table.sort(smw_data, sort_entries) return smw_data end function p.variants_header(args) local smw_data = get_table_info(args) local contents if smw_data then local formatted = {} for _, entry in ipairs(smw_data) do local variant_name = entry['Variant name'] if variant_name then local page = entry[1] local pipe = page:find('|') if pipe then page = page:sub(3, pipe-1) else page = page:sub(3, -3) end if page:sub(1, 1 + #variant_name + #' (grade ') == ':' .. variant_name .. ' (grade ' and page:sub(-1) == ')' then local grade_number = page:sub(2 + #variant_name + #' (grade ', -2) mw.log('"' .. grade_number .. '"') variant_name = 'Grade ' .. grade_number end table.insert(formatted, ('[[%s|%s]]'):format(page, variant_name)) else table.insert(formatted, entry[1]) end end contents = table.concat(formatted, ' β’ ') else contents = '[[Category:Empty variant list]]' end return mw.html.create('div') :addClass('variants-header') :wikitext(contents) :done() end function p.main(frame) local args = frame:getParent().args args.variant = args[1] or args.variant return p.variants_header(args) end function p.variants_table(args) local smw_data = get_table_info(args, true) if not smw_data then return ':No variants found.' end local profession_b_flag = false for _, entry in ipairs(smw_data) do if entry['Profession B'] or entry['Profession Level B'] then profession_b_flag = true end break end local table = mw.html.create('table') :addClass('sortable wikitable') :tag('tr') :tag('th') :attr{ colspan = '2' } :wikitext('Item') :done() :tag('th') :wikitext('Level') :attrIf(profession_b_flag, 'colspan', 2) :done() :done() local function formatProfessionLevel(profession, level, high) if not (profession or level) then return nil end profession = profession or 'Unknown profession' local level_text = tostring(level or '?') if high then level_text = ('%sβ¨%d'):format(level_text, high) end return ('%s [[File:%s small icon.png|21x21px|link=%s]]'):format(level_text, profession, profession) end for _, entry in ipairs(smw_data) do local profession_level_a = entry['Profession Level A'] or '?' local profession_level_b = entry['Profession Level B'] or '?' local profession_a = entry['Profession A'] or '' local profession_b = entry['Profession B'] or '' table :tag('tr') :tag('td') :css{ ['border-right'] = 'none' } :wikitext(entry.Image) :done() :tag('td') :css{ ['border-left'] = 'none' } :wikitext(entry[1]) :done() :tag('td') :css{ ['text-align'] = 'right' } :wikitext(formatProfessionLevel(entry['Profession A'], entry['Profession Level A'], entry['Profession Level A High'])) :IF(profession_b_flag) :tag('td') :IF(entry['Profession B']) :css{ ['text-align'] = 'right' } :wikitext(formatProfessionLevel(entry['Profession B'], entry['Profession Level B'], entry['Profession Level B High'])) :done() :END() :done() end return table end function p.main_table(frame) local args = frame:getParent().args args.variant = args[1] or args.variant return p.variants_table(args) end return p
Summary:
Please note that all contributions to Brighter Shores Wiki are considered to be released under the CC BY-NC-SA 3.0 (see
Brighter Shores:Copyrights
for details). If you do not want your writing to be edited mercilessly and redistributed at will, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource.
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Templates used on this page:
Template:Variants
(
edit
)
Module:Mw.html extension
(
edit
)
Module:Variants
(
edit
)
Module:Variants/doc
(
edit
)