<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="nb">
	<id>https://www.wikisida.no/index.php?action=history&amp;feed=atom&amp;title=Modul%3AReference_score</id>
	<title>Modul:Reference score - Sideversjonshistorikk</title>
	<link rel="self" type="application/atom+xml" href="https://www.wikisida.no/index.php?action=history&amp;feed=atom&amp;title=Modul%3AReference_score"/>
	<link rel="alternate" type="text/html" href="https://www.wikisida.no/index.php?title=Modul:Reference_score&amp;action=history"/>
	<updated>2026-04-05T15:05:20Z</updated>
	<subtitle>Versjonshistorikk for denne siden på wikien</subtitle>
	<generator>MediaWiki 1.45.1</generator>
	<entry>
		<id>https://www.wikisida.no/index.php?title=Modul:Reference_score&amp;diff=118&amp;oldid=prev</id>
		<title>nb&gt;Jon Harald Søby: tilbake til `pairs()`, sånn at eventuelle problemer i morgen blir åpenbare</title>
		<link rel="alternate" type="text/html" href="https://www.wikisida.no/index.php?title=Modul:Reference_score&amp;diff=118&amp;oldid=prev"/>
		<updated>2025-11-05T20:46:36Z</updated>

		<summary type="html">&lt;p&gt;tilbake til `pairs()`, sånn at eventuelle problemer &lt;a href=&quot;/index.php?title=Spesial:G%C3%A5_til_kommentar/c-Danny_Benjafield_(WMDE)-20251104125500-Infoboks_biografi_og_Wikidata&quot; title=&quot;Spesial:Gå til kommentar/c-Danny Benjafield (WMDE)-20251104125500-Infoboks biografi og Wikidata&quot;&gt;i morgen&lt;/a&gt; blir åpenbare&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Ny side&lt;/b&gt;&lt;/p&gt;&lt;div&gt;---Module for chosing the best reference.&lt;br /&gt;
