Modul:Sandkasse/haros/misc

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon


local math_mod = require( "Module:Math" )
local WikidataReferanse = require( 'Module:WikidataReferanse' )
local refscore = require 'Module:Reference score'

local p = {}

function dump(item)
	return "<pre>" .. mw.text.jsonEncode(item, mw.text.JSON_PRETTY) .. "</pre>"
end

function p.scholia(frame)
	local args = mw.getCurrentFrame():getParent().args
	local id = args['id'] or args[1] or nil
	if id == "" then
		id = nil
	end
	local entity = mw.wikibase.getEntity(id) or nil
	if not id then
		if not entity then
			return ""
		end
		id = entity.id
	end
	local label = mw.wikibase.label(id) or ""
	return "[https://tools.wmflabs.org/scholia/author/" .. id .. " " .. label .. " i scholia]"
end

function wdValue(entity,prop)
	local value,unit = nil,nil
	if entity.claims and entity.claims[prop] then
		local claim = selectSingleClaim(entity.claims[prop])
		local val = claim.mainsnak.datavalue.value or nil
		if val then
	   		local un = val.unit or nil
			if un then
	   			unit = mw.ustring.sub(un, mw.ustring.find(un, "Q"), -1) or nil
			end
			value = tonumber(val.amount)
		end
	end
	return value,unit
end

function selectSingleClaim(claims)
	if not claims then
		return nil
	end
	local selectedClaim = nil
	for idx,claim in pairs(claims) do
		if claim.rank == 'preferred' then
			return claim
		end
		if claim.rank == 'normal' then
			if not selectedClaim then
				selectedClaim = claim
			end
		end
	end
	return selectedClaim
end



function formatUrl(url)
	local reftext = url
	local j1 = string.find(reftext,'//',1,true)
	if j1 then reftext = string.sub(reftext,j1+2,string.len(reftext)) else reftext = '' end
	if reftext ~= '' then
		local i1 = string.find(reftext,'/',1,true)
		if i1 then reftext = string.sub(reftext,1,i1-1) end
	else
		reftext = url
	end
	return "[" .. url .. " " .. reftext .. "]"
end

function p.formatUrl(urls)
	local value = ""
	sep = ""
	local urlList = mw.text.split( urls, ',', true )
	for i,url in ipairs(urlList) do
		local val = formatUrl(url)
		if val and val ~= "" then
			value = value .. sep .. val
			sep = "<br/>"
		end
	end
end

function p.formatLenke(sitelink,label)
	

	if label and sitelink then
		return '[[' .. sitelink .. '|' .. label .. ']]'
	end
	if label and not sitelink then
		return label
	end
	if sitelink and not label then
		return '[[' .. sitelink .. ']]'
	end

	return ''
end

function formatValue(value, first, link)
	assert( value )
	--assert( first )
	
	-- setter link til true som default hvis ingen verdi er angitt
	if type( link ) ~= 'boolean' then
		link = true
	end

	if string.sub(value, 1, 1) ~= "Q" then
		-- Verdien er enten "ukjent" eller "ingen"
		return string.format("''%s''", value)
	end

	local label = mw.wikibase.label( value )
	local sitelink = mw.wikibase.sitelink( value )
	if first and label then
		local lang = mw.language.getContentLanguage()
		label = lang:ucfirst( label )
	end

	if not link then
		-- Vi ønsker kun tekst, ikke wikilenke
		if label then
			return label
		end
		return ''
	end

	if label and sitelink then
		return '[[' .. sitelink .. '|' .. label .. ']]'
	end
	if label and not sitelink then
		return label
	end
	if sitelink and not label then
		return '[[' .. sitelink .. ']]'
	end

	return ''
end

function p.stattest()
   local menn = mw.site.stats.pagesInCategory("menn", "pages")
   local kvinner = mw.site.stats.pagesInCategory("kvinner", "pages")
   local alle = menn+kvinner
   local prosMenn = menn*100/alle
   local prosKvinner = kvinner*100/alle
   return "Antal biografier av<br/>" ..
   "- Kvinner   " .. mw.language.getContentLanguage():formatNum(kvinner) .. " (" .. math_mod._precision_format(prosKvinner,2) .. " %)<br/>" .. 
   "- Menn      " .. mw.language.getContentLanguage():formatNum(menn) .. " (" .. math_mod._precision_format(prosMenn,2) .. " %)"
end

function fmt(ref)
	local reftxt = ""
	local sep = ""
	for pid, property in pairs(ref) do
		local pidLabel = mw.wikibase.getLabel(pid)
		local refValue = mw.wikibase.formatValues(property)
		reftxt = reftxt .. sep .. pidLabel .. ":" .. refValue
		sep = " , "
	end
	return reftxt
end

