UWAGA |
---|
Większość artykułów w portalu to nasze własne teksty z kluczowych dziedzin związanych z naszą misją. Spora część materiałów pochodzi też z polskiej wersji Wikipedii, gdzie były odrzucone ze względu na politykę redaktorów (przeczytaj o krytyce Wikipedii). Są też i takie, które zostały przeniesione na nasze strony, gdyż stanowią istotne uzupełnienie merytorycznej treści naszego serwisu. Wszystkie artykuły podlegają edycji przez naszych Użytkowników, dlatego ich wersje mogą się różnić od prezentowanych na innych witrynach. |
Moduł:Dopracować
Przejdź do nawigacji
Przejdź do wyszukiwania
Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Dopracować/opis
local resources = mw.loadData( 'Moduł:Dopracować/resources' )
return {
test = function(frame)
local pf = frame:getParent()
-- scan reasons without dates
local sectionParamIndex = resources.data.sectionParamIndex
local sectionParamValue = resources.data.sectionParamValue
for i = 1, 10 do
local object = pf:getArgument(i)
if object then
local reason = object:expand()
if reason and ((i ~= sectionParamIndex) or (reason ~= sectionParamValue)) then
if #mw.text.trim(reason) > 0 then
return "true"
end
end
end
end
-- scan well known reasons with optional date
for _, v in ipairs(resources.reasons) do
for _, k in ipairs(v.aliases) do
local object = pf:getArgument(k)
if object then
local currentDate = object:expand()
if currentDate then
return "true"
end
end
end
end
return nil
end,
icon = function(frame)
local pf = frame:getParent()
local onlyReason = nil
local mapParamToReason = {}
for i, v in ipairs(resources.reasons) do
for _, a in ipairs(v.aliases) do
mapParamToReason[a] = i
end
end
-- scan well known reasons with date
for k, i in pairs(mapParamToReason) do
local object = pf:getArgument(k)
if object then
local currentDate = object:expand()
if currentDate then
if not onlyReason then
onlyReason = i
elseif onlyReason ~= i then
onlyReason = 0
break
end
end
end
end
-- scan reasons without dates
if not onlyReason then
for i = 1, 10 do
local object = pf:getArgument(i)
if object then
local reason = object:expand()
if reason and ((i ~= resources.data.sectionParamIndex) or (reason ~= resources.data.sectionParamValue)) then
if mw.text.trim(reason) ~= "" then
local known = mapParamToReason[reason]
if known then
if not onlyReason then
onlyReason = known
elseif onlyReason ~= known then
onlyReason = 0
break
end
end
end
end
end
end
end
local icon = nil
if onlyReason then
local reasonData = resources.reasons[onlyReason]
if reasonData then
icon = reasonData.icon
end
end
return icon or resources.default.icon
end,
text = function(frame)
local title = mw.title.getCurrentTitle()
local pf = frame:getParent()
local defaultDate = pf.args[resources.data.defaultDateIndex] or ""
local complexCategories = {
categories = function(result, date)
local switch = title.nsText
-- if (switch == "Pomoc") or (switch == "Wikipedia") or (switch == "Portal") or (switch == "Wikiproject") then
-- table.insert(result, "[[Kategoria:WP?|"..title.text.."]]")
-- else
if switch == "Kategoria" then
table.insert(result, "[[Kategoria:?|"..title.text.."]]")
elseif title.namespace == 0 then
table.insert(result, "[[Kategoria:?]]")
end
end,
}
function prepareTemplates(reason, date, section, comments)
local c = reason["?"] or {}
local sourceTemplates = section and resources.sectionTemplates or ((title.namespace == 0) and resources.articleTemplates or resources.otherTemplates)
local templates = {}
for k, v in pairs(sourceTemplates) do
templates[k] = v
end
templates[resources.data.dateTemplate] = date or ""
if title.talkPageTitle then
templates[resources.data.talkNameTemplate] = title.talkPageTitle.fullText
end
templates["{{FULLPAGENAMEE}}"] = mw.uri.encode(title.fullText, "WIKI")
templates["{{PAGENAMEE}}"] = mw.uri.encode(title.text, "WIKI")
templates["{{BASEPAGENAMEE}}"] = mw.uri.encode(title.baseText, "WIKI")
templates["{{SUBPAGENAMEE}}"] = mw.uri.encode(title.subpageText, "WIKI")
templates["{{FULLPAGENAME}}"] = title.fullText
templates["{{PAGENAME}}"] = title.text
templates["{{BASEPAGENAME}}"] = title.baseText
templates["{{SUBPAGENAME}}"] = title.subpageText
templates[resources.data.pageUrlTemplate] = title:fullUrl()
templates[resources.data.talkSectionTemplate] = pf.args[resources.data.talkPageSectionParamIndex] or ""
local defaultComment, _ = string.gsub(c.default or "", resources.data.templatePattern, templates)
templates[resources.data.infoTemplate] = #comments > 0 and ((c.prefix or "")..table.concat(comments, c.separator or ", ")..(c.suffix or "")) or defaultComment
-- prepare "talk" hint
local talk = ""
if title.talkPageTitle and title.talkPageTitle.exists then
talk, _ = string.gsub(reason.talk or "", resources.data.templatePattern, templates)
end
templates[resources.data.talkTemplate] = talk
return templates
end
local mapParamToReason = {}
for i, v in ipairs(resources.reasons) do
for _, a in ipairs(v.aliases) do
mapParamToReason[a] = i
end
end
local reasonDates = {}
-- scan well known reasons with date
for k, i in pairs(mapParamToReason) do
local object = pf:getArgument(k)
if object then
local currentDate = object:expand()
if currentDate then
local previousDate = reasonDates[i]
if not previousDate or (previousDate == "") or ((currentDate ~= "") and (currentDate < previousDate)) then
reasonDates[i] = currentDate
end
end
end
end
local onlyReason = nil
local allMessages = {}
local customMessages = {}
local allGrowthItems = {}
-- collect messages with dates
for i, v in ipairs(resources.reasons) do
local date = reasonDates[i]
if date then
table.insert(allMessages, (#date > 0) and string.format(resources.data.messageWithDatePrefix, date, v.message) or v.message)
for _, g in ipairs(v.growth or {}) do
allGrowthItems[g] = true
end
if not onlyReason then
onlyReason = i
else
onlyReason = 0
end
end
end
-- scan reasons without dates
local scanReasonWithoutDate = function(index)
local object = pf:getArgument(index)
if object then
local reason = object:expand()
if reason then
reason = mw.text.trim(reason)
if (index ~= resources.data.sectionParamIndex) or (reason ~= resources.data.sectionParamValue) then
if #reason > 0 then
local known = mapParamToReason[reason]
if not known then
table.insert(allMessages, reason)
table.insert(customMessages, reason)
else
for _, g in ipairs(resources.reasons[known].growth or {}) do
allGrowthItems[g] = true
end
if not onlyReason then
onlyReason = known
elseif onlyReason ~= known then
onlyReason = 0
end
if not reasonDates[known] then
reasonDates[known] = defaultDate
local v = resources.reasons[known].message
table.insert(allMessages, (#defaultDate > 0) and string.format(resources.data.messageWithDatePrefix, defaultDate, v) or v)
end
end
end
end
end
return reason
end
end
local sectionParam = scanReasonWithoutDate(resources.data.sectionParamValue)
for i = 1, 10 do
scanReasonWithoutDate(i)
end
-- transclude "growth" templates
if title.namespace == 0 then
for g, _ in pairs(allGrowthItems) do
local sitelink = mw.wikibase.getSitelink(g)
if sitelink then
pcall(frame.expandTemplate, frame, {title = sitelink, args = {}})
end
end
end
-- collect categories
local categories = {}
for i, v in ipairs(resources.reasons) do
local date = reasonDates[i]
if date and v.cat then
local complexCat = complexCategories[v.cat]
if complexCat then
complexCat(categories, date)
elseif title.namespace == 0 then
table.insert(categories, (v.catDate and (#date > 0)) and string.format(v.catDate, date) or v.cat)
end
end
end
if (#categories == 0) and (title.namespace == 0) then
table.insert(categories, resources.data.defaultCategory)
end
-- prepare date hints
local hints = {}
local currentDate = nil
for i, v in ipairs(resources.reasons) do
local date = reasonDates[i]
if date and (#date == 0) and v.catDate then
if not currentDate then
currentDate = mw.getContentLanguage():formatDate(resources.data.dateFormat, nil, true)
end
table.insert(hints, string.format(resources.data.dateExample, v.aliases[1], currentDate))
end
end
local result = {}
local section = (pf.args[resources.data.sectionParamIndex] == resources.data.sectionParamValue) or sectionParam
local onlyReasonData = resources.reasons[onlyReason]
local mainText = nil
local templates = {}
if onlyReasonData and onlyReasonData.simple and ((#customMessages == 0) or onlyReasonData["?"]) then
local date = reasonDates[onlyReason]
if #date > 0 then
date = string.format(resources.data.dateInfix, date)
end
templates = prepareTemplates(onlyReasonData, date, section, customMessages)
mainText, _ = string.gsub(onlyReasonData.simple, resources.data.templatePattern, templates)
end
if not mainText and not onlyReason then
local date = pf.args[resources.data.defaultDateIndex] or ""
if #date > 0 then
date = string.format(resources.data.dateInfix, date)
end
templates = prepareTemplates(resources.default, date, section, customMessages)
mainText, _ = string.gsub(resources.default.simple, resources.data.templatePattern, templates)
end
if not mainText then
templates = prepareTemplates(resources.default, "", section, allMessages)
mainText, _ = string.gsub(resources.default.message, resources.data.templatePattern, templates)
end
table.insert(result, mainText)
table.insert(result, table.concat(categories,""))
if title.talkPageTitle and title.talkPageTitle.exists and ((#templates[resources.data.talkTemplate] == 0) or (#templates[resources.data.talkSectionTemplate] > 0)) then
local talkPageMessage, _ = string.gsub((#templates[resources.data.talkSectionTemplate] == 0) and resources.data.talkPage or resources.data.talkSection, resources.data.templatePattern, templates)
table.insert(result, talkPageMessage)
end
local articleInstruction, _ = string.gsub(resources.data.articleInstruction, resources.data.templatePattern, templates)
table.insert(result, articleInstruction)
if #hints > 0 then
table.insert(result, string.format(resources.data.templateInstruction, table.concat(hints, ", ")))
end
local result = table.concat(result, "")
for i, v in ipairs(resources.compact or {}) do
local r, c = mw.ustring.gsub(result, v.pattern, v.replace)
if c > 0 then
result = r
break
end
end
return result
end,
}