Jump to content

Module:Naval Vessel Register URL

Permanently protected module
From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Jackmcbarn (talk | contribs) at 00:34, 28 September 2016 (edit conflict? redo my edit). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

--[[  
 
This module generates links to ships in the Naval Vessel Register (nvr.navy.mil) database.  
It is used by Template:NVR_url and Template:NVR_SC_url
 
Please do not modify this code without applying the changes first at Module:NVR/sandbox and testing 
at Module:NVR/sandbox/testcases and Module talk:NVR/sandbox/testcases.
 
Authors and maintainers:
* User:RP88
 
]]

require('Module:No globals')

local p = {}

-- =======================================
-- === Private Functions =================
-- =======================================

--[[
Generate link to NVR database.
]]
local function nvr_link( nvrid, oldid, supportship, title )
	
	local link = ''
	local url_str = ''
	
	if oldid then
		if supportship then
			url_str = 'http://www.nvr.navy.mil/NVRSERVICECRAFT/DETAILS/' .. nvrid .. '.HTM'
		else
			url_str = 'http://www.nvr.navy.mil/NVRSHIPS/DETAILS/' .. nvrid .. '.HTM'
		end
	else
		url_str = 'http://www.nvr.navy.mil/SHIPDETAILS/SHIPSDETAIL_' .. nvrid .. '.HTML'
	end

	if (title == '') then
		link = url_str
	else
		link = '[' .. url_str .. ' ' .. title .. ']'
	end
	
    return link
end

-- =======================================
-- === Public Functions ==================
-- =======================================

--[[
MakeShipLink
 
This function returns a link to a ship in the Naval Vessel Register.
 
Usage:
{{#invoke:NVR|MakeShipLink|1=|title=}}
{{#invoke:NVR|MakeShipLink}} - uses the caller's parameters
 
Parameters
    1: The 'file name' portion of the url path (typically the ship's hull designation) without the .HTM/.HTML extension. 
    2, title: A title or label for the link.
]]
function p.MakeShipLink( frame )
	-- if no argument provided than check parent template/module args
	local args = frame.args
	if args[1]==nil then
		args = frame:getParent().args 
	end
	
	local nvrid = args[1] or ''; 
	local title = args["title"] or args[2] or '';

	local output = p._MakeShipLink(nvrid, title)

	return output
end

--[[
MakeServiceShipLink
 
This function returns a link to a service ship in the Naval Vessel Register.
 
Usage:
{{#invoke:NVR|MakeServiceShipLink|1=|title=}}
{{#invoke:NVR|MakeServiceShipLink}} - uses the caller's parameters
 
Parameters
    1: The 'file name' portion of the url path (typically the ship's hull designation) without the .HTM/.HTML extension. 
    2, title: A title or label for the link.
]]
function p.MakeServiceShipLink( frame )
	-- if no argument provided than check parent template/module args
	local args = frame.args
	if args[1]==nil then
		args = frame:getParent().args 
	end
	
	local nvrid = args[1] or ''; 
	local title = args["title"] or args[2] or '';

	local output = p._MakeServiceShipLink(nvrid, title)

	return output
end


--[[
This function returns a link to a ship in the Naval Vessel Register. 

Parameters
	nvrid: The 'file name' portion of the url path (typically the ship's hull designation) without the .HTM/.HTML extension, as a string.
	title: Title for link, set to '' for a bare link without a title.
]]
function p._MakeShipLink( nvrid, title )	
	local output = ''
	
	-- if the id appears to be an old id, convert it to a new id, if possible.
	nvrid = mw.ustring.upper(nvrid)
	
	if (nvrid == 'MAINE') then
		nvrid = '939'
	elseif (nvrid == 'MARCOS') then
		nvrid = '940'
	elseif (nvrid == 'OLDIRON') then
		nvrid = '1315'
	elseif (nvrid == 'AFSB15') then
		nvrid = 'AFSB_(I)_15'
	elseif (mw.ustring.find(nvrid, "^[A-Z]+[0-9]+$") ~= nil) then
		nvrid = mw.ustring.gsub(nvrid, "^([A-Z]+)([0-9]+)$", "%1_%2", 1);
	end
	
	output = nvr_link(nvrid, false, false, title)
		
	return output
end

--[[
This function returns a link to a service ship in the Naval Vessel Register. 

Parameters
	nvrid: The 'file name' portion of the url path (typically the ship's hull designation) without the .HTM/.HTML extension, as a string.
	title: Title for link, set to '' for a bare link without a title.
]]
function p._MakeServiceShipLink( nvrid, title )	
	local output = ''
	local oldid = false
	
	-- if the id appears to be an old id, convert it to a new id, if possible.
	nvrid = mw.ustring.upper(nvrid)
	
	if (nvrid == 'AFDB7_1') then
		nvrid = 'AFDB_7'
	elseif (nvrid == 'AFDB1_1') then
		oldid = true
	elseif (nvrid == 'AFDB1_3') then
		oldid = true
	elseif (nvrid == 'AFDB1_4') then
		oldid = true
	elseif (nvrid == 'AFDB7_2') then
		oldid = true
	elseif (mw.ustring.find(nvrid, "^[A-Z]+[0-9]+$") ~= nil) then
		nvrid = mw.ustring.gsub(nvrid, "^([A-Z]+)([0-9]+)$", "%1_%2", 1);
	end
	
	output = nvr_link(nvrid, oldid, true, title)
		
	return output
end

return p