function p.trippel(frame)
	assert( frame )
	local args = mw.getCurrentFrame():getParent().args
	local v1 = args["v1"] or frame.args["v1"] or ""
	local v2 = args["v2"] or frame.args["v2"] or ""
	local v3 = args["v3"] or frame.args["v3"] or ""
	local wd1 = args["wd1"] or frame.args["wd1"] or ""
	local wd2 = args["wd2"] or frame.args["wd2"] or ""
	local wd3 = args["wd3"] or frame.args["wd3"] or ""
	local tittel = args["tittel"] or frame.args["tittel"] or ""
	if v1 and v1 == "uten" then
		return ""
	end
	if (not v1 or v1 == "" ) and (not wd1 or wd1 == "") then
		return ""
	end
	local value = ""
	if v1 and v1 == "" then
		value = wd1
		if wd2 and wd2 ~= "" then
			value = value .. " (" .. wd2 .. ") "
		end
		if wd3 and wd3 ~= "" then
			value = value .. " parti: " .. wd3
		end
	end
	if v1 and v1 ~= "" then
		value = v1
		if v2 and v2 ~= "" then
			value = value .. " (" .. v2 .. ") "
		end
		if v3 and v3 ~= "" then
			value = value .. " parti: " .. v3
		end
	end
	return string.format([[
		<tr class="rad" valign="top">
			<th colspan="2" class="nowrap">%s</th>
			<td colspan="2">%s</td>
		</tr>
		]], tittel, value)
end

function getProp(qid,pid)
	local entity = mw.wikibase.getEntity(qid)

	if not entity then

		return {}

	end
	return entity:getBestStatements(pid)
	
end
function formatDobbeltrad(value)
	return string.format([[
		<tr class="rad" valign="top">
			<td colspan="4">%s</td>
		</tr>
		]], value)
end
	
function formatRad(tittel,value)
	return string.format([[
		<tr class="rad" valign="top">
			<th colspan="2" class="nowrap">%s</th>
			<td colspan="2">%s</td>
		</tr>
		]], tittel, value)
end

function p.formatSpraak(snak)
	assert( snak )
	
	local spraakid = snak.datavalue.value.id or nil
	if not spraakid then
		return nil
	end
	local prop = getProp(spraakid,"P218") or getProp(spraakid,"P220") or nil
	if prop then
		if not prop[1] then
			return ""
		end
		if not prop[1].mainsnak then
			return ""
		end
		local kortnavn = prop[1].mainsnak.datavalue.value or nil
		local sitelink = mw.wikibase.sitelink( spraakid )
		return p.formatLenke(sitelink,kortnavn)
	end
	local lab = mw.wikibase.label(spraakid)

	return lab
end

function formatQualifier(qual,pval)
	if qual and pval then
		local qv = qual[pval]
		local snak = qv[1] or nil
		
		if snak and snak.snaktype == "value" then
			if pval == "P407" then
				return p.formatSpraak(snak)
			end
			return mw.wikibase.formatValues(qv)
		end
	end
end

function p.enProp(prop,visRef)
	local value = nil
--	for i,prop in ipairs(props) do
		if not prop then
			return value
		end
		if not prop.mainsnak then
			return value
		end
		local sn = prop.mainsnak
		local qu = prop.qualifiers
		local rf = prop.references
		local qual = nil
		local qualP = ""
--		property[1].datavalue.value
		if sn.snaktype == "value" then
			if sn.datatype == 'url' then
				
			 	value = formatUrl(sn.datavalue.value)
			 	local qt = formatQualifier(qu,"P407")
			 	if qt and qt ~= "" then
			 		value = value .. " (" .. qt .. ")"
			 	end
			end
		end
		if true then
			--return dump(prop.mainsnak)
		end

		if value and value ~= "" then
			if visRef then
				local refs = prop.references
				local ref = nil
				if refs then
					ref = refs[1] or nil
				end
				if ref then
					value = value ..  refscore.render(mw.getCurrentFrame(),refs)
				end
			end
--		end
	end
	return value
end

function kollaps(text, totalt)
    text = string.format(
    [[
		<div class="mw-collapsible mw-collapsed">
			<div class="sentrert">totalt %s</div>
			<div class="mw-collapsible-content">%s</div>
		</div>
	]], totalt, text)
	return text
end

function p._formatEgenskaper(qid,pid,visRef)
	if not pid then
		return ""
	end
	local props = getProp(qid,pid)
	if not props then
		return ""
	end
	local value1 = ""
	local value2 = ""
	local sep = ""
	if true then
	--	return dump(props)
	end
	local count = 0
	for i,prop in ipairs(props) do
		local v = p.enProp(prop,visRef)
		if v then
		--	if count<1 then
				value1 = value1 .. sep .. v
		--	end
		--	if count>0 then
		--		value2 = value2 .. sep .. v
		--	end
			sep = "<br/>"
			count = count + 1
		end
	end
	if count>1 then
--		value1 = kollaps(value1,count)
	end
	return value1 .. value2
end

function p.singleValue(tittel,arg,qid,pid)
	if arg and arg == "uten" then
		return ""
	end
	local value = ""
	if arg and arg ~= "" then
		return formatRad(tittel,arg)
	end
	if not pid then
		return ""
	end
	local prop = getProp(qid,pid)
	if not prop then
		return ""
	end
	if not prop[1] then
		return ""
	end
	if not prop[1].mainsnak then
		return ""
	end
	value = mw.wikibase.formatValue(prop[1].mainsnak)
	if value and value ~= "" then
		local quals = prop[1].qualifiers
		local qual = nil
		if quals then
			qual = quals[1] or nil
		end
		
		local refs = prop[1].references
		local ref = nil
		if refs then
			ref = refs[1] or nil
		end
		if ref then
			value = value ..  refscore.render(mw.getCurrentFrame(),refs)
			--local attrs = { name = string.format( 'hash-%s', ref.hash ) }
			--tekst = tekst .. mw.getCurrentFrame():extensionTag( 'ref', reftxt, attrs ) 

		end
		return formatRad(tittel,value)
	end
	return ""
