메뉴 여닫기
122
183
14
2.7천
Project ZETA Wiki
환경 설정 메뉴 여닫기
개인 메뉴 여닫기
로그인하지 않음
지금 편집한다면 당신의 IP 주소가 공개될 수 있습니다.
하나나 (토론 | 기여)님의 2026년 6월 23일 (화) 18:18 판
(차이) ← 이전 판 | 최신판 (차이) | 다음 판 → (차이)

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

-- ============================================================
-- 모듈:CodexRecommend
--   코덱스 추천 히어로 목록을 렌더링하는 Lua 모듈.
--   쉼표로 구분된 히어로 이름을 받아 인원 제한 없이 처리합니다.
--
-- [상호작용]
--   - 호출:  틀:Codex/Recommend  →  이 모듈의 render 함수를 호출
--   - 출력:  각 히어로마다 [[파일:{파일명} 포트레이트.png]] + [[{이름}]] 링크
--   - 스타일: 틀:Codex/Recommend/styles.css 의 .codex-rec__* 클래스 사용
--             (이 모듈은 HTML 구조만 생성하고, 색·여백은 CSS가 담당)
--
-- [파일명 규칙]
--   포트레이트 = "{파일명} 포트레이트.png" (한글 '포트레이트', 고정)
--   - 기본: 파일명 = 이름 (예: 위페이 → 위페이 포트레이트.png)
--   - 예외: "이름:파일명" 형식으로 파일명을 따로 지정 가능
--           (예: '율&선하:율'로 입력하는 경우 링크는 [[율&선하]], 포트레이트는 율 포트레이트.png)
-- ============================================================

local p = {}

function p.render(frame)
	-- 부모 틀(틀:Codex/Recommend)이 받은 인수를 가져옴
	local args = frame:getParent().args
	-- 첫 번째 무명 인수에 "위페이, 율&선하:율, ..." 형태로 들어옴
	local raw = args[1] or ''

	-- 쉼표로 분리하여 항목 배열 생성
	local entries = {}
	for item in mw.text.gsplit(raw, ',') do
		local trimmed = mw.text.trim(item)   -- 앞뒤 공백 제거
		if trimmed ~= '' then
			table.insert(entries, trimmed)
		end
	end

	-- 항목이 하나도 없으면 아무것도 출력하지 않음
	if #entries == 0 then
		return ''
	end

	-- 각 항목을 카드 조각으로 변환
	local parts = {}
	for _, entry in ipairs(entries) do
		-- "이름:파일명" 형식이면 분리, 아니면 이름=파일명
		local name, file
		local colonPos = string.find(entry, ':', 1, true)  -- plain find(패턴 아님)
		if colonPos then
			name = mw.text.trim(string.sub(entry, 1, colonPos - 1))
			file = mw.text.trim(string.sub(entry, colonPos + 1))
		else
			name = entry
			file = entry   -- 콜론 없으면 이름을 그대로 파일명으로
		end

		-- 포트레이트는 클릭 시 히어로 문서(name)로, 이름도 동일 링크
		local piece = string.format(
			'<span class="codex-rec__hero">[[파일:%s 포트레이트.png|80px|link=%s]]<span class="codex-rec__name">[[%s]]</span></span>',
			file, name, name
		)
		table.insert(parts, piece)
	end

	-- 조각들을 이어붙여 반환 (바깥 틀·CSS·제목은 틀 쪽에서 감쌈)
	return table.concat(parts)
end

return p