Modül:SMAPI compatibility overrides

Stardew Valley Wiki sitesinden
Gezinti kısmına atla Arama kısmına atla

Bu modül için bir belgeleme oluşturabilirsiniz: Modül:SMAPI compatibility overrides/belge

local p = {}
local private = {}

--##########
--## Public functions
--##########
-- Start a mod data overrides table.
-- @test mw.log(p.header())
function p.header()
  return
    '<table class="wikitable sortable plainlinks" id="mod-overrides-list">'
    .. "<tr><th style=\"position: sticky; top: 0;\">mod name</th><th style=\"position: sticky; top: 0;\">update keys</th><th style=\"position: sticky; top: 0;\">manifest version</th><th style=\"position: sticky; top: 0;\">mod page version</th><th style=\"position: sticky; top: 0;\">reason</th><th style=\"position: sticky; top: 0;\">&nbsp;</th></tr>";
end

-- End a mod data overrides table.
-- @test mw.log(p.footer())
function p.footer()
  return '</table>'
end

--- Render a mod row in the mod data overrides table.
-- @param frame The arguments passed to the script.
-- @test mw.log(p.entry({ args = { name="Lookup Anything", id="Pathoschild.LookupAnything", ["update keys"]="-Nexus:541, +Nexus:905", ["local version"]="1.05-beta → 1.0.5-beta", ["remote version"]="1.06 → 1.0.6", ["reason"]="test values" }}))
function p.entry(frame)
  -- read input args
  local name          = private.emptyToNil(frame.args["name"])
  local ids           = private.parseCommaDelimited(frame.args["id"] or '')
  local updateKeys    = private.emptyToNil(frame.args["update keys"])
  local localVersion  = private.emptyToNil(frame.args["local version"])
  local remoteVersion = private.emptyToNil(frame.args["remote version"])
  local reason        = private.emptyToNil(frame.args["reason"])

  -- build HTML row
  local row = mw.html.create("tr")
  row:addClass("mod")
  row:attr("id", name and "override_" .. mw.uri.anchorEncode(name));
  row:attr("data-id", table.concat(ids, ","))
  row:attr("data-local-version", localVersion)
  row:attr("data-remote-version", remoteVersion)
  row:attr("data-update-keys", updateKeys)
  row:attr("data-reason", reason)
  row:attr("style", "line-height: 1em;")
  row:newline()

  -- add name field
  do
    local field = mw.html.create("td")

    if name then
        field:wikitext("[[#" .. name .. "|" .. name .. "]]")
    else
        field:wikitext(name)
    end

    row:node(field)
    row:newline()
  end

  -- add update keys field
  do
    local field = mw.html.create("td")
    field:wikitext(updateKeys)
    row:node(field)
    row:newline()
  end

  -- add local version field
  do
    local field = mw.html.create("td")
    field:wikitext(localVersion)
    row:node(field)
    row:newline()
  end

  -- add remote version field
  do
    local field = mw.html.create("td")
    field:wikitext(remoteVersion)
    row:node(field)
    row:newline()
  end

  -- add reason field
  do
    local field = mw.html.create("td")
    field:wikitext(reason)
    row:node(field)
    row:newline()
  end

  -- add metadata field
  do
    local field = mw.html.create("td")
    field:attr("style", "font-size: 0.8em")

    -- anchor
    field:wikitext("[[#override_" .. (name or '') .. "|#]] ")

    -- validation
    if #ids == 0 then
      field:wikitext("[⚠ no id] ")
    end

    row:node(field)
  end

  return tostring(row)
end


--##########
--## Private functions
--##########
-- Get a nil value if the specified value is an empty string, else return the value unchanged.
-- @param value The string to check.
function private.emptyToNil(value)
  if value ~= "" then
    return value
  else
    return nil
  end
end

-- Parse a comma-delimited string into an array.
-- @param value The string to parse.
function private.parseCommaDelimited(value)
  local result = {}

  if value ~= nil then
    local values = mw.text.split(value, ",", true)
    for i = 1, #values do
      v = mw.text.trim(values[i])
      if v ~= "" then
        table.insert(result, v)
      end
    end
  end

  return result
end

return p