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

Z Nonsensopedii, polskiej encyklopedii humoru
M
M
Linia 62: Linia 62:
-- dodatkowe argumenty przy wywołaniu szablonu, sterujące wyświetlaniem informacji o copydownie/domniemaniu
-- dodatkowe argumenty przy wywołaniu szablonu, sterujące wyświetlaniem informacji o copydownie/domniemaniu
local modifierArgs = ""
local modifierArgs, modifierHTML = "", ""
-- subobject dla SMW
-- subobject dla SMW
Linia 76: Linia 76:
modifierArgs = modifierArgs .. "|domniemanie=1"
modifierArgs = modifierArgs .. "|domniemanie=1"
obj["Ma domniemaną licencję"] = true
obj["Ma domniemaną licencję"] = true
modifierHTML = modifierHTML .. '<div class="domniemanie" style="background-color: #c044db; width: 100%; text-align: center; padding: 2px 0 0 0; font-weight: bold"><abbr class="copydown" title="Licencja domniemana">D</abbr></div>'
elseif name == "copydown" then
elseif name == "copydown" then
modifierArgs = modifierArgs .. "|copydown=1"
modifierArgs = modifierArgs .. "|copydown=1"
obj["Ma licencję copydown"] = true
obj["Ma licencję copydown"] = true
modifierHTML = modifierHTML .. '<div class="copydown" style="background-color: #76d3db; width: 100%; text-align: center; padding: 2px 0 0 0; font-weight: bold"><abbr class="copydown" title="Licencja copydown">C</abbr></div>'
if templateTable.args["lic"] ~= nil then
if templateTable.args["lic"] ~= nil then
-- przechodzimy do argumentu lic
-- przechodzimy do argumentu lic
Linia 126: Linia 128:
row = row .. '<div style="display: none" class="js-preview-call"><nowiki>' .. templateCall .. '</nowiki></div>'
row = row .. '<div style="display: none" class="js-preview-call"><nowiki>' .. templateCall .. '</nowiki></div>'
row = row .. '<div style="display: flex">'
row = row .. '<div style="display: flex">' .. modifierHTML
-- expand template będzie na końcu
-- expand template będzie na końcu

Wersja z 12:19, 28 cze 2020

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

local tools = require('Moduł:Narzędzia')
local licenseTools = require("Moduł:Narzędzia licencyjne")
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 plic = (args['plic' .. num] or 'nolic')
		
		-- wyciąganie wewnętrznego szablonu licencji i modyfikatorów typu domniemanie
		
		local template, templateTable, templateCall
		if plic:find("<table") == nil then -- użytkownik przekazał tylko nazwę szablonu
			template = plic
			templateCall = "{{" .. template .. "}}"
		else
			templateTable = licenseTools.getTemplateFromCode(plic)
			templateCall = licenseTools.reconstructTemplateCall(templateTable)
		end
		
		-- dodatkowe argumenty przy wywołaniu szablonu, sterujące wyświetlaniem informacji o copydownie/domniemaniu
		local modifierArgs, modifierHTML = "", ""
		
		-- subobject dla SMW
		local obj = {}
		
		if templateTable ~= nil then
			while true do
				if templateTable["name"] == nil then break end
				local name = templateTable.name
				if name == "domniemanie" then
					-- przechodzimy do argumentu lic
					templateTable = templateTable.args["lic"]
					modifierArgs = modifierArgs .. "|domniemanie=1"
					obj["Ma domniemaną licencję"] = true
					modifierHTML = modifierHTML .. '<div class="domniemanie" style="background-color: #c044db; width: 100%; text-align: center; padding: 2px 0 0 0; font-weight: bold"><abbr class="copydown" title="Licencja domniemana">D</abbr></div>'
				elseif name == "copydown" then
					modifierArgs = modifierArgs .. "|copydown=1"
					obj["Ma licencję copydown"] = true
					modifierHTML = modifierHTML .. '<div class="copydown" style="background-color: #76d3db; width: 100%; text-align: center; padding: 2px 0 0 0; font-weight: bold"><abbr class="copydown" title="Licencja copydown">C</abbr></div>'
					if templateTable.args["lic"] ~= nil then
						-- przechodzimy do argumentu lic
						templateTable = templateTable.args["lic"]
					else
						-- przypadek copydowna bez licencji wewnętrznej, traktujemy jako licencję główną
						template = templateTable.name
						break
					end
				else
					template = name
					break
				end
			end
		end
		
		-- SMW
		obj["Jest składową pliku"] = mw.title.getCurrentTitle().prefixedText
		obj["Ma licencję"] = "Szablon:" .. template
		local autor = require("Moduł:Autor")
		local zrodlo = require("Moduł:Źródło")
		
		local aprops, author = autor.process(args['pauthor' .. num])
		for k, v in pairs(aprops) do
			obj[k] = v
		end
		local sprops, source = zrodlo.process(args['psource' .. num])
		for k, v in pairs(sprops) do
			obj[k] = v
		end
		mw.smw.subobject(obj)
		
		-- ustawianie wszystkiego na podstawie źródła, gdy jest nim Nonsa
		-- TODO: usuwanie artybutów SMW
		local partFromNonsensopedia = sprops["Jest pracą własną"] ~= nil or sprops["Ma źródło"] == "Nonsensopedia"
		if partFromNonsensopedia then
			-- set author
			-- set license
		end
		
		local row = '<tr><td>' .. source .. '</td>'
		row = row .. '<td>' .. author .. '</td>'
		
		row = row .. '<td style="padding: 0;">'
		
		-- wywołanie szablonu dla JS
		row = row .. '<div style="display: none" class="js-preview-call"><nowiki>' .. templateCall .. '</nowiki></div>'
		
		row = row .. '<div style="display: flex">' .. modifierHTML
		
		-- expand template będzie na końcu
		row = row ..  "{{" .. template .. "|mini=1" .. modifierArgs .. '}}</div></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

-- funkcje eksportowane
local p = {}

-- zrób cuda
-- p.information({args = {permission = "{{domniemanie|lic={{copydown|lic={{PD}}}}}}"}})
function p.information(frame)
	local arguments = require("Moduł:Arguments")
	local args = arguments.getArgs(frame)
	local demo = args['demo'] ~= nil
	
	-- caption
	if args['caption'] or demo then
		appendProps('Ma podpis pliku', args['caption'])
		addRow('fileinfotpl_caption', 'Podpis', args['caption'])
	else
		appendProps('Nie ma podpisu pliku', true)
	end
	
	-- description
	if args['description'] then
		appendProps('Ma opis', args['description'])
		addRow('fileinfotpl_desc', 'Opis', args['description'])
	else
		appendProps('Nie ma opisu', true)
		addRow('fileinfotpl_desc', '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_source', 'Źródło', args['source'])
	else
		addRow('fileinfotpl_source', 'Ź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/sandbox')
		local aprops, s = autor.process(args['author'])
		if not demo then mw.smw.set(aprops) end
		addRow('fileinfotpl_author', 'Autor', s)
	end
	
	-- permission
	if args['permission'] or demo then
		-- TODO: smw i te sprawy
		addRow('fileinfotpl_perm', 'Licencja', args['permission'])
		mw.log(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)
		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 frame:preprocess(getTable())
end

return p