end

-- kopi fra Wikidataliste
function getFrameValue(frame, params)
	local args = frame.args
	if args[1] == nil then
		local pFrame = frame:getParent();
		args = pFrame.args;
		for k,v in pairs( frame.args ) do
			args[k] = v;
		end
	end
	
	-- params kan være én enkelt verdi eller flere verdier adskilt med komma.
	-- F.eks. vil "religion,livssyn" sjekke både "religion" og "livssyn".
	for param in mw.text.gsplit( params, ',', true ) do
		 if args[param] then
			return mw.text.trim( args[param] )
		 end
	end
	return ""
end

function p.beste(frame)
	assert( frame )
	local qid = frame.args["qid"] or nil
	local pid = frame.args["pid"] or frame.args["wdq"] 
	local param = frame.args["param"] or nil
	local tittel = frame.args["tekst"] or nil
	local unit = frame.args["unit"] or nil
	local verdiFraFrame = getFrameValue(frame, param)
	if verdiFraFrame and verdiFraFrame == "uten" then
		-- Hvis malargumentet er satt til "uten" betyr det at det ikke er ønskelig
		-- at feltet vises, selv om det finnes data på Wikidata.
		return "[[Kategori:Artikler hvor en parameter spesifisert som uten]]"
	end
	local value = ""
	if verdiFraFrame and verdiFraFrame ~= "" then
		return formatValue(tittel,verdiFraFrame)
	end
	return p.singleValue(tittel,verdiFraFrame,qid,pid)
end

local museum = {
	{
		["param"] = "navn",
		["pid"] = "P1705",
		["metode"] = "single",
		["tittel"] = "Navn"
	},
	{
		["param"] = "bilde",
		["pid"] = "P18",
		["metode"] = "bilde",
		["tittel"] = ""
	},
	{
		["param"] = "vinterbilde",
		["pid"] = "P5252",
		["metode"] = "bilde",
		["tittel"] = ""
	},
	{
		["param"] = "bilde",
		["pid"] = "P5775",
		["metode"] = "bilde",
		["tittel"] = ""
	},
	{
		["param"] = "grunnlagt",
		["pid"] = "P571",
		["metode"] = "single",
		["tittel"] = "Grunnlagt"
	},
	{
		["param"] = "arkitekt",
		["pid"] = "P84",
		["metode"] = "single",
		["tittel"] = "Arkitekt"
	},
	{
		["param"] = "adresse",
		["pid"] = "P6375",
		["metode"] = "single",
		["tittel"] = "Adresse"
	},
	{
		["param"] = "land",
		["pid"] = "P17",
		["metode"] = "single",
		["tittel"] = "Land"
	},
	{
		["param"] = "ligger i",
		["pid"] = "P131",
		["metode"] = "single",
		["tittel"] = "Ligger i"
	},
	{
		["param"] = "årlig besøkstall",
		["pid"] = "P1174",
		["metode"] = "single",
		["tittel"] = "Årlig besøkstall"
	}
}

local uni = {
	{
		["param"] = "navn",
		["pid"] = "P1705",
		["metode"] = "single",
		["tittel"] = "Navn"
	},
	 {
		["param"] = "logo",
		["pid"] = "P154",
		["metode"] = "bilde",
		["tittel"] = ""
	},
	{
		["param"] = "bilde",
		["pid"] = "P18",
		["metode"] = "bilde",
		["tittel"] = ""
	},
	{
		["param"] = "latinsk navn",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "latinsk navn"
	},
	{
		["param"] = "Kallenavn",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "Kallenavn og forkortelser"
	},
	{
		["param"] = "motto",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "Motto"
	},
	{
		["param"] = "visjon",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "Visjon"
	},
	{
		["param"] = "grunnlagt",
		["pid"] = "P571",
		["metode"] = "single",
		["tittel"] = "Grunnlagt"
	},
	{
		["param"] = "type",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "Type"
	},
	{
		["param"] = "rektor",
		["pid"] = "P1075",
		["metode"] = "single",
		["tittel"] = "Rektor"
	},
	{
		["param"] = "prorektor",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "Prorektor"
	},
	{
		["param"] = "Viserektor(er)",
		["pid"] = nil,
		["metode"] = "single",
		["tittel"] = "viserektor"
	},
	{
		["param"] = "Direktør",
		["pid"] = P1037,
		["metode"] = "single",
		["tittel"] = "direktør"
	},
	{
		["param"] = "beliggenhet",
		["pid"] = "P6375",
		["metode"] = "single",
		["tittel"] = "Beliggenhet"
	},
	{
		["param"] = "adresse",
		["pid"] = "P6375",
		["metode"] = "single",
		["tittel"] = "Adresse"
	},
	{
		["param"] = "land",
		["pid"] = "P17",
		["metode"] = "single",
		["tittel"] = "Land"
	},
	{
		["param"] = "ligger i",
		["pid"] = "P131",
		["metode"] = "single",
		["tittel"] = "Ligger i"
	},
	{
		["param"] = "studenter",
		["pid"] = "P2196",
		["metode"] = "single",
		["tittel"] = "Studenter"
	},
	{
	--	["param"] = {"ansatte","data fra"},
		["param"] = "ansatte",
		["pid"] = "P2196",
		["metode"] = "single",
		["tittel"] = "Studenter"
	},
	{
		["param"] = "medlemskap",
		["pid"] = "nil",
		["metode"] = "single",
		["tittel"] = "Medlemskap"
	},
	{
		["param"] = "organisasjonsnummer",
		["pid"] = "nil",
		["metode"] = "single",
		["tittel"] = "Organisasjonsnummer"
	},
	{
		["param"] = "nettsted",
		["pid"] = "nil",
		["metode"] = "single",
		["tittel"] = "Nettsted"
	}
}

