모듈:CodexRecommend: 두 판 사이의 차이
Project ZETA Wiki
더 많은 작업
내용 삭제됨 내용 추가됨
편집 요약 없음 |
편집 요약 없음 |
||
| (같은 사용자의 중간 판 하나는 보이지 않습니다) | |||
| 6번째 줄: | 6번째 줄: | ||
-- [상호작용] |
-- [상호작용] |
||
-- - 호출: 틀:Codex/Recommend → 이 모듈의 render 함수를 호출 |
-- - 호출: 틀:Codex/Recommend → 이 모듈의 render 함수를 호출 |
||
-- - 출력: 각 히어로마다 [[파일:{ |
-- - 출력: 각 히어로마다 [[파일:{파일명} 포트레이트.png]] + [[{이름}]] 링크 |
||
-- - 스타일: 틀:Codex/Recommend/styles.css 의 .codex-rec__* 클래스 사용 |
-- - 스타일: 틀:Codex/Recommend/styles.css 의 .codex-rec__* 클래스 사용 |
||
-- (이 모듈은 HTML 구조만 생성하고, 색·여백은 CSS가 담당) |
-- (이 모듈은 HTML 구조만 생성하고, 색·여백은 CSS가 담당) |
||
-- |
-- |
||
-- [파일명 규칙] |
-- [파일명 규칙] |
||
-- 포트레이트 = "{ |
-- 포트레이트 = "{파일명} 포트레이트.png" (한글 '포트레이트', 고정) |
||
-- - 기본: 파일명 = 이름 (예: 위페이 → 위페이 포트레이트.png) |
|||
-- - 예외: "이름:파일명" 형식으로 파일명을 따로 지정 가능 |
|||
-- (예: '율&선하:율'로 입력하는 경우 링크는 [[율&선하]], 포트레이트는 율 포트레이트.png) |
|||
-- ============================================================ |
-- ============================================================ |
||
| 19번째 줄: | 22번째 줄: | ||
-- 부모 틀(틀:Codex/Recommend)이 받은 인수를 가져옴 |
-- 부모 틀(틀:Codex/Recommend)이 받은 인수를 가져옴 |
||
local args = frame:getParent().args |
local args = frame:getParent().args |
||
-- 첫 번째 무명 인수에 " |
-- 첫 번째 무명 인수에 "위페이, 율&선하:율, ..." 형태로 들어옴 |
||
local raw = args[1] or '' |
local raw = args[1] or '' |
||
-- 쉼표로 분리하여 |
-- 쉼표로 분리하여 항목 배열 생성 |
||
local |
local entries = {} |
||
for |
for item in mw.text.gsplit(raw, ',') do |
||
local trimmed = mw.text.trim( |
local trimmed = mw.text.trim(item) -- 앞뒤 공백 제거 |
||
if trimmed ~= '' then |
if trimmed ~= '' then |
||
table.insert( |
table.insert(entries, trimmed) |
||
end |
end |
||
end |
end |
||
-- |
-- 항목이 하나도 없으면 아무것도 출력하지 않음 |
||
if # |
if #entries == 0 then |
||
return '' |
return '' |
||
end |
end |
||
-- 각 |
-- 각 항목을 카드 조각으로 변환 |
||
local parts = {} |
local parts = {} |
||
for _, |
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 |
|||
| ⚫ | |||
local piece = string.format( |
local piece = string.format( |
||
'<span class="codex-rec__hero">[[파일:%s 포트레이트.png|80px|link=%s]]<span class="codex-rec__name">[[%s]]</span></span>', |
'<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) |
table.insert(parts, piece) |
||
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