The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.

Documentation for this module may be created at Module:Infobox body of water tracking/doc

local p = {}

function p.tracking(frame)
    local function isblank( val ) 
        return (val == nil) or val:match('^[%s]*$')
    end
    
    local function hasnoconvert( val )
    	local res = nil
    	val = mw.text.killMarkers(val)
    	if val:match('[0-9]') then
    		res = 1
    		if val:match('[%(][−0-9%.]') and val:match('[%)]') then
    			res = nil
    		end
		end
		return res
	end
    
    local cats = ''
    local maincats = ''
    local args = frame:getParent().args
    local AZ = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
    local warnmsg = {}
    
    if isblank(args['image']) then
    	maincats = maincats .. '[[Category:Articles using infobox body of water without image]]'
    elseif isblank(args['alt']) then
		maincats = maincats .. '[[Category:Articles using infobox body of water without alt]]'
    end
    
    if isblank(args['coords']) and isblank(args['coordinates']) then 
    	maincats = maincats .. '[[Category:Articles using infobox body of water without coordinates]]'
    end
    
    if (isblank(args['pushpin_map']) ) then
    	maincats = maincats .. '[[Category:Articles using infobox body of water without pushpin_map]]'
    elseif isblank(args['pushpin_map_alt']) then
		maincats = maincats .. '[[Category:Articles using infobox body of water without pushpin_map_alt]]'
    end
    
    if (isblank(args['image_bathymetry']) ) then
    	maincats = maincats .. '[[Category:Articles using infobox body of water without image_bathymetry]]'
    elseif isblank(args['alt_bathymetry']) then
		maincats = maincats .. '[[Category:Articles using infobox body of water without alt_bathymetry]]'
    end
 
    local duplicate_parameters = 0
	local duplicate_list = {
		{'child', 'embed'},
        {'name', 'lake_name'},
        {'image', 'image_lake'},
        {'alt', 'alt_lake'},
        {'caption', 'caption_lake'},
        {'coordinates', 'coords'},
        {'lake_type', 'type'},
        {'ocean_type', 'type'},
        {'lake_type', 'ocean_type'},
        {'part_of', 'parent'},
        {'basin_countries', 'countries'},
        {'catchment_km2', 'catchment'},
        {'length_km', 'length'},
        {'width_km', 'width'},
        {'area_km2', 'area'},
        {'depth_m', 'depth'},
        {'max-depth_m', 'max-depth'},
        {'volume_km3', 'volume'},
        {'shore_km', 'shore'},
        {'elevation_m', 'elevation'},
        {'settlements', 'cities'},
        {'extra', 'nrhp'},
        {'extra', 'embedded'},
        {'embedded', 'nrhp'}
    }
    for i, params in ipairs(duplicate_list) do
    	if args[params[1]] and args[params[2]] then
    		duplicate_parameters = duplicate_parameters + 1
    		table.insert(warnmsg, 'Cannot use <code>' .. params[1] .. '</code> and <code>' .. params[2] .. '</code> at the same time.')
    	end
    end
    if (duplicate_parameters > 0) then
        cats = cats .. '[[Category:Pages using infobox body of water with ' ..
        	'duplicate parameters|' .. 
        	string.sub(AZ, duplicate_parameters, duplicate_parameters+1) .. ']]'
    end
    
    local no_convert_parameters = 0
    local dim_list = {
    	'catchment', 'length', 'width', 'area', 'depth', 'max-depth', 'volume',
    	'shore', 'elevation', 'temperature_low', 'temperature_high'}
	for i, param in ipairs(dim_list) do
	   if hasnoconvert(args[param] or '') then
	     no_convert_parameters = no_convert_parameters + 1
	     table.insert(warnmsg, 'Unconverted dimensions in <code>' .. param .. '</code>')
		end
	end
    if (no_convert_parameters > 0) then
        maincats = maincats .. '[[Category:Pages using infobox body of water with a non-automatically converted dimension|' ..
        	string.sub(AZ,no_convert_parameters, no_convert_parameters+1) .. ']]'
    end
    
    if #warnmsg > 0 then
    	cats = require('Module:If preview')._warning({
    		table.concat(warnmsg, '<br>') .. '<br>(Infobox body of water).'
    	}) .. cats
    end

	if maincats ~= '' and mw.title.getCurrentTitle().namespace == 0 then
		cats = cats .. maincats
	end
	
    return cats
end
    
return p