&lt;br /&gt;
--@table for localization&lt;br /&gt;
local i18n = mw.loadData( &amp;#039;Module:Reference score/i18n&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
-- @table for configuration&lt;br /&gt;
local conf = mw.loadData( &amp;#039;Module:Reference score/conf&amp;#039; )&lt;br /&gt;
&lt;br /&gt;
local labeltekst = {&lt;br /&gt;
	[&amp;quot;P50&amp;quot;] = &amp;quot;&amp;quot;, -- forfatter&lt;br /&gt;
	[&amp;quot;P123&amp;quot;] = &amp;quot;&amp;quot;, -- utgiver&lt;br /&gt;
	[&amp;quot;P248&amp;quot;] = &amp;quot;&amp;quot;, -- nevnt i&lt;br /&gt;
	[&amp;quot;P577&amp;quot;] = &amp;quot;utgitt &amp;quot;, -- utgivelsesdato&lt;br /&gt;
	[&amp;quot;P813&amp;quot;] = &amp;quot;besøkt &amp;quot;, -- besøksdato&lt;br /&gt;
	[&amp;quot;P854&amp;quot;] = &amp;quot;&amp;quot;,  -- referanse-URL&lt;br /&gt;
	[&amp;quot;P2093&amp;quot;] = &amp;quot;&amp;quot;  -- forfatternavn&lt;br /&gt;
}&lt;br /&gt;
local wait = {&lt;br /&gt;
	[&amp;quot;P577&amp;quot;] = true, -- utgivelsesdato&lt;br /&gt;
	[&amp;quot;P813&amp;quot;] = true, -- besøksdato&lt;br /&gt;
	[&amp;quot;P1683&amp;quot;] = true, -- sitat&lt;br /&gt;
	[&amp;quot;Pxxxx&amp;quot;] = true   -- dummy&lt;br /&gt;
}&lt;br /&gt;
local checkLabel = {&lt;br /&gt;
	[&amp;quot;P1810&amp;quot;] = true,  -- oppført som&lt;br /&gt;
	[&amp;quot;Pxxxx&amp;quot;] = true   -- dummy&lt;br /&gt;
}&lt;br /&gt;
local unknownItem = 0&lt;br /&gt;
local done = {}&lt;br /&gt;
local reftxt = &amp;quot;&amp;quot;&lt;br /&gt;
local sep = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
local function norskDatoFraClaim(claim)&lt;br /&gt;
	if claim.snaktype ~= &amp;quot;value&amp;quot; then&lt;br /&gt;
		return &amp;quot;ingen verdi&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	local value = claim.datavalue.value&lt;br /&gt;
	local presisjon = value.precision&lt;br /&gt;
	local aar,_,maaned,dag,fkr,_ = splitTimestamp(value.time)&lt;br /&gt;
	local utstring = &amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
	if presisjon == 11 then&lt;br /&gt;
		utstring = string.format( &amp;#039;%s %s %s%s&amp;#039;, dag, maaned, tonumber(aar) or aar, fkr )&lt;br /&gt;
	elseif presisjon == 10 then&lt;br /&gt;
		utstring = string.format( &amp;#039;%s %s%s&amp;#039;, maaned, tonumber(aar) or aar, fkr )&lt;br /&gt;
	elseif presisjon == 9 then&lt;br /&gt;
		utstring = (tonumber(aar) or aar)..&amp;#039;&amp;#039;..fkr&lt;br /&gt;
		utstring = string.format( &amp;#039;%s%s&amp;#039;, tonumber(aar) or aar, fkr )&lt;br /&gt;
	elseif presisjon == 8 then&lt;br /&gt;
		utstring = string.format( &amp;#039;%s-årene%s&amp;#039;,  math.floor(((tonumber(aar) or 0))/10)*10, fkr ) &lt;br /&gt;
	elseif presisjon == 7 then&lt;br /&gt;
		utstring = string.format( &amp;#039;%s. århundre%s&amp;#039;, math.floor(((tonumber(aar) or 0)+99)/100), fkr )&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	return mw.text.nowiki( utstring ).. kalender(value.calendarmodel)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function addRefTxt(pidLabel,refValue)&lt;br /&gt;
		reftxt = reftxt .. sep .. &amp;quot;  &amp;quot; .. pidLabel .. refValue &lt;br /&gt;
		--  .. &amp;quot; ( &amp;quot; .. datatype .. &amp;quot; )&amp;quot;&lt;br /&gt;
		sep = &amp;quot;, &amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatUrl(url)&lt;br /&gt;
	local reftext = url&lt;br /&gt;
	local j1 = string.find(reftext,&amp;#039;//&amp;#039;,1,true)&lt;br /&gt;
	if j1 then reftext = string.sub(reftext,j1+2,string.len(reftext)) else reftext = &amp;#039;&amp;#039; end&lt;br /&gt;
	if reftext ~= &amp;#039;&amp;#039; then&lt;br /&gt;
		local i1 = string.find(reftext,&amp;#039;/&amp;#039;,1,true)&lt;br /&gt;
		if i1 then reftext = string.sub(reftext,1,i1-1) end&lt;br /&gt;
	else&lt;br /&gt;
		reftext = url&lt;br /&gt;
	end&lt;br /&gt;
	return &amp;quot;[&amp;quot; .. url .. &amp;quot; &amp;quot; .. reftext .. &amp;quot;]&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatItem(property)&lt;br /&gt;
	local item = nil&lt;br /&gt;
	if property[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
		item = property[1].datavalue.value or nil&lt;br /&gt;
	end&lt;br /&gt;
	if item then&lt;br /&gt;
		local value = item.id&lt;br /&gt;
		local label = mw.wikibase.label( value )&lt;br /&gt;
		local sitelink = mw.wikibase.sitelink( value )&lt;br /&gt;
		if sitelink or label then&lt;br /&gt;
			return mw.wikibase.formatValues(property)&lt;br /&gt;
		end&lt;br /&gt;
		unknownItem = unknownItem +1&lt;br /&gt;
		return &amp;#039;[[d:&amp;#039; .. value .. &amp;#039;|&amp;#039; .. value .. &amp;#039;]]&amp;#039;&lt;br /&gt;
	else&lt;br /&gt;
		return &amp;quot;ingen verdi&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtTitle(ref)&lt;br /&gt;
	if done[&amp;quot;P1476&amp;quot;] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	done[&amp;quot;P1476&amp;quot;] = true&lt;br /&gt;
	title = ref[&amp;quot;P1476&amp;quot;] or nil&lt;br /&gt;
	if title then&lt;br /&gt;
		local refValue = &amp;quot;«&amp;quot; .. mw.wikibase.formatValues(title) .. &amp;quot;»&amp;quot;&lt;br /&gt;
		if ref[&amp;quot;P854&amp;quot;] then&lt;br /&gt;
			refValue = &amp;quot;[&amp;quot; .. ref[&amp;quot;P854&amp;quot;][1].datavalue.value .. &amp;quot; &amp;quot; .. refValue .. &amp;quot;]&amp;quot;&lt;br /&gt;
			done[&amp;quot;P854&amp;quot;] = true&lt;br /&gt;
		end&lt;br /&gt;
		addRefTxt(&amp;quot;&amp;quot;,refValue)&lt;br /&gt;
	end&lt;br /&gt;
	return &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtQuote(pid,ref)&lt;br /&gt;
	if done[pid] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	done[pid] = true&lt;br /&gt;
	local quote = ref[pid] or nil&lt;br /&gt;
	if quote then&lt;br /&gt;
		local refValue = &amp;quot;«&amp;quot; .. mw.wikibase.formatValues(quote) .. &amp;quot;»&amp;quot;&lt;br /&gt;
		addRefTxt(&amp;quot;&amp;quot;,refValue)&lt;br /&gt;
	end&lt;br /&gt;
	return &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtTekst(pid,ref)&lt;br /&gt;
	if done[pid] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	done[pid] = true&lt;br /&gt;
	local tekst = ref[pid] or nil&lt;br /&gt;
	if tekst then&lt;br /&gt;
		local refValue = mw.wikibase.formatValues(tekst)&lt;br /&gt;
		addRefTxt(&amp;quot;&amp;quot;,refValue)&lt;br /&gt;
	end&lt;br /&gt;
	return &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Ignore cases where the value is just the label.&lt;br /&gt;
function fmtLlabelCheck(pid,ref)&lt;br /&gt;
	if done[pid] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	done[pid] = true&lt;br /&gt;
	local refItem = ref[pid] or nil&lt;br /&gt;
	if refItem then&lt;br /&gt;
		local refValue = mw.wikibase.formatValues(refItem)&lt;br /&gt;
		local pidLabel = labeltekst[pid] or mw.wikibase.getLabel(pid) .. &amp;quot; &amp;quot;&lt;br /&gt;
		local label = mw.wikibase.label()&lt;br /&gt;
		local refString = ref[pid][1].datavalue.value&lt;br /&gt;
		if not (label == refString ) then     &lt;br /&gt;
			addRefTxt(pidLabel,refValue)&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return &lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtItem(pid,ref)&lt;br /&gt;
	if done[pid] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	local property = ref[pid] or nil&lt;br /&gt;
	if property then&lt;br /&gt;
		local pidLabel = labeltekst[pid] or mw.wikibase.getLabel(pid) .. &amp;quot; &amp;quot;&lt;br /&gt;
		local refValue = formatItem(property)&lt;br /&gt;
		addRefTxt(pidLabel,refValue)&lt;br /&gt;
	end&lt;br /&gt;
	done[pid] = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtDato(pid,ref)&lt;br /&gt;
	if done[pid] then &lt;br /&gt;
		return &lt;br /&gt;
	end&lt;br /&gt;
	local property = ref[pid] or nil&lt;br /&gt;
	if property then&lt;br /&gt;
		local pidLabel = labeltekst[pid] or mw.wikibase.getLabel(pid) .. &amp;quot; &amp;quot;&lt;br /&gt;
		local refValue = norskDatoFraClaim(property[1])&lt;br /&gt;
		addRefTxt(pidLabel,refValue)&lt;br /&gt;
	end&lt;br /&gt;
	done[pid] = true&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtMisc(ref)&lt;br /&gt;
	for pid, property in pairs(ref) do&lt;br /&gt;
		if checkLabel[pid] then&lt;br /&gt;
			fmtLlabelCheck(pid,ref)&lt;br /&gt;
		elseif not done[pid] and not wait[pid] then&lt;br /&gt;
			local datatype = property[1].datatype or &amp;quot;xxx&amp;quot;&lt;br /&gt;
			local pidLabel = labeltekst[pid] or mw.wikibase.getLabel(pid) .. &amp;quot; &amp;quot;&lt;br /&gt;
			local refValue = mw.wikibase.formatValues(property)&lt;br /&gt;
			if property[1].snaktype ~= &amp;quot;value&amp;quot; then&lt;br /&gt;
				refValue = datatype .. &amp;quot;: Ingen verdi&amp;quot;&lt;br /&gt;
			else&lt;br /&gt;
				if datatype == &amp;#039;url&amp;#039; then&lt;br /&gt;
				 	refValue = formatUrl(property[1].datavalue.value)&lt;br /&gt;
				elseif datatype == &amp;#039;time&amp;#039; then&lt;br /&gt;
					refValue = norskDatoFraClaim(property[1])&lt;br /&gt;
				elseif datatype == &amp;#039;wikibase-item&amp;#039; then&lt;br /&gt;
					refValue = formatItem(property)&lt;br /&gt;
				elseif datatype == &amp;#039;commonsMedia&amp;#039; then&lt;br /&gt;
					refValue = string.format([[&lt;br /&gt;
						&amp;lt;div class=&amp;quot;mw-collapsible mw-collapsed&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;div&amp;gt;%s&amp;lt;/div&amp;gt;&lt;br /&gt;
							&amp;lt;div class=&amp;quot;mw-collapsible-content&amp;quot;&amp;gt;%s&amp;lt;/div&amp;gt;&lt;br /&gt;
						&amp;lt;/div&amp;gt;&lt;br /&gt;
						]],property[1].datavalue.value ,refValue)&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
		    addRefTxt(pidLabel,refValue)&lt;br /&gt;
			done[pid] = true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtSingle(ref)&lt;br /&gt;
	local num = 0&lt;br /&gt;
	for pid, property in pairs(ref) do&lt;br /&gt;
		num = num+1&lt;br /&gt;
	end&lt;br /&gt;
&lt;br /&gt;
	if num~=1 then&lt;br /&gt;
		 return false&lt;br /&gt;
	end&lt;br /&gt;
	if not ref[&amp;quot;P248&amp;quot;] then&lt;br /&gt;
		return false&lt;br /&gt;
	end&lt;br /&gt;
	local P248 = ref[&amp;quot;P248&amp;quot;]&lt;br /&gt;
	local item = nil&lt;br /&gt;
	if P248[1].snaktype == &amp;quot;value&amp;quot; then&lt;br /&gt;
		item = P248[1].datavalue.value or nil&lt;br /&gt;
	end&lt;br /&gt;
	if item then&lt;br /&gt;
		local value = item.id&lt;br /&gt;
		local label = mw.wikibase.label( value )&lt;br /&gt;
		local description = mw.wikibase.description( value )&lt;br /&gt;
		local sitelink = mw.wikibase.sitelink( value )&lt;br /&gt;
		if label and not sitelink then&lt;br /&gt;
			local txt =&amp;quot;«&amp;quot; .. label .. &amp;quot;», &amp;quot; .. description&lt;br /&gt;
			addRefTxt(&amp;quot;&amp;quot;,txt)&lt;br /&gt;
			return true&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return false&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmtnew(ref)&lt;br /&gt;
	reftxt = &amp;quot;&amp;quot;&lt;br /&gt;
	sep = &amp;quot;&amp;quot;&lt;br /&gt;
	local args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
	if args and args[&amp;quot;wikidatatesting&amp;quot;] == &amp;quot;ref&amp;quot; then&lt;br /&gt;
		if fmtSingle(ref) then&lt;br /&gt;
			return reftxt&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	local refValue = nil&lt;br /&gt;
	fmtItem(&amp;quot;P123&amp;quot;,ref) -- utgiver&lt;br /&gt;
	fmtItem(&amp;quot;P248&amp;quot;,ref) -- nevnt i&lt;br /&gt;
	fmtItem(&amp;quot;P50&amp;quot;,ref)  -- fortatter&lt;br /&gt;
	fmtTekst(&amp;quot;P2093&amp;quot;,ref)  -- fortatternavn&lt;br /&gt;
	fmtTitle(ref)&lt;br /&gt;
    fmtMisc(ref)&lt;br /&gt;
	fmtDato(&amp;quot;P577&amp;quot;,ref)  -- utgivelsesdato&lt;br /&gt;
	fmtDato(&amp;quot;P813&amp;quot;,ref)  -- besøksdato&lt;br /&gt;
	fmtQuote(&amp;quot;P1683&amp;quot;,ref) -- sitat&lt;br /&gt;
	return reftxt .. &amp;quot;&amp;lt;sup&amp;gt;&amp;lt;small&amp;gt;[Hentet fra Wikidata]&amp;lt;/small&amp;gt;&amp;lt;/sup&amp;gt;&amp;quot;&lt;br /&gt;
	-- return mw.wikibase.formatValues( ref )&lt;br /&gt;
	-- &amp;quot;&amp;lt;pre&amp;gt;&amp;quot; .. mw.text.jsonEncode(ref, mw.text.JSON_PRETTY) .. &amp;quot;&amp;lt;/pre&amp;gt;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function fmt(ref)&lt;br /&gt;
	done = {}&lt;br /&gt;
	reftxt = &amp;quot;&amp;quot;&lt;br /&gt;
	sep = &amp;quot;&amp;quot;&lt;br /&gt;
	-- local args = mw.getCurrentFrame():getParent().args&lt;br /&gt;
--	if args and args[&amp;quot;wikidatatesting&amp;quot;] == &amp;quot;ref&amp;quot; then&lt;br /&gt;
		return fmtnew(ref)&lt;br /&gt;
--	end&lt;br /&gt;
--	return mw.wikibase.formatValues( ref )&lt;br /&gt;
end &lt;br /&gt;
&lt;br /&gt;
-- @table for export&lt;br /&gt;
local h = {}&lt;br /&gt;
&lt;br /&gt;
--- Make a list of categories.&lt;br /&gt;
-- Note this probably should be moved out of this module.&lt;br /&gt;
-- @tparam number num of references&lt;br /&gt;
-- @treturn table of strings&lt;br /&gt;
function h.makeCategories( num )&lt;br /&gt;
	local t = {}&lt;br /&gt;
	if num and num &amp;gt; 0 then&lt;br /&gt;
		table.insert( t, mw.message.newRawMessage( i18n[&amp;#039;category-pages-using-references-from-statement&amp;#039;] ):plain() )&lt;br /&gt;
		if num == 1 then&lt;br /&gt;
			table.insert( t, mw.message.newRawMessage( i18n[&amp;#039;category-pages-using-single-reference-from-statement&amp;#039;] ):plain() )&lt;br /&gt;
		elseif num &amp;gt; 1 then&lt;br /&gt;
			table.insert( t, mw.message.newRawMessage( i18n[string.format(&amp;#039;category-pages-using-%d-references-from-statement&amp;#039;, num )] ):plain() )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate a language score for the claims.&lt;br /&gt;
-- @tparam table claims to process&lt;br /&gt;
-- @treturn number best score&lt;br /&gt;
function h.scoreLanguage( claims )&lt;br /&gt;
	local keep = conf.lowScore&lt;br /&gt;
	for _,v in ipairs( claims ) do&lt;br /&gt;
		if v.snaktype == &amp;#039;value&amp;#039;&lt;br /&gt;
				and v.datatype == &amp;#039;monolingualtext&amp;#039;&lt;br /&gt;
				and v.datavalue.type == &amp;#039;monolingualtext&amp;#039; then&lt;br /&gt;
			local score = conf.languageScore[v.datavalue.value.language]&lt;br /&gt;
			if score then&lt;br /&gt;
				-- note that higher number means lower prority&lt;br /&gt;
				keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return keep&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate a root domain score for the claims.&lt;br /&gt;
-- @tparam table claims to process&lt;br /&gt;
-- @treturn number best score&lt;br /&gt;
function h.scoreDomain( claims )&lt;br /&gt;
	local keep = conf.lowScore&lt;br /&gt;
	for _,v in ipairs( claims ) do&lt;br /&gt;
		if v.snaktype == &amp;#039;value&amp;#039;&lt;br /&gt;
				and v.datatype == &amp;#039;url&amp;#039;&lt;br /&gt;
				and v.datavalue.type == &amp;#039;string&amp;#039; then&lt;br /&gt;
			local uri = mw.uri.new( v.datavalue.value )&lt;br /&gt;
			local root = string.match( uri.host, &amp;#039;%.([^.]+)$&amp;#039; )&lt;br /&gt;
			local score = conf.domainScore[root]&lt;br /&gt;
			if score then&lt;br /&gt;
				-- note that higher number means lower prority&lt;br /&gt;
				keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return keep&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate an entity score for the claims.&lt;br /&gt;
-- @tparam table claims to process&lt;br /&gt;
-- @treturn number best score&lt;br /&gt;
function h.scoreEntity( claims )&lt;br /&gt;
	local keep = conf.lowScore&lt;br /&gt;
	for _,v in ipairs(claims) do&lt;br /&gt;
		if v.snaktype == &amp;#039;value&amp;#039;&lt;br /&gt;
				and v.datatype == &amp;#039;wikibase-item&amp;#039;&lt;br /&gt;
				and v.datavalue.type == &amp;#039;wikibase-entityid&amp;#039; then&lt;br /&gt;
			local score = conf.entityScore[v.datavalue.value.id]&lt;br /&gt;
			if score then&lt;br /&gt;
				-- note that higher number means lower prority&lt;br /&gt;
				keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return keep&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate a property score for the claims.&lt;br /&gt;
-- @tparam table claims to process&lt;br /&gt;
-- @treturn number best score&lt;br /&gt;
function h.scoreProperty( claims )&lt;br /&gt;
	local keep = conf.lowScore&lt;br /&gt;
	for _,v in ipairs(claims) do&lt;br /&gt;
		-- strictly speaking this could be dropped as all should be equal&lt;br /&gt;
		local score = conf.propertyScore[v.property]&lt;br /&gt;
		if score then&lt;br /&gt;
			-- note that higher number means lower prority&lt;br /&gt;
			keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return keep&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Generate scores for the references.&lt;br /&gt;
-- Note that the generated list is sparse, and is using false as marker.&lt;br /&gt;
-- @tparam table list to process&lt;br /&gt;
-- @treturn table of references&lt;br /&gt;
function h.score( list )&lt;br /&gt;
	-- make sure we have a continuous target list&lt;br /&gt;
	local t = {}&lt;br /&gt;
	for i=1,conf.lowScore do&lt;br /&gt;
		t[i] = false&lt;br /&gt;
	end&lt;br /&gt;
	-- loop over the source list&lt;br /&gt;
	for _,v in ipairs( list ) do&lt;br /&gt;
		-- is the reference excluded?&lt;br /&gt;
		local exclude = false&lt;br /&gt;
		for _,w in ipairs( conf.exclude ) do&lt;br /&gt;
			if v.snaks and v.snaks[w] then&lt;br /&gt;
				exclude = true&lt;br /&gt;
				break&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
		-- only process included (ie not excluded) references&lt;br /&gt;
		if not exclude then&lt;br /&gt;
			local keep = conf.lowScore&lt;br /&gt;
			-- try language of &amp;quot;title&amp;quot;&lt;br /&gt;
			if v.snaks.P1476 then&lt;br /&gt;
				local score = h.scoreLanguage(v.snaks.P1476)&lt;br /&gt;
				if score then&lt;br /&gt;
					-- note that higher number means lower prority&lt;br /&gt;
					keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			-- try root domain of &amp;quot;reference url&amp;quot;&lt;br /&gt;
			if v.snaks.P854 then&lt;br /&gt;
				local score = h.scoreDomain(v.snaks.P854)&lt;br /&gt;
				if score then&lt;br /&gt;
					-- note that higher number means lower prority&lt;br /&gt;
					keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			-- try reference to entity&lt;br /&gt;
			for _,w in pairs(v.snaks) do&lt;br /&gt;
				local score = h.scoreEntity( w )&lt;br /&gt;
				if score then&lt;br /&gt;
					-- note that higher number means lower prority&lt;br /&gt;
					keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
				end&lt;br /&gt;
			end&lt;br /&gt;
			-- some properties that usually imply somewhat quality&lt;br /&gt;
			for _,w in pairs(v.snaks) do&lt;br /&gt;
				local score = h.scoreProperty( w )&lt;br /&gt;
				-- note that higher number means lower prority&lt;br /&gt;
				keep = (keep &amp;lt; score) and keep or score&lt;br /&gt;
			end&lt;br /&gt;
			table.insert( t, keep, v )&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Compact the sparse list.&lt;br /&gt;
-- Note that the input list is sparse, and using false as marker.&lt;br /&gt;
-- @tparam table list of any&lt;br /&gt;
-- @tparam[limit=conf.maxRefs] nil|number limit for truncation of list&lt;br /&gt;
-- @treturn table&lt;br /&gt;
function h.compact( list, limit )&lt;br /&gt;
	limit = limit or conf.maxRefs&lt;br /&gt;
	local t = {}&lt;br /&gt;
	local counter = 0&lt;br /&gt;
	for _,v in ipairs( list ) do&lt;br /&gt;
		if v then&lt;br /&gt;
			counter = counter + 1&lt;br /&gt;
			if limit and counter &amp;lt;= limit then&lt;br /&gt;
				table.insert( t, v )&lt;br /&gt;
			elseif not limit then&lt;br /&gt;
				table.insert( t, v )&lt;br /&gt;
			end&lt;br /&gt;
		end&lt;br /&gt;
	end&lt;br /&gt;
	return t&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
--- Render references.&lt;br /&gt;
-- @tparam table frame&lt;br /&gt;
-- @tparam table list of references&lt;br /&gt;
-- @treturn string&lt;br /&gt;
function h.render( frame, list )&lt;br /&gt;
	local scored = h.score( list or {} )&lt;br /&gt;
	local compacted = h.compact( scored )&lt;br /&gt;
	local wiki = &amp;#039;&amp;#039;&lt;br /&gt;
	local hits = 0&lt;br /&gt;
	for i,v in ipairs( compacted ) do&lt;br /&gt;
		hits = hits + 1&lt;br /&gt;
		local keys = {}&lt;br /&gt;
		for k,_ in pairs( v.snaks ) do&lt;br /&gt;
			table.insert( keys, k )&lt;br /&gt;
		end&lt;br /&gt;
		local snaks = {}&lt;br /&gt;
		for _,k in pairs( mw.wikibase.orderProperties( keys ) ) do&lt;br /&gt;
			-- lua keeps injection order&lt;br /&gt;
			snaks[k] = v.snaks[k]&lt;br /&gt;
		end&lt;br /&gt;
		-- hash will merge similar entries&lt;br /&gt;
		-- local content = mw.wikibase.formatValues( snaks )&lt;br /&gt;
		local content = fmt(snaks)&lt;br /&gt;
		local attrs = { name = string.format( &amp;#039;hash-%s&amp;#039;, v.hash ) }&lt;br /&gt;
		wiki = wiki .. frame:extensionTag( &amp;#039;ref&amp;#039;, content, attrs )&lt;br /&gt;
	end&lt;br /&gt;
	for _,v in ipairs( h.makeCategories( hits ) ) do&lt;br /&gt;
		wiki = wiki .. mw.ustring.format(&amp;#039;[[Category:%s]]&amp;#039;, v )&lt;br /&gt;
	end&lt;br /&gt;
	if unknownItem &amp;gt;0 then&lt;br /&gt;
		wiki = wiki .. &amp;quot;[[Kategori:Artikler hvor referanser mangler oversettelse]]&amp;quot;&lt;br /&gt;
	end&lt;br /&gt;
	return wiki&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return h&lt;/div&gt;</summary>
		<author><name>nb&gt;Jon Harald Søby</name></author>
	</entry>
</feed>