Module:NewsQueryFrontpage

local util_args = require('Module:ArgsUtil') local util_cargo = require("Module:CargoUtil") local util_html = require("Module:HtmlUtil") local util_news = require("Module:NewsUtil") local util_table = require("Module:TableUtil") local util_text = require("Module:TextUtil") local util_title = require("Module:TitleUtil") local util_vars = require("Module:VarsUtil") local i18n = require('Module:i18nUtil')

local m_team = require('Module:Team')

local NewsQueryAbstract = require('Module:NewsQueryAbstract') local NewsQuery = NewsQueryAbstract:extends

local PRELOADS_TO_IGNORE = { }

local lang = mw.getLanguage('en')

LIMIT = 9999 MIN_DAYS = 9999 LINES_COUNTER = 0 DAY_COUNTER = 0 local SETTINGS = require('Module:NewsQueryFrontpage/Settings')

local h = {}

local p = {}

function p.main(frame) local args = util_args.merge i18n.init('NewsQueryFrontpage', 'NewsQuery') h.setPreload(args) return NewsQuery(args):run end

function h.setPreload(args) if not args.preload then error(i18n.print('errorMissingPreload')) end if not SETTINGS[args.preload:lower] then error(i18n.print('errorInvalidPreload')) end SETTINGS = SETTINGS[args.preload:lower] end

function NewsQuery:init(args) self:super('init', args) util_table.mergeArrays(self.PRELOADS_TO_IGNORE, PRELOADS_TO_IGNORE) end

function NewsQuery:makeOutput(byDate, args) local output = mw.html.create h.printIntro(output, args) local tbl = output:tag('table') :addClass('news-table') for _, date in ipairs(byDate) do		util_vars.setVar('currentDate', date) h.printDate(tbl, byDate[date]) h.printDateContent(tbl, byDate[date]) if LINES_COUNTER + 1 >= LIMIT and DAY_COUNTER > MIN_DAYS then break end end return output end

function NewsQuery:getQuery(args) local query = self:super('getQuery', args) local new = { where = self:getWhere(args), }	return util_cargo.concatQueriesAnd(query, new) end

function NewsQuery:getWhere(args) local tbl = { util_cargo.whereFromArg('News.Region="%s"', args.region), util_news.getExcludedNewsPreloadsWhereCondition(self.PRELOADS_TO_IGNORE), }	util_table.mergeArrays(		tbl,		h.getExclusionWhereConditions(args),		h.getDateWhereConditionsFromTitle,		h.getCustomDatePeriod(args)	) return util_cargo.concatWhere(tbl) end

function h.getExclusionWhereConditions(args) return SETTINGS.where end

function h.getCustomDatePeriod(args) if not args.sdate and not args.edate then return {} end local ret = { ('Date_Sort >= "%s"'):format(args.sdate), ('Date_Sort <= "%s"'):format(args.edate) }	return ret end

function h.getDateWhereConditionsFromTitle local startDate = h.getStartDateFromTitle if not startDate then return {} end local startTimestamp local function assignTimestamp(date) startTimestamp = lang:formatDate('Y-m-d', startDate) end if not pcall(assignTimestamp, startDate) then error(i18n.print('error_wrongTitle')) end local ret = { ('Date_Sort >= "%s"'):format(startTimestamp), ('Date_Sort <= "%s"'):format(			lang:formatDate('Y-m-d', h.getMonthEndDateFromStartDate(startDate))		) }	return ret end

function h.getStartDateFromTitle local title = mw.title.getCurrentTitle.text if util_title.titleparts(title, 1, 3) == '' then return nil end return ('1 %s %s'):format(		util_title.titleparts(title,1, 3),		util_title.titleparts(title,1, 2)	) end

function h.getMonthEndDateFromStartDate(startDate) return ('%s + 1 month - 1 day'):format(startDate) end

function h.printIntro(output, args) return end

function h.printDate(tbl, dateData) LINES_COUNTER = LINES_COUNTER + 1 DAY_COUNTER = DAY_COUNTER + 1 if DAY_COUNTER > MIN_DAYS and LINES_COUNTER >= LIMIT then return end local th = tbl:tag('tr'):tag('th') :attr('colspan', #SETTINGS.columns) :wikitext(dateData.date) h.printEditButton(th, dateData.page, dateData.date) end

function h.printEditButton(th, page, date) if not page then return end th:tag('div') :addClass('news-edit-button') :addClass('logged-in-link') :wikitext(i18n.print('edit')) :attr('data-href', h.pageWithAnchor(page, date)) end

function h.pageWithAnchor(page, date) return ('%s#%s'):format(page, date) end

function h.printDateContent(tbl, lines) for _, line in ipairs(lines) do		util_vars.setVar('currentRow', line.NewsId) LINES_COUNTER = LINES_COUNTER + 1 if LINES_COUNTER > LIMIT and DAY_COUNTER > MIN_DAYS then break end h.printLine(tbl, line) end end

function h.printLine(tbl, line) util_html.printRowByList(tbl, line, SETTINGS.columns) end

return p