Difference between revisions of "Module:Availability"

From Team Fortress Wiki
Jump to: navigation, search
m
m (Move comment)
Line 109: Line 109:
  
 
function p.avail(f)
 
function p.avail(f)
  -- Precompute the page's language.
 
 
   frame = f
 
   frame = f
 
   local args = f:getParent().args
 
   local args = f:getParent().args
Line 117: Line 116:
 
     args = f.args
 
     args = f.args
 
   end
 
   end
 +
  -- Precompute the page's language.
 
   if_lang = frame:expandTemplate{title='If lang'}
 
   if_lang = frame:expandTemplate{title='If lang'}
  
Line 126: Line 126:
 
     -- Crate 46 is a Scorched Crate, which is a string that isn't used anywhere else.
 
     -- Crate 46 is a Scorched Crate, which is a string that isn't used anywhere else.
 
     if arg == 'crate46' then arg = 'crate-scorched' end
 
     if arg == 'crate46' then arg = 'crate-scorched' end
     -- Enchantment: Eternaween was uncratable from #74, and cannot be Haunted.
+
     -- Enchantment: Eternaween was uncrateable from #74, and cannot be Haunted.
 
     if arg == 'crate74' then arg = 'crate74-haunted' end
 
     if arg == 'crate74' then arg = 'crate74-haunted' end
  

Revision as of 04:29, 13 June 2019

Module:Availability (aka Template:Availability) is used to display and autotranslate the 'Availability' section in {{Item infobox}}. Preferably, the shortcut {{avail}} should be used.

For future reference, if creating new additions, the key cannot include a number, or it will be parsed out. Thus, if you want to add a string like xmas2015, instead add it to the Multipart strings with xmas and use num to represent the 2015.


Entries

