Module:Infobox/past location
More actions
This documentation is transcluded from Module:Infobox/past location/doc. Changes can be proposed in the talk page.
Function list |
---|
L 20 — methodtable.getInfobox L 46 — renderHistoryData L 60 — renderCoord L 158 — methodtable.setHistoryData L 184 — methodtable.setCategories L 216 — methodtable.setCargoData L 217 — processDate L 224 — processCoord L 231 — storePast L 257 — methodtable.setFrame L 264 — Past.new L 278 — Past.main |
require( 'strict' )
local Past = {}
local hatnote = require( 'Module:Hatnote' )._hatnote
local status = require( 'Module:Status' ).get_status
local common = require( 'Module:Infobox/common' )
local tabber = require( 'Module:Tabber' ).renderTabber
local cargo = mw.ext.cargo
local metatable = {}
local methodtable = {}
metatable.__index = methodtable
local config = {
placeholder_image = 'Amusement Park Placeholder.svg'
}
--- Creates the infobox
function methodtable.getInfobox( self )
--- All this so it won't blow up if owner or park are unknown
local header
local badge
if (badge ~= nil) then
if (self.frameArgs[ 'park' ] ~= nil) then
header = badge .. self.frameArgs[ 'park' ]
elseif (self.frameArgs[ 'owner' ] ~= nil) then
header = badge .. self.frameArgs[ 'owner' ]
else
header = badge .. 'Unknown'
end
elseif (self.frameArgs[ 'park' ] ~= nil) then
header = self.frameArgs[ 'park' ]
elseif (self.frameArgs[ 'owner' ] ~= nil) then
header = self.frameArgs[ 'owner' ]
else
header = 'Unknown'
end
local infobox = require( 'Module:Infobox' ):new( {
placeholderImage = config.placeholder_image,
collapsible = true,
title = header,
} )
local function renderHistoryData( history )
if #history == 1 then return nil end
local content = {}
for _, item in ipairs( history ) do
table.insert( content, infobox:renderItem( {
label = item.name,
data = item.from == item.to and item.from or item.from .. ' - ' .. item.to,
row = true,
spacebetween = true
} ))
end
return content
end
local function renderCoord( coordLat, coordLong )
if (coordLat == nil or coordLong == nil) then
return nil
end
return require( 'Module:Coordinates' )._coord({string.format("%.6f", coordLat), string.format("%.6f", coordLong)})
end
local country = self.frameArgs[ 'country' ]
local location = self.frameArgs[ 'location' ]
if (location == 'ship') then
location = 'Cruise Ship'
end
if (self.frameArgs[ 'state' ] ~= nil) then
location = string.gsub(location, ', ' .. self.frameArgs[ 'state' ], '')
location = location .. ', [[' .. self.frameArgs[ 'state' ] .. ']]'
end
if (country ~= nil) then
if location ~= nil then
location = string.gsub(location, ', ' .. self.frameArgs[ 'country' ], '')
location = location .. ', [[' .. self.frameArgs[ 'country' ] .. ']]'
end
badge = '[[File:'.. country .. '.svg|link='.. country .. '|45px]]'
end
local contents = {}
table.insert( contents, infobox:renderItem( {
label = 'Location',
data = location,
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Name',
data = self.frameArgs[ 'name' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Owner',
data = self.frameArgs[ 'owner' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Coordinates',
data = renderCoord(self.frameArgs['coord_lat'], self.frameArgs['coord_long']),
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Section',
data = common.get_section(self.frameArgs[ 'section' ],self.frameArgs[ 'subsection' ]),
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Opened',
data = self.frameArgs[ 'opened' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Closed',
data = self.frameArgs[ 'closed' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Cost',
data = self.frameArgs[ 'cost' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Replaced',
data = self.frameArgs[ 'replaced' ],
row = true,
spacebetween = true
}))
table.insert( contents, infobox:renderItem( {
label = 'Replacement',
data = self.frameArgs[ 'replacement' ],
row = true,
spacebetween = true
}))
infobox:renderSection( {
class = 'infobox__section',
content = contents,
col = 1
} )
local pageName = self.frameArgs['mapName'] ~= nil and self.frameArgs['mapName'] or mw.title.getCurrentTitle().text
return infobox:renderInfobox( )
end
function methodtable.setHistoryData( self, name )
local data = {}
for i = 50, 1, -1 do
local item = self.frameArgs[ name .. i ]
if item then
local itemFrom = self.frameArgs[ name .. i .. 'From' ]
local itemTo = self.frameArgs[ name .. i .. 'To' ]
itemFrom = itemFrom ~= nil and itemFrom or 'unknown'
itemTo = itemTo ~= nil and itemTo or 'unknown'
table.insert( data, {
name = item,
from = itemFrom,
to = itemTo
} )
end
end
if #data == 0 and self.frameArgs[ name ] then
table.insert( data, {
name = self.frameArgs[ name ]
} )
end
self[name .. 'History'] = data
end
--- Sets the main categories for this object
function methodtable.setCategories( self )
if config.set_categories == false or mw.title.getCurrentTitle().namespace ~= 0 then
return
end
if (self.frameArgs[ 'operator' ] ~= nil) then
table.insert( self.categories, '[[Category:Past location boxes using the "operator" parameter]]' )
end
local country = self.frameArgs['country']
if country then
if country == 'USA' then
local state = self.frameArgs['state']
if state then
if state == 'Georgia' then
table.insert( self.categories, '[[Category:Amusement parks in Georgia (state)]]' )
else
table.insert( self.categories, string.format( '[[Category:Amusement parks in %s]]', state ) )
end
else
table.insert( self.categories, '[[Category:Amusement parks in the United States]]' )
end
elseif country == 'ship' then
table.insert( self.categories, '[[Category:Ships]]' )
else
local countryHandler = require( 'Module:Country handler' ).country
table.insert( self.categories, string.format( '[[Category:Amusement parks in %s]]', countryHandler(country) ) )
end
end
end
--- Sets the cargo store for this object
function methodtable.setCargoData( self )
local function processDate(date)
if date ~= nil and (string.sub(date, 1, 2) == 'c.' or string.sub(date, -1) == 's') then
return nil
end
return date
end
local function processCoord(coordLat, coordLong)
if (coordLat ~= nil and coordLong ~= nil) then
return string.format('%s, %s', coordLat, coordLong)
end
return nil
end
local function storePast()
local table = 'Roller_Coaster_Past_Locations'
local args = {
Location = self.frameArgs['name'],
Location = self.frameArgs['location'],
Country = self.frameArgs['country'],
State = self.frameArgs['state'],
Park = self.frameArgs['park'],
Opened = processDate(self.frameArgs['opened']),
Closed = processDate(self.frameArgs['closed']),
Operator = self.frameArgs['operator'],
Section = self.frameArgs['section'],
Cost = self.frameArgs['cost'],
Replaced = self.frameArgs['replaced'],
Replacement = self.frameArgs['replacement'],
Construction = self.frameArgs['construction'],
Ordering = self.frameArgs['Ordering'],
PastCoord = processCoord(self.frameArgs['coord_lat'], self.frameArgs['coord_long'])
}
cargo.store( table, args )
end
storePast()
end
--- Set the frame and load args
--- @param frame table
function methodtable.setFrame( self, frame )
self.currentFrame = frame
self.frameArgs = require( 'Module:Arguments' ).getArgs( frame )
end
--- New Instance
function Past.new( self )
local instance = {
categories = {}
}
setmetatable( instance, metatable )
return instance
end
--- "Main" entry point for templates that saves the API Data and outputs the infobox
---
--- @param frame table Invocation frame
--- @return string
function Past.main( frame )
local instance = Past:new()
instance:setFrame( frame )
instance:setCategories()
instance:setCargoData()
local infobox = instance:getInfobox()
return infobox .. table.concat( instance.categories )
end
return Past