Moduł:Wikigrant
Wygląd
Moduł pomocniczy do obsługi wniosków o wikigranty. Pozwala na automatyczne określenie pewnych wielkości, upraszczając szablon {{Wikigrant}}. Funkcje modułu zakładają, że format tytułu strony z wnioskiem to WG RRRR-NN (RRRR – rok, NN – numer grantu).
Dostępne funkcje:
rok()
- Odczytuje rok złożenia grantu z tytułu strony.
numer([długość])
- Odczytuje numer wikigrantu w danym roku.
- Jeśli podano opcjonalny parametr długość, numer zostanie uzupełniony zerami z przodu, aby miał przynajmniej taką długość.
poprzedni([link_alternatywny])
- Zwraca wikilink do poprzedniego grantu w danym roku. Jeśli poprzedni nie istnieje, zwraca wikikod podany w parametrze link_alternatywny (lub pusty tekst, jeśli nie podano parametru).
nastepny([link_alternatywny])
- Zwraca wikilink do następnego grantu w danym roku. Jeśli następny nie istnieje, zwraca wikikod podany w parametrze link_alternatywny (lub pusty tekst, jeśli nie podano parametru).
wnioskodawca(nazwa_użytkownika, [projekt_wikimedia])
- Jeśli w parametrze nazwa_użytkownika podano wikilink (tzn. z dwoma nawiasami kwadratowymi), zwraca ten link bez zmian.
- W przeciwnym wypadku, tworzy link postaci
[[projekt_wikimedia:User:nazwa_użytkownika|nazwa_użytkownika]]
.- Jeśli nie podano projekt_wikimedia, przyjmowana jest polskojęzyczna Wikipedia. Parametr może przyjąć wartość tożsamą z prefiksem interwiki (np.
w
lubw:szl
) – zostanie wykorzystany bez zmian – lub pełną polską nazwą projektu – wtedy tworzony jest link do tego projektu w języku polskim.
- Jeśli nie podano projekt_wikimedia, przyjmowana jest polskojęzyczna Wikipedia. Parametr może przyjąć wartość tożsamą z prefiksem interwiki (np.
- W przypadku, gdy podano więcej niż jeden projekt, wyjście ma postać
nazwa_użytkownika (link1, link2, ...)
, gdzie tekstem wyświetlanym linku jest nazwa projektu (np. Wikipedia, Commons) a stroną docelową – strona użytkownika w tym projekcie.
sprawdz_kwote(kwota, [komunikat_bledu])
- Sprawdza, czy kwota jest w poprawnym formacie (tj.
\d+(,\d\d)? *PLN
). Jeśli tak, zwraca ją. W przeciwnym wypadku zwraca komunikat_bledu lub tekst Niepoprawny format kwoty.
- Sprawdza, czy kwota jest w poprawnym formacie (tj.
data(data)
- Zwraca datę, przekazaną jako parametr. Jeśli jej wartość to
{{subst:#time:j xg Y}}
, wyświetla wartość tego wyrażenia. - Ta funkcja ma na celu ominięcie błędu T330987.
- Zwraca datę, przekazaną jako parametr. Jeśli jej wartość to
-- Prefiksy interwiki według nazw projektów
local wikis = {
["wikipedia"] = "w", ["plwiki"] = "w", ["pl.wikipedia"] = "w",
["wikiźródła"] = "s", ["wikisource"] = "s",
["wikisłownik"] = "wikt", ["wiktionary"] = "wikt",
["commons"] = "c", ["commonswiki"] = "c",
["wikidane"] = "d", ["wikidata"] = "d",
["wikinews"] = "n",
["wikibooks"] = "b",
["wikicytaty"] = "q", ["wikiquote"] = "q",
["wikipodróże"] = "voy", ["wikivoyage"] = "voy",
["wikimedia polska"] = "", ["wmpl"] = ""
}
-- Mapowanie prefiksu interwiki na nazwę projektu
local sites = {
["w:"] = "Wikipedia",
["s:"] = "Wikiźródła",
["wikt:"] = "Wikisłownik",
["c:"] = "Commons",
["d:"] = "Wikidane",
["n:"] = "Wikinews",
["b:"] = "Wikibooks",
["q:"] = "Wikicytaty",
["voy:"] = "Wikipodróże",
[""] = "Wikimedia Polska",
["wmpl:"] = "Wikimedia Polska"
}
local p = {}
function p.rok(frame)
local currentTitle = mw.title.getCurrentTitle().text
local yearMatch = mw.ustring.match(currentTitle, "WG (%d%d%d%d)%-%d+")
return yearMatch or ""
end
function p.numer(frame)
local padLength = tonumber(frame.args[1]) or 0
local currentTitle = mw.title.getCurrentTitle().text
local numberMatch = mw.ustring.match(currentTitle, "WG %d%d%d%d%-(%d+)")
if numberMatch == nil then
return ""
end
while #numberMatch < padLength do
numberMatch = "0"..numberMatch
end
return numberMatch
end
function p.poprzedni(frame)
local defaultLink = frame.args[1] or ""
local currentTitle = mw.title.getCurrentTitle().text
local year, number = mw.ustring.match(currentTitle, "WG (%d%d%d%d)%-(%d+)")
if year == nil or number == nil then
return defaultLink
end
number = tonumber(number) - 1
local prevTitle = mw.title.new("WG "..year.."-"..number, "")
if prevTitle.exists then
return "[["..prevTitle.fullText.."]]"
end
return defaultLink
end
function p.nastepny(frame)
local defaultLink = frame.args[1] or ""
local currentTitle = mw.title.getCurrentTitle().text
local year, number = mw.ustring.match(currentTitle, "WG (%d%d%d%d)%-(%d+)")
if year == nil or number == nil then
return defaultLink
end
number = tonumber(number) + 1
local nextTitle = mw.title.new("WG "..year.."-"..number, "")
if nextTitle.exists then
return "[["..nextTitle.fullText.."]]"
end
return defaultLink
end
-- Zaplecze dla funkcji wnioskodawca, ale może być również wykorzystywane
-- przez zewnętrzne moduły
function p.parseUser(userName, interwiki, forceSingle)
interwiki = mw.ustring.lower(interwiki)
if string.find(userName, "[[", 1, true) ~= nil then
return userName
end
if #interwiki == 0 then
interwiki = "w"
end
-- Jeśli podano kilka projektów, określ prefiks interwiki dla każdego
local interwikiPrefixes = {}
for currentInterwiki in mw.text.gsplit(interwiki, "[+,]") do
currentInterwiki = mw.ustring.match(currentInterwiki, "%s*([%w.]+)%s*")
if wikis[currentInterwiki] ~= nil then
currentInterwiki = wikis[currentInterwiki]
end
if #currentInterwiki > 0 and mw.ustring.sub(interwiki, -1) ~= ":" then
currentInterwiki = currentInterwiki..":"
end
table.insert(interwikiPrefixes, currentInterwiki)
end
-- Wypisz podlinkowaną nazwę użytkownika
if #interwikiPrefixes == 1 or forceSingle then
return "[["..interwikiPrefixes[1].."User:"..userName.."|"..userName.."]]"
end
-- Wypisz podlinkowane nazwy projektów
local interwikiUserLinks = {}
for _, iwPrefix in ipairs(interwikiPrefixes) do
local displayText = sites[iwPrefix] or iwPrefix
table.insert(interwikiUserLinks, "[["..iwPrefix.."User:"..userName.."|"..displayText.."]]")
end
return userName.." ("..table.concat(interwikiUserLinks, ", ")..")"
end
function p.wnioskodawca(frame)
local userName = frame.args[1] or ""
local interwiki = frame.args[2] or "w"
-- Obejście [[phab:T330987]]
if userName == "{{subst:REVISIONUSER}}" then
return "''zostanie wypełnione automatycznie''"
end
return p.parseUser(userName, interwiki, false)
end
function p.sprawdz_kwote(frame)
local amount = frame.args[1]
local errorText = frame.args[2] or "Niepoprawny format kwoty."
local validatePatterns = { "^ *%d+,%d%d *PLN *$", "^ *%d+ *PLN *$" }
for _, pattern in ipairs(validatePatterns) do
if string.match(amount, pattern) then
return amount
end
end
return errorText
end
function p.data(frame)
local d = frame.args[1]
if d == "{{subst:#time:j xg Y}}" then
d = frame:callParserFunction("#time", "j xg Y")
end
return d
end
return p