Modül:RolBox: Revizyonlar arasındaki fark

FM Wiki sitesinden
"local p = {} function p.render(frame) local args = frame:getParent().args local isim = args["isim"] or "" local rolID = args["rolID"] or "" local gorev = args["gorev"] or "" local kritik = args["kritik"] or "" local ikinci = args["ikinci"] or "" local simgeler = args["simgeler"] or "" -- kritik özellikleri yeşil local kritik_html = "" if kritik ~= "" then kritik_html = '<span st..." içeriğiyle yeni sayfa oluşturdu
 
Değişiklik özeti yok
 
(Bir diğer kullanıcıdan 6 ara revizyon gösterilmiyor)
1. satır: 1. satır:
local p = {}
local p = {}
local function splitList(str)
    local t = {}
    for item in string.gmatch(str, "([^,]+)") do
        table.insert(t, mw.text.trim(item))
    end
    return t
end
-- Açıklamada kritik/ikincil kelimeleri otomatik [[link]] haline getir
local function autoLink(desc, words)
    if desc == "" then
        return desc
    end
    -- Küçük-büyük harf eşitleme
    for _, word in ipairs(words) do
        local escaped = mw.ustring.gsub(word, "([%%%-%^%$%(%)%.%[%]%*%+%-%?])", "%%%1")
        -- kelime sınırları: tam eşleşme olsun
        desc = mw.ustring.gsub(
            desc,
            "([^%wığüşöçİĞÜŞÖÇ])(" .. escaped .. ")([^%wığüşöçİĞÜŞÖÇ])",
            "%1[[%2]]%3"
        )
        -- kelime başı/sonu için özel tahminler
        -- satır başı
        desc = mw.ustring.gsub(desc, "^(" .. escaped .. ")([^%wığüşöçİĞÜŞÖÇ])", "[[%1]]%2")
        -- satır sonu
        desc = mw.ustring.gsub(desc, "([^%wığüşöçİĞÜŞÖÇ])(" .. escaped .. ")$", "%1[[%2]]")
    end
    return desc
end
local function buildBadges(list, baseClass)
    local html = ""
    for _, v in ipairs(list) do
        html = html .. string.format('<span class="%s">%s</span>', baseClass, v)
    end
    return html
end


