Модуль:Infobox film/track

Материал из Data-in

Для документации этого модуля может быть создана страница Модуль:Infobox film/track/doc

local p = {}

local function check(args, sources, targets)
	local source
	for _, param in ipairs(sources) do
		if args[param] and args[param] ~= '' then
			source = param
			break
		end
	end
	if not source then
		return false
	end
	local hasError = false
	for link in mw.ustring.gmatch(args[source], '%[%[[^%[%]]+%]%]') do
		local name = mw.ustring.match(link, '([^%|]+)%]%]$', 3)
		for _, param in ipairs(targets) do
			if args[param] and args[param] ~= '' then
				local match = mw.ustring.match(args[param], '.?.?%f[%w]' .. name .. '%f[%W]')
				-- Eliminate duplicate links
				if match and not mw.ustring.find(match, '^%[[%[:]') then
					mw.log('The link "' .. link .. '" in |' .. source .. '= should be moved to |' .. param .. '=.')
					hasError = true
					break
				end
			end
		end
	end
	return hasError
end

function p.main(frame)
	local args = frame:getParent().args
	local hasError1 = check(args, {'producer', 'producers'}, {'writer', 'writers', 'screenplay', 'story', 'based_on'})
	local hasError2 = check(args, {'music'}, {'cinematography', 'editing'})
	if hasError1 or hasError2 then
		local namespace = mw.title.getCurrentTitle().namespace
		if namespace == 0 or namespace == 118 then
			return '[[Category:Pages using infobox film with incorrectly placed links]]'
		end
	end
end

return p