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

Z Nonsensopedii, polskiej encyklopedii humoru
M
M (no, wybuchnie)
Linia 23: Linia 23:
local function findRelevantPages(args)
local function findRelevantPages(args)
local pages = {}
local pages = {}
local categories = {}
-- Artykuły podane explicite
-- Artykuły podane explicite
Linia 42: Linia 43:
if r.exists == '1' then
if r.exists == '1' then
table.insert(pages, r.fulltext)
table.insert(pages, r.fulltext)
end
end
-- znajdź w warunkach wyszukiwania kategorie nadrzędne
for m in mw.ustring.gmatch(args['kategorie'], '%[%[[^%]]+%]%]') do
local cond = mw.text.trim(mw.ustring.sub(m, 3, -3))
if mw.ustring.find(mw.ustring.lower(cond), 'kategoria:') == 1 or
mw.ustring.find(mw.ustring.lower(cond), 'category:') == 1 then
cond = mw.ustring.sub(cond, mw.ustring.find(cond, ':', 1, true) + 1)
for _, cat in ipairs(mw.text.split(cond, '||', true)) do
table.insert(categories, 'Kategoria:' .. mw.text.trim(cat))
end
end
end
end
end
Linia 47: Linia 60:
-- Ustawiamy właściwości semantyczne
-- Ustawiamy właściwości semantyczne
mw.smw.set( {
if #arts > 0 then
['Zawiera artykuł'] = pages,
mw.smw.set( {
['Zawiera artykuł'] = pages
['Zawiera kategorię'] = categories,
} )
} )
end
end
end



Wersja z 19:44, 30 mar 2022


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) .. '<div>\n' .. text .. '\n</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 = {}
	local categories = {}
	
	-- 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
		
		-- znajdź w warunkach wyszukiwania kategorie nadrzędne
		for m in mw.ustring.gmatch(args['kategorie'], '%[%[[^%]]+%]%]') do
			local cond = mw.text.trim(mw.ustring.sub(m, 3, -3))
			if mw.ustring.find(mw.ustring.lower(cond), 'kategoria:') == 1 or
				mw.ustring.find(mw.ustring.lower(cond), 'category:') == 1 then
				cond = mw.ustring.sub(cond, mw.ustring.find(cond, ':', 1, true) + 1)
				for _, cat in ipairs(mw.text.split(cond, '||', true)) do
					table.insert(categories, 'Kategoria:' .. mw.text.trim(cat))
				end
			end
		end
	end
	
	-- Ustawiamy właściwości semantyczne
	mw.smw.set( { 
		['Zawiera artykuł'] = pages,
		['Zawiera kategorię'] = categories,
	} )
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