<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en-GB">
	<id>https://wiki.democracycraft.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ADCRKI</id>
	<title>Module:DCRKI - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.democracycraft.net/index.php?action=history&amp;feed=atom&amp;title=Module%3ADCRKI"/>
	<link rel="alternate" type="text/html" href="https://wiki.democracycraft.net/index.php?title=Module:DCRKI&amp;action=history"/>
	<updated>2026-09-20T18:52:49Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.46.0</generator>
	<entry>
		<id>https://wiki.democracycraft.net/index.php?title=Module:DCRKI&amp;diff=13722&amp;oldid=prev</id>
		<title>RylandW: for purposes of experimentation</title>
		<link rel="alternate" type="text/html" href="https://wiki.democracycraft.net/index.php?title=Module:DCRKI&amp;diff=13722&amp;oldid=prev"/>
		<updated>2026-09-19T22:17:30Z</updated>

		<summary type="html">&lt;p&gt;for purposes of experimentation&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;local p = {}&lt;br /&gt;
&lt;br /&gt;
-- Get a DCRKI entity.&lt;br /&gt;
local function getEntity(qid)&lt;br /&gt;
    return mw.wikibase.getEntity(qid)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the label of an entity.&lt;br /&gt;
function p.label(frame)&lt;br /&gt;
    local qid = frame.args[1]&lt;br /&gt;
    if not qid or qid == &amp;quot;&amp;quot; then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local entity = getEntity(qid)&lt;br /&gt;
    if not entity then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return mw.wikibase.getLabel(qid) or &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get the first value of a property.&lt;br /&gt;
function p.value(frame)&lt;br /&gt;
    local qid = frame.args[1]&lt;br /&gt;
    local property = frame.args[2]&lt;br /&gt;
&lt;br /&gt;
    if not qid or not property then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local entity = getEntity(qid)&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local claims = entity.claims[property]&lt;br /&gt;
&lt;br /&gt;
    for _, claim in ipairs(claims) do&lt;br /&gt;
        if claim.mainsnak&lt;br /&gt;
            and claim.mainsnak.datavalue&lt;br /&gt;
            and claim.mainsnak.datavalue.value then&lt;br /&gt;
&lt;br /&gt;
            local value = claim.mainsnak.datavalue.value&lt;br /&gt;
&lt;br /&gt;
            if type(value) == &amp;quot;table&amp;quot; and value.id then&lt;br /&gt;
                return mw.wikibase.getLabel(value.id) or value.id&lt;br /&gt;
            elseif type(value) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                return value&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- Get all values of a property, separated by small bullets.&lt;br /&gt;
function p.values(frame)&lt;br /&gt;
    local qid = frame.args[1]&lt;br /&gt;
    local property = frame.args[2]&lt;br /&gt;
&lt;br /&gt;
    if not qid or not property then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local entity = getEntity(qid)&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims[property] then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local values = {}&lt;br /&gt;
&lt;br /&gt;
    for _, claim in ipairs(entity.claims[property]) do&lt;br /&gt;
        if claim.mainsnak&lt;br /&gt;
            and claim.mainsnak.datavalue&lt;br /&gt;
            and claim.mainsnak.datavalue.value then&lt;br /&gt;
&lt;br /&gt;
            local value = claim.mainsnak.datavalue.value&lt;br /&gt;
