Moduł:Information: Różnice pomiędzy wersjami

Z Nonsensopedii, polskiej encyklopedii humoru
M (+jedna mała rzecz a cieszy)
M (plz don't blow up)
Linia 227: Linia 227:
local aType = nil
local aType = nil
local a = remoteData.author
local a = remoteData.author
local aOpis
if a.isAnonymous then
if a.isAnonymous then
appendProps('Ma autora', 'anonim')
appendProps('Ma autora', 'anonim')
aOpis = 'anonim'
aType = 'anonim'
aType = 'anonim'
elseif a.text or '' ~= '' then
elseif a.text or '' ~= '' then
appendProps('Ma autora', a.text)
appendProps('Ma autora', a.text)
local opis = a.text
aOpis = a.text
if a.url then
if a.url then
opis = '[' .. a.url .. ' ' .. mw.ustring.gsub(a.text, '[%[%]]', '') .. ']'
aOpis = '[' .. a.url .. ' ' .. mw.ustring.gsub(a.text, '[%[%]]', '') .. ']'
if not a.wikimediaUsername then
if not a.wikimediaUsername then
appendProps('Ma zewnętrznego autora', a.url .. ';' .. mw.ustring.gsub(a.text, ';', '\\;'))
appendProps('Ma zewnętrznego autora', a.url .. ';' .. mw.ustring.gsub(a.text, ';', '\\;'))
Linia 245: Linia 247:
if a.wikimediaUsername then
if a.wikimediaUsername then
opis = '[[commons:User:' .. a.wikimediaUsername .. '|' .. a.wikimediaUsername .. ']]'
aOpis = '[[commons:User:' .. a.wikimediaUsername .. '|' .. a.wikimediaUsername .. ']]'
appendProps('Ma autora z Wikimedia Commons', 'commons:User:' .. a.wikimediaUsername)
appendProps('Ma autora z Wikimedia Commons', 'commons:User:' .. a.wikimediaUsername)
aType = 'użytkownik Commons'
aType = 'użytkownik Commons'
Linia 256: Linia 258:
if a.wikipediaArticleTitle then
if a.wikipediaArticleTitle then
opis = '[[wikipedia:' .. a.wikipediaArticleLang .. ':' ..
aOpis = '[[wikipedia:' .. a.wikipediaArticleLang .. ':' ..
a.wikipediaArticleTitle .. '|' .. a.wikipediaArticleTitle .. ']]'
a.wikipediaArticleTitle .. '|' .. a.wikipediaArticleTitle .. ']]'
end
end
appendProps('Ma opis autorstwa', opis)
end
end
appendProps('Ma opis autorstwa', aOpis)
if aType then
if aType then
table.insert(importInfo, 'autor (' .. aType .. ')')
table.insert(importInfo, 'autor (' .. aType .. ')')
end
end
addRow('fileinfotpl_import_info', 'Importowane dane', table.concat(importInfo, ', '))
addRow('fileinfotpl_import_info', 'Importowane dane', table.concat(importInfo, ', '))

Wersja z 21:22, 13 sty 2021

Moduł generujący tabelkę w szablonie {{Information}} i ustawiający odpowiednie własności semantyczne. Instrukcję korzystania znajdziesz na stronie Nonsensopedia:Opisywanie grafik.

Zobacz też: Moduł:InformationProvider, który pobiera informacje o plikach.


local tools = require('Moduł:Narzędzia')
local linki = require('Moduł:Linki')
local data
local props = {}
local rows = {}

-- funkcje lokalne

-- funkcja pomocnicza do scalania tabel atrybutów
local function appendProps(key, value)
	props[key] = props[key] or {}
	table.insert(props[key], value)
end

local function addRow(id, name, content, trid, tdstyle)
	local row = '<tr style="vertical-align: top"'
	if not content then content = '' end
	
	if trid then
		row = row .. '; id="' .. trid .. '">'
	else
		row = row .. '>'
	end
	
	row = row .. '<td id="' .. id .. '" style="background: #ccf; text-align: right; padding-right: 0.4em; width: 15%; font-weight:bold">'
	row = row .. name .. '</td>'
	
	if tdstyle then
		row = row .. '<td style="' .. tdstyle .. '">' .. content .. '</td></tr>'
	else
		row = row .. '<td>' .. content .. '</td></tr>'
	end
	
	table.insert(rows, row)
end

local function getTable()
	local s = 
		'<table class="information-template toccolours" style="width: 100%;" cellpadding="4">'
		.. table.concat(rows)
		.. '</table>'
	return s
end

------------------------------------------------------------------------

local function processParts(frame, args)
	local prows = {}
	
	local function pPart(num)
		local row = '<tr><td>' .. args['psource' .. num] .. '</td>'
		row = row .. '<td>' .. (args['pauthor' .. num] or '') .. '</td>'
		local plic = (args['plic' .. num] or 'nolic')
		plic = frame:expandTemplate{ title=plic, args={ mini=1 } }
		row = row .. '<td style="padding: 0;">' .. plic .. '</td></tr>'
		table.insert(prows, row)
	end
	
	if args['psource'] ~= nil then pPart('') end
	
	for i = 1, 50 do
		if args['psource' .. i] ~= nil then pPart(i)
		else break end
	end
	
	if #prows == 0 then return end
	
	local s = [[<table class="info-inner"><tr>
<td style="background: #ccf; font-weight:bold">Źródło</td>
<td style="background: #ccf; font-weight:bold">Autor</td>
<td style="background: #ccf; font-weight:bold">Licencja</td>
</tr>]]
	s = s .. table.concat(prows) .. '</table>'
	addRow('fileinfotpl_parts', 'Składowe', s, 'fileinforow_parts', 'padding: 0')
end

local function processCaption(args, required)
	-- caption
	local captionLinksCount = 0
	-- stosujemy podpis jako domyślny opis dla MMV, a w razie jego braku bierzemy pole description
	local descriptionTag = 'fileinfotpl_desc'
	if args['caption'] or demo then
		appendProps('Ma podpis pliku', args['caption'])
		local captionDisplay = args['caption']
		descriptionTag = 'fileinfotpl_full_desc'
		
		local captionLinks = linki.wLink(args['caption'] or '')
		for k, v in pairs(captionLinks) do
			appendProps('Linkuje w podpisie', k)
			captionLinksCount = captionLinksCount + 1
		end
		
		if captionLinksCount == 0 and captionDisplay ~= nil then
			captionDisplay = captionDisplay .. ' ' .. 
				mw.smw.info('W podpisie nie ma żadnego linku do artykułu. Rozważ wstawienie jakiegoś, by odnieść czytelnika do powiązanego artykułu.', 'warning')
		end
		
		addRow('fileinfotpl_desc', 'Podpis', captionDisplay)
	else
		appendProps('Nie ma podpisu pliku', true)
		if required then
			-- inne ID bo nie chcemy żeby pokazywało nam ten error w podglądach
			addRow('fileinfotpl_desc_error', 'Podpis', "''Brak''")
		end
	end
	appendProps('Liczba linków w podpisie', captionLinksCount)
	
	return descriptionTag
end

-- zbuduj tabelkę dla plików z lokalnego repo
local function doLocal(frame, args)
	appendProps('Pochodzi z repozytorium', 'Nonsensopedia')
	local demo = args['demo'] ~= nil
	
	-- caption
	local descriptionTag = processCaption(args)
	
	-- description
	if args['description'] then
		appendProps('Ma opis', args['description'])
		addRow(descriptionTag, 'Opis', args['description'])
	else
		appendProps('Nie ma opisu', true)
		addRow(descriptionTag, 'Opis', "''Brak''")
	end
	
	-- składowe
	processParts(frame, args)
	
	-- data
	if args['date'] or demo then
		if not data then data = require('Module:Data') end		-- lazy
		local dSMW, dClean = data.processToSMW(args['date'])
		appendProps('Ma opis daty', dClean)
		addRow('fileinfotpl_date', 'Data', dSMW)
	else
		appendProps('Nie ma daty', true)
	end
	
	-- źródło
	if args['source'] then
		local source = require('Module:Źródło')
		local aprops, s = source.process(args['source'])
		if not demo then mw.smw.set(aprops) end
		addRow('fileinfotpl_src', 'Źródło', args['source'])
	else
		addRow('fileinfotpl_src', 'Źródło',
			"'''Nie podano źródła.''' Uzupełnij <code>Source=</code> (''Praca własna'', adres URL strony lub pliku)")
		if not demo then appendProps('Nie ma podanego źródła', true) end
	end
	
	-- author
	if args['author'] or demo then
		local autor = require('Module:Autor')
		local aprops, s = autor.process(args['author'], true)
		if not demo then mw.smw.set(aprops) end
		addRow('fileinfotpl_aut', 'Autor', s)
	end
	
	-- permission
	if args['permission'] or demo then
		-- TODO: smw i te sprawy
		addRow('fileinfotpl_perm', 'Licencja', args['permission'])
	end
	
	-- confirmation
	if args['confirmation'] or demo then
		appendProps('Ma potwierdzenie licencji', args['confirmation'])
		addRow('fileinfotpl_confirmation', 'Potwierdzenie licencji', args['confirmation'])
	end
	
	-- other versions
	local ov = args['other_versions']
	if (ov and ov ~= '' and ov ~= '-' and ov ~= 'none') or demo then
		local ovs = linki.wLink(ov or '')
		for l, v in pairs(ovs) do
			if mw.ustring.find(l, ':') == 1 then
				appendProps('Ma inną wersję', mw.ustring.gsub(l, ';', '\\;') .. ';' .. mw.ustring.gsub(v, ';', '\\;'))
			elseif #l > 0 then
				appendProps('Ma inną wersję', mw.ustring.gsub(l, ';', '\\;'))
			end
		end
		
		addRow('fileinfotpl_ver', 'Inne wersje', ov)
	end
	
	-- location
	local loc = args['location']
	if loc then
		local locModule = require('Moduł:Lokalizacja')
		local _, text, geoprops = locModule.parseLocation(frame, loc, true)
		
		for key, val in pairs(geoprops) do
			appendProps(key, val)
		end
		
		addRow('fileinfotpl_loc', 'Lokalizacja', text)
	end
	
	if not demo then mw.smw.set(props) end
	return getTable()
end

-- zbuduj tabelkę dla pliku z Commons
local function doRemote(frame, args, title)
	local scc = mw.ext.commonsClient.getData(title)
	local remoteData = nil
	for k, v in pairs(scc) do remoteData = v end
	if remoteData == nil or not remoteData.found then
		return doNoSuchFile(args, title)
	end
	
	local demo = args['demo'] ~= nil
	appendProps('Pochodzi z repozytorium', 'Wikimedia Commons')
	appendProps('Ma identyfikator Wikimedia Commons', remoteData.entityId)
	processCaption(args, true)
	
	local importInfo = {}
	if remoteData.location then
		table.insert(importInfo, 'lokalizacja')
		appendProps('Ma lokalizację', 
			remoteData.location.latitude .. ', ' .. remoteData.location.longitude)
	end
	
	-- autor
	local aType = nil
	local a = remoteData.author
	local aOpis
	if a.isAnonymous then
		appendProps('Ma autora', 'anonim')
		aOpis = 'anonim'
		aType = 'anonim'
	elseif a.text or '' ~= '' then
		appendProps('Ma autora', a.text)
		aOpis = a.text
		
		if a.url then
			aOpis = '[' .. a.url .. ' ' .. mw.ustring.gsub(a.text, '[%[%]]', '') .. ']'
			if not a.wikimediaUsername then
				appendProps('Ma zewnętrznego autora', a.url .. ';' .. mw.ustring.gsub(a.text, ';', '\\;'))
				aType = 'link'
			end
		else
			aType = 'tekst'
		end
		
		if a.wikimediaUsername then
			aOpis = '[[commons:User:' .. a.wikimediaUsername .. '|' .. a.wikimediaUsername .. ']]'
			appendProps('Ma autora z Wikimedia Commons', 'commons:User:' .. a.wikimediaUsername)
			aType = 'użytkownik Commons'
		end
		
		if a.wikidataId then
			appendProps('Ma autora z Wikidanych', a.wikidataId)
			aType = 'Wikidane'
		end
		
		if a.wikipediaArticleTitle then
			aOpis = '[[wikipedia:' .. a.wikipediaArticleLang .. ':' .. 
				a.wikipediaArticleTitle .. '|' .. a.wikipediaArticleTitle .. ']]'
		end
	end
	appendProps('Ma opis autorstwa', aOpis)
	
	if aType then 
		table.insert(importInfo, 'autor (' .. aType .. ')')
	end
	
	addRow('fileinfotpl_import_info', 'Importowane dane', table.concat(importInfo, ', '))
	
	if not demo then mw.smw.set(props) end
	return getTable()
end

-- zbuduj tabelkę dla nieistniejącego pliku
local function doNoSuchFile(args, title)
	local demo = args['demo'] ~= nil
	
	addRow('fileinfotpl_error', 'Błąd', 'Nie odnaleziono pliku "' .. title .. '" ani na Nonsensopedii, ani w Wikimedia Commons.')
	appendProps('Pochodzi z repozytorium', 'nieznane')
	
	if not demo then mw.smw.set(props) end
	return getTable()
end

-- funkcje eksportowane
local p = {}

-- zrób cuda
function p.information(frame)
	local args = tools.getArgs(frame)
	
	local title = args['title'] or mw.title.getCurrentTitle().text
	local repos = mw.ext.commonsClient.getFileRepo(title)
	for k, v in pairs(repos) do
		if v == 'wikimediacommons' then return doRemote(frame, args, title)
		else return doLocal(frame, args) end
	end
	
	return doNoSuchFile(args, title)
end

return p