Moduł:Information/sandbox: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
M |
Ostrzyciel (dyskusja • edycje) M (ups, Eksekka nadpisałem) Znacznik: anulowanie |
||
(Nie pokazano 24 wersji utworzonych przez 2 użytkowników) | |||
Linia 7: | Linia 7: | ||
-- funkcje lokalne |
-- funkcje lokalne |
||
local function mergeTables(a, b) |
|||
if type(a) == "table" and type(b) == "table" then |
|||
⚫ | |||
a[#a + 1] = v |
|||
⚫ | |||
⚫ | |||
⚫ | |||
-- funkcja pomocnicza do scalania tabel atrybutów |
-- funkcja pomocnicza do scalania tabel atrybutów |
||
Linia 47: | Linia 55: | ||
local prows = {} |
local prows = {} |
||
local partIndex = 1 |
|||
local function pPart(num) |
local function pPart(num) |
||
local plic = (args['plic' .. num] or 'nolic') |
local plic = (args['plic' .. num] or 'nolic') |
||
Linia 112: | Linia 121: | ||
obj[k] = v |
obj[k] = v |
||
end |
end |
||
mw.smw.subobject(obj) |
mw.smw.subobject(obj, "Licencja składowej nr " .. partIndex) |
||
partIndex = partIndex + 1 |
|||
-- ustawianie wszystkiego na podstawie źródła, gdy jest nim Nonsa |
-- ustawianie wszystkiego na podstawie źródła, gdy jest nim Nonsa |
||
Linia 207: | Linia 217: | ||
-- author |
-- author |
||
if args['author'] or demo then |
if args['author'] or demo then |
||
local autor = require('Module:Autor |
local autor = require('Module:Autor') |
||
local aprops, s = autor.process(args['author']) |
local aprops, s = autor.process(args['author']) |
||
if not demo then mw.smw.set(aprops) end |
if not demo then mw.smw.set(aprops) end |
||
Linia 218: | Linia 228: | ||
local nextParsePoint = 1 |
local nextParsePoint = 1 |
||
local i = 0 |
local i = 0 |
||
local templateCallTree |
local templateCallTree, templateRecords = nil, {} |
||
mw.log(permission) |
mw.log("args['permission'] = " .. permission) |
||
local previousParseTextLength = 0 |
|||
while nextParsePoint do |
while nextParsePoint do |
||
-- to jest potrzebne, bo funkcja dostaje kawalek kodu i zwraca nastepny punkt parsowania w tym kodzie, wiec trzeba dodac to co bylo przedtem |
|||
⚫ | |||
local prevParsePoint = nextParsePoint - 1 |
|||
⚫ | |||
templateCallTree, nextParsePoint = licenseTools.getTemplateFromCode(permission:sub(nextParsePoint, -1)) |
templateCallTree, nextParsePoint = licenseTools.getTemplateFromCode(permission:sub(nextParsePoint, -1)) |
||
if nextParsePoint ~= nil then |
|||
nextParsePoint = nextParsePoint + prevParsePoint |
|||
⚫ | |||
mw.logObject(templateCallTree) |
|||
i = i + 1 |
i = i + 1 |
||
if i == 10 then return end |
if i == 10 then return end |
||
Linia 228: | Linia 246: | ||
if templateCallTree == nil then break end |
if templateCallTree == nil then break end |
||
-- zwraca listę występujących w tekście szablonów, z informacją czy występują modyfikatory licencji |
|||
local function parseTree(templateCallTree, domniemanie, copydown, sself) |
local function parseTree(templateCallTree, domniemanie, copydown, sself) |
||
if templateCallTree == nil then return nil end |
|||
local t = {} |
local t = {} |
||
if templateCallTree.name == "self" then |
if templateCallTree.name == "self" then |
||
mw.log("Setting sself = true") |
|||
sself = true |
sself = true |
||
for name, value in pairs(templateCallTree.args) do |
for name, value in pairs(templateCallTree.args) do |
||
mergeTables(t, parseTree(value, domniemanie, copydown, sself)) |
|||
end |
end |
||
elseif templateCallTree.name == "copydown" then |
elseif templateCallTree.name == "copydown" then |
||
⚫ | |||
copydown = true |
copydown = true |
||
if templateCallTree.args["lic"] then |
if templateCallTree.args["lic"] then |
||
mergeTables(t, parseTree(templateCallTree.args["lic"], domniemanie, copydown, sself)) |
|||
else -- traktujemy jako licencję główną |
else -- traktujemy jako licencję główną |
||
table.insert(t, |
table.insert(t, |
||
Linia 249: | Linia 271: | ||
end |
end |
||
elseif templateCallTree.name == "domniemanie" then |
elseif templateCallTree.name == "domniemanie" then |
||
mw.log("Setting domniemanie = true") |
|||
domniemanie = true |
domniemanie = true |
||
mergeTables(t, parseTree(templateCallTree.args["lic"], domniemanie, copydown, sself)) |
|||
else -- license template |
else -- license template |
||
table.insert(t, |
table.insert(t, |
||
Linia 264: | Linia 287: | ||
end |
end |
||
local |
local templateRecords2 = parseTree(templateCallTree, false, false, false) |
||
if templateRecords2 ~= nil then |
|||
⚫ | |||
mergeTables(templateRecords, templateRecords2) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
-- TODO |
|||
⚫ | |||
⚫ | |||
⚫ | |||
end |
end |
||
end |
|||
mw.logObject(templateRecords, "templateRecords = ") |
|||
local i = 1 |
|||
for _, record in ipairs(templateRecords) do |
|||
⚫ | |||
⚫ | |||
⚫ | |||
obj["Ma licencję copydown"] = true |
|||
end |
|||
⚫ | |||
⚫ | |||
end |
|||
⚫ | |||
obj["Jest pracą własną"] = true |
|||
end |
|||
⚫ | |||
if res ~= true then |
|||
mw.log(res.error) |
|||
end |
|||
i = i + 1 |
|||
end |
end |
||
Aktualna wersja na dzień 09:09, 8 kwi 2021
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
local function mergeTables(a, b)
if type(a) == "table" and type(b) == "table" then
for _, v in ipairs(b) do
a[#a + 1] = v
end
end
end
-- 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 partIndex = 1
local function pPart(num)
local plic = (args['plic' .. num] or 'nolic')
local template, templateTable, templateCall = plic, {}, ""
if plic:find("<table") == nil then -- użytkownik przekazał tylko nazwę szablonu
-- template = plic
templateCall = "{{" .. template .. "}}"
else
templateTable = licenseTools.getTemplateFromCode(plic)
mw.log("TemplateTable = ")
mw.logObject(templateTable)
templateCall = licenseTools.reconstructTemplateCall(templateTable)
end
-- dodatkowe argumenty, sterujące wyświetlaniem informacji o domniemaniu/copydownie
local modifierParams = ""
-- subobject dla SMW
local obj = {}
-- wyciąganie wewnętrznego szablonu licencji i modyfikatorów typu domniemanie
-- index po to, żeby w licboksie wyświetlały się według kolejności
local index = 1
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"]
obj["Ma domniemaną licencję"] = true
modifierParams = modifierParams .. "|domniemanie=" .. index
index = index + 1
elseif name == "copydown" then
obj["Ma licencję copydown"] = true
modifierParams = modifierParams .. "|copydown=" .. index
index = index + 1
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
-- 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, "Licencja składowej nr " .. partIndex)
partIndex = partIndex + 1
-- 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>'
-- expand template będzie na końcu
row = row .. "{{" .. template .. "|mini=1" .. modifierParams .. "}}</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')
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
local permission = args["permission"]
local nextParsePoint = 1
local i = 0
local templateCallTree, templateRecords = nil, {}
mw.log("args['permission'] = " .. permission)
local previousParseTextLength = 0
while nextParsePoint do
-- to jest potrzebne, bo funkcja dostaje kawalek kodu i zwraca nastepny punkt parsowania w tym kodzie, wiec trzeba dodac to co bylo przedtem
local prevParsePoint = nextParsePoint - 1
mw.logObject({iteration = i, position = nextParsePoint, parsedText = permission:sub(nextParsePoint, -1)})
templateCallTree, nextParsePoint = licenseTools.getTemplateFromCode(permission:sub(nextParsePoint, -1))
if nextParsePoint ~= nil then
nextParsePoint = nextParsePoint + prevParsePoint
end
mw.logObject(templateCallTree)
i = i + 1
if i == 10 then return end
if templateCallTree == nil then break end
-- zwraca listę występujących w tekście szablonów, z informacją czy występują modyfikatory licencji
local function parseTree(templateCallTree, domniemanie, copydown, sself)
if templateCallTree == nil then return nil end
local t = {}
if templateCallTree.name == "self" then
mw.log("Setting sself = true")
sself = true
for name, value in pairs(templateCallTree.args) do
mergeTables(t, parseTree(value, domniemanie, copydown, sself))
end
elseif templateCallTree.name == "copydown" then
mw.log("Setting copydown = true")
copydown = true
if templateCallTree.args["lic"] then
mergeTables(t, parseTree(templateCallTree.args["lic"], domniemanie, copydown, sself))
else -- traktujemy jako licencję główną
table.insert(t,
{
name = templateCallTree.name,
copydown = copydown,
domniemanie = domniemanie,
sself = sself
})
end
elseif templateCallTree.name == "domniemanie" then
mw.log("Setting domniemanie = true")
domniemanie = true
mergeTables(t, parseTree(templateCallTree.args["lic"], domniemanie, copydown, sself))
else -- license template
table.insert(t,
{
name = templateCallTree.name,
copydown = copydown,
domniemanie = domniemanie,
sself = sself
})
end
return t
end
local templateRecords2 = parseTree(templateCallTree, false, false, false)
if templateRecords2 ~= nil then
mergeTables(templateRecords, templateRecords2)
end
end
mw.logObject(templateRecords, "templateRecords = ")
local i = 1
for _, record in ipairs(templateRecords) do
local obj = {}
obj["Ma licencję"] = "Szablon:" .. record.name
if record.copydown then
obj["Ma licencję copydown"] = true
end
if record.domniemanie then
obj["Ma licencję domniemaną"] = true
end
if record.sself then
obj["Jest pracą własną"] = true
end
local res = mw.smw.subobject(obj, "Licencja nr " .. i)
if res ~= true then
mw.log(res.error)
end
i = i + 1
end
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)
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