Moduł:Portal: Różnice pomiędzy wersjami
Z Nonsensopedii, polskiej encyklopedii humoru
Ostrzyciel (dyskusja • edycje) M (feck) |
Ostrzyciel (dyskusja • edycje) M (najwyżej wybuchnie) |
||
Linia 2: | Linia 2: | ||
local p = {} |
local p = {} |
||
local function makePanel(args, stack, num) |
local function makePanel(args, stack, num, wrapDiv) |
||
local color = args.kolor or '#c7c7c7' |
local color = args.kolor or '#c7c7c7' |
||
local text = args['panel' .. num] |
local text = args['panel' .. num] |
||
Linia 11: | Linia 11: | ||
h2:css('border-bottom', '2px solid' .. color .. '!important') |
h2:css('border-bottom', '2px solid' .. color .. '!important') |
||
:wikitext(title) |
:wikitext(title) |
||
⚫ | |||
if wrapDiv then |
|||
table.insert(stack, tostring(h2) .. '\n<div>' .. text .. '</div>') |
|||
else |
|||
⚫ | |||
end |
|||
end |
end |
||
Linia 57: | Linia 62: | ||
local function subpanel(num) |
local function subpanel(num) |
||
if num % 2 == 1 then |
if num % 2 == 1 then |
||
makePanel(args, lstack, num) |
makePanel(args, lstack, num, true) |
||
else |
else |
||
makePanel(args, rstack, num) |
makePanel(args, rstack, num, true) |
||
end |
end |
||
end |
end |
||
Linia 71: | Linia 76: | ||
rstack = table.concat(rstack, '\n') |
rstack = table.concat(rstack, '\n') |
||
local td = '<td width="50%" style="vertical-align: top; padding-' |
local td = '<td width="50%" style="vertical-align: top; padding-' |
||
mw.log('<tr>' .. td .. 'right: 25px">' .. lstack .. '</td>' .. |
|||
td .. 'left: 25px">' .. rstack .. '</td></tr>') |
|||
return '<tr>' .. td .. 'right: 25px">' .. lstack .. '</td>' .. |
return '<tr>' .. td .. 'right: 25px">' .. lstack .. '</td>' .. |
||
td .. 'left: 25px">' .. rstack .. '</td></tr>' |
td .. 'left: 25px">' .. rstack .. '</td></tr>' |
Wersja z 11:28, 20 gru 2021
local tools = require('Moduł:Narzędzia')
local p = {}
local function makePanel(args, stack, num, wrapDiv)
local color = args.kolor or '#c7c7c7'
local text = args['panel' .. num]
if text == '-' or text == '' then return end
local title = args['ptytuł' .. num] or ''
local h2 = mw.html.create( 'h2' )
h2:css('border-bottom', '2px solid' .. color .. '!important')
:wikitext(title)
if wrapDiv then
table.insert(stack, tostring(h2) .. '\n<div>' .. text .. '</div>')
else
table.insert(stack, tostring(h2) .. '\n' .. text)
end
end
-- Znajduje zbiór stron "należących" do portalu i dodaje odpowiednie
-- właściwości semantyczne do śledzenia tego.
local function findRelevantPages(args)
local pages = {}
-- Artykuły podane explicite
local arts = mw.text.split( args['artykuły'] or '', '#', true )
for _, art in ipairs(arts) do
local art2 = mw.text.trim(art)
if art2 ~= '' then
table.insert(pages, mw.text.trim(art))
end
end
-- Wyszukiwanie wg kategorii
if args['kategorie'] then
local res = mw.smw.getQueryResult{
args['kategorie'] .. ' [[Modification date::+]]',
limit=1000 -- większych portali raczej nie powinno być
}
for _, r in ipairs(res.results or {}) do
if r.exists == '1' then
table.insert(pages, r.fulltext)
end
end
end
-- Ustawiamy właściwości semantyczne
if #arts > 0 then
mw.smw.set( {
['Zawiera artykuł'] = pages
} )
end
end
function p.desktop(frame)
local args = tools.getArgs(frame)
findRelevantPages(args)
local lstack, rstack = {}, {}
local function subpanel(num)
if num % 2 == 1 then
makePanel(args, lstack, num, true)
else
makePanel(args, rstack, num, true)
end
end
for i = 1, 50 do
if args['panel' .. i] ~= nil then subpanel(i)
else break end
end
lstack = table.concat(lstack, '\n')
rstack = table.concat(rstack, '\n')
local td = '<td width="50%" style="vertical-align: top; padding-'
return '<tr>' .. td .. 'right: 25px">' .. lstack .. '</td>' ..
td .. 'left: 25px">' .. rstack .. '</td></tr>'
end
function p.mobile(frame)
local args = tools.getArgs(frame)
findRelevantPages(args)
local stack = {}
for i = 1, 50 do
if args['panel' .. i] ~= nil then makePanel(args, stack, i)
else break end
end
return table.concat(stack, '\n')
end
return p