Parameter Output
audition-reel Audition Reel
bread-box Bread Box (Unique and Strange)
chemistryset Chemistry Set
collectors Chemistry Set (Collector's)
contract Contract (Decorated)
contract-unique ConTracker
craft Craft
creepy-crate Unlocked Creepy Crate
directors Director's Cut
distributed Distributed
distributed-expired Distributed (expired)
drop Drop
gift-cauldron Halloween Gift Cauldron
halloween-purchase Purchase
hauntedgift Haunted Halloween Gift
keyless-crate Unlocked Cosmetic Crate (Unique and Strange)
mvm As Mann vs. Machine reward
promotional Promotional
promotional-expired Promotional (expired)
purchase Purchase
purchase-limited Purchase (limited)
retired Retired
stock Stock
stockpile Stockpile Crate
trade-up Trade-Up
transmute Halloween Transmute (Untradable)
unavailable Unavailable
unlock Unlock
unusual Uncrate (Unusual)
xmas2015 Smissmas 2015 Festive Gift
warpaint War Paint (Decorated)
winter2016 Unlocked Winter 2016 Cosmetic Case
winter2016-strange Unlocked Winter 2016 Cosmetic Case (Unique and Strange)
winter2016-unusual Unlocked Winter 2016 Cosmetic Case (Unique, Strange and Unusual)
mannup Reward
australium Reward (Australium)
botkiller Reward (Botkiller)
mvm-both-types Reward (Botkiller and Australium)
crate1 Uncrate #1
crate2-strange Uncrate #2 (Strange)
crate3-festive Uncrate #3 (Festive)
crate4-haunted Uncrate #4 (Haunted)
unusual-5 Uncrate (Unusual)

Usage

Backwards compatibility

{{Availability}} has some parameters which have been deprecated. They will still function in this template, but their use will place the page into Outdated Availability Parameters. Please replace them with the

Outdated Parameter New Parameter
crate-nice crate36
crate-nice2012 crate53
crate-nice2013 crate79
crate-nice2014 crate89
crate-naughty crate35-festive
crate-naughty2012 crate52-festive
crate-naughty2013 crate78-festive
crate-naughty2014 crate88-festive
store purchase
achievement unlock
strongbox crate81
crate46 crate-scorched
crate74 crate74-haunted
winter2016 crate105
crate##-nohaunt crate##

Deprecated Parameters

Parameter Deprecation reason
strangifier Strangifiers do not grant new items, they merely change the quality of existing ones.
strangifier-strange Strangifiers do not grant new items, they merely change the quality of existing ones.
strangifier-series-5 Strangifiers do not grant new items, they merely change the quality of existing ones.
strangifier-crate-6 Strangifiers do not grant new items, they merely change the quality of existing ones.

local p = {}

-- Imports the function status(number), which returns whether or not a crate is Active or Retired. This is in a separate file so that it can be updated *without* staff intervention.
require('Module:Availability/crate')

-- Defined here so that it can be referenced inside the next three functions
local frame = nil

-- Expands the template Tooltip for a given pair of values.
function tooltip(tool, tip)
  return frame:expandTemplate{title='Tooltip', args={tool, tip}}
end

-- Expands the template Item name for a given value.
function item_name(arg)
  return frame:expandTemplate{title='Item name', args={arg}}
end

-- Expands the template Common string for a given value. Note that some common string values include an additional parameter, here called opt_arg.
function common_string(arg, opt_arg)
  return frame:expandTemplate{title='Common string', args={arg, opt_arg}}
end

-- Returns '(text)', with correct parenthesis characters in Chinese.
function paren(text)
  if if_lang == '/zh_hans' or if_lang == '/zh-hant' then
    return ' (' .. text .. ')'
  else
    return ' (' .. text .. ')'
  end
end

-- Replaces the old Dictionary/templatecore strings
lookup = {
  -- Singleton strings (without a number)
  ['audition-reel'] = function() return '[[Mann Co. Supply Crate/Seriesless_crates' .. if_lang .. '#Audition Reel|' .. common_string('audition reel') .. ']]' end,
  ['australium'] = function() return '[[Mann Up' .. if_lang .. '|' .. common_string('reward') .. ']]' .. paren('[[Australium weapons' .. if_lang .. '|' .. common_string('australium') .. ']]') end,
  ['botkiller'] = function() return '[[Mann Up' .. if_lang .. '|' .. common_string('reward') .. ']]' .. paren('[[Botkiller weapons' .. if_lang .. '|' .. common_string('botkiller') .. ']]') end,
  ['bread-box'] = function() return '[[Bread Box' .. if_lang .. '|' .. item_name('bread box') .. ']]' .. paren('[[Unique' .. if_lang .. '|' .. item_name('unique') .. ']] ' .. common_string('and') .. ' [[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['chemistryset'] = function() return '[[Chemistry Set' .. if_lang .. '|' .. item_name('chemistry set') .. ']]' end,
  ['collectors'] = function() return '[[Chemistry Set' .. if_lang .. '|' .. item_name('chemistry set') .. ']]' .. paren('[[Collectors' .. if_lang .. '|' .. item_name('collector\'s') .. ']]') end,
  ['contract'] = function() return '[[Contracts' .. if_lang .. '|' .. common_string('contract') .. ']]' .. paren('[[Decorated' .. if_lang .. '|' .. item_name('decorated') .. ']]') end,
  ['contract-unique'] = function() return '[[ConTracker' .. if_lang .. '|' .. common_string('contracker') .. ']]' end,
  ['craft'] = function() return '[[Crafting' .. if_lang .. '|' .. common_string('craft') .. ']]' end,
  ['crate-scorched'] = function() return '[[Mann Co. Supply Crate/Retired series' .. if_lang .. '#46|' .. common_string('uncrate') .. ' #46]]' .. paren(common_string('scorched')) end,
  ['creepy-crate'] = function() return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Unlocked Creepy Crates|' .. item_name('unlocked creepy crate') .. ']]' end,
  ['directors'] = function() return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Director\'s Cut|' .. common_string('director\'s cut') .. ']]' end,
  ['distributed'] = function() return common_string('distributed') end,
  ['distributed-expired'] = function() return common_string('distributed-expired') end,
  ['drop'] = function() return '[[Item drop system' .. if_lang .. '|' .. common_string('drop') .. ']]' end,
  ['gift-cauldron'] = function() return '[[Halloween Gift Cauldron' .. if_lang .. '|' .. item_name('halloween gift cauldron') .. ']]' end,
  ['halloween-purchase'] = function() return '[[Mann Co. Store' .. if_lang .. '|' .. tooltip(common_string('purchase'), common_string('purchase-halloween')) .. ']]' end,
  ['hauntedgift'] = function() return '[[Haunted Halloween Gift' .. if_lang .. '|' .. item_name('haunted halloween gift') .. ']]' end,
  ['keyless-crate'] = function() return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Unlocked Cosmetic Crates|' .. item_name('unlocked cosmetic crate') .. ']]' .. paren('[[Unique' .. if_lang .. '|' .. item_name('unique') .. ']] ' .. common_string('and') .. ' [[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['mannup'] = function() return '[[Mann Up' .. if_lang .. '|' .. common_string('reward') .. ']]' end,
  ['mvm-both-types'] = function() return '[[Mann Up' .. if_lang .. '|' .. common_string('reward') .. ']]' .. paren('[[Botkiller weapons' .. if_lang .. '|' .. common_string('botkiller') .. ']] ' .. common_string('and') .. ' [[Australium weapons' .. if_lang .. '|' .. common_string('australium') .. ']]') end,
  ['mvm'] = function() return '[[Mann vs. Machine' .. if_lang .. '|' .. common_string('mvm reward') .. ']]' end,
  ['promotional'] = function() return '[[Promotional items' .. if_lang .. '|' .. common_string('promotional') .. ']]' end,
  ['promotional-expired'] = function() return common_string('promotional-expired') end,
  ['purchase'] = function() return '[[Mann Co. Store' .. if_lang .. '|' .. common_string('purchase') .. ']]' end,
  ['purchase-limited'] = function() return common_string('purchase-limited') end,
  ['retired'] = function() return common_string('retired') end,
  ['stock'] = function() return '[[Stock weapons' .. if_lang .. '|' .. mw.getContentLanguage():ucfirst(item_name('stock')) .. ']]' end,
  ['stockpile'] = function() return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Stockpile|' .. common_string('stockpile crate') .. ']]' end,
  ['strangifier'] = function() return '[[Strangifier' .. if_lang .. '|' .. item_name('strangifier') .. ']]'.. paren('[[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['trade-up'] = function() return '[[Trade-Up' .. if_lang .. '|' .. common_string('trade-up') .. ']]' end,
  ['transmute'] = function() return '[[Halloween Transmute' .. if_lang .. '|' .. common_string('halloween transmute') .. ']] ' .. paren('[[Trading' .. if_lang .. '|' .. common_string('Untradable') .. ']]') end,
  ['unavailable'] = function() return common_string('unavailable') end,
  ['unlock'] = function() return '[[Achievement items' .. if_lang .. '|' .. common_string('unlock') .. ']]' end,
  ['unusual'] = function() return '[[Mann Co. Supply Crate' .. if_lang .. '|' .. common_string('uncrate') .. ']]' .. paren('[[Unusual' .. if_lang .. '|' .. item_name('unusual') .. ']]') end,
  ['warpaint'] = function() return '[[War Paint' .. if_lang .. '|' .. item_name('war paint') .. ']]' .. paren('[[Decorated' .. if_lang .. '|' .. item_name('decorated') .. ']]') end,
    -- Multipart strings (with a number)
  ['crate'] = function(num) return '[[' .. status(num) .. if_lang .. '#' .. num .. '|' .. common_string('uncrate') .. ' #' .. num .. ']]' end,
  ['crate-strange'] = function(num) return '[[' .. status(num) .. if_lang .. '#' .. num .. '|' .. common_string('uncrate') .. ' #' .. num .. ']]' .. paren('[[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['crate-festive'] = function(num) return '[[' .. status(num) .. if_lang .. '#' .. num .. '|' .. common_string('uncrate') .. ' #' .. num .. ']]' .. paren('[[Festive weapons' .. if_lang .. '|' .. item_name('festive') .. ']]') end,
  ['crate-haunted'] = function(num) return '[[' .. status(num) .. if_lang .. '#' .. num .. '|' .. common_string('uncrate') .. ' #' .. num .. ']]' .. paren('[[Haunted' .. if_lang .. '|' .. item_name('haunted') .. ']]') end,
  ['strangifier-crate-'] = function(num) return '[[Strangifier' .. if_lang .. '|' .. item_name('strangifier') .. ']]<sup>' .. tooltip('?', common_string('uncrateable from series number crate', num)) .. '</sup>' .. paren('[[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['strangifier-series-'] = function(num) return '[[Strangifier' .. if_lang .. '|' .. item_name('strangifier') .. ']]<sup>' .. tooltip('?', common_string('series number chemistry sets', num)) .. '</sup>' end,
  ['unusual-'] = function(num) return '[[Mann Co. Supply Crate' .. if_lang .. '|' .. common_string('uncrate') .. ']]' .. paren('[[Unusual' .. if_lang .. '#Group ' .. num .. '|' .. item_name('unusual') .. ']]') end,
  ['xmas'] = function(num) return '[[Smissmas ' .. num .. ' Festive Gift' .. if_lang .. '|' .. item_name('smissmas ' .. num .. ' festive gift') .. ']]' end,
  ['winter'] = function(num) return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Unlocked Winter ' .. num .. ' Cosmetic Case|' .. item_name('unlocked winter ' .. num .. ' cosmetic case') .. ']]' end,
  ['winter-strange'] = function(num) return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Unlocked Winter ' .. num .. ' Cosmetic Case|' .. item_name('unlocked winter ' .. num .. ' cosmetic case') .. ']]' .. paren('[[Unique' .. if_lang .. '|' .. item_name('unique') .. ']] ' .. common_string('and') .. ' [[Strange' .. if_lang .. '|' .. item_name('strange') .. ']]') end,
  ['winter-unusual'] = function(num) return '[[Mann Co. Supply Crate/Seriesless crates' .. if_lang .. '#Unlocked Winter ' .. num .. ' Cosmetic Case|' .. item_name('unlocked winter ' .. num .. ' cosmetic case') .. ']]' .. paren('[[Unique' .. if_lang .. '|' .. item_name('unique') .. ']], [[Strange' .. if_lang .. '|' .. item_name('strange') .. ']] ' .. common_string('and') .. ' [[Unusual' .. if_lang .. '|' .. item_name('unusual') .. ']]') end,

}