function bilde(snak)
	assert ( snak )
	
	local item = nil

	if snak.snaktype == "value" and snak.datatype == "commonsMedia" then

		value = snak.datavalue.value or nil
	end
	return value
end

-- returnerer en rad for overskrift og en avsluttning hvis det er nødvendig
function formatOverskrift (overskrift,kollaps)
	local oversk = ""
	local avslutt = ""
	if overskrift and overskrift ~= "" then
		oversk = string.format([[
		<tr class="overskrift" valign="top"><td colspan="4">%s</td></tr>
		]], overskrift)
	end
	if kollaps and kollaps ~= "" then
	end
	return oversk,avslutt
end

function formatBilderad(value)
	return string.format([[
		<tr class="bilde" valign="top"><td colspan="4" class="sentrert">%s</td></tr>
		]], value)
end

function p.bilde(qid,pid)
	local prop = getProp(qid,pid)
	if not prop or not prop[1] or not prop[1].mainsnak then
		return ""
	end
	return bilde(prop[1].mainsnak)
end

function bildetekst(qualifier,blankbildetekst)
	local P2096 = nil
	if qualifier then
		P2096 = qualifier['P2096']
	end
	if P2096 then
		for k, l in pairs(P2096) do
			if l.datavalue.value and l.datavalue.value.text and l.datavalue.value.language == 'nb' then
				return l.datavalue.value.text
			end
		end
	end
	if blankbildetekst then
		return "&nbsp;"
	end
	return ""
end
function fmtBilde(bilde,bildetekst,byline,size,blankbildetekst)
	local tekst = ""
	local pix = size or ""
	if bilde then
		tekst = "[[fil:" .. -- mw.wikibase.formatValue(snak)
		   bilde .. "|center|" .. pix .. "|frameless]]"
	end
	if bildetekst or byline then
		tekst = tekst .. '<div class="thumbcaption">'
	end
	if bildetekst then
		tekst = tekst .. bildetekst
	end
	if byline then
		tekst = tekst .. '<div class="byline">' .. byline .. "</div>"
	end
	if bildetekst or byline then
		tekst = tekst .. '</div>'
	end	
	tekst = formatBilderad(tekst)
	return tekst
end

function p.bildeFraWikidata(qid,pid, pix,blankbildetekst)
	local prop = getProp(qid,pid)
	if not prop then
		return ""
	end
	if not prop[1] then
		return ""
	end
	if not prop[1].mainsnak then
		return ""
	end
	local bildet =  bilde(prop[1].mainsnak)
	local bildeteksten = bildetekst(prop[1].qualifiers,blankbildetekst)
	return fmtBilde(bildet,bildeteksten,nil, pix)
end


function p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, overskrift,blankbildetekst)
	if bilde and bilde == "uten" then
		return ""
	end
	local overskriftRad,avslutning = "",""
	if overskrift and overskrift ~= "" then
		overskriftRad,avslutning = formatOverskrift(overskrift)
	end
	local bilderad = ""
	if bilde and bilde ~= "" then
		bilderad = fmtBilde(bilde,bildetekst,byline, pix)
	else 
		bilderad = p.bildeFraWikidata(qid, pid, pix,blankbildetekst)
	end
	if bilderad ~= "" then
		return overskriftRad .. bilderad .. avslutning
	end
	return ""
end

function p.bildeOgTekst(frame)
	local qid = frame.args["qid"] or nil
	if qid == "" then
		qid = nil
	end
	local pid = frame.args["pid"] or nil
	local bilde = frame.args["bilde"] or nil
	local bildetekst = frame.args["bildetekst"] or nil
	local byline = frame.args["byline"] or nil
	local pix = frame.args["bildestørrelse"] or ""
	local overskrift = frame.args["overskrift"] or ""
	return p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, overskrift)
end

function getId(prop)
	if prop then
--		return dump(prop)
	end
	if prop and prop.mainsnak and prop.mainsnak.datavalue
	   and prop.mainsnak.datatype == "wikibase-item" then
	   	return prop.mainsnak.datavalue.value.id
	end
	return nil	
end

function allProps(qid,pid)
	local propids = getProp(qid,pid)
	if not propids then
		return nil
	end
	local props = {}
	for i,prop in ipairs(propids) do
		table.insert(props,  getId(prop))
	end
	return props
