FANDOM


--<nowiki>
 
-- IMPORTS
local pt = require('Module:Paramtest')
local hc = pt.has_content
local dt = pt.default_to
 
-- exposed table
local p = {}
 
--[=[
-- 
-- HELPER TABLES AND FUNCTIONS
-- 
--]=]
 
-- replacement before calling encode
-- as lua patterns
local repl_before = {
	['%('] = '',
	['%)'] = '',
	['%!'] = '',
}
 
-- replacements after calling encode
-- as lua patterns
local repl_after = {
	['%+'] = '-',
	['%%2C'] = '',
	['%%2F'] = '',
	['%%3F'] = '',
	['%%26%%2338%%3B'] = '',
	['%%E2%%80%%93'] = '',
	['%.'] = '',
	['%%26quot%%3B'] = '',
	['%%E2%%80%%99'] = '',
	['%%26%%2339%%3B'] = '',
	['%%C3%%B6'] = 'o',
	['%%3A'] = '',
}
 
-- converting month names to hex for sortkeys
local hexmonthconv = {
	January = '1',
	February = '2',
	March = '3',
	April = '4',
	May = '5',
	June = '6',
	July = '7',
	August = '8',
	September = '9',
	October = 'A',
	November = 'B',
	December = 'C',
}
 
-- category mapping: {category name, type for use on date pages (eg [[28 November]])
local category_info = {
	bts = {'Behind the Scenes updates', 'Behind the Scenes'},
	community = {'Community updates', 'Community'},
	devblog = {'Developer Blogs', 'Developer Blog'},
	event = {'Event updates', 'Event update'},
	feedback = {'Feedback updates', 'Feedback'},
	future = {'Future updates', 'Future update'},
	game = {'Game updates', 'Game update'},
	shop = {'Shop updates', 'Shop update'},
	sof = {'Squeal of Fortune updates', 'Squeal of Fortune'},
	sgs = {'Solomon\'s Store updates', 'Solomon\'s Store'},
	support = {'Support updates', 'Support'},
	technical = {'Technical updates', 'Technical'},
	th = {'Treasure Hunter updates', 'Treasure Hunter'},
	website = {'Website updates', 'Website update'},
	['#default'] = {'Missing update category', ''},
}
-- input mapping: accepted inputs -> keys for above table
local cat_switch = {
	bts = 'bts',
	['behind the scenes'] = 'bts',
	comm = 'community',
	community = 'community',
	dev = 'devblog',
	blog = 'devblog',
	['dev blog'] = 'devblog',
	devblog = 'devblog',
	event = 'event',
	events = 'event',
	fb = 'feedback',
	feedback = 'feedback',
	yourfeedback = 'feedback',
	['your feedback'] = 'feedback',
	future = 'future',
	game = 'game',
	shop = 'shop',
	ss = 'sgs',
	sgs = 'sgs',
	solomon = 'sgs',
	['solomon\'s store'] = 'sgs',
	sof = 'sof',
	squeal = 'sof',
	cs = 'support',
	customer = 'support',
	['customer support'] = 'support',
	support = 'support',
	tech = 'technical',
	technical = 'technical',
	th = 'th',
	treasure = 'th',
	['treasure hunter'] = 'th',
	site = 'website',
	ws = 'website',
	website = 'website',
 
	['#default'] = '#default'
}
 
-- given a supported 'category' code, return the name of the category
function get_update_category(catarg)
	if hc(catarg) then
		catarg = string.gsub(string.lower(catarg), ' ?updates?', '')
		if cat_switch[catarg] and category_info[cat_switch[catarg]] then
			return category_info[cat_switch[catarg]][1]
		else
			return category_info[cat_switch['#default']][1]
		end
	else
		return category_info[cat_switch['#default']][1]
	end
end
 
-- given d,m,y, return the relevant time-based categories (with sorting)
function get_time_categories(day, month, year)
	local ret = {}
	local hexmonth, dayzero
 
	if not day or not month or not hexmonthconv[month] or not year then
		table.insert(ret, '[[Category:Missing update date]]')
	else
		dayzero = ((tonumber(day) < 10 and '0'..day) or day)
		hexmonth = hexmonthconv[month]
		-- [[Category:28 November updates]], sorted by year (eg 2015)
		table.insert(ret, string.format('[[Category:%s %s updates|%s%s%s]]', day, month, year, hexmonth, dayzero))
 
		-- [[Category:2015 updates]], sorted by monthday, months converted to hex, eg B28 (28 November)
		table.insert(ret, string.format('[[Category:%s updates|%s%s]]', year, hexmonth, dayzero))
 
		-- [[Category:Updates by date]], sorted year month day
		table.insert(ret, string.format('[[Category:Updates by date|%s%s%s]]', year, hexmonth, dayzero))
 
	end
 
	return table.concat(ret)
end
 
-- lang for formatting date
local lang = mw.getContentLanguage()
-- current title
local title = mw.title.getCurrentTitle()
 
--[=[
-- 
-- TEMPLATES
-- 
--]=]
 
-- [[Template:Update]]
function p.update(frame)
	local a = frame:getParent().args
 
	local div = mw.html.create('div')
		:addClass('official update')
		:done()
 
	local link
 
	if hc(a.link) then
		if a.link == 'no' then
			link = 'official news post'
		else
			link = '[' .. a.link .. ' official news post]'
		end
	else
		link = string.lower(title.baseText)
		for i,v in pairs(repl_before) do
			link = string.gsub(link, i, v)
		end
		link = mw.uri.encode(link)
		for i,v in pairs(repl_after) do
			link = string.gsub(link, i, v)
		end
 
		link = '[http://services.runescape.com/m=news/' .. link .. ' official news post]'
 
	end
 
	local date_link, day, month, year
	if hc(a.date) then
		day = lang:formatDate('j', a.date)
		month = lang:formatDate('F', a.date)
		year = lang:formatDate('Y', a.date)
		date_link = '[[' .. day .. ' ' .. month .. ']] [[' .. year .. ']]'
	else
		date_link = '(missing date)'
	end
 
	if hc(a.rev) then
		date_link = date_link .. ', and revised on ' .. lang:formatDate('[[j F]] [[Y]]', a.rev)
	end
 
	if hc(a.author) then
		date_link = date_link .. ' by ' .. a.author
	end
 
	div:wikitext('This ' .. link .. ' is copied verbatim from the ')
		:tag('span')
			:addClass('plainlinks')
			:wikitext('[http://www.runescape.com/community \'\'RuneScape\'\' website]')
		:done()
		:wikitext('. It is copyrighted by [[Jagex]].')
		:tag('br'):done()
		:wikitext('It was added on ' .. date_link .. '.')
	:done()
 
	local cat = ''
	-- cats only in update namespace
	if title.namespace == 100 then
		cat = '[[Category:' .. get_update_category(a.category) .. '|' .. title.text .. ']]'
		cat = cat .. get_time_categories(day, month, year)
	end
 
	local ret = frame:getParent():preprocess('{{DISPLAYTITLE:' .. title.text .. '}}') .. '__NOTOC__ __NOEDITSECTION__' .. tostring(div) .. cat .. '<div class="boldlinks">'
 
	return ret
end
 
 
 
-- [[Template:Patch Notes]]
function p.patchnotes(frame)
	local function qfclink(qfc)
		return 'http://forum.runescape.com/forums.ws?' .. string.gsub(qfc, '%-', ',')
	end
 
	local a = frame:getParent().args
	local cat = ''
 
	local div = mw.html.create('div')
		:addClass('official patchnote')
		:done()
 
	local link
 
	if hc(a.qfc) then
		if a.qfc == 'no' then
			link = ' a forum thread'
		else
			link = '[' .. qfclink(a.qfc) .. ' this forum thread]'
		end
	else
		link = '(QFC missing)'
		cat = cat .. '[[Category:Missing patch notes QFC]]'
	end
 
	local date_link
	local day, month, year = '', '', ''
	if hc(a.date) then
		day = lang:formatDate('j', a.date)
		month = lang:formatDate('F', a.date)
		year = lang:formatDate('Y', a.date)
		date_link = string.format('[[%s %s]] [[%s]]', day, month, year)
	else
		date_link = '(missing date)'
	end
 
	if hc(a.author) then
		date_link = date_link .. ' by ' .. a.author
	end
 
	if hc(a.rev) then
		date_link = date_link .. ', and revised on ' .. lang:formatDate('[[j F]] [[Y]]', a.rev)
	end
 
	div:wikitext('These official [[Patch Notes]] are copied verbatim from ' .. link .. ' of the ')
		:tag('span')
			:addClass('plainlinks')
			:wikitext('[http://forum.runescape.com \'\'RuneScape\'\' forums]')
		:done()
		:wikitext('. It is copyrighted by [[Jagex]].')
		:tag('br'):done()
		:wikitext('These Patch Notes were announced on ' .. date_link .. '.')
	:done()
 
	cat = cat .. '[[Category:Patch Notes|*' .. lang:formatDate('md', day .. ' ' .. month) .. ']]'
	cat = cat .. get_time_categories(day, month, year)
 
	-- not update namespace, remove cat
	if title.namespace ~= 100 then
		cat = ''
	end
 
	local ret = frame:getParent():preprocess(string.format('{{Parentitle override|Patch Notes|(%s %s %s)}}', day, month, year)) .. '__NOEDITSECTION__' .. tostring(div) .. cat .. '<div style="float:right">__TOC__</div>'
 
	return ret
end
 
-- [[Template:DevBlog]]
function p.devblog(frame)
	local a = frame:getParent().args
	local blogtitle = dt(a.title, title.baseTitle)
	local cat = ''
 
	local div = mw.html.create('div')
		:addClass('official devblog')
		:done()
 
	local link
 
	if hc(a.link) then
		if a.link == 'no' then
			link = "''RuneScape'' website"
		else
			link = '[' .. a.link .. " ''RuneScape'' website]"
		end
	else
		link = title.baseText
		for i,v in pairs(repl_before) do
			link = string.gsub(link, i, v)
		end
		link = mw.uri.encode(link)
		for i,v in pairs(repl_after) do
			link = string.gsub(link, i, v)
		end
 
		link = '[http://services.runescape.com/m=rswiki/en/DevBlog:' .. link .. " ''RuneScape'' website]"
 
	end
 
	local date_link, day, month, year
	if hc(a.date) then
		day = lang:formatDate('j', a.date)
		month = lang:formatDate('F', a.date)
		year = lang:formatDate('Y', a.date)
		date_link = '[[' .. day .. ' ' .. month .. ']] [[' .. year .. ']]'
	else
		date_link = '(missing date)'
	end
 
	local authorstr = ''
	if hc(a.author) then
		authorstr = "'''" .. a.author .. "'''"
	else
		authorstr = '(missing author)'
		cat = cat .. '[[Category:Missing devblog author]]'
	end
 
 
	div:wikitext('This [[Developer Blogs|Developer Blog]] is copied verbatim from the ')
		:tag('span')
			:addClass('plainlinks')
			:wikitext(link)
		:done()
		:wikitext('. It is copyrighted by [[Jagex]].')
		:tag('br'):done()
		:wikitext('It is written by ' .. authorstr .. ' and is dated ' .. date_link .. '.')
	:done()
 
	local div2 = mw.html.create('div')
				:css({
					['font-size'] = '150%',
					background = 'transparent none repeat scroll 0 0',
					['border-bottom'] = '1px solid #aaa',
					['font-weight'] = 'normal',
					['margin-bottom'] = '15px',
					['padding-bottom'] = '0.17em',
					['padding-top'] = '0.5em',
					['text-align'] = 'center',
				})
			:wikitext(blogtitle)
			:done()
 
 
	-- cats only in update namespace
	if title.namespace == 100 then
		cat = '[[Category:Developer Blogs|' .. blogtitle .. ']]'
		cat = cat .. get_time_categories(day, month, year)
	else
		cat = ''
	end
 
	local ret = frame:getParent():preprocess('{{DISPLAYTITLE:' .. title.text .. '}}') .. '__NOTOC__ __NOEDITSECTION__' .. tostring(div) .. cat .. tostring(div2)
 
	return ret
end
 
 
 
--[=[
-- 
-- CATEGORY FORMATTERS
-- 
--]=]
 
-- [[Category:28 November updates]] etc
function p.date_cat(frame)
	local f = frame:getParent()
	local d
	if hc(f.args[1]) then
		d = f.args[1]
	else
		-- assumes 2016 so that leap years work
		d = string.gsub(title.text, ' ?updates?', '') .. ' 2016'
	end
 
	local ret = 'This category contains updates posted on ' .. lang:formatDate('[[j F]]', d) .. ', sorted chronologically.'
	-- cats only in category namespace
	if title.namespace == 14 then
		--updates by day, sorted by hexmonth,day: B28 (28 November)
		ret = ret .. '[[Category:Updates by day|' .. hexmonthconv[lang:formatDate('F', d)] .. lang:formatDate('d', d) .. ']]'
		--updates by month, sorted by [space]day
		ret = ret .. '[[Category:' .. lang:formatDate('F', d) .. ' updates| ' .. lang:formatDate('d', d) .. ']]'
	end
 
	return ret
end
 
-- [[Category:2015 updates]] etc
function p.year_cat(frame)
	local f = frame:getParent()
	local d
	if hc(f.args[1]) then
		d = f.args[1]
	else
		d = string.gsub(title.text, ' ?updates?', '')
	end
 
	local ret = 'This category contains updates posted in [[' .. d .. ']], sorted chronologically.'
	-- cats only in category namespace
	if title.namespace == 14 then
		--updates by year, sorted by [space]year
		ret = ret .. '[[Category:Updates by year| ' .. d .. ']]'
	end
 
	return ret
end
 
 
 
 
--[=[
-- 
-- DPL HANDLERS
-- 
--]=]
 
function p.datedpl(frame)
	local a = frame:getParent().args
	local year
	local cat
	local page = a['%TITLE%']
	if hc(a.year) then
		year = a.year
	else
		year = lang:formatDate('Y', a.date)
	end
 
	if hc(a.category) then
		-- if it has category, {{Update}}
		cat = category_info[cat_switch[string.gsub(string.lower(a.category), ' ?updates?', '')]][2]
	elseif hc(a.qfc) then
		-- if it has qfc, {{Patch Notes}}
		cat = 'Patch Notes'
	else
		-- missing both probably means {{Antique update}}
		cat = 'Antique update'
	end
 
	return string.format("'''%s''' – %s: [[Update:%s|%s]]",year,cat,page,page)
end
 
--TODO
--p.updatedpl
--p.patchnotesdpl
--etc
 
 
 
 
return p

Ad blocker interference detected!


Wikia is a free-to-use site that makes money from advertising. We have a modified experience for viewers using ad blockers

Wikia is not accessible if you’ve made further modifications. Remove the custom ad blocker rule(s) and the page will load as expected.