-- Some strings that were present in Dictionary/availcore and thus might be used somewhere.
local backwards_compat = {
  ['store'] = 'purchase',
  ['achievement'] = 'unlock',
  ['strangifier-strange'] = 'strangifier',
  ['strangifier'] = 'strangifier', -- String is deprecated, this adds it to the tracking category
  ['strangifier-crate-'] = 'strangifier-crate-', -- String is deprecated, this adds it to the tracking category
  ['strangifier-series-'] = 'strangifier-series-', -- String is deprecated, this adds it to the tracking category

  -- Crate replacements
  ['crate-naughty'] = 'crate35-festive',
  ['crate-naughty2012'] = 'crate52-festive',
  ['crate-naughty2013'] = 'crate78-festive',
  ['crate-naughty2014'] = 'crate88-festive',
  ['crate-nice'] = 'crate36',
  ['crate-nice2012'] = 'crate53',
  ['crate-nice2013'] = 'crate79',
  ['crate-nice2014'] = 'crate89',
  ['crate-nohaunt'] = 'crate',
  ['strongbox'] = 'crate81',
  ['winter2016'] = 'crate105'
}

function p.avail(f)
  frame = f
  local args = f:getParent().args
  count = 0
  for _ in pairs(args) do count = count + 1 end
  if count == 0 then -- There is no other way to count table length in lua.
    args = f.args
  end
  -- Precompute the page's language.
  if_lang = frame:expandTemplate{title='If lang'}

  -- Avail is called with a long list of arguments. Each one needs to be translated and comma-separated.
  avail_string = ''
  for i, arg in ipairs(args) do
    arg = mw.ustring.lower(arg)

    -- Crate 46 is a Scorched Crate, which is a string that isn't used anywhere else.
    if arg == 'crate46' then arg = 'crate-scorched' end
    -- Enchantment: Eternaween was uncrateable from #74, and cannot be Haunted.
    if arg == 'crate74' then arg = 'crate74-haunted' end

    -- Matches strings like 'craft' 'crate1' 'crate26-strange'
    -- Strings like 'crate26-strange' become 'crate-strange' and '26'.
    name1, num, name2 = string.match(arg, '(%D*)(%d*)(%D*)')
    name = name1 .. name2
    
    -- Backwards compatibility
    if backwards_compat[name] ~= nil then
      avail_string = '[[Category:Outdated Availability Parameters]]' .. avail_string
      name = backwards_compat[name]
    end

    if (args[i+2] ~= nil)
    or (args[i+1] ~= nil and args['availability'] ~= nil)
      then -- There are at least two arguments left in the list
      if if_lang == '/zh-hans' then
        avail_string = avail_string .. lookup[name](num) .. '、'
      elseif if_lang == '/zh-hant' then
        avail_string = avail_string .. lookup[name](num) .. ','
      else
        avail_string = avail_string .. lookup[name](num) .. ', '
      end
    elseif (args[i+1] ~= nil and args['availability'] == nil)
    or (args[i+1] == nil and args['availability'] ~= nil)
      then -- There is exactly one more argument in the list
      avail_string = avail_string .. lookup[name](num) .. ' ' .. common_string('or') .. ' '
    else -- args[i+1] == nil and args['availability] == nil
      avail_string = avail_string .. lookup[name](num)
    end
  end -- End looping through arguments.
  if args['availability'] ~= nil then
    avail_string = avail_string .. args['availability']
  end

  return avail_string
end

return p