end

function ff(qid,pid)
	local prop = getProp(qid,pid)
	if not prop then
		return ""
	end
	if not prop[1] then
		return ""
	end
	if not prop[1].mainsnak then
		return ""
	end
	if prop[1].mainsnak.snaktype ~= "value" then
		return ""
	end
	return mw.wikibase.formatValue(prop[1].mainsnak)
	
end

function onlyProps(props,pid,qid)
	local newprops = {}
	for i,prop in ipairs(props) do
		local id = getId(prop)
		table.insert(newprops,  getId(prop))
	end
	return newprops
end


function p._galleri(qid,pid,skaper,galleri)
	local bilder = allProps(qid,pid)
	if not bilder then
		-- local id = bilder[9]
		 --return dump(mw.wikibase.getEntity(id)) or nil
		return ""
	end
	local args = {
		["mode"]="slideshow"
	}
	local tekst = ""
	local sep = ""
	--local bilder = {}
	for i,bildet in ipairs(bilder) do
	--	table.insert(bilder,  p.bilde(prop,"P18"))
		--tekst = tekst .. sep .. getId(prop) -- p.bilde(getId(prop),"P18")
		if bildet then
			-- return dump(mw.wikibase.getEntity(bildet))
		end
		local entity = mw.wikibase.getEntity(bildet)
		local tittel = mw.wikibase.label(bildet) or ""
		--local P195 = getProp(bildet,"P195")
		local samling = ff(bildet,"P195")
		local aar = ff(bildet,"P571")
		local skaper = ff(bildet,"P170")
		local undertekst = tittel .."</br>" .. skaper .. " (" .. aar .. ")</br>" .. samling
		tekst = tekst .. sep .. "file:" .. p.bilde(bildet,"P18") .. "|" .. undertekst .. "\n"
		--sep = "</br>"
	end
	return mw.getCurrentFrame():extensionTag("gallery",tekst,args)
--	tekst = tekst .. '</gallery>'
--	return tekst
--	return dump(props)
end


function p.galleri(frame)
	local qid = frame.args["qid"] or nil
	if qid == "" then
		qid = nil
	end
	local pid = frame.args["pid"] or nil
	local skaper = frame.args["skaper"] or nil
	local galleri = frame.args["galleri"] or nil
	return p._galleri(qid,pid,skaper,galleri)
end

-- formatOverskrift
function p.blokk1(args)
	local qid = args["qid"] or nil
	if qid == "" then
		qid = nil
	end
	local max = tonumber(args["max"]) or nil
	local min = tonumber(args["min"]) or 0
	local overskrift = args["overskrift"] or ""
--	local kollaps = args["kollaps"] or nil
	
	local tekst = ""
	local num = 0
	for i,rad in ipairs(args) do
		tekst = tekst .. rad
		num = num + 1
	end
	local overskr = ""
	local coll1 = '<div class="mw-collapsible mw-collapsed">'
	local ostart = '<tr class="overskrift" valign="top"><td colspan="4">'
	local oend = '</td></tr>'
	local collcont = '<div class="mw-collapsible-content">'
	local collend = '</div></div>'
	if num >= min then
		return coll1 .. ostart .. overskrift .. oend .. collcont .. tekst .. collend
	--	if false and max and num>max then
	--	   tekst = string.format([[
	--					<div class="mw-collapsible mw-collapsed">
	--			<div class="sentrert">%s oppføringer</div>
	--			<div class="mw-collapsible-content">%s</div>
	--		</div>
	--	]], num, tekst)

	--	else
		    -- overskr,ettersk = formatOverskrift (overskrift)
	--	end
	end
	local ettersk = formatOverskrift ("Slutt")
	return overskr .. tekst	.. ettersk
end
function p.blokk(frame)
	local qid = frame.args["qid"] or nil
	if qid == "" then
		qid = nil
	end
    return p.blokk1(frame.args)
end

function p.rad(tittel,arg,metode)
	if arg and arg == "uten" then
		return ""
	end
	local value = ""
	if arg and arg ~= "" then
		return formatRad(tittel,arg)
	end

	return ""
end

function ibx(innhold,qid,arg)
	local value = ""
	local entity = mw.wikibase.getEntity(qid)
	for i,rad in ipairs(innhold) do
		local tittel = rad["tittel"] or ""
		local pid = rad["pid"] or nil
		local metode = rad["metode"]
		local param = rad["param"]
		if arg and arg[param] then
			value = value .. p.rad(tittel,arg[param],metode)
		else
			if metode == "single" then
				value = value .. p.singleValue(tittel,nil,qid,pid)
			end
			if metode == "bilde" then
				value = value .. p._bildeOgTekst(qid,pid)
			end
		end
	end

	return value
end

function td(verdi)
	return "<td>" .. verdi .. "</td>"
end

function tabellbilde(verdi)
	if verdi == "" then
		return ""
	end
	return "[[fil:" .. verdi .. "|100px]]"
end

