FANDOM


-- <nowiki>
 
local DEBUG_MODE = false -- if true, errors are not caught
 
local iconData = {
	pre = {
		image = "Premium-Era-pre.png",
		tooltip = "ამ სტატიის თემა აღწერს რესპუბლიკის ჩამოყალიბებამდე მომხდარ მოვლენებს.",
		link = "რესპუბლიკის დაარსებამდე"
	},
	btr = {
		image = "Premium-Era-pre.png",
		tooltip = "ამ სტატიის თემა აღწერს რესპუბლიკამდე მომხდარ მოვლენებს.",
		link = "რესპუბლიკამდე"
	},
	old = {
		image = "Premium-Era-old.png",
		tooltip = "ამ სტატიის თემა აღწერს ძველი რესპუბლიკის დროს მომხდარ მოვლენებს.",
		link = "ძველი რესპუბლიკის ეპოქა"
	},
	imp = {
		image = "Premium-Era-imp.png",
		tooltip = "ამ სტატიის თემა აღწერს იმპერიის აღმასვლის ეპოქის დროს მომხდარ მოვლენებს.",
		link = "იმპერიის აღმასვლის ეპოქა"
	},
	reb = {
		image = "Premium-Era-reb.png",
		tooltip = "ამ სტატიის თემა აღწერს აჯანყების ეპოქის დროს მომხდარ მოვლენებს.",
		link = "აჯანყების ეპოქა"
	},
	new = {
		image = "Premium-Era-new.png",
		tooltip = "ამ სტატიის თემა აღწერს ახალი რესპუბლიკის ეპოქის დროს მომხდარ მოვლენებს.",
		link = "ახალი რესპუბლიკის ეპოქა"
	},
	njo = {
		image = "Premium-Era-njo.png",
		tooltip = "ამ სტატიის თემა აღწერს ჯედაების ახალი ორდენის ეპოქის დროს მომხდარ მოვლენებს.",
		link = "ჯედაების ახალი ორდენის ეპოქა"
	},
	leg = {
		image = "Premium-Era-leg.png",
		tooltip = "ამ სტატიის თემა აღწერს მემკვიდრეობის ეპოქის დროს მომხდარ მოვლენებს.",
		link = "მემკვიდრეობის ეპოქა"
	},
	inf = {
		image = "Premium-Era-leg.png",
		tooltip = "ამ სტატიის თემა აღწერს მემკვიდრეობის ეპოქის დროს მომხდარ მოვლენებს.",
		link = "მემკვიდრეობის ეპოქა"
	},
	real = {
		image = "Premium-Era-real.png",
		tooltip = "ამ სტატიის თემა არსებობს ნამდვილ სამყაროში ან შეესაბამება მას.",
		link = "Category:ნამდვილი სამყაროს სტატიები",
		category = "ნამდვილი სამყაროს სტატიები"
	},
	destacado = {
		image = "Premium-FeaturedIcon.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის რჩეული სტატია.",
		link = "ვარსკვლავური ომების ვიკი:რჩეული სტატიები",
		category = "ვარსკვლავური ომების ვიკის რჩეული სტატიები"
	},
	exdestacado = {
		image = "Premium-DefeaturedIcon.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის ყოფილი რჩეული სტატია.",
		link = "ვარსკვლავური ომების ვიკი:რჩეული სტატიები",
		category = "ვარსკვლავური ომების ვიკის ყოფილი რჩეული სტატიები"
	},
	bueno = {
		image = "Premium-GoodIcon.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის კარგი სტატია.",
		link = "ვარსკვლავური ომების ვიკი:კარგი სტატიები",
		category = "ვარსკვლავური ომების ვიკის კარგი სტატიები"
	},
	exbueno = {
		image = "Premium-FormerGAicon.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის ყოფილი კარგი სტატია.",
		link = "ვარსკვლავური ომების ვიკი:კარგი სტატიები",
		category = "ვარსკვლავური ომების ვიკის ყოფილი კარგი სტატიები"
	},
	comp = {
		image = "Premium-ComprehensiveArticle.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის ვრცელი სტატია.",
		link = "ვარსკვლავური ომების ვიკი:ვრცელი სტატიები",
		category = "ვარსკვლავური ომების ვიკის ვრცელი სტატიები"
	},
	excomp = {
		image = "Premium-FormerCAIcon.png",
		tooltip = "ეს არის ვარსკვლავური ომების ვიკის ყოფილი ვრცელი სტატია.",
		link = "ვარსკვლავური ომების ვიკი:ვრცელი სტატიები",
		category = "ვარსკვლავური ომების ვიკის ყოფილი ვრცელი სტატიები"
	},
	prot = {
		protectionAction = "edit",
		protectionLevel = "sysop",
		image = "Premium-Era-Fprotect.png",
		tooltip = "ეს სტატია რედაქტირებისგან დაცულია.",
		link = "ვარსკვლავური ომების ვიკი:დაცვის_პოლიტიკა#სრული_დაცვა",
		category = "დაცული სტატიები"
	},
	sprot = {
		protectionAction = "edit",
		protectionLevel = "autoconfirmed",
		image = "Premium-Era-Sprotect.png",
		tooltip = "ეს სტატია რედაქტირებისგან ნაწილობრივ დაცულია.",
		link = "ვარსკვლავური ომების ვიკი:დაცვის_პოლიტიკა#ნაწილობრივ_დაცვა",
		category = "ნაწილობრივ დაცული სტატიები"
	},
	ssprot = {
		image = "Premium-Era-Ssprotect.png",
		tooltip = "ეს სტატია რედაქტირებისგან ნაწილობრივ დაცულია გაძლიერებული უსაფრთხოებით.",
		link = "ვარსკვლავური ომების ვიკი:დაცვის_პოლიტიკა#ნაწილობრივ_დაცვა_გაძლიერებული_უსაფრთხოებით",
		category = "გაძლიერებული უსაფრთხოებით ნაწილობრივ დაცული სტატიები"
	},
	mprot = {
		protectionAction = "move",
		protectionLevel = "sysop",
		image = "Premium-Era-Mprotect.png",
		tooltip = "ეს სტატია დაცულია გადატანისგან.",
		link = "ვარსკვლავური ომების ვიკი:დაცვის_პოლიტიკა#გადატანისგან_დაცვა",
		category = "გადატანისგან დაცული სტატიები"
	},
	uprot = {
		protectionAction = "upload",
		protectionLevel = "sysop",
		image = "Premium-Era-Uprotect.png",
		tooltip = "ეს ფაილი დაცულია ატვირთვისგან.",
		link = "ვარსკვლავური ომების ვიკი:დაცვის_პოლიტიკა#ატვირთვისგან_დაცვა",
		category = "ატვირთვისგან დაცული ფაილები"
	},
	noncanon = {
		image = "Premium-Era-inf.png",
		tooltip = "ამ სტატიის თემა ითვლება არაკანონიკურად."
	}
}
 