function p.render(frame)
function p.render(frame)
     local args = frame:getParent().args
     local parent = frame:getParent() or frame
      
    local args  = parent.args
     local isim      = args["isim"] or ""
 
     local rolID     = args["rolID"] or ""
     local name      = args["ad"] or ""
     local gorev    = args["gorev"] or ""
     local code      = args["kod"] or ""
     local kritik    = args["kritik"] or ""
     local duty      = args["gorev"] or ""
     local ikinci    = args["ikinci"] or ""
     local position  = args["pozisyon"] or ""
     local simgeler  = args["simgeler"] or ""
     local desc      = args["aciklama"] or ""
     local critical  = args["kritik"] or ""
     local secondary  = args["ikincil"] or ""
     local icons      = args["simgeler"] or ""
 
    local criticalList  = critical ~= "" and splitList(critical)  or {}
    local secondaryList = secondary ~= "" and splitList(secondary) or {}
    local iconList      = icons    ~= "" and splitList(icons)    or {}
 
    -- Otomatik linklenecek tüm kelimeler
    local autoWords = {}
    for _,v in ipairs(criticalList)  do table.insert(autoWords, v) end
    for _,v in ipairs(secondaryList) do table.insert(autoWords, v) end


     -- kritik özellikleri yeşil
     -- Açıklamaya otomatik link uygulama
    local kritik_html = ""
     if desc ~= "" then
     if kritik ~= "" then
         desc = autoLink(desc, autoWords)
         kritik_html = '<span style="color:#0ea000;font-weight:600;">' .. kritik .. '</span>'
     end
     end


     -- ikinci özellikleri mavi
     -- Görev badge sınıfı
     local ikinci_html = ""
     local dutyClass = "fm-rolecard__duty"
     if ikinci ~= "" then
    local dl = mw.ustring.lower(duty or "")
         ikinci_html = '<span style="color:#0077dd;font-weight:500;">' .. ikinci .. '</span>'
 
     if dl ~= "" then
         if dl:find("support") or dl:find("destek") then
            dutyClass = dutyClass .. " fm-rolecard__duty--support"
        elseif dl:find("attack") or dl:find("hücum") then
            dutyClass = dutyClass .. " fm-rolecard__duty--attack"
        elseif dl:find("defend") or dl:find("savunma") then
            dutyClass = dutyClass .. " fm-rolecard__duty--defend"
        end
     end
     end
      
 
     return string.format([[
    local criticalHtml  = buildBadges(criticalList,  "fm-rolecard__badge fm-rolecard__badge--critical")
     <div class="fm-rolebox">
    local secondaryHtml = buildBadges(secondaryList, "fm-rolecard__badge fm-rolecard__badge--secondary")
        <div class="fm-role-header">
 
             <span class="fm-role-name">%s</span>
    -- simgeler
             <span class="fm-role-task">%s</span>
    local iconsHtml = ""
    for _, v in ipairs(iconList) do
        iconsHtml = iconsHtml .. string.format('<span class="fm-rolecard__icon">%s</span>', v)
    end
 
    -- meta satırı
    local metaLine = ""
    local parts = {}
     if code ~= "" then table.insert(parts, code) end
     if position ~= "" then table.insert(parts, position) end
    if #parts > 0 then
        metaLine = '<div class="fm-rolecard__meta">' .. table.concat(parts, " • ") .. '</div>'
    end
 
    local descHtml = ""
    if desc ~= "" then
        descHtml = string.format('<div class="fm-rolecard__description">%s</div>', desc)
    end
 
    local criticalBlock = ""
    if critical ~= "" then
        criticalBlock = string.format([[
        <div class="fm-rolecard__section">
            <div class="fm-rolecard__section-title">Kritik Özellikler</div>
            <div class="fm-rolecard__badge-list">%s</div>
        </div>
        ]], criticalHtml)
     end
 
    local secondaryBlock = ""
    if secondary ~= "" then
        secondaryBlock = string.format([[
        <div class="fm-rolecard__section">
            <div class="fm-rolecard__section-title">İkincil Özellikler</div>
             <div class="fm-rolecard__badge-list">%s</div>
        </div>
        ]], secondaryHtml)
    end
 
    local iconsBlock = ""
    if icons ~= "" then
        iconsBlock = string.format([[
        <div class="fm-rolecard__section fm-rolecard__section--icons">
             <div class="fm-rolecard__badge-list">%s</div>
         </div>
         </div>
        ]], iconsHtml)
    end


        <div class="fm-role-section">
    local html = string.format([[
            <div class="fm-role-row"><b>Kritik Özellikler:</b> %s</div>
<div class="fm-rolecard">
    <div class="fm-rolecard__header">
        <div class="fm-rolecard__title-group">
            <div class="fm-rolecard__name">%s</div>
             %s
             %s
         </div>
         </div>
        <div class="%s">%s</div>
    </div>


        <div class="fm-role-icons">%s</div>
    %s


        <div class="fm-role-id">ID: %s</div>
    %s
     </div>
    %s
    ]],
     %s
         isim,
</div>
         gorev,
]],
         kritik_html,
         name,
         (ikinci ~= "" and '<div class="fm-role-row"><b>İkinci Özellikler:</b> ' .. ikinci_html .. '</div>' or ""),
         metaLine,
         simgeler,
         dutyClass, duty,
         rolID
        descHtml,
         criticalBlock,
         secondaryBlock,
         iconsBlock
     )
     )
    return html
end
end


return p
return p

08.32, 4 Aralık 2025 itibarı ile sayfanın şu anki hâli

Bu modül için bir Modül:RolBox/belge belgelendirmesi oluşturabilirsiniz

local p = {}

local function splitList(str)
    local t = {}
    for item in string.gmatch(str, "([^,]+)") do
        table.insert(t, mw.text.trim(item))
    end
    return t
end

-- Açıklamada kritik/ikincil kelimeleri otomatik [[link]] haline getir
local function autoLink(desc, words)
    if desc == "" then
        return desc
    end

    -- Küçük-büyük harf eşitleme
    for _, word in ipairs(words) do
        local escaped = mw.ustring.gsub(word, "([%%%-%^%$%(%)%.%[%]%*%+%-%?])", "%%%1")

        -- kelime sınırları: tam eşleşme olsun
        desc = mw.ustring.gsub(
            desc,
            "([^%wığüşöçİĞÜŞÖÇ])(" .. escaped .. ")([^%wığüşöçİĞÜŞÖÇ])",
            "%1[[%2]]%3"
        )

        -- kelime başı/sonu için özel tahminler
        -- satır başı
        desc = mw.ustring.gsub(desc, "^(" .. escaped .. ")([^%wığüşöçİĞÜŞÖÇ])", "[[%1]]%2")
        -- satır sonu
        desc = mw.ustring.gsub(desc, "([^%wığüşöçİĞÜŞÖÇ])(" .. escaped .. ")$", "%1[[%2]]")
    end

    return desc