function liste(qid,pid,elemenprops)
	local elementer = allProps(qid,pid)
	local list = ""
	if not elementer then
		-- local id = bilder[9]
		 --return dump(mw.wikibase.getEntity(id)) or nil
		return ""
	end
	local args = {
		["mode"]="slideshow"
	}
	local tekst = "<tr>"
	local sep = ""
	list = "<table class=\"wikitable\">"
	for i,element in ipairs(elementer) do
		local bilde = p.bilde(element,"P18")
		bilde = td(tabellbilde(bilde))
		--local bilde = "<td>" .. p.bildeFraWikidata(element,"P18", "100px") .. "</td>"
		local navn = "<td>"  .. formatValue(element, false, true) .. "</td>"
		-- mw.wikibase.formatValue(element) mw.wikibase.getLabel(element)
		list = list .. "<tr>" ..bilde .. navn .. "</tr>"
	end
    return list .. "</table>"
end

function r(qid)
	local p39 = getProp(qid,"P39")
	local value = ""
	for idx,claim in pairs(p39) do
		id = getId(claim) or nil
		if id and id =="Q9045502" then
			local periode = claim.qualifiers["P2937"]
			local parti = claim.qualifiers["P4100"]
			local krets = claim.qualifiers["P768"]
			
		--return dump(P2937) .. "<p><p>" .. 
		value = value .. mw.wikibase.formatValue(claim.mainsnak) .. "   "
		  .. mw.wikibase.formatValue(periode[1])  .. "   "
		  .. mw.wikibase.formatValue(parti[1])  .. "   "
		  .. mw.wikibase.formatValue(krets[1])  .. "   <p>"
		end
	end
	--prop[1].qualifiers
	--prop[1].qualifiers
	return value
end

function test2(frame)
	
	local value = "<table>"
	local args = {
		p.singleValue("[[vvv]]",nil,"Q1037","P1081"),
		p._bildeOgTekst("Q11993371", "P18", nil, nil, nil),
		p.singleValue("[[xxx]]",nil,"Q1037","P1081"),
	}
	args.overskrift = "start"
	
	value = value .. p._galleri("Q41406","P800")
	
--	value = value .. p.blokk1(args)
--	value = value .. p.singleValue("[[HDI]]",nil,"Q1037","P1081")
--	value = value .. p.singleValue("Folketall",nil,"Q1037","P1082")
	--value = value .. p.singleValue("Areal",nil,"Q1037","P2046")

--	value = value .. p.singleValue("Folketall",nil,"Q4044","P1082")
--	value = value .. p.singleValue("Areal",nil,"Q4044","P2046")

--value = value .. p.singleValue("latinsk navn","Universitas Osloensis (Universitas Regia Fredericiana)","Q486156",nil)
--value = value .. p.singleValue("Kallenavn og forkortelser",nil,"Q486156","P1813")
--value = value .. p.singleValue("Grunnlagt",nil,"Q486156","P571")
--value = value .. p.singleValue("Type","universitet","Q486156",nil)
--value = value .. p.singleValue("Rektor",nil,"Q486156","P1075")
--value = value .. p.singleValue("Studenter",nil,"Q486156","P2196")
--value = value .. p.singleValue("Ansatte",nil,"Q486156","P1128")

--	value = value .. ibx(uni,"Q486156")
--	value = value .. ibx(uni,"Q3436286")
--	value = value .. ibx(uni,"Q161562")
--	value = value .. ibx(uni,"Q662355")
--	value = value .. ibx(uni,"Q131262")
--	value = value .. ibx(museum,"Q1132918")
--	value = value .. ibx(museum,"Q154996")
	return value .. "</table>"
--return "Test 2 ikke i bruk"
end

function p.bildetest(frame)
    local t0 = "Parametre:  qid, pid, bilde, bildetekst, byline"
    local t1 = "Q11993371, P18, nil, nil, nil</br>" .. p._bildeOgTekst("Q11993371", "P18", nil, nil, nil)
    local t2 = "Q11993371, P18, uten, nil, nil</br>" .. p._bildeOgTekst("Q11993371", "P18", "uten", nil, nil)
    local t3 = "Q11993371, P18, uten, bildetekst, nil</br>" .. p._bildeOgTekst("Q11993371", "P18", "uten", "bildetekst", nil)
    local t4 = "Q11993371, P18, nil, bildetekst, nil</br>" .. p._bildeOgTekst("Q11993371", "P18", nil, "bildetekst", nil)
    local t5 = "Q11993371, P18, -blank-, bildetekst, nil</br>" .. p._bildeOgTekst("Q11993371", "P18", "", "bildetekst", nil)
    local t6 = "Q11993371, P18, -blank-, bildetekst, byline</br>" .. p._bildeOgTekst("Q11993371", "P18", "", "bildetekst", "byline")
    local t7 = "Q11993371, P18, Olaf Kamfjord (cropped).jpg, bildetekst, byline</br>" .. p._bildeOgTekst("Q11993371", "P18", "Olaf Kamfjord (cropped).jpg", "bildetekst", "byline")
    local t8 = "Q36661, P18, nil, bildetekst, byline</br>" .. p._bildeOgTekst("Q36661", "P18", nil , "bildetekst", "byline")
    local t9 = "Q36661, P109, nil, bildetekst, byline</br>" .. p._bildeOgTekst("Q36661", "P109", nil , "bildetekst", "byline")
    return t0 .. "</br>" .. t1 .. "</br>" .. t2 .. "</br>" .. t3 .. "</br>" .. t4 .. "</br>" .. t5 .. "</br>" ..
    t6 .. "</br>" .. t7 .. "</br>" .. t8 .. "</br>" .. t9 .. "</br>" 