local function exists(page)
	local success, title = pcall(mw.title.new, page)
	return success and title and title.exists or false
end
 
local Eras = {}
Eras.__index = Eras 
 
function Eras.new(args, title)
	local obj = setmetatable({}, Eras) -- Make our object inherit from Eras.
	obj.title = title or mw.title.getCurrentTitle()
 
 
	obj.categories = {}
 
	obj.noDisplayTitle = args.notitle
	obj.displayTitleBase = args.title
	obj.displayTitleParen = args.title2
 
	obj.isHidden = args.hide
 
 
	if args.type then
		local override = args.type:lower()
		if override ~= 'canon' and override ~= 'legends' then
			obj:raiseError("si el parámetro 'type' está especificado, debe " ..
				"tener el valor de 'canon' o 'legends'")
		end
		obj.continuityOverride = override
	end
 
	obj.legendsArticle = args.legends
	obj.canonArticle = args.canon
 
	do
		local icons = {}
		for _, v in ipairs(args) do
			local t = iconData[string.lower(v)]
			if t then
				icons[string.lower(v)] = t
			else
 
				obj.hasBadParameter = true
			end
		end
		obj.icons = icons
	end
 
	return obj
end
 
function Eras:raiseError(msg)
	local level
	if DEBUG_MODE then
		level = nil
	else
		level = 0 
	end
	error(msg, level)
end
 
function Eras:addCategory(cat, sort)
	table.insert(self.categories, {category = cat, sortKey = sort})
end
 
function Eras:getIconData(code)
	return self.icons[code]
end
 
function Eras:hasCanonTitle()
	return self.title.text:find('/კანონი$')
end
 
function Eras:hasLegendsTitle()
	return self.title.text:find('/ლეგენდები$')
end
 
