UWAGA
Strona jest ponownie oddana do uzytku po zabiegach konfiguracyjnych. Jeśli zobaczą Państwo na niej jakieś błedy techniczne, prosimy o ich zgłoszenie.

Większość artykułów w portalu to nasze własne teksty z kluczowych dziedzin związanych z naszą misją. Spora część materiałów pochodzi też z polskiej wersji Wikipedii, gdzie były odrzucone ze względu na politykę redaktorów (przeczytaj o krytyce Wikipedii). Są też i takie, które zostały przeniesione na nasze strony, gdyż stanowią istotne uzupełnienie merytorycznej treści naszego serwisu. Wszystkie artykuły podlegają edycji przez naszych Użytkowników, dlatego ich wersje mogą się różnić od prezentowanych na innych witrynach.

Moduł:Listen

Z Wedapedia
Przejdź do nawigacji Przejdź do wyszukiwania

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Listen/opis

-- This module implments {{listen}}.

local mFileLink = require('Moduł:File link')
local mTableTools = require('Moduł:TableTools')
local mSideBox = require('Moduł:Side box')

local p = {}

function p.main(frame)
	local origArgs = frame:getParent().args
	local args = {}
	for k, v in pairs(origArgs) do
		v = v:match('^%s*(.-)%s*$')
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end

function p._main(args)
	-- Organise the arguments by number.
	local numArgs = {}
	do
		local origNumArgs = mTableTools.numData(args)
		origNumArgs[1] = origNumArgs.other -- Overwrite args.filename1 etc. with args.filename etc.
		origNumArgs = mTableTools.compressSparseArray(origNumArgs)
		for i, t in ipairs(origNumArgs) do
			if t.filename then
				numArgs[#numArgs + 1] = t
			end
		end
	end

	-- Find whether we are outputting a plain or an embedded box.
	local isPlain = args.plain == 'yes'
	local isEmbedded = args.embed and true or false

	-- Build the arguments for {{side box}}
	local sbargs = {}
	sbargs.metadata = 'no'
	sbargs.position = args.pos

	-- Style arguments
	do
		local style = {}
		if isPlain then
			style[#style + 1] = 'border:none'
			style[#style + 1] = 'background:transparent'
			style[#style + 1] = 'float:none'
		end
		if isEmbedded then
			style[#style + 1] = 'border-collapse:collapse'
			style[#style + 1] = 'border-width:1px 0 0 0'
			style[#style + 1] = 'background:transparent'
			style[#style + 1] = 'float:none'
			style[#style + 1] = 'margin:0 -5px'
		end
		if args.pos == 'left' then
			style[#style + 1] = 'float:left'
		elseif args.pos == 'center' then
			style[#style + 1] = 'float:none'
			style[#style + 1] = 'margin-left:auto'
			style[#style + 1] = 'margin-right:auto'
		end
		
		style[#style + 1] = args.style
		sbargs.style = table.concat(style, '; ')
	end
	sbargs.textstyle = 'line-height:1.1em'

	-- Image
	if not isPlain and not isEmbedded then
		if args.image then
			sbargs.image = args.image
		else
			local images = {
				speech = 'Audio-input-microphone.svg',
				music = 'Gnome-mime-audio-openclipart.svg'
			}
			local image = args.type
				and images[args.type]
				or 'Gnome-mime-sound-openclipart.svg'
			sbargs.image = mFileLink._main{
				file = image,
				size = '65x50px',
				location = 'center',
				link = '',
				alt = ''
			}
		end
	end

	-- Text
	do
		local header
		if args.header then
			header = mw.html.create('div')
			header
				:css{
					background = 'transparent',
					['text-align'] = 'left',
					padding = args.embed and '2px 0' or '2px'
				}
				:wikitext(args.header)
			header = tostring(header)
			header = header .. '\n'
		else
			header = ''
		end
		local text = {}
		for i, t in ipairs(numArgs) do
			text[#text + 1] = p.renderRow(t.filename, t.title, t.play, t.alt, t.description)
		end
		sbargs.text = header .. table.concat(text)
	end

	-- Below
	if not isPlain and not isEmbedded and args.help ~= 'no' then
		sbargs.below = string.format(
			"<span>''Problem z odtwarzaniem %s? Zobacz [[:commons:Commons:Pomoc - multimedia|strony pomocy]].''</span>",
			#numArgs > 1 and 'tych plików' or 'tego pliku'
		)
	end

	-- Render the side box.
	local sideBox = mSideBox._main(sbargs)

	-- Render the tracking categories.
	local trackingCategories = p.renderTrackingCategories(args, numArgs)

	return sideBox .. trackingCategories
end

function p.renderRow(filename, title, play, alt, description)
	-- Renders the HTML for one file description row.
	if not filename then
		return nil
	end
	local root = mw.html.create('')
	root
		:tag('div')
			:addClass('haudio')
			:newline()
			:tag('div')
				:css('padding', '4px 0')
				:wikitext(string.format('[[:File:%s|%s]]', filename, title or ''))
				:done()
			:newline()
			:tag('div')
				:wikitext(
					play ~= 'no'
						and mFileLink._main{
							file = filename,
							size = '220px',
							alt = alt
						}
						or nil
				)
				:done()
			:newline()
			:tag('div')
				:css('padding', '2px 0 0 0')
				:addClass('description')
				:wikitext(description)
				:done()
			:done()
		:tag('hr', {selfClosing = true})
	return tostring(root)
end

function p.renderTrackingCategories(args, numArgs, titleObj)
	-- Renders all tracking categories produced by the template.
	-- args and numArgs are passed through from p._main,
	-- and the titleObj is only used for testing purposes.
	local cats = {}

	local currentTitle = titleObj or mw.title.getCurrentTitle()
	if currentTitle.namespace == 0 then
		-- We are in mainspace.
--		cats[#cats + 1] = 'Articles with hAudio microformats'

		for i, t in ipairs(numArgs) do
			local success, title = pcall(mw.title.new, 'Media:' .. t.filename)
			if success and title and not title.exists then
				cats[#cats + 1] = 'Artykuły z brakującym plikiem w szablonie listen'
				break
			end
		end
	end

--	if args.plain == 'yes' then
--		cats[#cats + 1] = 'Listen template using plain parameter'
--	end

	for i, cat in ipairs(cats) do
		cats[i] = string.format('[[Kategoria:%s]]', cat)
	end
	return table.concat(cats)
end

return p