Přeskočit na obsah

Modul:Wikizprávy:Hlavní strana/Poslední zprávy: Porovnání verzí

Z Wikizpráv
Smazaný obsah Přidaný obsah
+ třída; úprava logiky
Palu (diskuse | příspěvky)
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&nbsp;" .. _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&nbsp;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( "&nbsp;", " " )
				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&nbsp;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