Մոդուլ:External links

Վիքիպեդիայից՝ ազատ հանրագիտարանից
Jump to navigation Jump to search
Wikidata-logo.svg Այս մոդուլն օգտագործում է Վիքիտվյալների որոշ տվյալներ: Ավելորդ աշխատանքից խուսափելու համար կարող եք այս փոփոխականները`
  • Gran Enciclopèdia Catalana-ի ծածկագիր (P1296) (տե՛ս օգտագործումը)
  • Encyclopædia Britannica Online ID (P1417) (տե՛ս օգտագործումը)
  • Dictionary of Welsh Biography ծածկագիր (P1648) (տե՛ս օգտագործումը)
  • Հրեական հանրագիտարանի ծածկագիր (P1438) (տե՛ս օգտագործումը)
  • Oxford Biography Index Number (P1415) (տե՛ս օգտագործումը)
  • HDS (P902) (տե՛ս օգտագործումը)
  • LIR (P886) (տե՛ս օգտագործումը)
  • Վիքիպահեստի կատեգորիա (P373) (տե՛ս օգտագործումը)
  • Yandex.Music ID (P1553) (տե՛ս օգտագործումը)
  • Mathematics Genealogy Project (MGP) identifier (P549) (տե՛ս օգտագործումը)
  • Notable Names Database ծածկագիր (P1263) (տե՛ս օգտագործումը)
  • ORCID ծածկագիր (P496) (տե՛ս օգտագործումը)
  • ResearcherID (P1053) (տե՛ս օգտագործումը)
  • հեղինակի ծածկագիրն ըստ Scopus-ի (P1153) (տե՛ս օգտագործումը)
  • zbMATH author ID (P1556) (տե՛ս օգտագործումը)
  • AlloCiné film ID (P1265) (տե՛ս օգտագործումը)
  • AlloCiné person ID (P1266) (տե՛ս օգտագործումը)
  • AlloCiné series ID (P1267) (տե՛ս օգտագործումը)
  • Չթարգմանված կամ գոյություն չունեցող պիտակ (P1361) (տե՛ս օգտագործումը)
  • Box Office Mojo film ID (P1237) (տե՛ս օգտագործումը)
  • FilmAffinity ID (P480) (տե՛ս օգտագործումը)
  • Internet Broadway Database venue ID (P1217) (տե՛ս օգտագործումը)
  • Internet Broadway Database production ID (P1218) (տե՛ս օգտագործումը)
  • Internet Broadway Database show ID (P1219) (տե՛ս օգտագործումը)
  • Internet Broadway Database person ID (P1220) (տե՛ս օգտագործումը)
  • IMDb identifier (P345) (տե՛ս օգտագործումը)
  • IMSLP ID (P839) (տե՛ս օգտագործումը)
  • MusicBrainz artist ID (P434) (տե՛ս օգտագործումը)
  • MusicBrainz work ID (P435) (տե՛ս օգտագործումը)
  • MusicBrainz release group ID (P436) (տե՛ս օգտագործումը)
  • Rotten Tomatoes ID (P1258) (տե՛ս օգտագործումը)
  • ISFDB author ID (P1233) (տե՛ս օգտագործումը)
  • ISFDB publication ID (P1234) (տե՛ս օգտագործումը)
  • ISFDB series ID (P1235) (տե՛ս օգտագործումը)
  • ISFDB publisher ID (P1239) (տե՛ս օգտագործումը)
  • RKDartists ID (P650) (տե՛ս օգտագործումը)
  • RKDimages ID (P350) (տե՛ս օգտագործումը)
  • Rodovid ID (P1185) (տե՛ս օգտագործումը)
  • DMOZ ID (P998) (տե՛ս օգտագործումը)
  • Find a Grave memorial ID (P535) (տե՛ս օգտագործումը)
  • BAV ID (P1017) (տե՛ս օգտագործումը)
  • BIBSYS ID (P1015) (տե՛ս օգտագործումը)
  • CANTIC-ID (P1273) (տե՛ս օգտագործումը)
  • BNE ID (P950) (տե՛ս օգտագործումը)
  • BnF ID (P268) (տե՛ս օգտագործումը)
  • Biografisch Portaal number (P651) (տե՛ս օգտագործումը)
  • CALIS ID (P270) (տե՛ս օգտագործումը)
  • CBDB ID (P497) (տե՛ս օգտագործումը)
  • CiNii կոդ (P271) (տե՛ս օգտագործումը)
  • CONOR ID (P1280) (տե՛ս օգտագործումը)
  • EGAXA ID (P1309) (տե՛ս օգտագործումը)
  • GND ID (P227) (տե՛ս օգտագործումը)
  • SBN author ID (P396) (տե՛ս օգտագործումը)
  • ISNI (P213) (տե՛ս օգտագործումը)
  • LCNAF ծածկագիր (P244) (տե՛ս օգտագործումը)
  • LNB ID (P1368) (տե՛ս օգտագործումը)
  • Mérimée ID (P380) (տե՛ս օգտագործումը)
  • NCL ID (P1048) (տե՛ս օգտագործումը)
  • NDL Auth ID (P349) (տե՛ս օգտագործումը)
  • NLC authorities (P1213) (տե՛ս օգտագործումը)
  • NKCR AUT ID (P691) (տե՛ս օգտագործումը)
  • NLA (Australia) ID (P409) (տե՛ս օգտագործումը)
  • NLR (Romania) ID (P1003) (տե՛ս օգտագործումը)
  • NSK ID (P1375) (տե՛ս օգտագործումը)
  • National Thesaurus for Author Names ID (P1006) (տե՛ս օգտագործումը)
  • NSZL ID (P951) (տե՛ս օգտագործումը)
  • NUKAT (WarsawU) authorities ID (P1207) (տե՛ս օգտագործումը)
  • PTBNP ID (P1005) (տե՛ս օգտագործումը)
  • RSL ID (person) (P947) (տե՛ս օգտագործումը)
  • SELIBR Id (P906) (տե՛ս օգտագործումը)
  • SUDOC authorities ID (P269) (տե՛ս օգտագործումը)
  • VIAF կոդ (P214) (տե՛ս օգտագործումը)
  • ULAN ծածկագիր (P245) (տե՛ս օգտագործումը)
  • սոցիալական մեդիա կայքերում գրանցում (P553) (տե՛ս օգտագործումը)
  • օգտանուն կայքում (P554) (տե՛ս օգտագործումը)
  • լեզու (P407) (տե՛ս օգտագործումը)
  • նկարագրվում է աղբյուրներում (P1343) (տե՛ս օգտագործումը)
  • Չթարգմանված կամ գոյություն չունեցող պիտակ (P357) (տե՛ս օգտագործումը)
  • անվանում (P1476) (տե՛ս օգտագործումը)
  • հիպերհղում (P854) (տե՛ս օգտագործումը)
  • GeoNames ID (P1566) (տե՛ս օգտագործումը)
  • , լրացնել միջլեզվային հղումը դնելուց հետո, եթե անհրաժեշտություն առաջանա:
    Սոցիալական ցանցերում
    ՎԿ Q116933   FALSE
    vkrugudruzei.ru Q4101720   FALSE
    ԿենդանիՄատյան Q219523   FALSE
    MoiKrug.ru Q4299813   FALSE
    My World@Mail.Ru Q4299858   FALSE
    Օդնոկլասնիկի Q1123836   FALSE
    Спрашивай.Ру Q17195318   FALSE
    Я.ру Q798490   FALSE
    Blogger Q171186   FALSE
    Dudu Q4037665   FALSE
    Ֆեյսբուք Q355   FALSE
    Google+ Q356   FALSE
    LiveInternet Q4043051   FALSE
    MySpace Q40629   FALSE
    QRoom Q17144398   FALSE
    Formspring Q1002972   FALSE
    Tumblr Q384060   FALSE
    Թվիթթեր Q918   FALSE
    Աշխատանքի տեքստ
    Chitalnya Q17254543   FALSE
    samlib.ru Q17195344   FALSE
    Proza.ru Q4380129   FALSE
    Stihi.ru Q4442644   FALSE
    fan.lib.ru Q17300505   FALSE
    Ֆոտո, վիդեո և աուդիո
    Վիքիպահեստ P373 Վիքիպեդիա:Վիքիպահեստի հղումներով հոդվածներ TRUE
    Flickr Q103204   FALSE
    Ինստագրամ Q209330   FALSE
    Last.fm Q183718   FALSE
    Mixcloud Q6883832   FALSE
    PROMODJ Q17117201   FALSE
    Rutube Q372827   FALSE
    SoundCloud Q568769   FALSE
    Vimeo Q156376   FALSE
    ՅուԹյուբ Q866   FALSE
    Թեմատիկ կայքեր
    Կենսաբազմազանության տվյալների գլոբալ բազա P846   FALSE
    Mathematics Genealogy Project P549   FALSE
    NNDB P1263   FALSE
    ORCID iD P496   FALSE
    ResearcherID P1053   FALSE
    ԿինոՊոիսկ P2603   FALSE
    ԿինոՊոիսկ P2604   FALSE
    Scopus P1153   FALSE
    zbMATH database P1556   FALSE
    AlloCiné P1265   FALSE
    AlloCiné P1266   FALSE
    AlloCiné P1267   FALSE
    Anime News Network P1361   FALSE
    Box Office Mojo P1237   FALSE
    FilmAffinity P480   FALSE
    ՖԻՖԱ P1469   FALSE
    GeoNames P1566   FALSE
    Internet Broadway Database P1217   FALSE
    Internet Broadway Database P1218   FALSE
    Internet Broadway Database P1219   FALSE
    Internet Broadway Database P1220   FALSE
    Internet Movie Database P345   FALSE
    International Music Score Library Project P839   FALSE
    MusicBrainz P434   FALSE
    MusicBrainz P435   FALSE
    MusicBrainz P436   FALSE
    Rotten Tomatoes P1258   FALSE
    Internet Speculative Fiction Database P1233   FALSE
    Internet Speculative Fiction Database P1234   FALSE
    Internet Speculative Fiction Database P1235   FALSE
    Internet Speculative Fiction Database P1239   FALSE
    RKDartists P650   FALSE
    RKDimages P350   FALSE
    Rodovid P1185   FALSE
    DMOZ P998   FALSE
    Find a Grave P535   FALSE
    Բառարաններ և հանրագիտարաններ
    Կատալոներեն մեծ հանրագիտարան P1296   FALSE
    Բրիտանիկա P1417   FALSE
    Բրոքհաուսի և Եփրոնի հանրագիտական բառարան Q602358   FALSE
    Ուելսական կենսագրական բառարան P1648   FALSE
    Կյուրեղ և Մեթոդիոս մեծ հանրագիտարան Q4091875   FALSE
    Հրեական հանրագիտարան P1438   FALSE
    Գրականագիտական համառոտ հանրագիտարան Q4239850   FALSE
    Կրուգոսվետ Q2627728   FALSE
    Լարուսսա Q17329836   FALSE
    Գրականագիտական հանրագիտարան Q4263804   FALSE
    Լենտապեդիա Q17290934   FALSE
    Ուղղափառ հանրագիտարան Q2498180   FALSE
    Ռուսերեն կենսագրական բառարան Q1960551   FALSE
    Ազգային կենսագրությունների Օքսֆորդի բառարան P1415   FALSE
    Շվեցարիայի պատմական բառարան P902   FALSE
    Շվեցարիայի պատմական բառարան (օնլայն) P886   FALSE
    Չափորոշչային վերահսկողություն
    BAV P1017   FALSE
    BIBSYS P1015   FALSE
    BNC P1273   FALSE
    BNE P950   FALSE
    BNF P268   FALSE
    BPN P651   FALSE
    CALIS P270   FALSE
    CBDB P497   FALSE
    CiNii P271   FALSE
    CONOR P1280   FALSE
    EGAXA P1309   FALSE
    GND P227   FALSE
    ICCU P396   FALSE
    ISNI P213   FALSE
    LCCN P244   FALSE
    LNB P1368   FALSE
    Mérimée P380   FALSE
    NCL P1048   FALSE
    NDL P349   FALSE
    NLC P1213   FALSE
    NKC P691   FALSE
    NLA P409   FALSE
    NLR P1003   FALSE
    NSK P1375   FALSE
    NTA P1006   FALSE
    NSZL P951   FALSE
    NUKAT P1207   FALSE
    PTBNP P1005   FALSE
    РГБ P947   FALSE
    LIBRIS P906   FALSE
    SUDOC P269   FALSE
    VIAF P214   FALSE
    ULAN P245   FALSE
    LAC P1670   FALSE
    SFP P2209   FALSE
    Spotify P2205   FALSE
    CrunchBase P2088   FALSE
    Avibase P2026   FALSE
    NALT P2004   FALSE
    FAST P2163   FALSE
    ANN P1983   FALSE
    USDA NDB P1978   FALSE

    -- Localizable part
    -- Please, note, that labels to various sites and cataloges are taken from Wikidata (i.e. Wikidata label)
    
    local linksPrefix = ''
    local project = 'Վիքիպեդիա'
    local categoryTemplateEmpty = project .. ':Կաղապար «Արտաքին հղումներ» դատարկ'
    local categoryWithWikimediaCommons = project .. ':Վիքիպահեստի հղումներով հոդվածներ'
    local templateLink = 'Դիտել այս կաղապարը|link=Կաղապար:Արտաքին հղումներ'
    
    local group1Label = '[[' .. linksPrefix .. 'Սոցիալական ցանց|Սոցիալական ցանցերում]]'
    local group2Label = 'Աշխատանքի տեքստ'
    local group3Label = 'Ֆոտո, վիդեո և աուդիո'
    local group4Label = 'Թեմատիկ կայքեր'
    local group5Label = 'Բառարաններ և հանրագիտարաններ'
    local group6Label = '[[' .. linksPrefix .. 'Չափորոշչային վերահսկողություն|Չափորոշչային վերահսկողություն]]'
    
    -- 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 = 'Q8785'; -- armenian
    
    function categoryAuthorityControl( code )
    	return false; --project .. ':Հոեդվածներ, որոնք պարունակում են ' .. code .. ' կոդ'
    end
    function categoryExternalLink( code )
    	return false; --project .. ':Արտաքին հղումներով հոդվածներ:' .. code
    end
    
    local templateColorName = 'գույն';
    -- some project have "named" colors, defined by templates
    function colorByTitle( frame, colorTitle )
    	local templateName = 'գույն/' .. 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
    
    -- feed free to correct labels and categories, or add/remove sources here
    local dictionaryProperties = {
    	{ 'Կատալոներեն մեծ հանրագիտարան',		'P1296',		function ( id ) return 'http://www.enciclopedia.cat/enciclopèdies/gran-enciclopèdia-catalana/EC-GEC-' .. id .. '.xml' end,	categoryExternalLink( 'БКЭ' ) },
    --	{ 'Սովետական մեծ հանրագիտարան',			'Q17378135',	function ( link ) return link end,															categoryExternalLink( 'БСЭ' ) },
    	{ 'Բրիտանիկա',					'P1417',		function ( id ) return 'http://global.britannica.com/EBchecked/topic/'.. id .. '/' end,		categoryExternalLink( 'EB-online' ) },
    	{ 'Բրոքհաուսի և Եփրոնի հանրագիտական բառարան',			'Q602358',		function ( title ) return ':s:ru:ЭСБЕ/' .. title end,										categoryExternalLink( 'ЭСБЕ' ) },
    	{ 'Ուելսական կենսագրական բառարան',	'P1648',		function ( id ) return 'http://yba.llgc.org.uk/en/' .. id .. '.html' end,					categoryExternalLink( 'DWB' ) },
    	{ 'Կյուրեղ և Մեթոդիոս մեծ հանրագիտարան',			'Q4091875',		function ( link ) return link end,															categoryExternalLink( 'БЭКМ' ) },
    	{ 'Հրեական հանրագիտարան',			'P1438',		function ( id ) return 'http://www.eleven.co.il/article/' .. id end,						categoryExternalLink( 'КЕЭ' ) },
    	{ 'Գրականագիտական համառոտ հանրագիտարան',		'Q4239850',		function ( link ) return link end,															categoryExternalLink( 'КЛЭ' ) },
    	{ 'Կրուգոսվետ',					'Q2627728',		function ( link ) return link end,															categoryExternalLink( 'Кругосвет' ) },
    	{ 'Լարուսսա',					'Q17329836',	function ( link ) return link end,															categoryExternalLink( 'EL-online' ) },
    	{ 'Գրականագիտական հանրագիտարան',				'Q4263804',		function ( link ) return link end,															categoryExternalLink( 'ЛЭ' ) },
    	{ 'Լենտապեդիա',					'Q17290934',	function ( title ) return ':s:ru:Лентапедия/' .. title end,									categoryExternalLink( 'Лентапедия' ) },
    	{ 'Ուղղափառ հանրագիտարան',				'Q2498180',		function ( link ) return link end,															categoryExternalLink( 'ПЭ' ) },
    	{ 'Ռուսերեն կենսագրական բառարան',		'Q1960551',		function ( title ) return ':s:ru:РБС/ВТ/' .. title end,										categoryExternalLink( 'РБС' ) },
    	{ 'Ազգային կենսագրությունների Օքսֆորդի բառարան',			'P1415',function ( id ) return 'http://www.oxforddnb.com/index/' .. id .. '/' end,					categoryExternalLink( 'ODNB' ) },
    	{ 'Շվեցարիայի պատմական բառարան',		'P902',	function ( id ) return 'http://www.hls-dhs-dss.ch/textes/f/F' .. id .. '.php'	end,		categoryExternalLink( 'HLS' ) },
    	{ 'Շվեցարիայի պատմական բառարան (օնլայն)',	'P886',	function ( id ) return 'http://www.e-lir.ch/e-LIR___Lexicon.' .. id .. '.450.0.html'	end,	categoryExternalLink( 'LIR' )  },
    }
    
    -- 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 allocineFilmLink( id )	return 'http://www.allocine.fr/film/fichefilm_gen_cfilm=' .. id .. '.html'	end
    function allocinePersonneLink( id )	return 'http://www.allocine.fr/personne/fichepersonne_gen_cpersonne=' .. id .. '.html'	end
    function allocineSeriesLink( id )	return 'http://www.allocine.fr/series/ficheserie_gen_cserie=' .. id .. '.html'	end
    
    function animenewsnetworkLink( id )
        if string.match( id, '^anime\/' ) then
    		return 'http://www.animenewsnetwork.com/encyclopedia/anime.php?id=' .. mw.ustring.sub( id, 7 )
    	end
        if string.match( id, '^company\/' ) then
    		return 'http://www.animenewsnetwork.com/encyclopedia/company.php?id=' .. mw.ustring.sub( id, 9 )
    	end
        if string.match( id, '^manga\/' ) then
    		return 'http://www.animenewsnetwork.com/encyclopedia/manga.php?id=' .. mw.ustring.sub( id, 7 )
    	end
        if string.match( id, '^people\/' ) then
    		return 'http://www.animenewsnetwork.com/encyclopedia/people.php?id=' .. mw.ustring.sub( id, 8 )
    	end
        if string.match( id, '^releases\/' ) then
    		return 'http://www.animenewsnetwork.com/encyclopedia/releases.php?id=' .. mw.ustring.sub( id, 10 )
    	end
    	return false
    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://curlie.org/' .. id	end
    function egaxaLink( id )	return 'http://viaf.org/processed/EGAXA%7Cvtls' .. id	end
    function kinopoiskfilmLink( id )	return 'https://www.kinopoisk.ru/film/' .. id	end
    function kinopoiskpersonLink( id )	return 'https://www.kinopoisk.ru/name/' .. 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 '//www.flickr.com/' .. id	end
    function findagraveLink( id )	return 'http://www.findagrave.com/cgi-bin/fg.cgi?page=gr&GRid=' .. id	end
    function genealogyAsmLink( id )	return 'http://www.genealogy.ams.org/id.php?id=' .. id	end
    function GBIFLink( id )	return 'http://www.gbif.org/species/' .. 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 )	
    	id = id:gsub( '[ ]', '_' )
        return 'http://imslp.org/wiki/' .. 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.org/' .. id
    end
    
    function lccnLink( id )	return 'http://id.loc.gov/authorities/names/' .. id	end
    function lastfmLink( id )	return 'https://www.last.fm/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 instagramLink( id )	return 'http://instagram.com/' .. id	end
    function lnbLink( id )	return 'http://viaf.org/processed/LNB%7CLNC10-' .. id	end
    function merimeeLink( id ) return false	end
    function mixcloudLink( id )	return '//mixcloud.com/' .. id .. '/'	end
    function musicBrainzArtistLink( id )	return '//musicbrainz.org/artist/' .. id	end
    function musicBrainzReleazeGroupLink( id )	return '//musicbrainz.org/release-group/' .. id	end
    function musicBrainzWorkLink( id )	return '//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 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 ridLink( id )	return 'http://www.researcherid.com/rid/' .. 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 scopusLink( id )	return 'http://www.scopus.com/authid/detail.url?authorId=' .. id	end
    function selibrLink( id )	return 'http://libris.kb.se/auth/' .. id	end
    function soundcloudLink( id )	return 'http://soundcloud.com/' .. 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 lacLink( id )	return '//www.collectionscanada.gc.ca/canadiana-authorities/index/view?index_name=cdnAutNbr&cdnAutNbr=' .. id .. '&format=full'	end
    function sfpLink( id )	return '//sourceforge.net/projects/' .. id	end
    function spotifyalbumLink( id )	return '//play.spotify.com/album/' .. id	end
    function avibaseLink( id )	return 'http://avibase.bsc-eoc.org/species.jsp?avibaseid=' .. id	end
    function naltLink( id )	return 'http://lod.nal.usda.gov/nalt/' .. id	end
    function fastLink( id )	return 'http://id.worldcat.org/fast/' .. id	end
    function annLink( id )	return 'http://www.animenewsnetwork.com/encyclopedia/company.php?id=' .. id	end
    function usdandbLink( id )	return 'http://ndb.nal.usda.gov/ndb/foods/show?fg=&man=&lfacet=&format=Abridged&count=&max=25&offset=0&sort=f&qlookup=&rptfrm=nl&ndbno=' .. id	end
    function crunchbaseLink( id )	return '//www.crunchbase.com/organization/' .. id	end
    function vimeoLink( id )	return '//vimeo.com/' .. id	end
    function viafLink( id )	return 'http://viaf.org/viaf/' .. id	end
    function youtubeLink( id )	return 'https://www.youtube.com/' .. 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', 'ВКонтакте'),   		'Q116933',		function( id ) return '//vk.com/' .. id end,								categoryExternalLink( 'ВКонтакте' ) },
        { getLabelWithoutLink( 'Q4101720', 'В кругу друзей'),	'Q4101720',		function( id ) return 'http://' .. id .. '.vkrugudruzei.ru/' end,				categoryExternalLink( 'В кругу друзей' ) },
        { getLabelWithoutLink( 'Q219523', 'Живой журнал'),		'Q219523',		function( id ) return 'http://' .. id .. '.livejournal.com/' end,				categoryExternalLink( 'Живой журнал' ) },
        { getLabelWithoutLink( 'Q4299813', 'Мой круг'),			'Q4299813',		function( id ) return 'http://' .. id .. '.moikrug.ru/' end,					categoryExternalLink( 'Мой круг' ) },
        { getLabelWithoutLink( 'Q4299858', 'Мой мир'),			'Q4299858',		function( id ) return 'http://my.mail.ru/' .. id end,							categoryExternalLink( 'Мой мир' ) },
        { getLabelWithoutLink( 'Q1123836', 'Одноклассники'),	'Q1123836',		function( id ) return 'http://www.odnoklassniki' .. '.ru/profile/' .. id end,	categoryExternalLink( 'Одноклассники' ) },
        { getLabelWithoutLink( 'Q17195318', 'Спрашивай.Ру'),	'Q17195318',	function( id ) return 'http://sprashivai.ru/' .. id end,						categoryExternalLink( 'Спрашивай.Ру' ) },
        { getLabelWithoutLink( 'Q798490', 'Я.ру'),				'Q798490',		function( id ) return 'http://' .. id .. '.ya.ru/' end,							categoryExternalLink( 'Я.ру' ) },
        { 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'), 		   	'Q355',			function( id ) return 'https://hy-am.facebook.com/' .. id end,					categoryExternalLink( 'Facebook' ) },
        { getLabelWithoutLink( 'Q356', 'Google+'),				'Q356',			function( id ) return '//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 '//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'),				'Q918',			function( id ) return 'https://twitter.com/' .. id end,							categoryExternalLink( 'Twitter' ) },
    }
    
    local textsProperties = {
        { getLabelWithoutLink( 'Q17254543', 'Изба-читальня'),		'Q17254543',	chitalnyaRuLink,	categoryExternalLink( 'Изба-читальня' ) },
        { getLabelWithoutLink( 'Q17195344', 'Журнал «Самиздат»'),	'Q17195344',	samlibRuLink,		categoryExternalLink( 'Самиздат' ) },
        { getLabelWithoutLink( 'Q4380129', 'Проза.ру'),				'Q4380129',		prozaRuLink,		categoryExternalLink( 'Проза.ру' ) },
        { getLabelWithoutLink( 'Q4442644', 'Стихи.ру'),				'Q4442644',		stihiRuLink,		categoryExternalLink( 'Стихи.ру' ) },
        { getLabelWithoutLink( 'Q17300505', 'Lib.Ru/Фантастика'),	'Q17300505',	fanLibRuLink,		categoryExternalLink( 'Lib.Ru/Фантастика' ) },
    }
    
    local contentHostingProperties = {
        { getLabelWithoutLink( 'Q565', 'Wikimedia Commons' ),	'P373',			commonsWikimediaLink,	categoryWithWikimediaCommons,			true	},
        { getLabelWithoutLink( 'Q103204', 'Flickr' ),			'Q103204',		flickrLink,				categoryExternalLink( 'Flickr' ),		false	},
        { getLabelWithoutLink( 'Q209330', 'Instagram' ),		'Q209330',		instagramLink,			categoryExternalLink( 'Instagram' ),	false	},
        { getLabelWithoutLink( 'Q183718', 'Last.fm' ),			'Q183718',		lastfmLink,				categoryExternalLink( 'Last.fm' ),		false	},
        { getLabelWithoutLink( 'Q6883832', 'Mixcloud' ),		'Q6883832',		mixcloudLink,			categoryExternalLink( 'Mixcloud' ),		false	},
        { getLabelWithoutLink( 'Q17117201', 'PROMODJ' ),		'Q17117201',	promodjLink,			categoryExternalLink( 'PROMODJ' ),		false	},
        { getLabelWithoutLink( 'Q372827', 'Rutube' ),			'Q372827',		rutubeLink,				categoryExternalLink( 'Rutube' ),		false	},
        { getLabelWithoutLink( 'Q568769', 'SoundCloud' ),		'Q568769',		soundcloudLink,			categoryExternalLink( 'SoundCloud' ),	false	},
        { getLabelWithoutLink( 'Q156376', 'Vimeo' ),			'Q156376',		vimeoLink,				categoryExternalLink( 'Vimeo' ),		false	},
        { getLabelWithoutLink( 'Q866', 'YouTube' ),				'Q866',			youtubeLink,			categoryExternalLink( 'YouTube' ),		false	},
    }
    
    local labelAllocine = getLabelWithoutLink( 'Q31165', 'AlloCiné' );
    local labelIBDb = getLabelWithoutLink( 'Q31964', 'Internet Broadway Database' );
    local labelISFDb = getLabelWithoutLink( 'Q2629164', 'Internet Speculative Fiction Database' );
    local labelMusicBrainz = getLabelWithoutLink( 'Q14005', 'MusicBrainz' );
    
    local themeProfilesProperties = {
    	-- science
    	{ getLabelWithoutLink( 'Q1531570', 'Global Biodiversity Information Facility' ),				'P846',		GBIFLink,				categoryExternalLink( 'Global Biodiversity Information Facility' ) },
    	{ getLabelWithoutLink( 'Q829984', 'Mathematics Genealogy Project' ),				'P549',		genealogyAsmLink,				categoryExternalLink( 'Математическая генеалогия' ) },
    	{ 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',	ridLink,						categoryExternalLink( 'ResearcherID' ) },
    	{ getLabelWithoutLink( 'Q2389071', 'Kinopoisk film ID' ),							'P2603',	kinopoiskfilmLink,						categoryExternalLink( 'Kinopoisk film ID' ) },
    	{ getLabelWithoutLink( 'Q2389071', 'Kinopoisk person ID' ),							'P2604',	kinopoiskpersonLink,						categoryExternalLink( 'Kinopoisk person ID' ) },
    	{ getLabelWithoutLink( 'Q371467', 'Scopus' ),										'P1153',	scopusLink,						categoryExternalLink( 'Scopus' ) },
    	{ getLabelWithoutLink( 'Q18241050', 'zbMATH' ),										'P1556',	function(id) return '//www.zbmath.org/authors/?q=ai:' .. id end,			categoryExternalLink( 'zbMATH' ) },
    	-- audio and video
    	{ labelAllocine,																	'P1265',	allocineFilmLink,				categoryExternalLink( 'AlloCiné' ) },
    	{ labelAllocine,																	'P1266',	allocinePersonneLink,			categoryExternalLink( 'AlloCiné' ) },
    	{ labelAllocine,																	'P1267',	allocineSeriesLink,				categoryExternalLink( 'AlloCiné' ) },
    	{ getLabelWithoutLink( 'Q220509', 'Anime News Network' ),							'P1361',	animenewsnetworkLink,			categoryExternalLink( 'Anime News Network' ) },
    	{ getLabelWithoutLink( 'Q223142', 'Box Office Mojo' ),								'P1237',	boxofficemojoLink,				categoryExternalLink( 'Box Office Mojo' ) },
    	{ getLabelWithoutLink( 'Q2638147', 'FilmAffinity' ),								'P480',		function(id) return 'http://www.filmaffinity.com/en/film' .. id .. '.html' end,	categoryExternalLink( 'FilmAffinity' ) },
    	{ getLabelWithLink( '', 'FIFA player code', 'ՖԻՖԱ'),								'P1469',		function(id) return 'http://www.fifa.com/worldfootball/statisticsandrecords/players/player=' .. id .. '/' end,	categoryExternalLink( 'FIFAplayercode' ) },
    	{ getLabelWithoutLink( 'Q830106', 'GeoNames' ),								'P1566',		function(id) return 'http://sws.geonames.org/' .. id .. '/' end,	categoryExternalLink( 'GeoNames ID' ) },
    	{ 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' ) },
    	{ labelMusicBrainz,																	'P434',		musicBrainzArtistLink,			categoryExternalLink( 'MusicBrainz' ) },
    	{ labelMusicBrainz,																	'P435',		musicBrainzWorkLink,			categoryExternalLink( 'MusicBrainz' ) },
    	{ labelMusicBrainz,																	'P436',		musicBrainzReleazeGroupLink,	categoryExternalLink( 'MusicBrainz' ) },
    	{ getLabelWithoutLink( 'Q105584', 'Rotten Tomatoes' ),								'P1258',	rottentomatoesLink,				categoryExternalLink( 'Rotten Tomatoes' ) },
    	-- 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' ) },
    	-- common
    	{ getLabelWithoutLink( 'Q649227', 'Родовод' ),										'P1185',	rodovidLink,					categoryExternalLink( 'Родовод' ) },
    	{ 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( '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', 'Российская государственная библиотека', 'РГБ'),		'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' ) },
        { getLabelWithLink( 'Q913250', 'Library and Archives Canada', 'LAC' ),					'P1670',	lacLink,	categoryAuthorityControl( 'LAC' ) },
        { getLabelWithLink( 'Q165400', 'SourceForge project', 'SFP' ),							'P2209',	sfpLink,	categoryAuthorityControl( 'SFP' ) },
        { getLabelWithLink( 'Q689141', 'Spotify album', 'Spotify' ),							'P2205',	spotifyalbumLink,	categoryAuthorityControl( 'Spotify' ) },
        { getLabelWithLink( 'Q10846831', 'CrunchBase', 'CrunchBase' ),							'P2088',crunchbaseLink,	categoryAuthorityControl( 'CrunchBase' ) },
        { getLabelWithLink( 'Q20749148', 'Avibase', 'Avibase' ),							'P2026',avibaseLink,	categoryAuthorityControl( 'Avibase' ) },
        { getLabelWithLink( 'Q17364107', 'National Agricultural Library Agricultural Thesaurus', 'NALT' ),							'P2004',naltLink,	categoryAuthorityControl( 'NALT' ) },
        { getLabelWithLink( 'Q3294867', 'Faceted Application of Subject Terminology', 'FAST' ),							'P2163',fastLink,	categoryAuthorityControl( 'FAST' ) },
        { getLabelWithLink( 'Q220509', 'Anime News Network', 'ANN' ),							'P1983',annLink,	categoryAuthorityControl( 'ANN' ) },
        { getLabelWithLink( 'Q7866379', 'United States Department of Agriculture National Nutrient Database', 'USDA NDB' ),							'P1978',usdandbLink,	categoryAuthorityControl( 'USDA NDB' ) },
    }
    
    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 )
    
    	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()
        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
    
    	if ( item.claims['P1343'] ~= nil ) then
    		local claim = item.claims['P1343']
    		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' );
    
    					if ( titleBasedLinks[resourceId] ) then
    						-- title-based
    						local title = getQualifierSingleValue( statement, 'P357' ) or getQualifierSingleValue( statement, 'P1476' );
    						if (title ~= nil) then
    							if (data[resourceId] == nil) then
    								data[resourceId] = {};
    							end
    							table.insert( data[resourceId], { itemId = title, languages = languages, rank = rank} );
    						end
    					else
    						-- URL to encyclopedia
    						local url = getQualifierSingleValue( statement, 'P854' );
    						if (url ~= nil) then
    							if (data[resourceId] == nil) then
    								data[resourceId] = {};
    							end
    							table.insert( data[resourceId], { itemId = url, languages = languages, rank = rank} );
    						end
    					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 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';
    	if ( frame ~= nil ) then
    	    local parentArgs = frame:getParent().args
    	    colorArg = parentArgs[templateColorName] or parentArgs["color"] or parentArgs[1] or '#CCF';
    	    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 );
    	if ( #socialNetworksElements > 0 ) then
    		navboxData['group' .. rowIndex] = group1Label
    		navboxData['list' .. rowIndex] = table.concat( socialNetworksElements , ' · ' )
    		rowIndex = rowIndex + 1
    	end
    
    	local textsElements = collectLinks( textsProperties );
    	if ( #textsElements > 0 ) then
    		navboxData['group' .. rowIndex] = group2Label
    		navboxData['list' .. rowIndex] = table.concat( textsElements , ' · ' )
    		rowIndex = rowIndex + 1
    	end
    
    	local contentHostingElements = collectLinks( contentHostingProperties );
    	if ( #contentHostingElements > 0 ) then
    		navboxData['group' .. rowIndex] = group3Label
    		navboxData['list' .. rowIndex] = table.concat( contentHostingElements , ' · ' )
    		rowIndex = rowIndex + 1
    	end
    
    	local themeProfilesElements = collectLinks( themeProfilesProperties );
    	if ( #themeProfilesElements > 0 ) then
    		navboxData['group' .. rowIndex] = group4Label
    		navboxData['list' .. rowIndex] = table.concat( themeProfilesElements , ' · ' )
    		rowIndex = rowIndex + 1
    	end
    
    	local dictionaryElements = collectLinks( dictionaryProperties );
    	if ( #dictionaryElements > 0 ) then
    		navboxData['group' .. rowIndex] = group5Label
    		navboxData['list' .. rowIndex] = table.concat( dictionaryElements , ' · ' )
    		rowIndex = rowIndex + 1
    	end
    
    	local authorityControlElements = collectLinks( authorityControl );
    	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; padding-left: 4px;">[[Պատկեր:Searchtool.svg|14px|' .. 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