Məzmuna keç

Modul:External links

Bu modulun sənədləşdirmə səhifəsi Modul:External links/doc səhifəsində yaradıla bilər

-- Localizable part
-- Please, note, that labels to various sites and cataloges are taken from Wikidata (i.e. Wikidata label)

local linksPrefix = ''
local project = 'Vikisitat'
local categoryTemplateEmpty = project .. ':"Xarici istinadlar" şablonu boşdur'
local categoryWithWikimediaCommons = project .. ':Commonsa istinad edən məqalələr'
local templateLink = 'Xarici istinadlar'

local group1Label = '[[' .. linksPrefix .. 'Sosial şəbəkə|Sosial şəbəkələrdə]]'
local group2Label = 'Əsərlərin mətnləri'
local group3Label = 'Foto, video və audio'
local group4Label = 'Tematik saytlar'
local group5Label = 'Lüğətlər və ensiklopediyalar'
local group6Label = '[[' .. linksPrefix .. 'Normativ yoxlama|Normativ yoxlama]]'

-- The language codes that should be always displayed even if they have normal rank and claim with another language and prefferered rank exists
local preferredLanguage = 'Q9292'; -- azerbaijani

function categoryAuthorityControl( code )
	return false; --project .. ':Məqalələr, məzmununda ' .. code .. ' kod'
end
function categoryExternalLink( code )
	return false; --project .. ':Xarici istinadlı məqalələr:' .. code
end

local templateColorName = 'rəng';
-- some project have "named" colors, defined by templates
function colorByTitle( frame, colorTitle )
	local templateName = 'Rəng/' .. colorTitle;
	local templateTitle = mw.title.makeTitle( 'Template', templateName );
	if ( templateTitle == nil or not templateTitle.exists ) then
		return false;
	end
	return frame:expandTemplate{ title = templateName };
end