end

function p.test1(frame)
--	local prop = getProp("Q11993371","P18")
--	return dump(prop[1].mainsnak)
--	return dump(prop[2])
--	return dump(prop)
--	return p.bildetest(frame)
	return ""
end

function p.test2a(frame)
	local p = {}

	local streng = "Noe rart bla bla bla\n{{ koord|2|3|vis=tittel}} '''Dette''' er en {{artikkel}}"

	local treff = streng:match("{{%s*[Kk]oord%s*|[^}]+}}")

	if treff and treff:find("tittel") then
	  return "Vår kategori"
	else
	  return "Ingenting"
	end
	return "Test 1 ikke i bruk"
end

function test2x(frame)
	return liste("Q108934475","P527","")
end
function p.test2(frame)
	return test2x(frame)
--	local num = r("Q156553")
--	return num
end
function p.testQ10855788P2048(frame)
	return p.singleValue("høyde","","Q10855788","P2048")
	--return liste("Q108934475","P527","")
end
function p.testQ824594P1082(frame)
	return p.singleValue("Befolkning","","Q824594","P1082")
	--return liste("Q108934475","P527","")
end


function ibxStart(type,stor,navn,navn2)
	local arg = {}
	arg["navn"] = navn
	local txt0a = '<table class="infobox infoboks '
	local txt0b = type .. " " .. stor .. " "  ..'"'
	-- .. " " .. class 
	local txt0d = ">"
	local txt1 = ''
	if navn2 and navn2 ~= '' then
		txt1 = '<tr valign="top" class="hode"><th colspan="4">' .. navn2 .. '</th></tr>'
	end
	local txt2 = '<tr class="hode overskrift"><th colspan="4">' .. navn .. '</th></tr>'
	return txt0a .. txt0b .. txt0d .. txt1 .. txt2
end


function p.ibxStart(frame)
	local args = frame.args or {}
	local typ = args["type"] or "biografi"
	local stor = args["stor"] or "bred"
	local navn = args["navn"] or "navn"
	local navn2 = args["navn2"] or nil
	value = ibxStart(typ, stor, navn, navn2)
	return value
end



function ibxSlutt(comcat,endcomment)
	return "</table>"
end

function p.ibxSlutt(frame)
	return ibxSlutt()
end

function p.bildeboks(frame)
	local args = mw.getCurrentFrame():getParent().args
	local qid = args["qid"] or nil
	if qid == "" then
		qid = nil
	end 	
	local tekst = ""
	local num = 0
	for i,rad in ipairs(args) do
		tekst = tekst .. rad
		num = num + 1
	end
	
	local pid = args["pid"] or "P18"
	local bilde = args["bilde"] or nil
	local bildetekst = args["bildetekst"] or nil
	local byline = args["byline"] or nil
	local pix = args["bildestørrelse"] or "290px"
	local overskrift = args["overskrift"] or mw.wikibase.label(qid)
	local alttekst = args["alttekst"] or ""
	local type = args["type"] or "biografi"
	local stor = args["stor"] or "bred"
	local b = ""
	if tekst == "" then 
		for pd in mw.text.gsplit( pid, ',', true ) do
			b = b .. p._bildeOgTekst(qid, pd, bilde, bildetekst, byline, pix, nil,true)
		end
	end
	if b == "" and tekst == "" then
		return ""
	end
	
	local value = ibxStart(type,stor,overskrift,nil)
	value = value .. b .. tekst 
	value = value .. p.ibxSlutt(frame)
    return value
end

function p.formatDuration(amount)
	local s = tonumber(amount)
	if s<60 then
		return amount .. " s"
	end
	local min = math.floor(s/60)
	local sec = s - min*60
	return tostring(min) .. " min " .. sec .. " s"
end
	

function P2415(prop)
	if not prop or not prop.mainsnak then
		return ""
	end
	local snak = prop.mainsnak
	if snak.snaktype == "value" and snak.datatype == "quantity" then
		local tekst = ""
		local value = snak.datavalue.value or nil
		local quals = prop.qualifiers
		local qual = nil
		local qualval = ""
		local sep = ""
		if quals then
			qual = quals['P2416'] or quals['P641']
			if qual then
			    qualval = mw.wikibase.formatValues(qual)
				if qualval then
					sep = ", "
				end
			end
			qual = quals['P276']
			if qual then
			    qualval = qualval .. sep .. mw.wikibase.formatValues(qual)
				if qualval then
					sep = ", "
				end
			end
			qual = quals['P1013']
			if qual then
			    qualval = qualval .. sep .. mw.wikibase.formatValues(qual)
				if qualval then
					sep = ", "
				end
			end
		end
		tekst = " (" .. qualval .. ")"
		
		local refs = prop.references
		local ref = nil
		if refs then
			ref = refs[1] or nil
		end
		if ref then
			tekst = tekst ..  refscore.render(mw.getCurrentFrame(),refs)
			--local attrs = { name = string.format( 'hash-%s', ref.hash ) }
			--tekst = tekst .. mw.getCurrentFrame():extensionTag( 'ref', reftxt, attrs ) 
		end
		--local v = dump(snak)
		local val = mw.wikibase.formatValue(snak)
		local issek = string.match( val, "sekund")
		if issek then
			val = p.formatDuration(tonumber(value.amount))
		end
		--local q = string.match( value.unit, "Q")
		--local qq = mw.wikibase.label(value.unit)
		-- return dump(snak) .. mw.language.getContentLanguage():formatDuration(tonumber(value.amount))
		return val
		.. tekst -- .. " " .. v .. val -- .. " " .. qq
	end