end

local function buildBadges(list, baseClass)
    local html = ""
    for _, v in ipairs(list) do
        html = html .. string.format('<span class="%s">%s</span>', baseClass, v)
    end
    return html
end

function p.render(frame)
    local parent = frame:getParent() or frame
    local args   = parent.args

    local name       = args["ad"] or ""
    local code       = args["kod"] or ""
    local duty       = args["gorev"] or ""
    local position   = args["pozisyon"] or ""
    local desc       = args["aciklama"] or ""
    local critical   = args["kritik"] or ""
    local secondary  = args["ikincil"] or ""
    local icons      = args["simgeler"] or ""

    local criticalList  = critical ~= "" and splitList(critical)  or {}
    local secondaryList = secondary ~= "" and splitList(secondary) or {}
    local iconList      = icons     ~= "" and splitList(icons)     or {}

    -- Otomatik linklenecek tüm kelimeler
    local autoWords = {}
    for _,v in ipairs(criticalList)  do table.insert(autoWords, v) end
    for _,v in ipairs(secondaryList) do table.insert(autoWords, v) end

    -- Açıklamaya otomatik link uygulama
    if desc ~= "" then
        desc = autoLink(desc, autoWords)
    end

    -- Görev badge sınıfı
    local dutyClass = "fm-rolecard__duty"
    local dl = mw.ustring.lower(duty or "")

    if dl ~= "" then
        if dl:find("support") or dl:find("destek") then
            dutyClass = dutyClass .. " fm-rolecard__duty--support"
        elseif dl:find("attack") or dl:find("hücum") then
            dutyClass = dutyClass .. " fm-rolecard__duty--attack"
        elseif dl:find("defend") or dl:find("savunma") then
            dutyClass = dutyClass .. " fm-rolecard__duty--defend"
        end
    end

    local criticalHtml  = buildBadges(criticalList,  "fm-rolecard__badge fm-rolecard__badge--critical")
    local secondaryHtml = buildBadges(secondaryList, "fm-rolecard__badge fm-rolecard__badge--secondary")

    -- simgeler
    local iconsHtml = ""
    for _, v in ipairs(iconList) do
        iconsHtml = iconsHtml .. string.format('<span class="fm-rolecard__icon">%s</span>', v)
    end

    -- meta satırı
    local metaLine = ""
    local parts = {}
    if code ~= "" then table.insert(parts, code) end
    if position ~= "" then table.insert(parts, position) end
    if #parts > 0 then
        metaLine = '<div class="fm-rolecard__meta">' .. table.concat(parts, " • ") .. '</div>'
    end

    local descHtml = ""
    if desc ~= "" then
        descHtml = string.format('<div class="fm-rolecard__description">%s</div>', desc)
    end

    local criticalBlock = ""
    if critical ~= "" then
        criticalBlock = string.format([[
        <div class="fm-rolecard__section">
            <div class="fm-rolecard__section-title">Kritik Özellikler</div>
            <div class="fm-rolecard__badge-list">%s</div>
        </div>
        ]], criticalHtml)
    end

    local secondaryBlock = ""
    if secondary ~= "" then
        secondaryBlock = string.format([[
        <div class="fm-rolecard__section">
            <div class="fm-rolecard__section-title">İkincil Özellikler</div>
            <div class="fm-rolecard__badge-list">%s</div>
        </div>
        ]], secondaryHtml)
    end

    local iconsBlock = ""
    if icons ~= "" then
        iconsBlock = string.format([[
        <div class="fm-rolecard__section fm-rolecard__section--icons">
            <div class="fm-rolecard__badge-list">%s</div>
        </div>
        ]], iconsHtml)
    end

    local html = string.format([[
<div class="fm-rolecard">
    <div class="fm-rolecard__header">
        <div class="fm-rolecard__title-group">
            <div class="fm-rolecard__name">%s</div>
            %s
        </div>
        <div class="%s">%s</div>
    </div>

    %s

    %s
    %s
    %s
</div>
]],
        name,
        metaLine,
        dutyClass, duty,
        descHtml,
        criticalBlock,
        secondaryBlock,
        iconsBlock
    )

    return html
end

return p