본문으로 이동

모듈:Deck: 두 판 사이의 차이

Kawa
잔글편집 요약 없음
잔글편집 요약 없음
3번째 줄: 3번째 줄:
function p.render(f)
function p.render(f)
     local args = f:getParent().args
     local args = f:getParent().args
     if args.items == nil then
     if args['items'] == nil then
         args = f.args
         args = f.args
     end
     end


return items
local lines = mw.text.gsplit(args['items'] or '', '\n')
local items = {}


-- local lines = mw.text.gsplit(args.items or '', '\n')
for line in lines do
-- local items = {}
line = mw.text.trim(line)


-- for line in lines do
if line == '' then
-- line = mw.text.trim(line)
table.insert(items, {})
else
local key, value = line:gmatch('([^=]+)=([^=]+)')
if key and value then
key = mw.text.trim(key):lower()
value = mw.text.trim(value)
if key ~= '' then
items[#items][key] = value
end
end
end
end


-- if line == '' then
-- HTML
-- table.insert(items, {})
local nav = mw.html.create('nav')
-- else
:addClass('kawa-deck-grid')
-- local key, value = line:gmatch('([^=]+)=([^=]+)')
-- if key and value then
-- key = mw.text.trim(key):lower()
-- value = mw.text.trim(value)
-- if key ~= '' then
-- items[#items][key] = value
-- end
-- end
-- end
-- end


-- -- HTML
for _, item in ipairs(items) do
-- local nav = mw.html.create('nav')
local url = item.url or '#'
-- :addClass('kawa-deck-grid')
local icon = item.icon or '🔗'
local title = mw.text.trim(item.title or '')
if title == '' then
title = url:match("^%a+://([^/:]+)") or url
end


-- for _, item in ipairs(items) do
local anchor = mw.html.create('a')
-- local url = item.url or '#'
:addClass('kawa-deck-item')
-- local icon = item.icon or '🔗'
-- local title = mw.text.trim(item.title or '')
-- if title == '' then
-- title = url:match("^%a+://([^/:]+)") or url
-- end


-- local anchor = mw.html.create('a')
anchor:attr('href', url)
-- :addClass('kawa-deck-item')
if url:match('^(https?:)?//') then
anchor:attr('target', '_blank')
anchor:attr('rel', 'noopener noreferrer')
end


-- anchor:attr('href', url)
local iconSpan = mw.html.create('span')
-- if url:match('^(https?:)?//') then
:addClass('kawa-deck-icon')
-- anchor:attr('target', '_blank')
:attr('aria-hidden', 'true')
-- anchor:attr('rel', 'noopener noreferrer')
-- end


-- local iconSpan = mw.html.create('span')
if icon:match('^(https?:)?//') then
-- :addClass('kawa-deck-icon')
iconSpan:tag('img'):attr('src', icon):attr('alt', '')
-- :attr('aria-hidden', 'true')
else
iconSpan:wikitext(icon)
end


-- if icon:match('^(https?:)?//') then
local titleSpan = mw.html.create('span')
-- iconSpan:tag('img'):attr('src', icon):attr('alt', '')
:addClass('kawa-deck-title')
-- else
:wikitext(title)
-- iconSpan:wikitext(icon)
local contentSpan = mw.html.create('span')
-- end
:addClass('kawa-deck-content')
 
contentSpan:node(titleSpan)
-- local titleSpan = mw.html.create('span')
-- :addClass('kawa-deck-title')
-- :wikitext(title)
-- local contentSpan = mw.html.create('span')
-- :addClass('kawa-deck-content')
-- contentSpan:node(titleSpan)
-- anchor:node(iconSpan)
anchor:node(iconSpan)
-- anchor:node(contentSpan)
anchor:node(contentSpan)
-- nav:node(anchor)
nav:node(anchor)
-- end
end


--    return tostring(nav)
    return tostring(nav)
end
end


return p
return p

2026년 5월 26일 (화) 19:24 판

이 모듈에 대한 설명문서는 모듈:Deck/설명문서에서 만들 수 있습니다

local p = {}

function p.render(f)
    local args = f:getParent().args
    if args['items'] == nil then
        args = f.args
    end

	local lines = mw.text.gsplit(args['items'] or '', '\n')
	local items = {}

	for line in lines do
		line = mw.text.trim(line)

		if line == '' then
			table.insert(items, {})
		else
			local key, value = line:gmatch('([^=]+)=([^=]+)')
			if key and value then
				key = mw.text.trim(key):lower()
				value = mw.text.trim(value)
				if key ~= '' then
					items[#items][key] = value
				end
			end
		end
	end

	-- HTML
	local nav = mw.html.create('nav')
		:addClass('kawa-deck-grid')

	for _, item in ipairs(items) do
		local url = item.url or '#'
		local icon = item.icon or '🔗'
		local title = mw.text.trim(item.title or '')
		if title == '' then
			title = url:match("^%a+://([^/:]+)") or url
		end

		local anchor = mw.html.create('a')
			:addClass('kawa-deck-item')

		anchor:attr('href', url)
		if url:match('^(https?:)?//') then
			anchor:attr('target', '_blank')
			anchor:attr('rel', 'noopener noreferrer')
		end

		local iconSpan = mw.html.create('span')
			:addClass('kawa-deck-icon')
			:attr('aria-hidden', 'true')

		if icon:match('^(https?:)?//') then
			iconSpan:tag('img'):attr('src', icon):attr('alt', '')
		else
			iconSpan:wikitext(icon)
		end

		local titleSpan = mw.html.create('span')
			:addClass('kawa-deck-title')
			:wikitext(title)
		local contentSpan = mw.html.create('span')
			:addClass('kawa-deck-content')
		contentSpan:node(titleSpan)
		
		anchor:node(iconSpan)
		anchor:node(contentSpan)
		nav:node(anchor)
	end

    return tostring(nav)
end

return p