end

function p._pers(qid)
	local entity = mw.wikibase.getEntity(qid)
	local props = entity:getBestStatements("P2415")
	local tekst = mw.wikibase.label(qid) .. "<br/>" -- dump(props) 
	for i,prop in ipairs(props) do
		tekst = tekst .. P2415(prop) .. "<br/>"
	--	num = num + 1
	end
	return tekst .. "<br/>"
end

function p.pers(frame)
	local args = mw.getCurrentFrame():getParent().args
	local value = ""
	
	local qid = args["qid"] or frame.args["qid"] or nil
	if qid == "" then
		qid = nil
	end
    return qid --.. p._pers(qid)
end

function p._persrad(pers,qid)
	if pers and pers == "uten" then
		return ""
	end
	local rad = ""
	if pers and pers ~= "" then
		rad = formatRad("Personlig rekord",pers)
	else 
		rad = formatRad("Personlig<br/>rekord",p._pers(qid))
	end
	return rad

end


function p.persrad(frame)
	local args = mw.getCurrentFrame():getParent().args
	local arg2 = frame.args
	local qid = args["qid"] or arg2["qid"] or nil
	if qid == "" then
		qid = nil
	end 	
	local pers = args["pers"] or nil
	return p._persrad(pers,qid)
end
	
function p.persboks(frame)
	local args = mw.getCurrentFrame():getParent().args
	local arg2 = frame.args
	local qid = args["qid"] or arg2["qid"] or nil
	if qid == "" then
		qid = nil
	end 	
	local tekst = ""

	
	local pid = args["pid"] or "P18"
	local overskrift = args["overskrift"] or mw.wikibase.label(qid) or ""
	local alttekst = args["alttekst"] or ""
	local type = args["type"] or "biografi"
	local stor = args["stor"] or "bred"
	
	local bilde = args["bilde"] or nil
	local bildetekst = args["bildetekst"] or nil
	local byline = args["byline"] or nil
	local pix = args["bildestørrelse"] or "290px"
	local b = ""
	b = b .. p.persrad(frame)
	if b == ""  then
		return ""
	end
	
	local value = ibxStart(type,stor,overskrift,"[[d:" .. qid .. "]]")
	value = value .. formatDobbeltrad( p._bildeOgTekst(qid, pid, bilde, bildetekst, byline, pix, nil,true))
	value = value .. b 
	value = value .. p.ibxSlutt(frame)
    return value
end 

function p.test2(frame)
--	local prop = getProp("Q11993371","P18")
--	return dump(prop[1].mainsnak)
--	return dump(prop[2])
--	return dump(prop)
--	return p.bildetest(frame)
	return p._pers("Q28057538")
	.. p._pers("Q1189")
	.. p._pers("Q273953")
	--.. p.pers("qid = Q273953")
end

function nettsted(prop)
	local val = nil
	if not prop.mainsnak then
		return ""
	end
	local value = mw.wikibase.formatValue(prop.mainsnak)
	if value and value ~= "" then
		local quals = prop.qualifiers
		local qual = nil
		if quals then
			return dump(quals)
--			qual = quals[1] or nil
		end
		
		local refs = prop.references
		local ref = nil
		if refs then
			ref = refs[1] or nil
		end
		if ref then
			value = value ..  refscore.render(mw.getCurrentFrame(),refs)
		end
		return formatRad(tittel,value)
	end
	return val
end

function p._nettsted(tittel,verdi,qid,pid)
	if verdi and verdi == "uten" then
		return ""
	end
	if verdi and verdi ~= "" then
		return formatRad(tittel,verdi)
	end
	if not pid then
		return ""
	end
	local props = allProps(qid,pid)
	if not props then
		-- local id = bilder[9]
		 --return dump(mw.wikibase.getEntity(id)) or nil
		return ""
	end
	local sep = ""
	local value = ""
	for i,prop in ipairs(props) do
		local val = nettsted(prop)
		if val and val ~= "" then
			value = value .. sep .. val
			sep = "<br/>"
		end
	end
	return formatRad(tittel,value)
	--return value
end

function p.nettsted(frame)
	local args = mw.getCurrentFrame():getParent().args
	local arg2 = frame.args
	local qid = args["qid"] or arg2["qid"] or nil

	if qid == "" then
		qid = nil
	end 	
	local tekst = ""
	local num = 0
	for i,rad in ipairs(args) do
		tekst = tekst .. rad
		num = num + 1
	end
	
	local pid = arg2["pid"] or "P856"
	local verdi = arg2["nettsted"] or arg2["webside"] or yyy
	local tittel = arg2["tittel"] or "xxx"
	return p._formatEgenskaper(qid,pid)
end
return p