function Eras:hasAnyOfIcons(...)
	for i = 1, select('#', ...) do
		if self:getIconData(select(i, ...)) then
			return true
		end
	end
	return false
end	
 
function Eras:renderDisplayTitle()
	local pagename = self.title.text
 
	if self.noDisplayTitle or pagename:find('^%(') then
		return nil
	end
 
	local dBase = self.displayTitleBase
	local dParen = self.displayTitleParen
	if not dBase or not dParen then
 
		local trimmedPagename = pagename:gsub('/კანონი$', '')
		trimmedPagename = pagename:gsub('/ლეგენდები$', '')
		local base, paren = trimmedPagename:match('^(.*)%s*%((.-)%)$')
		if not base then
			base = trimmedPagename
		end
 
		dBase = dBase or base
		dParen = dParen or paren
	end
 
	local display
	if dParen then
		display = string.format('%s <small>(%s)</small>', dBase, dParen)
	else
		display = dBase
	end
	if self.title.namespace ~= 0 then
		display = mw.site.namespaces[self.title.namespace].name .. ':' .. display
	end
 
	return mw.getCurrentFrame():preprocess(string.format(
		'{{DISPLAYTITLE:%s}}',
		display
	))
end
 
function Eras:renderIcon(data)
 
	if data.category then
		self:addCategory(data.category)
	end
 
	local ret = {}
	ret[#ret + 1] = '[[File:'
	ret[#ret + 1] = data.image
	if data.tooltip then
		ret[#ret + 1] = '|'
		ret[#ret + 1] = data.tooltip
	end
	if data.link then
		ret[#ret + 1] = '|link='
		ret[#ret + 1] = data.link
	end
	ret[#ret + 1] = ']]'
	return table.concat(ret)
end
 
function Eras:renderProtectionIcon(data)
	if not data.protectionAction then
		return self:renderIcon(data)
	end
	local protectionLevel = self.title.protectionLevels[data.protectionAction]
	protectionLevel = protectionLevel and protectionLevel[1]
	if protectionLevel and protectionLevel == data.protectionLevel then
		return self:renderIcon(data)
	else
		self.hasIncorrectProtectionIcon = true
	end
end
 
function Eras:renderContinuityIcon()
 
	local continuity, isUsingCategory
	if self.continuityOverride == 'legends' then
		continuity = 'legends'
		if not self:hasAnyOfIcons('real') then
			isUsingCategory = true
		end
	elseif self.title.namespace == 0 then
		if self:hasLegendsTitle() then
			continuity = 'legends'
			isUsingCategory = true
		elseif self:hasCanonTitle() then
			continuity = 'canon'
			isUsingCategory = true
		elseif self.legendsArticle then
			continuity = 'canon'
			isUsingCategory = true
		elseif self.canonArticle then
			continuity = 'legends'
			isUsingCategory = true
		elseif exists(self.title.text .. '/ლეგენდები') then
			continuity = 'canon'
			isUsingCategory = true
		elseif exists(self.title.text .. '/კანონი') then
			continuity = 'legends'
			isUsingCategory = true
		elseif self:hasAnyOfIcons('pre', 'btr', 'old', 'imp', 'reb', 'new',
			'njo', 'leg')
		then
			continuity = 'legends'
			if self:hasAnyOfIcons('real') then
				isUsingCategory = false
			else
				isUsingCategory = true
			end
		elseif self:hasAnyOfIcons('inf', 'noncanon') then
			continuity = 'legends'
			isUsingCategory = false
		elseif self:hasAnyOfIcons('real') then
			if self.continuityOverride == 'canon' then
				continuity = 'canon'
			end
			isUsingCategory = false
		else
			continuity = 'canon'
			isUsingCategory = true
		end
	end
 
	if continuity == 'canon' then
		local data = {
			image = 'Premium-Eras-canon.png',
			tooltip = 'ეს სტატია აღწერს საკითხს, რომელიც ითვლება კანონიკურად.',
			link = 'კანონი'
		}
		if isUsingCategory then
			data.category = 'კანონიკური სტატიები'
		end
		return self:renderIcon(data)
	elseif continuity == 'legends' then
		local data = {
			image = 'Premium-Eras-legends.png',
			tooltip = 'ეს სტატია აღწერს საკითხს, რომელიც ითვლება ლეგენდად.',
			link = 'ვარსკვლავური ომების ლეგენდები'
		}
		if isUsingCategory then
			data.category = 'ლეგენდების სტატიები'
		end
		return self:renderIcon(data)
	end
end
 
function Eras:renderPublishingIcons()
	if self.continuityOverride ~= 'canon'
		and not self.legendsArticle
		and not self:hasCanonTitle()
	then
		local ret = {}
		local codes = {'pre', 'btr', 'old', 'imp', 'reb', 'new', 'njo', 'leg', 'inf'}
		for _, code in ipairs(codes) do
			local data = self:getIconData(code)
			if data then
				ret[#ret + 1] = self:renderIcon(data)
			end
		end
		return table.concat(ret)
	end
end
 
function Eras:renderNonPublishingIcons()
	local ret = {}
	local codes = {'real', 'featured', 'former', 'good', 'fga', 'comp', 'fca'}
	for _, code in ipairs(codes) do
		local data = self:getIconData(code)
		if data then
			ret[#ret + 1] = self:renderIcon(data)
		end
	end
	local protectionCodes = {'prot', 'sprot', 'ssprot', 'mprot', 'uprot'}
	for _, code in ipairs(protectionCodes) do
		local data = self:getIconData(code)
		if data then
			ret[#ret + 1] = self:renderProtectionIcon(data)
		end
	end
	return table.concat(ret)
end
 
function Eras:renderIcons()
	local icons = {}
	icons[#icons + 1] = self:renderContinuityIcon()
	icons[#icons + 1] = self:renderPublishingIcons()
	icons[#icons + 1] = self:renderNonPublishingIcons()
	icons = table.concat(icons)
 
	local root = mw.html.create('div')
	root
		:attr('id', 'title-eraicons')
		:css('text-align', 'right')
		:css('margin-bottom', '5px')
		:wikitext(icons)
 
	return tostring(root)
end
 
function Eras:renderCanonTab()
	if self.isHidden or self.title.namespace ~= 0 then
 
		return nil
	end
 
	local pageType, canonTitle, legendsTitle
	if self.legendsArticle then
		pageType = 'canon'
		canonTitle = self.title.text
		legendsTitle = self.legendsArticle
	elseif self.canonArticle then
		pageType = 'legends'
		canonTitle = self.canonArticle
		legendsTitle = self.title.text
	elseif self:hasCanonTitle() then
		pageType = 'canon'
		canonTitle = self.title.text
		legendsTitle = canonTitle:match('^(.*)/კანონი$') or canonTitle
	elseif self:hasLegendsTitle() then
		pageType = 'legends'
		legendsTitle = self.title.text
		canonTitle = legendsTitle:match('^(.*)/ლეგენდები$') or legendsTitle
	elseif exists(self.title.text .. '/ლეგენდები') then
		pageType = 'canon'
		legendsTitle = self.title.text .. '/ლეგენდები'
		canonTitle = self.title.text
	elseif exists(self.title.text .. '/კანონი') then
		pageType = 'legends'
		canonTitle = self.title.text .. '/კანონი'
		legendsTitle = self.title.text
	else
 
		canonTitle = ''
		legendsTitle = ''
		return nil
	end
 
	if pageType == 'canon' then
		self:addCategory('კანონიკური სტატიები ლეგენდების ანალოგებით')
	elseif pageType == 'legends' then
		self:addCategory('ლეგენდების სტატიები კანონიკური ანალოგებით')
	else
		self:addCategory('იზოლირებული სტატიები')
	end
 
	local root = mw.html.create('table')
	root
		:attr('id', 'canontab')
		:css('text-align', 'center')
		:css('padding', '0')
		:css('margin', '0 0 5px 0')
		:css('border-left', '0')
		:css('border-right', '0')
		:css('border-top', '0')
		:css('border-bottom', '3px solid #002e54')
		:css('border-spacing', '0')
		:css('border-collapse', 'collapse')
		:css('width', '100%')
		:css('vertical-align', 'top')
 
	local row = root:tag('tr')
 
	local function makeCell(id, color, image, link, tooltip)
		local cell = mw.html.create('td')
		cell
			:attr('id', id)
			:css('padding', '0 0 5px 0')
			:css('background-color', color)
			:css('line-height', '0.75em')
			:css('font-size', '150%')
			:css('font-weight', 'bold')
			:css('width', '20px')
			:css('vertical-align', 'top')
			:tag('span')
				:addClass('content-bg rtop')
				:css('background', '#ffffff')
				:tag('span')
					:addClass('r1')
					:css('background', color)
					:done()
				:tag('span')
					:addClass('r2')
					:css('background', color)
					:done()
				:tag('span')
					:addClass('r3')
					:css('background', color)
					:done()
				:tag('span')
					:addClass('r4')
					:css('background', color)
					:done()
				:done()
			:wikitext(string.format(
				' [[File:%s|link=%s|%s]]',
				image, link, tooltip
			))
		return cell
	end
 
	local foregroundColor = '#002e54'
	local backgroundColor = '#d8e9fc'
 
	do
		local id = 'canontab-canon'
		local link = canonTitle
		local color, image, tooltip
		if pageType == 'canon' then
			color = foregroundColor
			image = 'Tab-canon-white.png'
			tooltip = 'ეს სტატია აღწერს აღნიშნული თემის კანონიკურ ვერსიას.'
		else
			color = backgroundColor
            image = 'Tab-canon-black.png'
            tooltip = "დააწკაპუნეთ აქ, რათა მოხვდეთ ვარსკვლავური ომების ვიკიში წარმოდგენილ თემის კანონიკურ ვერსიაზე."
		end
		row:node(makeCell(id, color, image, link, tooltip))
	end
 
	row:tag('td')
		:attr('id', 'canontab-separator1')
		:css('width', '3px')
		:wikitext('&nbsp;')
 
	do
		local id = 'canontab-legends'
		local link = legendsTitle
		local color, image, tooltip
		if pageType ~= 'canon' then -- is a Legends page
			color = foregroundColor
			image = 'Tab-legends-white.png'
			tooltip = 'ეს სტატია აღწერს აღნიშნული თემის ლეგენდარულ ვერსიას.'
		else -- is a Canon page
			color = backgroundColor
			image = 'Tab-legends-black.png'
			tooltip = "დააწკაპუნეთ აქ, რათა მოხვდეთ ვარსკვლავური ომების ვიკიში წარმოდგენილ თემის ლეგენდარულ ვერსიაზე."
		end
		row:node(makeCell(id, color, image, link, tooltip))
	end
 
	row:tag('td')
		:attr('id', 'canontab-separator2')
		:css('width', '3000px')
		:wikitext('&nbsp;')
 
	return tostring(root)
end
 
function Eras:renderCategories()
	local fullPagename = self.title.prefixedText
	if fullPagename == 'Template:Eras' or fullPagename == 'Template:Eraicon' then
		-- Exit if we are on a blacklisted page.
		return nil
	end
 
	local pagename = self.title.text
 
	local function renderCategory(cat, sort)
		return string.format(
			'[[%s:%s|%s]]', 'Category', cat, sort or pagename
		)
	end
 
	local ret = {}
 
	for i, t in ipairs(self.categories) do
		ret[i] = renderCategory(t.category, t.sortKey)
	end
 
	if self.hasBadParameter then
		ret[#ret + 1] = renderCategory(
			'გვერდები ეპოქების თარგში არასწორი პარამეტრით'
		)
	end
	if self.hasIncorrectProtectionIcon then
		ret[#ret + 1] = renderCategory(
			'გვერდები დაცვის არასწორი ხატულებით'
		)
	end
 
	return table.concat(ret)
end
 
function Eras:__tostring()
	local ret = {}
	ret[#ret + 1] = self:renderDisplayTitle()
	ret[#ret + 1] = self:renderIcons()
	ret[#ret + 1] = self:renderCanonTab()
	ret[#ret + 1] = self:renderCategories()
	return table.concat(ret)
end
 
local p = {}
 
function p._main(args)
 
	local function getErasResult ()
		local erasObj = Eras.new(args)
		return tostring(erasObj)
	end
 
	local success, result
	if DEBUG_MODE then
		success = true
		result = getErasResult()
	else
		success, result = pcall(getErasResult)
	end
 
	if success then
		return result
	else
		return string.format(
			'<strong class="error">[[Template:Eras]] error: %s.</strong>' ..
			'[[' .. 'გვერდები ეპოქების თარგში არასწორი პარამეტრით]]',
			result -- this is the error message
		)
	end
end
 
function p.main(frame)
	local args = {}
	for k, v in pairs(frame:getParent().args) do
		v = v:match('^%s*(.-)%s*$') -- trim whitespace
		if v ~= '' then
			args[k] = v
		end
	end
	return p._main(args)
end
 
return p
Community content is available under CC-BY-SA unless otherwise noted.