Modul:Wikizprávy:Hlavní strana/Poslední zprávy: Porovnání verzí
Vzhled
Smazaný obsah Přidaný obsah
+ třída; úprava logiky |
fix - přidání zprávy do přehledu, nikoliv plnohodnotné zprávy (bylo by dobré udělat i tlačítko na normální zprávu) |
||
Řádek 213: | Řádek 213: | ||
:tag( "div" ) |
:tag( "div" ) |
||
:addClass( "mainpage-addNews" ) |
:addClass( "mainpage-addNews" ) |
||
:wikitext( mw.ustring.format( "[%s přidejte zprávu]", |
:wikitext( mw.ustring.format( "[%s přidejte zprávu do přehledu ]", |
||
titleObject:fullUrl({ |
titleObject:fullUrl({ |
||
action = "edit" |
action = "edit" |
Verze z 21. 3. 2016, 10:27
Dokumentaci tohoto modulu lze vytvořit na stránce Nápověda:Modul:Wikizprávy:Hlavní strana/Poslední zprávy
-- @brief
-- Backend for [[Wikizprávy:Hlavní strana/Poslední zprávy]].
--
-- @author
-- [[meta:User:Danny B.]]
local _module = {}
----------------------------------------
local Collation = require( "Module:Collation" )
local DateTime = require( "Module:DateTime" )
function kpairs( tbl, ... )
local keys = {}
for key in pairs( tbl ) do
table.insert( keys, key )
end
table.sort( keys, arg[1] )
local i = 0
local iterator = function ()
i = i + 1
if keys[i] == nil then
return nil
else
return keys[i], tbl[keys[i]]
end
end
return iterator
end
_module.sections = {
{
displayTitle = "Dnes"
}, {
displayTitle = "Včera"
}, {}, {}, {}, {}, {}
}
-- @brief
-- Generates the content of [[Wikizprávy:Hlavní strana/Poslední zprávy]].
--
-- @return
-- Preprocessed wikitext Generated content of [[Wikizprávy:Hlavní strana/Poslední zprávy]]
function _module.print( frame )
local output = ""
local sectionDate = DateTime.getLocalDate()
local sumPagesInCategories = 0
for i = 1, 7 do
_module.sections[i].dateNom = sectionDate.day .. ". " .. DateTime.months[sectionDate.month].name .. " " .. sectionDate.year
_module.sections[i].dateGen = sectionDate.day .. ". " .. DateTime.months[sectionDate.month].genitive .. " " .. sectionDate.year
_module.sections[i].title = mw.title.new( _module.sections[i].dateNom )
-- expensive++
_module.sections[i].pagesInCategory = mw.site.stats.pagesInCategory( _module.sections[i].dateNom, "pages" )
-- expensive++
if _module.sections[i].title.exists then
_module.sections[i].pagesInCategory = _module.sections[i].pagesInCategory - 1
end
sumPagesInCategories = sumPagesInCategories + _module.sections[i].pagesInCategory
_module.sections[i].sumPagesInCategories = sumPagesInCategories
output = output .. "=== "
if _module.sections[i].title.exists then
output = output .. "[[" .. _module.sections[i].title.text
if _module.sections[i].displayTitle then
output = output .. "|" .. _module.sections[i].displayTitle
end
output = output .. "]]"
else
output = output .. ( _module.sections[i].displayTitle or _module.sections[i].title.text ) ..
" <span title=\"Založit denní přehled pro " .. _module.sections[i].title.text .. "\" class=\"plainlinks\">[" ..
_module.sections[i].title:fullUrl({
action = "edit",
preload = "Wikizprávy:Kostry stránek/Denní přehled",
summary = _module.sections[i].title.text
}) ..
" ✍]</span>"
end
output = output .. " ===\n"
if _module.sections[i].pagesInCategory > 0 then
if _module.sections[i].sumPagesInCategories <= 10 then
output = output .. [[
<dynamicpagelist>
category = ]] .. _module.sections[i].dateNom .. [[
count = 10
namespace = 0
notcategory = Denní přehledy
notcategory = Údržba:Dodělat
notcategory = Údržba:Smazat
notcategory = Údržba:Porušení autorských práv
notcategory = Údržba:Upravit
order = descending
suppresserrors = true
</dynamicpagelist>
]]
else
output = output .. "''[[:Kategorie:" .. _module.sections[i].dateNom .. "|(všechny zprávy z " .. _module.sections[i].dateGen .. ")]]''\n\n"
end
end
if i <= 2 then
output = output .. "<small>''[[:Kategorie:" .. sectionDate.day .. ". " .. DateTime.months[sectionDate.month].name .. "|(" .. sectionDate.day .. ". " .. DateTime.months[sectionDate.month].name .. " v minulosti)]]''</small>\n"
end
sectionDate.day = sectionDate.day - 1
sectionDate = os.date( "*t", os.time( sectionDate ) )
end
output = frame:preprocess( output )
return output
end
function _module.printList( frame )
local output
local html = mw.html.create()
local ribbon
local newsList
local dateObject = DateTime.getLocalDate()
for i = 1, 7 do
local dateDay = mw.ustring.format( "%d. %s", dateObject.day, DateTime.months[dateObject.month].name )
local dateFull = mw.ustring.format( "%d. %s %d", dateObject.day, DateTime.months[dateObject.month].name, dateObject.year )
local titleObject = mw.title.new( dateFull )
-- expensive++
if titleObject.exists then
local deathPrefix = "Úmrtí: "
local dailyNews = {}
local content = titleObject:getContent()
:gsub( "<ref[^>]-/>", "" )
:gsub( "<ref[^>]->.-</ref>", "" )
for news in content:gmatch( '%*.-\n' ) do
news = mw.text.trim( news )
:gsub( "^%* *", "" )
:gsub( "(.-%(%*[^%)]+%d%d%d%d%))$", deathPrefix .. "%1" )
:gsub( "%[%[w:.-%|(.-)%]%]", "%1" )
local key = news
:gsub( "%[%[.-%|(.-)%]%]", "%1" )
:gsub( " ", " " )
dailyNews[key] = news
end
if next( dailyNews ) ~= nil then
local news = {}
local deaths = {}
for _, item in kpairs( dailyNews, Collation.sortCompare ) do
table.insert( item:match( "^" .. deathPrefix ) and deaths or news, item )
end
if #news + #deaths > 0 then
newsList = mw.html.create( "ul" )
for _, item in pairs( news ) do
newsList = newsList
:tag( "li")
:wikitext( item )
:done()
:newline()
end
if #deaths > 0 then
newsList = newsList
:tag( "li")
:wikitext( "Úmrtí:" )
:newline()
:tag( "ul" )
:addClass( "deaths" )
for _, item in pairs( deaths ) do
item = item:gsub( "^" .. deathPrefix, "" )
newsList = newsList
:tag( "li")
:wikitext( item )
:done()
:newline()
end
newsList = newsList
:done()
:newline()
:done()
end
newsList = newsList
:done()
:newline()
:allDone()
end
else
newsList = mw.html.create()
:tag( "div" )
:addClass( "mainpage-addNews" )
:wikitext( mw.ustring.format( "[%s přidejte zprávu do přehledu ]",
titleObject:fullUrl({
action = "edit"
})
))
:done()
:newline()
:allDone()
end
ribbon = nil
else
ribbon = mw.html.create()
:wikitext( " " )
:tag( "span" )
:addClass( "ribbon" )
:wikitext(
mw.ustring.format( "[%s založit]",
titleObject:fullUrl({
action = "edit",
preload = "Wikizprávy:Kostry stránek/Denní přehled",
summary = dateFull
})
)
)
:done()
:allDone()
end
html = html
:tag( "div" )
:addClass( "mainpage-dayList" )
:tag( "h3" )
:addClass( "calendarSheet" )
:addClass( dateObject.wday == 1 and "calendarSheetHoliday" or nil )
:tag( "time" )
:attr( "datetime", string.format( "%d-%02d-%02d", dateObject.year, dateObject.month, dateObject.day ) )
:tag( "span" )
:addClass( "calendarSheet-dayName" )
:wikitext( DateTime.days[dateObject.wday].name )
:done()
:wikitext( " " )
:tag( "span" )
:addClass( "calendarSheet-day" )
:wikitext( titleObject.exists and mw.ustring.format( "[[%s|%s]]", dateFull, dateObject.day ) or dateObject.day )
:done()
:tag( "span" )
:addClass( "calendarSheet-dmSeparator" )
:wikitext( "." )
:done()
:wikitext( " " )
:tag( "span" )
:addClass( "calendarSheet-monthName" )
:wikitext( DateTime.months[dateObject.month].name )
:done()
:wikitext( " " )
:tag( "span" )
:addClass( "calendarSheet-year" )
:wikitext( dateObject.year )
:done()
:done()
:node( ribbon )
:done()
:newline()
:tag( "div" )
:addClass( "mainpage-newsList" )
:newline()
:node( newsList )
:tag( "small" )
:wikitext( mw.ustring.format( "[[:Kategorie:%s|%s v minulosti]]", dateDay, dateDay ) )
:done()
:newline()
:done()
:newline()
:done()
:newline()
:allDone()
dateObject.day = dateObject.day - 1
dateObject = os.date( "*t", os.time( dateObject ) )
end
output = frame:preprocess( tostring( html ) )
return output
end
----------------------------------------
return _module