local dictionaries = {


	{ id = 'Q19217220',		title = 'Beryozin',							project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q4086271',		title = 'Bibliya',						project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'P1296',			title = 'Böyük katalan',				linkF = function ( id ) return 'http://www.enciclopedia.cat/enciclopèdies/gran-enciclopèdia-catalana/EC-GEC-' .. id .. '.xml' end	},
	{ id = 'P2924',			title = 'Böyük rus',				linkF = function ( id ) return 'http://bigenc.ru/text/' .. id end,																	},
	{ id = 'Q20078554',		title = 'Böyük sovet (I nəşr)',		project = 'ruwikisource',	projectCode = 's:'	},
--	{ id = 'Q17378135',		title = 'Böyük sovet',				},
	{ id = 'Q4091878',		title = 'Böyük Yujakov',					project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q602358',		title = 'Brokhauz və Yefron',				project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'P1648',			title = 'Vall bioqrafik',		linkF = function ( id ) return 'http://yba.llgc.org.uk/en/' .. id .. '.html' end,													},
	{ id = 'Q4114391',		title = 'Hərbi Sıtin',					project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q4173137',		title = 'Brokqauz və Yefron yəhudi',		project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q4091875',		title = 'Kiril və Mefodi',				},
	{ id = 'P1438',			title = 'Qısa yəhudi',				linkF = function ( id ) return 'http://www.eleven.co.il/article/' .. id end,														},
	{ id = 'Q4239850',		title = 'Qısa ədəbi'				},
	{ id = 'Q2627728',		title = 'Kruqosvet'							},
	{ id = 'Q17329836',		title = 'Larussa',							},
	{ id = 'Q17290934',		title = 'Lentapediya',						project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q4263804',		title = 'Ədəbi',						},
	{ id = 'Q19180675',		title = 'Brokqauz və Yefron kiçik',			project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q27680201',		title = 'Rimanın musiqi',				project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q19190511',		title = 'Yeni',							project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q2498180',		title = 'Pravoslav',						},
	{ id = 'Q19211082',		title = 'Pravoslav ilahiyyat',		project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q1960551',		title = 'Rus bioqrafik',			project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q20078551',		title = 'Texniki (I nəşr)',				project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q1970746',		title = 'V.Dal',							project = 'ruwikisource',	projectCode = 's:'	},
	{ id = 'Q4532135',		title = 'Ensiklopedik leksikon',		project = 'ruwikisource',	projectCode = 's:'	},

	{ id = 'Q590208',		title = 'Allgemeine Deutsche Biographie',		project = 'dewikisource',	projectCode = 's:de:'	},
	{ id = 'Q19077875',		title = 'American Cycl. (1879)',				project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'Q19037977',		title = 'American Med. Biogr. (1920)',			project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'Q12912667',		title = 'Appletons\' (1887—1901)',				project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'Q20096917',		title = 'Britannica (9-th)',					project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'Q867541',		title = 'Britannica (11-th)',					project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'Q15987490',		title = 'Britannica (12-th)',					project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'P1417',			title = 'Britannica (onlayn)',					linkF = function ( id ) return 'http://global.britannica.com/'.. id end,},
	{ id = 'Q302556',		title = 'Catholic (1907—13)',					project = 'enwikisource',	projectCode = 'wikisource:'	},
    { id = 'Q16011749',     title = 'Dictionary of Music and Musicians',    project = 'enwikisource',       projectCode = 'wikisource:'},
	{ id = 'Q15987216',		title = 'Dictionary of National Biography',		project = 'enwikisource',	projectCode = 'wikisource:' },
	{ id = 'Q16014700',		title = 'Dictionary of National Biography (1st suppl.)', project = 'enwikisource', projectCode = 'wikisource:' },
	{ id = 'Q16014697',		title = 'Dictionary of National Biography (2nd suppl.)', project = 'enwikisource', projectCode = 'wikisource:' },
	{ id = 'P1614',			title = 'History of Parliament',				linkF = function ( id ) return 'http://www.historyofparliamentonline.org/volume/' .. id end,										},
	{ id = 'Q20961706',		title = 'Infernal (6e éd.)',					project = 'frwikisource',	projectCode = 's:fr:'	},
	{ id = 'Q20089963',		title = 'New International',					project = 'enwikisource',	projectCode = 'wikisource:'	},
	{ id = 'P1415',			title = 'Oksford bioqrafik',			linkF = function ( id ) return 'http://www.oxforddnb.com/index/' .. id .. '/' end,													},
	{ id = 'P3217',			title = 'İsveç bioqrafik',				linkF = function ( id ) return 'https://sok.riksarkivet.se/sbl/Presentation.aspx?id=' .. id	end,									},
	{ id = 'P902',			title = 'İsveçrə tarixi',				linkF = function ( id ) return 'http://www.hls-dhs-dss.ch/textes/f/F' .. id .. '.php'	end,										},
	{ id = 'P886',			title = 'İsveçrə tarixi (onlayn)',	linkF = function ( id ) return 'http://www.e-lir.ch/e-LIR___Lexicon.' .. id .. '.450.0.html'	end,								},
}


-- feed free to correct labels and categories, or add/remove sources here
local dictionaryProperties = {
}

-- Non-localizable part (not need to localize )
local moduleNavbox = require('Module:Navbox')

local titleBasedLinks = { ['Q602358'] = true, ['Q17290934'] = true, ['Q1960551'] = true }

local p = {}

function link( url )
	return url
end

function aniDBLink( id )
	local pos,_ = id:find("/")
	local type = id:sub(1,pos-1)
	local number = id:sub(pos+1)
	local urltype =''
	if type == "anime" then
		urltype = "a"
	elseif type == "creator" then
		urltype = "creator"
	elseif type == "character" then
		urltype = "char"
	else 
		return ""
	end

	return "http://anidb.net/perl-bin/animedb.pl?show=" ..type .. "&" .. urltype .. "id=" .. number
end

function bavLink( id )	return 'http://viaf.org/processed/BAV%7C' .. id	end
function bibsysLink( id )	return 'http://ask.bibsys.no/ask/action/result?cmd=&kilde=biblio&cql=bs.autid+%3D+' .. id .. '&feltselect=bs.autid'	end
function bncLink( id )	return 'http://cantic.bnc.cat/registres/CUCId/' .. id	end
function bneLink( id )	return 'http://catalogo.bne.es/uhtbin/authoritybrowse.cgi?action=display&authority_id=' .. id	end
function bnfLink( id )	return 'http://catalogue.bnf.fr/ark:/12148/cb' .. id	end
function boxofficemojoLink( id )	return 'http://www.boxofficemojo.com/movies/?id=' .. id .. '.htm'	end
function bpnLink( id )	return 'http://www.biografischportaal.nl/persoon/' .. id	end
function calisLink( id )	return 'http://opac.calis.edu.cn/aopac/ajsp/detail.jsp?actionfrom=1&actl=CAL++' .. id	end
function cbdbLink( id )	return 'http://db1.ihp.sinica.edu.tw/cbdbc/cbdbkmeng?~~AAA' .. id	end
function ciniiLink( id )	return 'http://ci.nii.ac.jp/author/' .. id	end
function conorLink( id )	return 'http://www.cobiss.si/scripts/cobiss?command=DISPLAY&base=CONOR&rid=' .. id	end
function chitalnyaRuLink( id )	return 'http://www.chitalnya.ru/users/' .. id .. '/'	end
function commonsWikimediaLink( id )	return ':commons:Category:' .. id	end
function dmozLink( id )	return 'http://www.dmoz.org/' .. id	end
function egaxaLink( id )	return 'http://viaf.org/processed/EGAXA%7Cvtls' .. id	end


function fanLibRuLink( id )
	local firstChar = mw.ustring.sub( id, 1, 1 )
	return 'http://fan.lib.ru/' .. firstChar .. '/' .. id .. '/'
end

function flickrLink( id )	return 'https://www.flickr.com/' .. id	end
function findagraveLink( id )	return 'http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GRid=' .. id	end
function gndLink( id )	return 'http://d-nb.info/gnd/' .. id	end
function ibdbPersonLink( id )	return 'http://www.ibdb.com/person.php?id=' .. id	end
function ibdbProductionLink( id )	return 'http://www.ibdb.com/production.php?id=' .. id	end
function ibdbShowLink( id )	return 'http://www.ibdb.com/show.php?id=' .. id	end
function ibdbVenueLink( id )	return 'http://www.ibdb.com/venue.php?id=' .. id	end
function isfdbAuthorLink( id )	return 'http://www.isfdb.org/cgi-bin/ea.cgi?' .. id	end
function isfdbPublicationLink( id )	return 'http://www.isfdb.org/cgi-bin/pl.cgi?' .. id	end
function isfdbSeriesLink( id )	return 'http://www.isfdb.org/cgi-bin/pe.cgi?' .. id	end
function isfdbPublisherLink( id )	return 'http://www.isfdb.org/cgi-bin/publisher.cgi?' .. id	end
function imslpLink( id )	return 'http://imslp.org/wiki/' .. string.gsub( id, ' ', '_' )	end

function imdbLink( id )
	if string.match( id, '^ch' ) then
		return 'http://www.imdb.com/character/' .. id
	end
	if string.match( id, '^co' ) then
		return 'http://www.imdb.com/company/' .. id
	end
	if string.match( id, '^nm' ) then
		return 'http://www.imdb.com/name/' .. id
	end
	if string.match( id, '^tt' ) then
		return 'http://www.imdb.com/title/' .. id
	end

	return false
end

function isniLink( id )
	id = id:gsub( '[ %-]', '' ):upper()
	return 'http://isni-url.oclc.nl/isni/' .. id
end

function lccnLink( id )	return 'http://id.loc.gov/authorities/' .. id	end
function lastfmLink( id )	return 'http://www.lastfm.ru/music/' .. id	end

function iccuLink( id )
	id = id:gsub( '\\\\', '%5C' ):upper()
	return 'http://opac.sbn.it/opacsbn/opac/iccu/scheda_authority.jsp?bid=' .. id
end

function lnbLink( id )	return 'http://viaf.org/processed/LNB%7CLNC10-' .. id	end
function merimeeLink( id ) return false	end
function mixcloudLink( id )	return 'https://mixcloud.com/' .. id .. '/'	end
function musicBrainzArtistLink( id )	return 'https://musicbrainz.org/artist/' .. id	end
function musicBrainzReleazeGroupLink( id )	return 'https://musicbrainz.org/release-group/' .. id	end
function musicBrainzWorkLink( id )	return 'https://musicbrainz.org/work/' .. id	end
function nclLink( id )	return 'http://aleweb.ncl.edu.tw/F/?func=accref&acc_sequence=' .. id	end
function ndlLink( id )	return 'http://id.ndl.go.jp/auth/ndlna/' .. id	end
function nlcLink( id )	return false	end
function nliLink( id )	return 'http://a20.libnet.ac.il/F?func=find-b&REQUEST=' .. id .. '&find_code=SYS&local_base=NNL10'	end
function nkcLink( id )	return 'http://aut.nkp.cz/' .. id	end
function nlaLink( id ) 	return 'http://nla.gov.au/anbd.aut-an' .. id end
function nlrLink( id ) 	return 'http://alephnew.bibnat.ro:8991/F?func=find-b&request=' .. id .. '000354872&find_code=SYS&adjacent=Y&local_base=NLR10' end
function nszlLink( id )	return 'http://viaf.org/processed/NSZL%7C' .. id	end
function nskLink( id )	return 'http://viaf.org/processed/NSK%7C' .. id	end
function ntaLink( id )	return 'http://opc4.kb.nl/PPN?PPN=' .. id	end
function nukatLink( id )	return 'http://viaf.org/processed/NUKAT%7C' .. id	end


function orcidLink( id )
	id = id:gsub( '[ %-]', '' ):upper()
	return 'http://orcid.org/' .. id
end


function declaratorLink( id )	return 'http://declarator.org/person/' .. id .. '/'	end
function gutenbergLink( id )	return 'http://www.gutenberg.org/ebooks/' .. id 	end
function promodjLink( id )	return 'http://promodj.com/' .. id	end
function prozaRuLink( id )	return 'http://proza.ru/avtor/' .. id end
function ptbnpLink( id )	return 'http://viaf.org/processed/PTBNP%7C' .. id	end
function rkdArtistsLink( id )	return 'http://www.rkd.nl/rkddb/dispatcher.aspx?action=search&database=ChoiceArtists&search=priref=' .. id	end
function rkdImagesLink( id )	return 'http://explore.rkd.nl/en/images/' .. id	end
function rodovidLink( id )	return 'http://ru.rodovid.org/wk/Person:' .. id	end
function rottentomatoesLink( id )	return 'http://www.rottentomatoes.com/' .. id	end
function rslLink( id )	return 'http://aleph.rsl.ru/F?func=find-b&find_code=SYS&adjacent=Y&local_base=RSL11&request=' .. id	end

function rutubeLink( id )
	if string.match( id, '^%d+$' ) then
		return 'http://rutube.ru/video/persion/' .. id .. '/'
	end
	return 'http://' .. id .. '.rutube.ru/'
end

function samlibRuLink( id )
	local firstChar = mw.ustring.sub( id, 1, 1 )
	return 'http://samlib.ru/' .. firstChar .. '/' .. id .. '/'
end

function selibrLink( id )	return 'http://libris.kb.se/auth/' .. id	end
function stihiRuLink( id )	return 'http://stihi.ru/avtor/' .. id end
function sudocLink( id )	return 'http://www.idref.fr/' .. id	end
function ulanLink( id )	return 'http://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=' .. id	end
function vimeoLink( id )	return 'https://vimeo.com/' .. id	end
function viafLink( id )	return 'http://viaf.org/viaf/' .. id	end
function youtubeLink( id )	return 'https://youtube.com/' .. id	end
function youtubeLinkLong( id )  return 'https://youtube.com/channel/' .. id end

function getLabelWithoutLink( id, defaultLabel )
	return mw.wikibase.label( id ) or defaultLabel;
end

function getLabelWithLink( id, defaultTitle, label )
	local link = mw.wikibase.sitelink( id );
	if ( link ~= nil ) then
		return '[[' .. link .. '|' .. label .. ']]';
	end
	local title = mw.wikibase.label( id ) or defaultTitle;
	return '<span title="' .. title .. '" style="border-bottom: 1px dotted; cursor: help;">' .. label .. '</span>'
end

local socialNetworkProperties = {
	{ getLabelWithoutLink( 'Q116933', 'VKontakte'),   		'P3185',		function( id ) return 'https://vk.com/' .. id end,								categoryExternalLink( 'VKontakte' ) },
	{ getLabelWithoutLink( 'Q4101720', 'V kruqu druzey'),	'Q4101720',		function( id ) return 'http://' .. id .. '.vkrugudruzei.ru/' end,				categoryExternalLink( 'V kruqu druzey' ) },
	{ getLabelWithoutLink( 'Q219523', 'Jivoy jurnal'),		'P3258',		function( id ) return 'http://' .. id .. '.livejournal.com/' end,				categoryExternalLink( 'Jivoy jurnal' ) },
	{ getLabelWithoutLink( 'Q219523', 'Jivoy jurnal'),		'Q219523',		function( id ) return 'http://' .. id .. '.livejournal.com/' end,				categoryExternalLink( 'Jivoy jurnal' ) },
	{ getLabelWithoutLink( 'Q4299813', 'Moy kruq'),			'Q4299813',		function( id ) return 'http://' .. id .. '.moikrug.ru/' end,					categoryExternalLink( 'Moy kruq' ) },
	{ getLabelWithoutLink( 'Q4299858', 'Moy mir'),			'Q4299858',		function( id ) return 'http://my.mail.ru/' .. id end,							categoryExternalLink( 'Moy mir' ) },
	{ getLabelWithoutLink( 'Q1123836', 'Odnoklassniki'),	'Q1123836',		function( id ) return 'https://ok' .. '.ru/profile/' .. id end,	categoryExternalLink( 'Odnoklassniki' ) },
	{ getLabelWithoutLink( 'Q17195318', 'Spraşivay.Ru'),	'Q17195318',	function( id ) return 'http://sprashivai.ru/' .. id end,						categoryExternalLink( 'Spraşivay.Ru' ) },
	{ getLabelWithoutLink( 'Q171186', 'Blogger'),   		'Q171186',		function( id ) return 'http://' .. id .. '.blogspot.com' end,					categoryExternalLink( 'Blogger' ) },
	{ getLabelWithoutLink( 'Q4037665', 'Dudu'),    			'Q4037665',		function( id ) return 'http://dudu.com/' .. id end,								categoryExternalLink( 'Dudu' ) },
	{ getLabelWithoutLink( 'Q355', 'Facebook'), 		   	'P2013',		function( id ) return 'https://www.facebook.com/' .. id end,					categoryExternalLink( 'Facebook' ) },
	{ getLabelWithoutLink( 'Q356', 'Google+'),				'P2847',			function( id ) return 'https://plus.google.com/' .. id .. '/posts' end,			categoryExternalLink( 'Google+' ) },
	{ getLabelWithoutLink( 'Q356', 'Google+'),				'Q356',			function( id ) return 'https://plus.google.com/' .. id .. '/posts' end,			categoryExternalLink( 'Google+' ) },
	{ getLabelWithoutLink( 'Q4043051', 'LiveInternet'),		'Q4043051',		function( id ) return 'http://www.liveinternet.ru/users/' .. id end,			categoryExternalLink( 'LiveInternet' ) },
	{ getLabelWithoutLink( 'Q40629', 'MySpace'),			'Q40629',		function( id ) return 'https://myspace.com/' .. id end,							categoryExternalLink( 'MySpace' ) },
	{ getLabelWithoutLink( 'Q40629', 'MySpace'),			'P3265',		function( id ) return 'https://myspace.com/' .. id end,							categoryExternalLink( 'MySpace' ) },
	{ getLabelWithoutLink( 'Q17144398', 'QRoom'),			'Q17144398',	function( id ) return 'http://qroom.ru/' .. id end,								categoryExternalLink( 'QRoom' ) },
	{ getLabelWithoutLink( 'Q1002972', 'Spring.me'),		'Q1002972',		function( id ) return 'http://www.spring.me/' .. id end,						categoryExternalLink( 'Spring.me' ) },
	{ getLabelWithoutLink( 'Q384060', 'Tumblr'),			'Q384060',		function( id ) return 'http://' .. id .. '.tumblr.com/' end,					categoryExternalLink( 'Tumblr' ) },
	{ getLabelWithoutLink( 'Q918', 'Twitter'),				'P2002',		function( id ) return 'https://twitter.com/' .. id end,							categoryExternalLink( 'Twitter' ) },
}

local textsProperties = {
	{ getLabelWithoutLink( 'Q17254543', 'Koma-qiraətxanə'),		'Q17254543',	chitalnyaRuLink,	categoryExternalLink( 'Koma-qiraətxana' ) },
	{ getLabelWithoutLink( 'Q17195344', '"Samizdat" jurnalı'),	'Q17195344',	samlibRuLink,		categoryExternalLink( 'Samizdat' ) },
	{ getLabelWithoutLink( 'Q22673', '"Qutenberq" layihəsi'),		'P2034',		gutenbergLink,		categoryExternalLink( '"Qutenberq" layihəsi' ) },
	{ getLabelWithoutLink( 'Q4380129', 'Proza.ru'),				'Q4380129',		prozaRuLink,		categoryExternalLink( 'Proza.ru' ) },
	{ getLabelWithoutLink( 'Q4442644', 'Stixi.ru'),				'Q4442644',		stihiRuLink,		categoryExternalLink( 'Stixi.ru' ) },
	{ getLabelWithoutLink( 'Q17300505', 'Lib.Ru/Fantastika'),	'Q17300505',	fanLibRuLink,		categoryExternalLink( 'Lib.Ru/Fantastika' ) },
}

local labelAllocine = getLabelWithoutLink( 'Q31165', 'AlloCine' );
local labelAnimeNewsNetwork = getLabelWithoutLink( 'Q220509', 'Anime News Network' );
local labelDeezer = getLabelWithoutLink( 'Q602243', 'Deezer' );
local labelDiscogs = getLabelWithoutLink( 'Q504063', 'Discogs' );
local labelIBDb = getLabelWithoutLink( 'Q31964', 'Internet Broadway Database' );
local labelISFDb = getLabelWithoutLink( 'Q2629164', 'Internet Speculative Fiction Database' );
local labelMusicBrainz = getLabelWithoutLink( 'Q14005', 'MusicBrainz' );
local labelEncyclopaediaMetallum = getLabelWithoutLink( 'Q938726', 'Encyclopaedia Metallum' );
local labelYandexMusic = getLabelWithoutLink( 'Q4537983', 'Yandex.Music' );
local labelYouTube = getLabelWithoutLink( 'Q866', 'YouTube' );


local contentHostingProperties = {
	{ getLabelWithoutLink( 'Q565', 'Wikimedia Commons' ),	'P373',			commonsWikimediaLink,	categoryWithWikimediaCommons,			true	},

	{ getLabelWithoutLink( 'Q545966', 'Bandcamp'),			'P3283',		function( id ) return 'https://' .. id .. '.bandcamp.com' end,		categoryExternalLink( 'Bandcamp' ) },
	{ labelDeezer,											'P2722',		function(id) return 'http://www.deezer.com/artist/' .. id end,		categoryExternalLink( 'Deezer' ), 				false	},
	{ labelDeezer,											'P2723',		function(id) return 'http://www.deezer.com/album/' .. id end,		categoryExternalLink( 'Deezer' ), 				false	},
	{ labelDeezer,											'P2724',		function(id) return 'http://www.deezer.com/track/' .. id end,		categoryExternalLink( 'Deezer' ), 				false	},
	{ getLabelWithoutLink( 'Q103204', 'Flickr' ),			'Q103204',		flickrLink,				categoryExternalLink( 'Flickr' ),		false	},
	{ getLabelWithoutLink( 'Q209330', 'Instagram' ),		'P2003',		function( id ) return 'http://instagram.com/' .. id end,	categoryExternalLink( 'Instagram' ),	false	},
	{ getLabelWithoutLink( 'Q183718', 'Last.fm' ),			'P3192',		lastfmLink,				categoryExternalLink( 'Last.fm' ),		false	},
	{ getLabelWithoutLink( 'Q6883832', 'Mixcloud' ),		'Q6883832',		mixcloudLink,			categoryExternalLink( 'Mixcloud' ),		false	},
	{ getLabelWithoutLink( 'Q2572292', 'Musopen' ),			'P2338',		function( id ) return 'https://musopen.org/composer/' .. id .. '/' end,			categoryExternalLink( 'Musopen' ),		false	},
	{ getLabelWithoutLink( 'Q17117201', 'PROMODJ' ),		'Q17117201',	promodjLink,			categoryExternalLink( 'PROMODJ' ),		false	},
	{ getLabelWithoutLink( 'Q372827', 'Rutube' ),			'Q372827',		rutubeLink,				categoryExternalLink( 'Rutube' ),		false	},
	{ getLabelWithoutLink( 'Q568769', 'SoundCloud' ),			'P3040',		function( id ) return 'http://soundcloud.com/' .. id .. '/' end,			categoryExternalLink( 'SoundCloud' ),	false	},
	{ getLabelWithoutLink( 'Q568769', 'SoundCloud' ),		'Q568769',		function( id ) return 'http://soundcloud.com/' .. id .. '/' end,			categoryExternalLink( 'SoundCloud' ),	false	},
	{ getLabelWithoutLink( 'Q156376', 'Vimeo' ),			'Q156376',		vimeoLink,				categoryExternalLink( 'Vimeo' ),		false	},
	{ labelYandexMusic,		'P1553',		function(id) return 'https://music.yandex.ru/artist/' .. id end,	categoryExternalLink( 'Yandex.Music' ),	false	},
	{ labelYandexMusic,		'P2819',		function(id) return 'https://music.yandex.ru/album/' .. id end,			categoryExternalLink( 'Yandex.Music' ),	false 	},
	{ labelYouTube,			'P2397',		youtubeLinkLong,	categoryExternalLink( 'YouTube' ),	false	},
	{ labelYouTube,			'Q866',			youtubeLink,		categoryExternalLink( 'YouTube' ),	false	},
}

local themeProfilesProperties = {
	-- science and technic
	{ getLabelWithoutLink( 'Q494817', 'Google Scholar' ),								'P1960',	function( id ) return 'https://scholar.google.com/citations?user=' .. id end,			categoryExternalLink( 'Google Scholar' ) },
	{ getLabelWithoutLink( 'Q829984', 'Mathematics Genealogy Project' ),				'P549',		function( id ) return 'http://www.genealogy.ams.org/id.php?id=' .. id	end,			categoryExternalLink( 'Riyazi genealogiya' ) },
	{ getLabelWithoutLink( 'Q1373513', 'Notable Names Database' ),						'P1263',	function( id ) return 'http://nndb.com/people/' .. id end,								categoryExternalLink( 'NNDB' ) },
	{ getLabelWithoutLink( 'Q51044', 'ORCID' ),											'P496',		orcidLink,																				categoryExternalLink( 'ORCID' ) },
	{ getLabelWithoutLink( 'Q7315186', 'ResearcherID' ),								'P1053',	function( id ) return 'http://www.researcherid.com/rid/' .. id	end,					categoryExternalLink( 'ResearcherID' ) },
	{ getLabelWithoutLink( 'Q371467', 'Scopus' ),										'P1153',	function( id ) return 'http://www.scopus.com/authid/detail.url?authorId=' .. id	end,	categoryExternalLink( 'Scopus' ) },
	{ getLabelWithoutLink( 'Q1061861', 'Structurae' ),									'P2418',	function( id ) return 'http://structurae.de/personen/' .. id end,						categoryExternalLink( 'Structurae' ) },
	{ getLabelWithoutLink( 'Q18241050', 'zbMATH' ),										'P1556',	function( id ) return 'https://www.zbmath.org/authors/?q=ai:' .. id end,				categoryExternalLink( 'zbMATH' ) },

	{ getLabelWithoutLink( 'Q18002875', 'Sports-Reference.com' ),						'P1447',	function( id ) return 'http://www.sports-reference.com/olympics/athletes/' .. id .. '.html' end,	categoryExternalLink( 'Sports-Reference.com' ) },

	-- audio and video
	{ getLabelWithoutLink( 'Q477809', 'AllMovie' ),										'P1562',	function(id) return 'http://www.allmovie.com/movie/' .. id end,					categoryExternalLink( 'AllMovie' ) },
	{ getLabelWithoutLink( 'Q477809', 'AllMovie' ),										'P2019',	function(id) return 'http://www.allmovie.com/artist/' .. id end,				categoryExternalLink( 'AllMovie' ) },

	{ getLabelWithoutLink( 'Q31181', 'AllMusic' ),										'P1728',	function(id) return 'http://www.allmusic.com/artist/' .. id end,				categoryExternalLink( 'AllMusic' ) },
	{ getLabelWithoutLink( 'Q31181', 'AllMusic' ),										'P1729',	function(id) return 'http://www.allmusic.com/album/' .. id end,					categoryExternalLink( 'AllMusic' ) },
	{ getLabelWithoutLink( 'Q31181', 'AllMusic' ),										'P1730',	function(id) return 'http://www.allmusic.com/song/' .. id end,					categoryExternalLink( 'AllMusic' ) },
	{ getLabelWithoutLink( 'Q31181', 'AllMusic' ),										'P1994',	function(id) return 'http://www.allmusic.com/composition/' .. id end,			categoryExternalLink( 'AllMusic' ) },

	{ labelAllocine,																	'P1265',	function(id) return 'http://www.allocine.fr/film/fichefilm_gen_cfilm=' .. id .. '.html'	end,				categoryExternalLink( 'AlloCiné' ) },
	{ labelAllocine,																	'P1266',	function(id) return 'http://www.allocine.fr/personne/fichepersonne_gen_cpersonne=' .. id .. '.html'	end,	categoryExternalLink( 'AlloCiné' ) },
	{ labelAllocine,																	'P1267',	function(id) return 'http://www.allocine.fr/series/ficheserie_gen_cserie=' .. id .. '.html'	end,			categoryExternalLink( 'AlloCiné' ) },

	{ getLabelWithoutLink( 'P1688', 'AniDB' ),											'P1688',	aniDBLink,						categoryExternalLink( 'AniDB' ) },
	{ labelAnimeNewsNetwork,															'P1982',	function(id) return 'http://www.animenewsnetwork.com/encyclopedia/people.php?id=' .. id end,	categoryExternalLink( 'Anime News Network' ) },
	{ labelAnimeNewsNetwork,															'P1983',	function(id) return 'http://www.animenewsnetwork.com/encyclopedia/company.php?id=' .. id end,	categoryExternalLink( 'Anime News Network' ) },
	{ labelAnimeNewsNetwork,															'P1984',	function(id) return 'http://www.animenewsnetwork.com/encyclopedia/manga.php?id=' .. id end,		categoryExternalLink( 'Anime News Network' ) },
	{ labelAnimeNewsNetwork,															'P1985',	function(id) return 'http://www.animenewsnetwork.com/encyclopedia/anime.php?id=' .. id end,			categoryExternalLink( 'Anime News Network' ) },

	{ getLabelWithoutLink( 'Q223142', 'Box Office Mojo' ),								'P1237',	boxofficemojoLink,				categoryExternalLink( 'Box Office Mojo' ) },

	{ getLabelWithoutLink( 'Q3561957', 'ČSFD' ),										'P2529',	function(id) return 'http://www.csfd.cz/film/' .. id end,	categoryExternalLink( 'ČSFD' ) },
	{ getLabelWithoutLink( 'Q3561957', 'ČSFD' ),										'P2605',	function(id) return 'http://www.csfd.cz/tvurce/' .. id end,	categoryExternalLink( 'ČSFD' ) },

	{ labelDiscogs,										'P1953',	function(id) return 'http://www.discogs.com/artist/' .. id end,				categoryExternalLink( 'Discogs' ) },
	{ labelDiscogs,										'P1954',	function(id) return 'http://www.discogs.com/master/' .. id end,				categoryExternalLink( 'Discogs' ) },
	{ labelDiscogs,										'P1955',	function(id) return 'http://www.discogs.com/label/' .. id end,				categoryExternalLink( 'Discogs' ) },
	{ labelDiscogs,										'P2206',	function(id) return 'http://www.discogs.com/release/' .. id end,			categoryExternalLink( 'Discogs' ) },
	
	{ getLabelWithoutLink( 'Q2638147', 'FilmAffinity' ),								'P480',		function(id) return 'http://www.filmaffinity.com/en/film' .. id .. '.html' end,	categoryExternalLink( 'FilmAffinity' ) },
	{ labelEncyclopaediaMetallum,														'P1952',	function(id) return 'http://www.metal-archives.com/bands//' .. id end,			categoryExternalLink( 'Encyclopaedia Metallum' ) },
	{ labelEncyclopaediaMetallum,														'P1989',	function(id) return 'http://www.metal-archives.com/artists//' .. id end,		categoryExternalLink( 'Encyclopaedia Metallum' ) },
	{ labelEncyclopaediaMetallum,														'P2721',	function(id) return 'http://www.metal-archives.com/release.php?id=' .. id end,		categoryExternalLink( 'Encyclopaedia Metallum' ) },
	{ labelIBDb,																		'P1217',	ibdbVenueLink,					categoryExternalLink( 'IBDb' ) },
	{ labelIBDb,																		'P1218',	ibdbProductionLink,				categoryExternalLink( 'IBDb' ) },
	{ labelIBDb,																		'P1219',	ibdbShowLink,					categoryExternalLink( 'IBDb' ) },
	{ labelIBDb,																		'P1220',	ibdbPersonLink,					categoryExternalLink( 'IBDb' ) },
	{ getLabelWithoutLink( 'Q37312', 'Internet Movie Database' ),						'P345',		imdbLink,						categoryExternalLink( 'IMDb' ) },
	{ getLabelWithoutLink( 'Q523660', 'International Music Score Library Project' ),	'P839',		imslpLink,						categoryExternalLink( 'IMSLP' ) },
	{ getLabelWithoutLink( 'Q150248', 'Metacritic' ), 'P1712', function( id ) return 'http://www.metacritic.com/' .. id end, categoryExternalLink( 'Metacritic' ) },
	{ labelMusicBrainz,																	'P434',		musicBrainzArtistLink,			categoryExternalLink( 'MusicBrainz' ) },
	{ labelMusicBrainz,																	'P435',		musicBrainzWorkLink,			categoryExternalLink( 'MusicBrainz' ) },
	{ labelMusicBrainz,																	'P436',		musicBrainzReleazeGroupLink,	categoryExternalLink( 'MusicBrainz' ) },
	{ getLabelWithoutLink( 'Q22673', 'Project Gutenberg' ),								'P1938',	function(id) return 'http://www.gutenberg.org/ebooks/author/' .. id end,		categoryExternalLink( 'Project Gutenberg' ) },
	{ getLabelWithoutLink( 'Q105584', 'Rotten Tomatoes' ),								'P1258',	rottentomatoesLink,				categoryExternalLink( 'Rotten Tomatoes' ) },
	{ getLabelWithoutLink( 'Q4066284', 'Аниматор.ру' ),									'P1934',	function(id) return 'http://www.animator.ru/db/?p=show_film&fid=' .. id end,	categoryExternalLink( 'Animator.ru' ) },

	-- literature
	{ labelISFDb,																		'P1233',	isfdbAuthorLink,				categoryExternalLink( 'ISFDb' ) },
	{ labelISFDb,																		'P1234',	isfdbPublicationLink,			categoryExternalLink( 'ISFDb' ) },
	{ labelISFDb,																		'P1235',	isfdbSeriesLink,				categoryExternalLink( 'ISFDb' ) },
	{ labelISFDb,																		'P1239',	isfdbPublisherLink,				categoryExternalLink( 'ISFDb' ) },

	{ getLabelWithoutLink( 'Q17299517', 'RKDartists' ),									'P650',		rkdArtistsLink,					categoryExternalLink( 'RKDartists' ) },
	{ getLabelWithoutLink( 'Q17299580', 'RKDimages' ),									'P350',		rkdImagesLink,					categoryExternalLink( 'RKDimages' ) },
	
	{ getLabelWithoutLink( 'Q24694883', 'ECARTICO' ),									'P2915',	function(id) return 'http://www.vondel.humanities.uva.nl/ecartico/persons/' .. id end,		categoryExternalLink( 'ECARTICO' ) },
	-- common
	{ getLabelWithoutLink( 'Q649227', 'Rodovod' ),										'P1185',	rodovidLink,					categoryExternalLink( 'Rodovod' ) },
	{ getLabelWithoutLink( 'Q20035614', 'Deklarator' ),									'P1883',	declaratorLink,					categoryExternalLink( 'Deklarator' ) },
	{ getLabelWithoutLink( 'Q41226', 'Open Directory Project' ),						'P998',		dmozLink,						categoryExternalLink( 'DMOZ' ) },
	{ getLabelWithoutLink( 'Q63056', 'Find a Grave' ),									'P535',		findagraveLink,					categoryExternalLink( 'Find a Grave' ) },

}

local authorityControl = {
	{ getLabelWithLink( 'Q213678', 'Bibliotheca Apostolica Vaticana', 'BAV'),				'P1017',	bavLink,	categoryAuthorityControl( 'BAV' ) },
	{ getLabelWithLink( 'Q4584301', '', 'BIBSYS'),											'P1015', 	bibsysLink,	categoryAuthorityControl( 'BIBSYS' ) },
	{ getLabelWithLink( 'Q1200925', 'Biblioteca de Catalunya', 'BNC'),						'P1273',	bncLink,	categoryAuthorityControl( 'BNC' ) },
	{ getLabelWithLink( 'Q750403', 'Biblioteca Nacional de España', 'BNE'),					'P950', 	bneLink,	categoryAuthorityControl( 'BNE' ) },
	{ getLabelWithLink( 'Q193563', 'Bibliothèque nationale de France', 'BNF'), 				'P268', 	bnfLink,	categoryAuthorityControl( 'BNF' ) },
	{ getLabelWithLink( 'Q1868372', 'Biografisch Portaal', 'BPN'),							'P651',		bpnLink,	categoryAuthorityControl( 'BPN' ) },
	{ getLabelWithLink( 'Q9384291', '中国高等教育文献保障系统', 'CALIS'),					'P270', 	calisLink,	categoryAuthorityControl( 'CALIS' ) },
	{ getLabelWithLink( 'Q17299677', 'China Biographical Database Project', 'CBDB'),		'P497', 	cbdbLink,	categoryAuthorityControl( 'CBDB' ) },
	{ getLabelWithLink( 'Q10726338', 'Citation Information by NII', 'CiNii'),				'P271', 	ciniiLink,	categoryAuthorityControl( 'CiNii' ) },
	{ getLabelWithLink( 'Q16744133', 'CONOR', 'CONOR'), 									'P1280',	conorLink,	categoryAuthorityControl( 'CONOR' ) },
	{ getLabelWithLink( 'Q501851', 'مكتبة الإسكندرية الجديدة', 'EGAXA'),					'P1309', 	egaxaLink,	categoryAuthorityControl( 'EGAXA' ) },
	{ getLabelWithLink( 'Q36578', 'Gemeinsame Normdatei', 'GND'),							'P227', 	gndLink,	categoryAuthorityControl( 'GND' ) },
	{ getLabelWithLink( 'Q3803707', 'Istituto Centrale per il Catalogo Unico', 'ICCU'),		'P396', 	iccuLink,	categoryAuthorityControl( 'ICCU' ) },
	{ getLabelWithLink( 'Q423048', 'International Standard Name Identifier', 'ISNI'),		'P213',		isniLink,	categoryAuthorityControl( 'ISNI' ) },
	{ getLabelWithLink( 'Q620946', 'Library of Congress Control Number', 'LCCN'),			'P244',		lccnLink,	categoryAuthorityControl( 'LCCN' ) },
	{ getLabelWithLink( 'Q1133733', 'Latvijas Nacionālā bibliotēka', 'LNB'),				'P1368',	lnbLink,	categoryAuthorityControl( 'LNB' ) },
	{ getLabelWithLink( 'Q809830', 'Base Mérimée', 'Mérimée'),								'P380',		merimeeLink,categoryAuthorityControl( 'Mérimée' ) },
	{ getLabelWithLink( 'Q618340', '國家圖書館 (中華民國)', 'NCL'),							'P1048', 	nclLink,	categoryAuthorityControl( 'NCL' ) },
	{ getLabelWithLink( 'Q477675', '国立国会図書館', 'NDL'),								'P349',		ndlLink,	categoryAuthorityControl( 'NDL' ) },
	{ getLabelWithLink( 'Q732353', '中国国家图书馆', 'NLC'),								'P1213', 	nlcLink,	categoryAuthorityControl( 'NLC' ) },
-- NLI numbers seems unstable
	{ getLabelWithLink( 'Q1967876', 'Národní knihovna České republiky', 'NKC'),				'P691',		nkcLink,	categoryAuthorityControl( 'NKC' ) },
	{ getLabelWithLink( 'Q623578', 'National Library of Australia', 'NLA'), 				'P409',		nlaLink,	categoryAuthorityControl( 'NLA' ) },
	{ getLabelWithLink( 'Q1467610', 'Αναγνωριστικό Καθιερωμένων από τον Κατάλογο Καθιερωμένων Όρων της Εθνικής Βιβλιοθήκης της Ελλάδος', 'NLG'),	'P3348',	function(id) return 'http://nlg.okfn.gr/resource/authority/record' .. id end,	categoryAuthorityControl( 'NLG' ) },
	{ getLabelWithLink( 'Q622012', 'Biblioteca Națională a României', 'NLR'), 				'P1003',	nlrLink,	categoryAuthorityControl( 'NLR' ) },
	{ getLabelWithLink( 'Q631375', 'Nacionalna i sveučilišna knjižnica u Zagrebu', 'NSK'),	'P1375',	nskLink,	categoryAuthorityControl( 'NSK' ) },
	{ getLabelWithLink( 'Q1526131', 'Koninklijke Bibliotheek', 'NTA'),						'P1006',	ntaLink,	categoryAuthorityControl( 'NTA' ) },
	{ getLabelWithLink( 'Q1063819', 'Országos Széchényi Könyvtár', 'NSZL'),					'P951',		nszlLink,	categoryAuthorityControl( 'NSZL' ) },
	{ getLabelWithLink( 'Q11789729', 'Narodowy Uniwersalny Katalog Centralny', 'NUKAT'),	'P1207',	nukatLink,	categoryAuthorityControl( 'NUKAT' ) },
	{ getLabelWithLink( 'Q245966', 'Biblioteca Nacional de Portugal', 'PTBNP'),				'P1005',	ptbnpLink,	categoryAuthorityControl( 'PTBNP' ) },
	{ getLabelWithLink( 'Q1048694', 'Rusiya Dövlət Kitabxanası', 'RDK'),		'P947', 	rslLink,	categoryAuthorityControl( 'RSL' ) },
	{ getLabelWithLink( 'Q953058', 'Kungliga biblioteket', 'LIBRIS'),						'P906',		selibrLink,	categoryAuthorityControl( 'SELIBR' ) },
	{ getLabelWithLink( 'Q2597810', 'Système universitaire de documentation', 'SUDOC'),		'P269',		sudocLink,	categoryAuthorityControl( 'SUDOC' ) },    
	{ getLabelWithLink( 'Q54919', 'Virtual International Authority File', 'VIAF'),			'P214',		viafLink,	categoryAuthorityControl( 'VIAF' ) },
	{ getLabelWithLink( 'Q2494649', 'Union List of Artist Names', 'ULAN' ),					'P245',		ulanLink,	categoryAuthorityControl( 'ULAN' ) },
}

function getQualifierSingleValue( statement, qualifierName )
	if (statement ~= nil
			and statement.qualifiers ~= nil
			and statement.qualifiers[qualifierName] ~= nil) then

		for qualifierIndex, qualifier in pairs( statement.qualifiers[qualifierName] ) do
			if (qualifier.datavalue ~= nil
					and qualifier.datavalue.type ~= nil
					and qualifier.datavalue.value ~= nil) then

				if ( qualifier.datavalue.type == "monolingualtext" ) then
					return qualifier.datavalue.value.text;
				end
				if ( qualifier.datavalue.type == "string" ) then
					return qualifier.datavalue.value;
				end
				if ( qualifier.datavalue.type == "wikibase-entityid" ) then
					return 'Q' .. qualifier.datavalue.value["numeric-id"];
				end
				mw.log( 'Unknown qualifier type: ' .. qualifier.datavalue.type )
				return qualifier.datavalue.value;

			end
		end

	end
	return nil;
end

function getQualifierValues( statement, qualifierName )
	local result = {}
	if (statement ~= nil
			and statement.qualifiers ~= nil
			and statement.qualifiers[qualifierName] ~= nil) then
		local qualifiers = statement.qualifiers[qualifierName];
		for _, qualifier in pairs( qualifiers ) do
			if (qualifier.datavalue ~= nil
				and qualifier.datavalue.type ~= nil
				and qualifier.datavalue.value ~= nil) then

				if ( qualifier.datavalue.type == "string" ) then
					result[#result+1] = qualifier.datavalue.value;
				elseif ( qualifier.datavalue.type == "wikibase-entityid" ) then
					result[#result+1] = 'Q' .. qualifier.datavalue.value["numeric-id"];
				else 
					mw.log( 'Unknown qualifier type: ' .. qualifier.datavalue.type );
					result[#result+1] = 'Q' .. qualifier.datavalue.value;
				end
			end
		end
	end
	return result;
end

function collectLinks( configuration, elementId )

	local moduleLanguages
	if ( mw.title.makeTitle( 'Module', 'Languages' ).exists
			and mw.title.makeTitle( 'Module', 'Languages/data' ).exists
			and mw.title.makeTitle( 'Module', 'Wikidata/Language-codes' ).exists) then
		moduleLanguages = require('Module:Languages');
	else
		moduleLanguages = false;
	end

	--Create rows
	local elements = {}
	local data = {}


	local item = mw.wikibase.getEntity( elementId )
	if item == nil or item.claims == nil then
		return elements
	end

	if ( item.claims['P553'] ~= nil ) then
		local claim = item.claims['P553']
		for _, statement in pairs( claim ) do
			if (statement ~= nil) then
				-- profile ID
				local rank = statement.rank or 'normal';
				if ( rank ~= 'deprecated' ) then
					local itemId = getQualifierSingleValue( statement, 'P554' );
					if (itemId ~= nil) then
						-- language
						local languages = getQualifierValues( statement, 'P407' );
						local resourceId = 'Q' .. statement.mainsnak.datavalue.value['numeric-id']
						if (data[resourceId] == nil) then
							data[resourceId] = {};
						end
						table.insert( data[resourceId], { itemId = itemId, languages = languages, rank = rank} )
					end
				end
			end
		end
	end

	for _, params in pairs( configuration ) do
		local resourceId = params[2]

		local claim = item.claims[ resourceId ]
		if ( claim ) then
			for _, statement in pairs( claim ) do
				local rank = statement.rank or 'normal';
				if ( rank ~= 'deprecated' and statement.mainsnak.datavalue) then
					local itemId = statement.mainsnak.datavalue.value;
					local languages = getQualifierValues( statement, 'P407' );
					if (data[resourceId] == nil) then
						data[resourceId] = {};
					end
					table.insert( data[resourceId], { itemId = itemId, languages = languages, rank = rank} );
				end
			end
		end
	end

	for resourceId, resourceDatas in pairs( data ) do
		data[resourceId] = filterByRank( resourceDatas );
	end

	local hasNonOptionalLinks = false

	for _, params in pairs( configuration ) do
		local resourceLabel = params[1]
		local firstChar = mw.ustring.sub( resourceLabel, 1, 1 );
		local separateDesign = firstChar == '[' or firstChar == '<';

		local resourceId = params[2]
		local optional = params[5] or false;

		local resourceDatas = data[resourceId];
		if resourceDatas ~= nil then
			if ( not optional ) then
				hasNonOptionalLinks = true
			end

			local html = '';
			if ( separateDesign ) then
				html = html .. resourceLabel .. ':&nbsp;';
			end
			for index, resourceData in pairs(resourceDatas) do
				local itemId = resourceData.itemId;
				local languages = resourceData.languages;
				local link = params[3] ( itemId );
				local linkFirstChar;
				local interwiki;
				if ( link ) then
					linkFirstChar = mw.ustring.sub( link, 1, 1 );
					interwiki = linkFirstChar == ':'
				end

				if ( separateDesign ) then
					if ( index ~= 1 ) then
						html = html .. ',&nbsp;'
					end
					if ( link ) then
						if ( interwiki ) then
							html = html .. '[[' .. link .. '|' .. itemId .. ']]';
						else
							html = html .. '[' .. link .. ' ' .. itemId .. ']';
						end
					else
						html = html .. itemId;
					end
				else
					if ( index ~= 1 ) then
						html = html .. ' • '
					end
					if ( link ) then
						if ( interwiki ) then
							html = html .. '[[' .. link .. '|' .. resourceLabel .. ']]';
						else
							html = html .. '[' .. link .. ' ' .. resourceLabel .. ']';
						end
					else
						-- it should not happen
						html = html .. resourceLabel .. ':&nbsp;' .. itemId;
					end

					if ( moduleLanguages ) then
						if ( languages ~= nil and #languages > 0 ) then
							for langIndex, language in pairs(languages) do
								html = html .. '&nbsp;' .. moduleLanguages.getRefHtml( language )
							end
						end
					end
				end
			end
			if ( #params >= 4 and params[4] ) then
				html = html .. '[[Category:' .. params[4] .. ']]'
			end
			table.insert( elements, html )
		end
	end

	if ( not hasNonOptionalLinks ) then
		return {}
	end

	return elements
end

function collectDictionaryLinks( elementId )
	--Create rows
	local elements = {}

	local item = mw.wikibase.getEntity( elementId );
	if ( item == nil or item.claims == nil) then
		return elements
	end

	local sourceToElementLinks = {};

	local claim = item.claims['P1343']
	if ( claim ) then
		for _, statement in pairs( claim ) do
			if (statement ~= nil) then
				local rank = statement.rank or 'normal';
				if ( rank ~= 'deprecated' ) then
					local resourceId = 'Q' .. statement.mainsnak.datavalue.value['numeric-id']
					local languages = getQualifierValues( statement, 'P407' );
	
					-- Wikisource link ?
					local entityId = getQualifierSingleValue( statement, 'P805' ) or getQualifierSingleValue( statement, 'P248' );
					if ( entityId ) then
						if (sourceToElementLinks[resourceId] == nil) then
							sourceToElementLinks[resourceId] = {};
						end
						table.insert( sourceToElementLinks[resourceId], { entityId = entityId, languages = languages, rank = rank} );
					end
	
					-- URL to encyclopedia
					local url = getQualifierSingleValue( statement, 'P854' );
					if (url ~= nil) then
						if (sourceToElementLinks[resourceId] == nil) then
							sourceToElementLinks[resourceId] = {};
						end
						table.insert( sourceToElementLinks[resourceId], { url = url, languages = languages, rank = rank} );
					end
				end
			end
		end
	end

	for _, description in pairs( dictionaries ) do
		if ( description.linkF ) then
			local claim = item.claims[ description.id ];
			if ( claim ) then
				for _, statement in pairs( claim ) do
					local rank = statement.rank or 'normal';
					if ( rank ~= 'deprecated' and statement.mainsnak.datavalue) then
						local value = statement.mainsnak.datavalue.value;
						local url = description.linkF( value );
						local languages = getQualifierValues( statement, 'P407' );
						if ( sourceToElementLinks[description.id] == nil) then
							sourceToElementLinks[description.id] = {};
						end
						table.insert( sourceToElementLinks[description.id], { url = url, languages = languages, rank = rank} );
					end
				end
			end
		end
	end

	local html = '';
	for _, description in pairs( dictionaries ) do
		local links = sourceToElementLinks[ description.id ];
		if ( links ) then
			for _, link in pairs( links ) do
				if ( link.url ) then
					table.insert( elements, '[' .. link.url .. ' ' .. description.title .. ']' )
				end

				if ( link.entityId ) then
					local entity = mw.wikibase.getEntity( link.entityId );
					if ( entity and entity.sitelinks and entity.sitelinks[description.project] ) then
						table.insert( elements, '[[' ..  description.projectCode .. entity.sitelinks[description.project].title .. '|' .. description.title .. ']]' )
					end
				end
			end
		end
	end

	return elements
end

function contains( tableStructure, value )
	if ( tableStructure == nil or value == nil) then
		return true;
	end
	for index, line in pairs( tableStructure ) do
		if (line == value) then
			return true;
		end
	end
	return false;
end

function filterByRank( resourceDatas )
	-- itemId, languages. rank = rank
	
	local hasPreffered = false;
	for index, resourceData in pairs(resourceDatas) do
		if ( resourceData.rank == 'preferred' ) then
			hasPreffered = true;
		end
	end
	
	if (not hasPreffered) then
		return resourceDatas;
	end

	local result = {};
	for index, resourceData in pairs(resourceDatas) do
		if ( resourceData.rank == 'preferred' or contains(resourceData.languages, preferredLanguage) ) then
			table.insert(result, resourceData);
		end
	end

	return result;
end

function p.render( frame )
	local colorArg = '#CCF';
	local elementId = nil;
	if ( frame ~= nil ) then
		local parentArgs = frame:getParent().args
		colorArg = parentArgs[templateColorName] or parentArgs["color"] or parentArgs[1] or '#CCF';
		if parentArgs['d'] and parentArgs['d'] ~= '' then
			elementId = string.upper( parentArgs['d'] );
		end
		local firstChar = mw.ustring.sub( colorArg, 1, 1 );
		if ( firstChar ~= '#' ) then
			local byTemplate = colorByTitle( frame, colorArg );
			if ( byTemplate ) then
				colorArg = byTemplate;
			end
		end
	end

	local navboxData = {
		name  = 'External links',
		navboxclass = 'navbox ruwikiArticleExternalLinksTable',
		bodyclass = 'hlist',
		groupstyle = 'background: ' .. colorArg .. ';',
	};
	local rowIndex = 1

	local socialNetworksElements = collectLinks( socialNetworkProperties, elementId );
	if ( #socialNetworksElements > 0 ) then
		navboxData['group' .. rowIndex] = group1Label
		navboxData['list' .. rowIndex] = table.concat( socialNetworksElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	local textsElements = collectLinks( textsProperties, elementId );
	if ( #textsElements > 0 ) then
		navboxData['group' .. rowIndex] = group2Label
		navboxData['list' .. rowIndex] = table.concat( textsElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	local contentHostingElements = collectLinks( contentHostingProperties, elementId );
	if ( #contentHostingElements > 0 ) then
		navboxData['group' .. rowIndex] = group3Label
		navboxData['list' .. rowIndex] = table.concat( contentHostingElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	local themeProfilesElements = collectLinks( themeProfilesProperties, elementId );
	if ( #themeProfilesElements > 0 ) then
		navboxData['group' .. rowIndex] = group4Label
		navboxData['list' .. rowIndex] = table.concat( themeProfilesElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	local dictionaryElements = collectDictionaryLinks();
	if ( #dictionaryElements > 0 ) then
		navboxData['group' .. rowIndex] = group5Label
		navboxData['list' .. rowIndex] = table.concat( dictionaryElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	local authorityControlElements = collectLinks( authorityControl, elementId );
	if ( #authorityControlElements > 0 ) then
		navboxData['group' .. rowIndex] = group6Label
		navboxData['list' .. rowIndex] = table.concat( authorityControlElements , ' • ' )
		rowIndex = rowIndex + 1
	end

	if ( rowIndex == 1 ) then
		if ( mw.title.getCurrentTitle().namespace == 0 ) then
			return '[[Category:' .. categoryTemplateEmpty .. ']]'
		end
	else
		navboxData['group1'] = '<div style="padding: 0px 18px 0px 0px; width: 100%;"><div style="float: left; margin-left: -0.25em;">' .. frame:expandTemplate{ title = 'tnavbar-view', args = { templateLink } } .. '</div>&nbsp;&nbsp;' .. navboxData['group1'] .. '</div>'
	end

	local navbox = moduleNavbox._navbox( navboxData )
	return navbox
end

function p.renderDocumentation( )
	local result = ''
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group1Label .. '\n'
	result = result .. '|-\n'
	result = result .. renderDocumentationCategory( socialNetworkProperties );
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group2Label .. '\n'
	result = result .. '|-\n'
	result = result .. renderDocumentationCategory( textsProperties );
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group3Label .. '\n'
	result = result .. '|-\n'
	result = result .. renderDocumentationCategory( contentHostingProperties );
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group4Label .. '\n'
	result = result .. '|-\n'
	result = result .. renderDocumentationCategory( themeProfilesProperties );
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group5Label .. '\n'
	result = result .. '|-\n'
	--result = result .. renderDocumentationCategory( dictionaryProperties );
	result = result .. '|-\n'
	result = result .. '! colspan=4 | ' .. group6Label .. '\n'
	result = result .. '|-\n'
	result = result .. renderDocumentationCategory( authorityControl );
	return result;
end

function renderDocumentationCategory( links )
	local result = ''
	
	for _, params in pairs( links ) do
		local resourceLabel = params[1]
		local resourceId = params[2]
		local category = params[4]
		local optional
		if ( params[5] or false ) then
			optional = 'TRUE'
		else
			optional = 'FALSE'
		end
		
		result = result .. '| ' .. resourceLabel .. '\n'
		if string.match( resourceId, '^P' ) then
			result = result .. '| [[:d:Property:' .. resourceId .. '|' .. resourceId .. ']]\n'
		elseif string.match( resourceId, '^Q' ) then
			result = result .. '| [[:d:' .. resourceId .. '' .. '|' .. resourceId .. ']]\n'
		else 
			result = result .. '| &nbsp; \n'
		end

		if ( category ~= nil and category ~= false ) then
			result = result .. '| [[:Category:' .. category .. '|' .. category .. ']]\n'
		else
			result = result .. '| &nbsp; \n'
		end
		result = result .. '| ' .. optional .. '\n'
		result = result .. '|-\n'
	end

	return result;
end

return p
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy