Modul:Sandkasse/Cocu

Fra Wikipedia, den frie encyklopedi
Moduldokumentasjon


local p = {}

function dump( out )
    if type( out ) == 'table' then
        local s = '{ '
        for k,v in pairs( out ) do
                if type( k ) ~= 'number' then k = '"'..k..'"' end
                s = s .. '['..k..'] = ' .. dump( v ) .. ','
        end
        return s .. '} '
    else
        return tostring( out )
    end
end

function getclaims(frame)
   if not mw.wikibase then
        return resten
    end
    local artikkel = mw.wikibase.getEntityObject()
    if not artikkel then
        return resten
    end
    return artikkel.claims	
end

function wdverdi(pv, first)
	lang = mw.language.getContentLanguage()
	local num = pv.mainsnak.datavalue.value["numeric-id"]
	return "[https://www.wikidata.org/wiki/Q" .. num .. " " .. 'Q' .. num .. "]"
end

function enkeltverdi(pv, first)
	lang = mw.language.getContentLanguage()
	local qv = 'Q' .. pv.mainsnak.datavalue.value["numeric-id"]
    local label = mw.wikibase.label(qv)
    local sitelink = mw.wikibase.sitelink(qv)
    if label and sitelink then
    	if first then
        	return '[[' .. sitelink .. '|' .. lang:ucfirst(label) .. ']]'
        else
        	return '[[' .. sitelink .. '|' .. label .. ']]'
        end
    end
    if label and not sitelink then
    	if first then
    		return lang:ucfirst(label)
		else
			return label
		end
		
	end
	if sitelink and not label then
		return '[[' .. sitelink .. ']]'
	end
	return ""
end

function p.liste(frame,prop)
    local claims = getclaims(frame)
    if not claims then
        return resten
    end
	local pid =  mw.wikibase.resolvePropertyId(prop)
	if not pid then
		return 
	end
	
    local pv = claims[pid]
    if not pv then
        return ""
    end
    if not pv[1].mainsnak then return "" end
    if not pv[1].mainsnak.datavalue then return "" end
    
    local i = 1
    local resultat = enkeltverdi(pv[i],true)
    local manglerOversettelse = string.len(resultat)==0
    local first = manglerOversettelse
    while i < #pv do
    	i = i+1
    	local lres = enkeltverdi(pv[i],first)
    	if string.len(lres) > 0 then
    		if not first then
    			resultat = resultat .. ", "
    		end
    	    resultat = resultat .. lres
    	    first = false;
    	else
--    		if not first then
--    			resultat = resultat .. ' <div style="visibility:hidden"> , '
--    		end
--    		resultat = resultat .. wdverdi(pv[i]) .. "</div>"
--    		first = false
    		manglerOversettelse = true
    	end
    end
    if manglerOversettelse then
    	resultat = resultat .. "[[Kategori:Artikler hvor " .. prop .. " mangler oversettelse]]"
    end
    return resultat


end

function frameverdi(frame,param)
    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
     if args[param] then
        return args[param]
     end
     return ""
end

function p.grenserTil(frame)
	return p.liste(frame,"grenser til")
end

function p.yrker(frame)
	return p.liste(frame,"yrke")
end

function velg(frame,prop,param)
	lang = mw.language.getContentLanguage()
	local verdiFraFrame = frameverdi(frame,param)
	local verdiFraWikidata = p.liste(frame,prop)
    if verdiFraFrame then
        if verdiFraFrame == "" then
--            return ""
        elseif verdiFraFrame == "uten" then
    	   return "[[Kategori:Artikler hvor " .. param .. " spesifisert som uten]]"
    	elseif not verdiFraWikidata then
    		return verdiFraFrame
        elseif lang:uc(verdiFraFrame) == lang:uc(verdiFraWikidata) then
           return verdiFraFrame .. "[[Kategori:Artikler hvor " .. param .. " samme som på Wikidata]]"
        elseif string.len(verdiFraWikidata) > 0 then
           return verdiFraFrame .. "[[Kategori:Artikler hvor " .. param .. " forskjellig fra Wikidata]]"
        else
           return verdiFraFrame .. "[[Kategori:Artikler hvor " .. prop .. " mangler på Wikidata]]"
        end
    else
        return ""
    end
    if verdiFraWikidata then
    	if string.len(verdiFraWikidata) > 0 then
       		return verdiFraWikidata .. "[[Kategori:Artikler hvor " .. prop .. " hentes fra Wikidata]]"
    	end
    end
    return ""
end

function rad(frame,prop,param)
	lang = mw.language.getContentLanguage()
    local c = velg(frame,prop,param)
	local verdiFraFrame = frameverdi(frame,param)
	if verdiFraFrame == "uten" then
		return c  -- Dette returnerer kategorien som så vil bli brukt der ellers en infoboks rad hadde vært.
	end
    if frame.args[2] then
    	rt = frame.args[2]
	else
		rt = lang:ucfirst(param)
	end
    if string.len(c) >0 then
        local t1 =  '<tr class="rad" valign="top"><th colspan="2">'
        local t2 = '</th><td colspan="2" >'
        local t3 =  '</td></tr>'
   		return  t1 .. rt .. t2 .. c .. t3
    else
    	return "[[Kategori:Artikler hvor " .. param .. " mangler]]"
    end
end

function p.radParm(frame)
	return rad(frame,frame.args[1],frame.args[1])
end

function p.velgParm(frame)
	return velg(frame,frame.args[1],frame.args[1])
end

return p