&lt;br /&gt;
            if type(value) == &amp;quot;table&amp;quot; and value.id then&lt;br /&gt;
                local label = mw.wikibase.getLabel(value.id) or value.id&lt;br /&gt;
                table.insert(values, label)&lt;br /&gt;
            elseif type(value) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                table.insert(values, value)&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return table.concat(values, &amp;#039; &amp;lt;small&amp;gt;•&amp;lt;/small&amp;gt; &amp;#039;)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- P96 → preferred P75 → P18 qualifier&lt;br /&gt;
function p.secretary(frame)&lt;br /&gt;
    local qid = frame.args[1]&lt;br /&gt;
&lt;br /&gt;
    local entity = getEntity(qid)&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims.P96 then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Find the preferred P96 statement.&lt;br /&gt;
    local preferred&lt;br /&gt;
&lt;br /&gt;
    for _, claim in ipairs(entity.claims.P96) do&lt;br /&gt;
        if claim.rank == &amp;quot;preferred&amp;quot;&lt;br /&gt;
            and claim.mainsnak&lt;br /&gt;
            and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
            preferred = claim&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Fall back to normal rank if no preferred statement exists.&lt;br /&gt;
    if not preferred then&lt;br /&gt;
        for _, claim in ipairs(entity.claims.P96) do&lt;br /&gt;
            if claim.rank ~= &amp;quot;deprecated&amp;quot;&lt;br /&gt;
                and claim.mainsnak&lt;br /&gt;
                and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
                preferred = claim&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not preferred then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local value = preferred.mainsnak.datavalue.value&lt;br /&gt;
&lt;br /&gt;
    if type(value) ~= &amp;quot;table&amp;quot; or not value.id then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return mw.wikibase.getLabel(value.id) or value.id&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
-- P96 → preferred P75 → qualifier P18&lt;br /&gt;
function p.since(frame)&lt;br /&gt;
    local qid = frame.args[1]&lt;br /&gt;
&lt;br /&gt;
    local entity = getEntity(qid)&lt;br /&gt;
    if not entity or not entity.claims or not entity.claims.P96 then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local secretaryStatement&lt;br /&gt;
&lt;br /&gt;
    -- Find preferred P96.&lt;br /&gt;
    for _, claim in ipairs(entity.claims.P96) do&lt;br /&gt;
        if claim.rank == &amp;quot;preferred&amp;quot;&lt;br /&gt;
            and claim.mainsnak&lt;br /&gt;
            and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
            secretaryStatement = claim&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Fall back if necessary.&lt;br /&gt;
    if not secretaryStatement then&lt;br /&gt;
        for _, claim in ipairs(entity.claims.P96) do&lt;br /&gt;
            if claim.rank ~= &amp;quot;deprecated&amp;quot;&lt;br /&gt;
                and claim.mainsnak&lt;br /&gt;
                and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
                secretaryStatement = claim&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not secretaryStatement then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Get the secretary&amp;#039;s Q-ID.&lt;br /&gt;
    local secretaryValue = secretaryStatement.mainsnak.datavalue.value&lt;br /&gt;
&lt;br /&gt;
    if type(secretaryValue) ~= &amp;quot;table&amp;quot; or not secretaryValue.id then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    local secretaryQid = secretaryValue.id&lt;br /&gt;
    local secretary = getEntity(secretaryQid)&lt;br /&gt;
&lt;br /&gt;
    if not secretary&lt;br /&gt;
        or not secretary.claims&lt;br /&gt;
        or not secretary.claims.P75 then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Find preferred P75.&lt;br /&gt;
    local positionStatement&lt;br /&gt;
&lt;br /&gt;
    for _, claim in ipairs(secretary.claims.P75) do&lt;br /&gt;
        if claim.rank == &amp;quot;preferred&amp;quot;&lt;br /&gt;
            and claim.mainsnak&lt;br /&gt;
            and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
            positionStatement = claim&lt;br /&gt;
            break&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Fall back to normal rank.&lt;br /&gt;
    if not positionStatement then&lt;br /&gt;
        for _, claim in ipairs(secretary.claims.P75) do&lt;br /&gt;
            if claim.rank ~= &amp;quot;deprecated&amp;quot;&lt;br /&gt;
                and claim.mainsnak&lt;br /&gt;
                and claim.mainsnak.datavalue then&lt;br /&gt;
&lt;br /&gt;
                positionStatement = claim&lt;br /&gt;
                break&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if not positionStatement then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    -- Look for P18 qualifier on the P75 statement.&lt;br /&gt;
    if not positionStatement.qualifiers&lt;br /&gt;
        or not positionStatement.qualifiers.P18 then&lt;br /&gt;
        return &amp;quot;&amp;quot;&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    for _, qualifier in ipairs(positionStatement.qualifiers.P18) do&lt;br /&gt;
        if qualifier.datavalue and qualifier.datavalue.value then&lt;br /&gt;
            local value = qualifier.datavalue.value&lt;br /&gt;
&lt;br /&gt;
            if type(value) == &amp;quot;string&amp;quot; then&lt;br /&gt;
                return value&lt;br /&gt;
            elseif type(value) == &amp;quot;table&amp;quot; and value.text then&lt;br /&gt;
                return value.text&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return &amp;quot;&amp;quot;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>RylandW</name></author>
	</entry>
</feed>