<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="az">
	<id>https://wiki.anas.az/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AExternal_links</id>
	<title>Modul:External links - Redaktə tarixçəsi</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.anas.az/mediawiki/index.php?action=history&amp;feed=atom&amp;title=Modul%3AExternal_links"/>
	<link rel="alternate" type="text/html" href="https://wiki.anas.az/mediawiki/index.php?title=Modul:External_links&amp;action=history"/>
	<updated>2026-05-09T23:10:24Z</updated>
	<subtitle>Vikidə bu səhifənin dəyişikliklər tarixçəsi</subtitle>
	<generator>MediaWiki 1.45.3</generator>
	<entry>
		<id>https://wiki.anas.az/mediawiki/index.php?title=Modul:External_links&amp;diff=61&amp;oldid=prev</id>
		<title>imported&gt;White Demon 13:31, 5 sentyabr 2022-də</title>
		<link rel="alternate" type="text/html" href="https://wiki.anas.az/mediawiki/index.php?title=Modul:External_links&amp;diff=61&amp;oldid=prev"/>
		<updated>2022-09-05T13:31:46Z</updated>

		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Yeni səhifə&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local data = require(&amp;#039;Module:External links/data&amp;#039;)&lt;br /&gt;
-- Localizable part&lt;br /&gt;
-- Please, note, that labels to various sites and cataloges are taken from Wikidata (i.e. Wikidata label)&lt;br /&gt;
&lt;br /&gt;
local linksPrefix = &amp;#039;&amp;#039;&lt;br /&gt;
local project = &amp;#039;Vikipediya&amp;#039;&lt;br /&gt;
local categoryTemplateEmpty = project .. &amp;#039;:&amp;quot;Xarici keçidlər&amp;quot; şablonu boşdur&amp;#039;&lt;br /&gt;
local categoryWithWikimediaCommons = project .. &amp;#039;:Vikianbara istinad edən məqalələr&amp;#039;&lt;br /&gt;
local templateLink = &amp;#039;Xarici keçidlər&amp;#039;&lt;br /&gt;
&lt;br /&gt;
local group1Label = &amp;#039;[[&amp;#039; .. linksPrefix .. &amp;#039;Sosial şəbəkə xidmətləri|Sosial şəbəkələrdə]]&amp;#039;&lt;br /&gt;
local group2Label = &amp;#039;Əsərlərin mətnləri&amp;#039;&lt;br /&gt;
local group3Label = &amp;#039;Foto, video və audio&amp;#039;&lt;br /&gt;
local group4Label = &amp;#039;Tematik saytlar&amp;#039;&lt;br /&gt;
local group5Label = &amp;#039;Lüğətlər və ensiklopediyalar&amp;#039;&lt;br /&gt;
local group6Label = &amp;#039;Şəcərə və nekropolistika&amp;#039;&lt;br /&gt;
local group7Label = &amp;#039;Taksonomiya&amp;#039;&lt;br /&gt;
local group8Label = &amp;#039;[[&amp;#039; .. linksPrefix .. &amp;#039;Normativ yoxlama|Normativ yoxlama]]&amp;#039;&lt;br /&gt;
&lt;br /&gt;
-- The language codes that should be always displayed even if they have normal rank and claim with another language and prefferered rank exists&lt;br /&gt;
local preferredLanguage = &amp;#039;Q9292&amp;#039;; -- azeri&lt;br /&gt;
&lt;br /&gt;
local templateColorName = &amp;#039;rəng&amp;#039;;&lt;br /&gt;
-- Some projects have &amp;quot;named&amp;quot; colors, defined by templates&lt;br /&gt;
function colorByTitle( frame, colorTitle )&lt;br /&gt;
	local templateName = &amp;#039;Rəng/&amp;#039; .. colorTitle;&lt;br /&gt;
	local templateTitle = mw.title.makeTitle( &amp;#039;Template&amp;#039;, templateName );&lt;br /&gt;
	if ( templateTitle == nil or not templateTitle.exists ) then&lt;br /&gt;
		return false;&lt;br /&gt;
	end&lt;br /&gt;
	return frame:expandTemplate{ title = templateName };&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Feel free to correct labels and categories, or add/remove sources here&lt;br /&gt;
&lt;br /&gt;
-- Non-localizable part (not need to localize )&lt;br /&gt;
local moduleNavbox = require(&amp;#039;Module:Navbox&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local titleBasedLinks = { [&amp;#039;Q602358&amp;#039;] = true, [&amp;#039;Q17290934&amp;#039;] = true, [&amp;#039;Q1960551&amp;#039;] = true }&lt;br /&gt;
&lt;br /&gt;
local p = {}&lt;br /&gt;
&lt;br /&gt;
function link( url )&lt;br /&gt;
	return url&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderLabel( params )&lt;br /&gt;
	if type( params ) == &amp;#039;string&amp;#039; then&lt;br /&gt;
		return params;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local id = params[ 1 ];&lt;br /&gt;
	local default = params[ 2 ];&lt;br /&gt;
&lt;br /&gt;
	if #params &amp;gt;= 3 then&lt;br /&gt;
		local label = params[ 3 ];&lt;br /&gt;
		local link = mw.wikibase.sitelink( id );&lt;br /&gt;
		if ( link ~= nil ) then&lt;br /&gt;
			return &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. label .. &amp;#039;]]&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
		local title = mw.wikibase.label( id ) or default;&lt;br /&gt;
		return &amp;#039;&amp;lt;span title=&amp;quot;&amp;#039; .. title .. &amp;#039;&amp;quot; style=&amp;quot;border-bottom: 1px dotted; cursor: help;&amp;quot;&amp;gt;&amp;#039; .. label .. &amp;#039;&amp;lt;/span&amp;gt;&amp;#039;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.wikibase.label( id ) or default;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getQualifierSingleValue( statement, qualifierName )&lt;br /&gt;
	if (statement ~= nil&lt;br /&gt;
			and statement.qualifiers ~= nil&lt;br /&gt;
			and statement.qualifiers[qualifierName] ~= nil) then&lt;br /&gt;
&lt;br /&gt;
		for qualifierIndex, qualifier in pairs( statement.qualifiers[qualifierName] ) do&lt;br /&gt;
			if (qualifier.datavalue ~= nil&lt;br /&gt;
					and qualifier.datavalue.type ~= nil&lt;br /&gt;
					and qualifier.datavalue.value ~= nil) then&lt;br /&gt;
&lt;br /&gt;
				if ( qualifier.datavalue.type == &amp;quot;monolingualtext&amp;quot; ) then&lt;br /&gt;
					return qualifier.datavalue.value.text;&lt;br /&gt;
				end&lt;br /&gt;
				if ( qualifier.datavalue.type == &amp;quot;string&amp;quot; ) then&lt;br /&gt;
					return qualifier.datavalue.value;&lt;br /&gt;
				end&lt;br /&gt;
				if ( qualifier.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; ) then&lt;br /&gt;
					return qualifier.datavalue.value.id;&lt;br /&gt;
				end&lt;br /&gt;
				mw.log( &amp;#039;Unknown qualifier type: &amp;#039; .. qualifier.datavalue.type )&lt;br /&gt;
				return qualifier.datavalue.value;&lt;br /&gt;
&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
	end&lt;br /&gt;
	return nil;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function getQualifierValues( statement, qualifierName )&lt;br /&gt;
	local result = {}&lt;br /&gt;
	if (statement ~= nil&lt;br /&gt;
			and statement.qualifiers ~= nil&lt;br /&gt;
			and statement.qualifiers[qualifierName] ~= nil) then&lt;br /&gt;
		local qualifiers = statement.qualifiers[qualifierName];&lt;br /&gt;
		for _, qualifier in pairs( qualifiers ) do&lt;br /&gt;
			if (qualifier.datavalue ~= nil&lt;br /&gt;
				and qualifier.datavalue.type ~= nil&lt;br /&gt;
				and qualifier.datavalue.value ~= nil) then&lt;br /&gt;
&lt;br /&gt;
				if ( qualifier.datavalue.type == &amp;quot;string&amp;quot; ) then&lt;br /&gt;
					result[ #result + 1 ] = qualifier.datavalue.value;&lt;br /&gt;
				elseif ( qualifier.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; ) then&lt;br /&gt;
					result[ #result + 1 ] = qualifier.datavalue.value.id;&lt;br /&gt;
				else&lt;br /&gt;
					mw.log( &amp;#039;Unknown qualifier type: &amp;#039; .. qualifier.datavalue.type );&lt;br /&gt;
					result[ #result + 1 ] = qualifier.datavalue.value;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function collectLinks( configuration, elementId )&lt;br /&gt;
&lt;br /&gt;
	local moduleLanguages&lt;br /&gt;
	if ( mw.title.makeTitle( &amp;#039;Module&amp;#039;, &amp;#039;Languages&amp;#039; ).exists&lt;br /&gt;
			and mw.title.makeTitle( &amp;#039;Module&amp;#039;, &amp;#039;Languages/data&amp;#039; ).exists&lt;br /&gt;
			and mw.title.makeTitle( &amp;#039;Module&amp;#039;, &amp;#039;Wikidata/Language-codes&amp;#039; ).exists) then&lt;br /&gt;
		moduleLanguages = require(&amp;#039;Module:Languages&amp;#039;);&lt;br /&gt;
	else&lt;br /&gt;
		moduleLanguages = false;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	--Create rows&lt;br /&gt;
	local elements = {}&lt;br /&gt;
	local data = {}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
	local item = mw.wikibase.getEntity( elementId )&lt;br /&gt;
	if item == nil or item.claims == nil then&lt;br /&gt;
		return elements&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ( item.claims[&amp;#039;P553&amp;#039;] ~= nil ) then&lt;br /&gt;
		local claim = item.claims[&amp;#039;P553&amp;#039;]&lt;br /&gt;
		for _, statement in pairs( claim ) do&lt;br /&gt;
			if (statement ~= nil) then&lt;br /&gt;
				-- profile ID&lt;br /&gt;
				local rank = statement.rank or &amp;#039;normal&amp;#039;;&lt;br /&gt;
				if ( rank ~= &amp;#039;deprecated&amp;#039; ) then&lt;br /&gt;
					local itemId = getQualifierSingleValue( statement, &amp;#039;P554&amp;#039; );&lt;br /&gt;
					if (itemId ~= nil) then&lt;br /&gt;
						-- language&lt;br /&gt;
						local languages = getQualifierValues( statement, &amp;#039;P407&amp;#039; );&lt;br /&gt;
						local resourceId = statement.mainsnak.datavalue.value.id;&lt;br /&gt;
						if (data[resourceId] == nil) then&lt;br /&gt;
							data[resourceId] = {};&lt;br /&gt;
						end&lt;br /&gt;
						table.insert( data[resourceId], { itemId = itemId, languages = languages, rank = rank} );&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, params in pairs( configuration ) do&lt;br /&gt;
		local resourceId = params[2]&lt;br /&gt;
&lt;br /&gt;
		local claim = item.claims[ resourceId ]&lt;br /&gt;
		if ( claim ) then&lt;br /&gt;
			for _, statement in pairs( claim ) do&lt;br /&gt;
				local rank = statement.rank or &amp;#039;normal&amp;#039;;&lt;br /&gt;
				if ( rank ~= &amp;#039;deprecated&amp;#039; and statement.mainsnak.datavalue) then&lt;br /&gt;
					local itemId = statement.mainsnak.datavalue.value;&lt;br /&gt;
					local languages = getQualifierValues( statement, &amp;#039;P407&amp;#039; );&lt;br /&gt;
					if (data[resourceId] == nil) then&lt;br /&gt;
						data[resourceId] = {};&lt;br /&gt;
					end&lt;br /&gt;
					table.insert( data[resourceId], { itemId = itemId, languages = languages, rank = rank} );&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for resourceId, resourceDatas in pairs( data ) do&lt;br /&gt;
		data[resourceId] = filterByRank( resourceDatas );&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local hasNonOptionalLinks = false&lt;br /&gt;
&lt;br /&gt;
	for _, params in pairs( configuration ) do&lt;br /&gt;
		local resourceId = params[2]&lt;br /&gt;
		local optional = params[5] or false;&lt;br /&gt;
&lt;br /&gt;
		local resourceDatas = data[resourceId];&lt;br /&gt;
		if resourceDatas ~= nil then&lt;br /&gt;
			if ( not optional ) then&lt;br /&gt;
				hasNonOptionalLinks = true&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local resourceLabel = renderLabel( params[1] );&lt;br /&gt;
			local firstChar = mw.ustring.sub( resourceLabel, 1, 1 );&lt;br /&gt;
			local separateDesign = firstChar == &amp;#039;[&amp;#039; or firstChar == &amp;#039;&amp;lt;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
			local html = &amp;#039;&amp;#039;;&lt;br /&gt;
			if ( separateDesign ) then&lt;br /&gt;
				html = html .. resourceLabel .. &amp;#039;:&amp;amp;nbsp;&amp;#039;;&lt;br /&gt;
			end&lt;br /&gt;
&lt;br /&gt;
			local preitemId&lt;br /&gt;
			for index, resourceData in pairs(resourceDatas) do&lt;br /&gt;
				local itemId = resourceData.itemId;&lt;br /&gt;
				if index == 2 then&lt;br /&gt;
					--даёт возможность поставить id из одного свойства в разные ссылки&lt;br /&gt;
					if itemId == preitemId then&lt;br /&gt;
						break&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				local languages = resourceData.languages;&lt;br /&gt;
				local link = params[3] ( itemId );&lt;br /&gt;
				local linkFirstChar;&lt;br /&gt;
				local interwiki;&lt;br /&gt;
				if ( link ) then&lt;br /&gt;
					linkFirstChar = mw.ustring.sub( link, 1, 1 );&lt;br /&gt;
					interwiki = linkFirstChar == &amp;#039;:&amp;#039;&lt;br /&gt;
				end&lt;br /&gt;
				if ( separateDesign ) then&lt;br /&gt;
					if ( index ~= 1 ) then&lt;br /&gt;
						html = html .. &amp;#039;,&amp;amp;nbsp;&amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					if ( link ) then&lt;br /&gt;
						if ( interwiki ) then&lt;br /&gt;
							html = html .. &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. itemId .. &amp;#039;]]&amp;#039;;&lt;br /&gt;
						else&lt;br /&gt;
							html = html .. &amp;#039;[&amp;#039; .. link .. &amp;#039; &amp;#039; .. itemId .. &amp;#039;]&amp;#039;;&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						html = html .. itemId;&lt;br /&gt;
					end&lt;br /&gt;
				else&lt;br /&gt;
					if ( index ~= 1 ) then&lt;br /&gt;
						html = html .. &amp;#039; · &amp;#039;&lt;br /&gt;
					end&lt;br /&gt;
					if ( link ) then&lt;br /&gt;
						if ( interwiki ) then&lt;br /&gt;
							html = html .. &amp;#039;[[&amp;#039; .. link .. &amp;#039;|&amp;#039; .. resourceLabel .. &amp;#039;]]&amp;#039;;&lt;br /&gt;
						else&lt;br /&gt;
							html = html .. &amp;#039;[&amp;#039; .. link .. &amp;#039; &amp;#039; .. resourceLabel .. &amp;#039;]&amp;#039;;&lt;br /&gt;
						end&lt;br /&gt;
					else&lt;br /&gt;
						-- it should not happen&lt;br /&gt;
						html = html .. resourceLabel .. &amp;#039;:&amp;amp;nbsp;&amp;#039; .. itemId;&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					if ( moduleLanguages ) then&lt;br /&gt;
						if ( languages ~= nil and #languages &amp;gt; 0 ) then&lt;br /&gt;
							for langIndex, language in pairs(languages) do&lt;br /&gt;
								html = html .. &amp;#039;&amp;amp;nbsp;&amp;#039; .. moduleLanguages.getRefHtml( language )&lt;br /&gt;
							end&lt;br /&gt;
						end&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
				preitemId = resourceData.itemId;&lt;br /&gt;
			end&lt;br /&gt;
			if ( #params &amp;gt;= 4 and params[4] ) then&lt;br /&gt;
				html = html .. &amp;#039;[[Category:&amp;#039; .. params[4] .. &amp;#039;]]&amp;#039;&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( elements, html )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ( not hasNonOptionalLinks ) then&lt;br /&gt;
		return {}&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return elements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function collectDictionaryLinks( elementId )&lt;br /&gt;
	--Create rows&lt;br /&gt;
	local elements = {}&lt;br /&gt;
&lt;br /&gt;
	local item = mw.wikibase.getEntity( elementId );&lt;br /&gt;
	if ( item == nil or item.claims == nil) then&lt;br /&gt;
		return elements&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local sourceToElementLinks = {};&lt;br /&gt;
&lt;br /&gt;
	local claim = item.claims[&amp;#039;P1343&amp;#039;]&lt;br /&gt;
	if ( claim ) then&lt;br /&gt;
		for _, statement in pairs( claim ) do&lt;br /&gt;
			if (statement ~= nil) then&lt;br /&gt;
				local rank = statement.rank or &amp;#039;normal&amp;#039;;&lt;br /&gt;
				if ( rank ~= &amp;#039;deprecated&amp;#039; ) then&lt;br /&gt;
					local resourceId = statement.mainsnak.datavalue.value.id;&lt;br /&gt;
					local languages = getQualifierValues( statement, &amp;#039;P407&amp;#039; );&lt;br /&gt;
&lt;br /&gt;
					-- Wikisource link ?&lt;br /&gt;
					local entityId = getQualifierSingleValue( statement, &amp;#039;P805&amp;#039; ) or getQualifierSingleValue( statement, &amp;#039;P248&amp;#039; );&lt;br /&gt;
					if ( entityId ) then&lt;br /&gt;
						if (sourceToElementLinks[resourceId] == nil) then&lt;br /&gt;
							sourceToElementLinks[resourceId] = {};&lt;br /&gt;
						end&lt;br /&gt;
						table.insert( sourceToElementLinks[resourceId], { entityId = entityId, languages = languages, rank = rank } );&lt;br /&gt;
					end&lt;br /&gt;
&lt;br /&gt;
					-- URL to encyclopedia&lt;br /&gt;
					local url = getQualifierSingleValue( statement, &amp;#039;P953&amp;#039; );&lt;br /&gt;
					if (url == nil) then&lt;br /&gt;
						-- no longer recommend, but widely used&lt;br /&gt;
						url = getQualifierSingleValue( statement, &amp;#039;P854&amp;#039; ); &lt;br /&gt;
					end&lt;br /&gt;
					if ( url ~= nil ) then&lt;br /&gt;
						if (sourceToElementLinks[resourceId] == nil) then&lt;br /&gt;
							sourceToElementLinks[resourceId] = {};&lt;br /&gt;
						end&lt;br /&gt;
						table.insert( sourceToElementLinks[resourceId], { url = url, languages = languages, rank = rank } );&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	for _, description in pairs( data.dictionaries ) do&lt;br /&gt;
		if ( description.linkF ) then&lt;br /&gt;
			local claim = item.claims[ description.id ];&lt;br /&gt;
			if ( claim ) then&lt;br /&gt;
				for _, statement in pairs( claim ) do&lt;br /&gt;
					local rank = statement.rank or &amp;#039;normal&amp;#039;;&lt;br /&gt;
					if ( rank ~= &amp;#039;deprecated&amp;#039; and statement.mainsnak.datavalue) then&lt;br /&gt;
						local value = statement.mainsnak.datavalue.value;&lt;br /&gt;
						local url = description.linkF( value );&lt;br /&gt;
						local languages = getQualifierValues( statement, &amp;#039;P407&amp;#039; );&lt;br /&gt;
						if ( sourceToElementLinks[description.id] == nil) then&lt;br /&gt;
							sourceToElementLinks[description.id] = {};&lt;br /&gt;
						end&lt;br /&gt;
						table.insert( sourceToElementLinks[description.id], { url = url, languages = languages, rank = rank} );&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local html = &amp;#039;&amp;#039;;&lt;br /&gt;
	for _, description in pairs( data.dictionaries ) do&lt;br /&gt;
		local links = sourceToElementLinks[ description.id ];&lt;br /&gt;
		if ( links ) then&lt;br /&gt;
			for _, link in pairs( links ) do&lt;br /&gt;
				if ( link.url ) then&lt;br /&gt;
					table.insert( elements, &amp;#039;[&amp;#039; .. link.url .. &amp;#039; &amp;#039; .. description.title .. &amp;#039;]&amp;#039; );&lt;br /&gt;
				end&lt;br /&gt;
&lt;br /&gt;
				if ( link.entityId ) then&lt;br /&gt;
					local sitelink = mw.wikibase.getSitelink( link.entityId, description.project );&lt;br /&gt;
					if ( sitelink ) then&lt;br /&gt;
						table.insert( elements, &amp;#039;[[&amp;#039; ..  description.projectCode .. sitelink .. &amp;#039;|&amp;#039; .. description.title .. &amp;#039;]]&amp;#039; );&lt;br /&gt;
					end&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return elements&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function contains( tableStructure, value )&lt;br /&gt;
	if ( tableStructure == nil or value == nil) then&lt;br /&gt;
		return true;&lt;br /&gt;
	end&lt;br /&gt;
	for index, line in pairs( tableStructure ) do&lt;br /&gt;
		if ( line == value ) then&lt;br /&gt;
			return true;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function filterByRank( resourceDatas )&lt;br /&gt;
	-- itemId, languages. rank = rank&lt;br /&gt;
&lt;br /&gt;
	local hasPreffered = false;&lt;br /&gt;
	for index, resourceData in pairs(resourceDatas) do&lt;br /&gt;
		if ( resourceData.rank == &amp;#039;preferred&amp;#039; ) then&lt;br /&gt;
			hasPreffered = true;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if (not hasPreffered) then&lt;br /&gt;
		return resourceDatas;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local result = {};&lt;br /&gt;
	for index, resourceData in pairs(resourceDatas) do&lt;br /&gt;
		if ( resourceData.rank == &amp;#039;preferred&amp;#039; or contains(resourceData.languages, preferredLanguage) ) then&lt;br /&gt;
			table.insert(result, resourceData);&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.render( frame )&lt;br /&gt;
	local colorArg = &amp;#039;&amp;#039;;&lt;br /&gt;
	local elementId = nil;&lt;br /&gt;
	if ( frame ~= nil ) then&lt;br /&gt;
		local parentArgs = frame:getParent().args&lt;br /&gt;
		colorArg = parentArgs[templateColorName] or parentArgs[&amp;#039;color&amp;#039;] or parentArgs[1] or &amp;#039;&amp;#039;;&lt;br /&gt;
		if parentArgs[&amp;#039;d&amp;#039;] and parentArgs[&amp;#039;d&amp;#039;] ~= &amp;#039;&amp;#039; then&lt;br /&gt;
			elementId = string.upper( parentArgs[&amp;#039;d&amp;#039;] );&lt;br /&gt;
		end&lt;br /&gt;
		if ( colorArg ~= &amp;#039;&amp;#039; ) then&lt;br /&gt;
			local firstChar = mw.ustring.sub( colorArg, 1, 1 );&lt;br /&gt;
			if ( firstChar ~= &amp;#039;#&amp;#039; ) then&lt;br /&gt;
				local byTemplate = colorByTitle( frame, colorArg );&lt;br /&gt;
				if ( byTemplate ) then&lt;br /&gt;
					colorArg = byTemplate;&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local navboxData = {&lt;br /&gt;
		name  = &amp;#039;External links&amp;#039;,&lt;br /&gt;
		navboxclass = &amp;#039;navbox ruwikiArticleExternalLinksTable&amp;#039;,&lt;br /&gt;
		bodyclass = &amp;#039;hlist&amp;#039;,&lt;br /&gt;
	};&lt;br /&gt;
	if colorArg and colorArg ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		navboxData.groupstyle = &amp;#039;background: &amp;#039; .. colorArg .. &amp;#039;;&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local rowIndex = 1;&lt;br /&gt;
&lt;br /&gt;
	local socialNetworksElements = collectLinks( data.socialNetworkProperties, elementId );&lt;br /&gt;
	if ( #socialNetworksElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group1Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( socialNetworksElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local textsElements = collectLinks( data.textsProperties, elementId );&lt;br /&gt;
	if ( #textsElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group2Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( textsElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local contentHostingElements = collectLinks( data.contentHostingProperties, elementId );&lt;br /&gt;
	if ( #contentHostingElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group3Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( contentHostingElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local themeProfilesElements = collectLinks( data.themeProfilesProperties, elementId );&lt;br /&gt;
	if ( #themeProfilesElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group4Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( themeProfilesElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local dictionaryElements = collectDictionaryLinks( elementId );&lt;br /&gt;
	if ( #dictionaryElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group5Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( dictionaryElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local geniElements = collectLinks( data.geniGraves, elementId );&lt;br /&gt;
	if ( #geniElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group6Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( geniElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local taxElements = collectLinks( data.taxons, elementId );&lt;br /&gt;
	if ( #taxElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group7Label;&lt;br /&gt;
		navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( taxElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local authorityControlElements = collectLinks( data.authorityControl, elementId );&lt;br /&gt;
	local authorityControlExtElements = collectLinks( data.authorityControlExt, elementId );&lt;br /&gt;
	if ( #authorityControlElements &amp;gt; 0 ) then&lt;br /&gt;
		navboxData[&amp;#039;group&amp;#039; .. rowIndex] = group8Label;&lt;br /&gt;
		if ( #authorityControlExtElements &amp;gt; 0 ) then&lt;br /&gt;
			navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( authorityControlElements , &amp;#039; · &amp;#039; ) .. &amp;#039; · &amp;#039; .. table.concat( authorityControlExtElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		else&lt;br /&gt;
			navboxData[&amp;#039;list&amp;#039; .. rowIndex] = table.concat( authorityControlElements , &amp;#039; · &amp;#039; );&lt;br /&gt;
		end&lt;br /&gt;
		if ( #authorityControlElements &amp;gt; 5 ) then&lt;br /&gt;
			navboxData[&amp;#039;group&amp;#039; .. rowIndex] = nil;&lt;br /&gt;
			package.loaded[&amp;#039;Module:Navbox&amp;#039;] = nil;&lt;br /&gt;
			local templateStyles = frame:extensionTag{ name = &amp;#039;templatestyles&amp;#039;, args = { src = &amp;#039;Xarici keçidlər/styles.css&amp;#039; } };&lt;br /&gt;
			local collapsibleNavbox = require(&amp;#039;Module:Navbox&amp;#039;)._navbox( { title = group8Label, list1 = navboxData[&amp;#039;list&amp;#039; .. rowIndex],&lt;br /&gt;
				border = &amp;#039;subgroup&amp;#039;, navbar = &amp;#039;plain&amp;#039;, state = &amp;#039;collapsed&amp;#039;, titleclass = &amp;#039;ts-navbox-plaintitle&amp;#039;, bodyclass = &amp;#039;authoritycontrol&amp;#039;,&lt;br /&gt;
				titlestyle = navboxData.groupstyle } );&lt;br /&gt;
			navboxData[&amp;#039;list&amp;#039; .. rowIndex] = templateStyles .. collapsibleNavbox;&lt;br /&gt;
		end&lt;br /&gt;
		rowIndex = rowIndex + 1;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if ( rowIndex == 1 ) then&lt;br /&gt;
		if ( mw.title.getCurrentTitle().namespace == 0 ) then&lt;br /&gt;
			return &amp;#039;[[Category:&amp;#039; .. categoryTemplateEmpty .. &amp;#039;]]&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	else&lt;br /&gt;
		if navboxData[&amp;#039;group1&amp;#039;] then&lt;br /&gt;
			navboxData[&amp;#039;group1&amp;#039;] = &amp;#039;&amp;lt;div style=&amp;quot;padding: 0px 18px 0px 0px; width: 100%;&amp;quot;&amp;gt;&amp;lt;div style=&amp;quot;float: left;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
				frame:expandTemplate{ title = &amp;#039;tnavbar-view&amp;#039;, args = { templateLink } } .. &amp;#039;&amp;lt;/div&amp;gt;&amp;amp;nbsp;&amp;amp;nbsp;&amp;#039; ..&lt;br /&gt;
				navboxData[&amp;#039;group1&amp;#039;] .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			navboxData[&amp;#039;group1&amp;#039;] = &amp;#039;&amp;lt;div style=&amp;quot;padding: 0px 0px 0px 0px; width: 100%;&amp;quot;&amp;gt;&amp;#039; ..&lt;br /&gt;
				frame:expandTemplate{ title = &amp;#039;tnavbar-view&amp;#039;, args = { templateLink } } .. &amp;#039;&amp;lt;/div&amp;gt;&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	local navbox = moduleNavbox._navbox( navboxData )&lt;br /&gt;
	return navbox&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.renderDocumentation()&lt;br /&gt;
	local result = &amp;#039;&amp;#039;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group1Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.socialNetworkProperties );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group2Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.textsProperties );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group3Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.contentHostingProperties );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group4Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.themeProfilesProperties );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group5Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.dictionaries );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group6Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.geniGraves );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group7Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.taxons );&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;! colspan=4 | &amp;#039; .. group8Label .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
	result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	result = result .. renderDocumentationCategory( data.authorityControl );&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function renderDocumentationCategory( links )&lt;br /&gt;
	local result = &amp;#039;&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
	for _, params in pairs( links ) do&lt;br /&gt;
		local resourceLabel = renderLabel( params[ 1 ] or params.title );&lt;br /&gt;
		local resourceId = params[ 2 ] or params.id;&lt;br /&gt;
		local category = params[ 4 ];&lt;br /&gt;
		local optional;&lt;br /&gt;
		if ( params[ 5 ] or false ) then&lt;br /&gt;
			optional = &amp;#039;TRUE&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			optional = &amp;#039;FALSE&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
	&lt;br /&gt;
		result = result .. &amp;#039;| &amp;#039; .. resourceLabel .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
		if string.match( resourceId, &amp;#039;^P&amp;#039; ) then&lt;br /&gt;
			result = result .. &amp;#039;| [[:d:Property:&amp;#039; .. resourceId .. &amp;#039;|&amp;#039; .. resourceId .. &amp;#039;]]\n&amp;#039;;&lt;br /&gt;
		elseif string.match( resourceId, &amp;#039;^Q&amp;#039; ) then&lt;br /&gt;
			result = result .. &amp;#039;| [[:d:&amp;#039; .. resourceId .. &amp;#039;&amp;#039; .. &amp;#039;|&amp;#039; .. resourceId .. &amp;#039;]]\n&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			result = result .. &amp;#039;| &amp;amp;nbsp; \n&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
&lt;br /&gt;
		if ( category ~= nil and category ~= false ) then&lt;br /&gt;
			result = result .. &amp;#039;| [[:Category:&amp;#039; .. category .. &amp;#039;|&amp;#039; .. category .. &amp;#039;]]\n&amp;#039;;&lt;br /&gt;
		else&lt;br /&gt;
			result = result .. &amp;#039;| &amp;amp;nbsp; \n&amp;#039;;&lt;br /&gt;
		end&lt;br /&gt;
		result = result .. &amp;#039;| &amp;#039; .. optional .. &amp;#039;\n&amp;#039;;&lt;br /&gt;
		result = result .. &amp;#039;|-\n&amp;#039;;&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return result;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>imported&gt;White Demon</name></author>
	</entry>
</feed>