<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://test1.pbc.xxx/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ABioboxSharing</id>
	<title>Module:BioboxSharing - Revision history</title>
	<link rel="self" type="application/atom+xml" href="https://test1.pbc.xxx/w/index.php?action=history&amp;feed=atom&amp;title=Module%3ABioboxSharing"/>
	<link rel="alternate" type="text/html" href="https://test1.pbc.xxx/w/index.php?title=Module:BioboxSharing&amp;action=history"/>
	<updated>2026-05-01T17:45:50Z</updated>
	<subtitle>Revision history for this page on the wiki</subtitle>
	<generator>MediaWiki 1.44.2</generator>
	<entry>
		<id>https://test1.pbc.xxx/w/index.php?title=Module:BioboxSharing&amp;diff=2978&amp;oldid=prev</id>
		<title>PeaceDeadC: Created page with &quot;local p = {}  local sitesModule = require(&#039;Module:BioboxSharing/sites&#039;) local sites = sitesModule.sites local siteOrder = sitesModule.siteOrder  local PBD = require(&#039;Module:PBD&#039;) local PBDIB = require(&#039;Module:PornBaseDataIB&#039;)  local function isEmpty(value)     return value == nil or value == &#039;&#039; end  local function formatField(state, label, value, fieldName, rowIndex, category)     if isEmpty(value) then         return &#039;&#039;     end          local rowStyle = state:getRowStyl...&quot;</title>
		<link rel="alternate" type="text/html" href="https://test1.pbc.xxx/w/index.php?title=Module:BioboxSharing&amp;diff=2978&amp;oldid=prev"/>
		<updated>2025-03-19T00:11:11Z</updated>

		<summary type="html">&lt;p&gt;Created page with &amp;quot;local p = {}  local sitesModule = require(&amp;#039;Module:BioboxSharing/sites&amp;#039;) local sites = sitesModule.sites local siteOrder = sitesModule.siteOrder  local PBD = require(&amp;#039;Module:PBD&amp;#039;) local PBDIB = require(&amp;#039;Module:PornBaseDataIB&amp;#039;)  local function isEmpty(value)     return value == nil or value == &amp;#039;&amp;#039; end  local function formatField(state, label, value, fieldName, rowIndex, category)     if isEmpty(value) then         return &amp;#039;&amp;#039;     end          local rowStyle = state:getRowStyl...&amp;quot;&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;
local sitesModule = require(&amp;#039;Module:BioboxSharing/sites&amp;#039;)&lt;br /&gt;
local sites = sitesModule.sites&lt;br /&gt;
local siteOrder = sitesModule.siteOrder&lt;br /&gt;
&lt;br /&gt;
local PBD = require(&amp;#039;Module:PBD&amp;#039;)&lt;br /&gt;
local PBDIB = require(&amp;#039;Module:PornBaseDataIB&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
local function isEmpty(value)&lt;br /&gt;
    return value == nil or value == &amp;#039;&amp;#039;&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
local function formatField(state, label, value, fieldName, rowIndex, category)&lt;br /&gt;
    if isEmpty(value) then&lt;br /&gt;
        return &amp;#039;&amp;#039;&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    local rowStyle = state:getRowStyle(rowIndex)&lt;br /&gt;
    local categoryCode = &amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    if category and mw.title.getCurrentTitle().namespace == 0 then&lt;br /&gt;
        categoryCode = string.format(&amp;#039;[[%s]]&amp;#039;, category)&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    return string.format(&amp;#039;|-\n! style=&amp;quot;%s %s&amp;quot; | \&amp;#039;\&amp;#039;\&amp;#039;%s\&amp;#039;\&amp;#039;\&amp;#039;\n| style=&amp;quot;%s text-align:left; max-width: 100px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;&amp;quot; | %s%s&amp;#039;, &lt;br /&gt;
        rowStyle,&lt;br /&gt;
        state.STYLES.LABEL,&lt;br /&gt;
        label,&lt;br /&gt;
        rowStyle,&lt;br /&gt;
        value,&lt;br /&gt;
        categoryCode)&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function collectParametersWithSuffixes(args, paramBase, maxCount)&lt;br /&gt;
    local values = {}&lt;br /&gt;
    maxCount = tonumber(maxCount) or 4&lt;br /&gt;
&lt;br /&gt;
    for i = 1, maxCount do&lt;br /&gt;
        local suffix = i &amp;gt; 1 and i or &amp;quot;&amp;quot;&lt;br /&gt;
        local paramName = paramBase .. suffix&lt;br /&gt;
        if not isEmpty(args[paramName]) then&lt;br /&gt;
            table.insert(values, args[paramName])&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return values&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSite(state, args, siteConfig, rowIndex)&lt;br /&gt;
    local section = {}&lt;br /&gt;
    local values = {}&lt;br /&gt;
&lt;br /&gt;
    if siteConfig.paramBase then&lt;br /&gt;
        values = collectParametersWithSuffixes(&lt;br /&gt;
            args,&lt;br /&gt;
            siteConfig.paramBase,&lt;br /&gt;
            siteConfig.maxCount&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if #values == 0 and args.qid then&lt;br /&gt;
        local entity = mw.wikibase.getEntity(args.qid)&lt;br /&gt;
        if siteConfig.pbdProps then&lt;br /&gt;
            for _, pbdProp in ipairs(siteConfig.pbdProps) do&lt;br /&gt;
                if entity and entity.claims and entity.claims[pbdProp] then&lt;br /&gt;
                    for _, statement in ipairs(entity.claims[pbdProp]) do&lt;br /&gt;
                        if statement.mainsnak.snaktype == &amp;quot;value&amp;quot; and &lt;br /&gt;
                           statement.mainsnak.datavalue then&lt;br /&gt;
                            local id&lt;br /&gt;
                            if statement.mainsnak.datavalue.type == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value&lt;br /&gt;
                            elseif statement.mainsnak.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value.id&lt;br /&gt;
                            end&lt;br /&gt;
                            &lt;br /&gt;
                            if id then&lt;br /&gt;
                                table.insert(values, {id = id, pbdProp = pbdProp})&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if #values &amp;gt; 0 then&lt;br /&gt;
        local displayValues = {}&lt;br /&gt;
        &lt;br /&gt;
        for _, entry in ipairs(values) do&lt;br /&gt;
            local id, pbdProp&lt;br /&gt;
            if type(entry) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                id = entry.id&lt;br /&gt;
                pbdProp = entry.pbdProp&lt;br /&gt;
            else&lt;br /&gt;
                id = entry&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local urlFormat = siteConfig.urlFormat&lt;br /&gt;
            local url = urlFormat:format(id)&lt;br /&gt;
            &lt;br /&gt;
            if siteConfig.suffix then&lt;br /&gt;
                url = url .. siteConfig.suffix&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local displayValue = string.format(&amp;#039;[%s %s]&amp;#039;, url, id)&lt;br /&gt;
            table.insert(displayValues, displayValue)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local combinedDisplay = table.concat(displayValues, &amp;#039;&amp;lt;br&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        local label&lt;br /&gt;
        if siteConfig.labelFunc then&lt;br /&gt;
            label = siteConfig.labelFunc()&lt;br /&gt;
        else&lt;br /&gt;
            local frame = mw.getCurrentFrame()&lt;br /&gt;
            label = frame:expandTemplate{ title = &amp;#039;abbr&amp;#039;, args = { siteConfig.abbr, siteConfig.label } }&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        section[#section + 1] = formatField(state, label, combinedDisplay, siteConfig.name, rowIndex, siteConfig.category)&lt;br /&gt;
        rowIndex = rowIndex + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return section, rowIndex&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatFapHouse(state, args, rowIndex)&lt;br /&gt;
    local section = {}&lt;br /&gt;
    local faphouse_model = sites.faphouse_model&lt;br /&gt;
    local faphouse_pornstar = sites.faphouse_pornstar&lt;br /&gt;
    &lt;br /&gt;
    local model_values = {}&lt;br /&gt;
    local pornstar_values = {}&lt;br /&gt;
    &lt;br /&gt;
    if faphouse_model.paramBase then&lt;br /&gt;
        model_values = collectParametersWithSuffixes(&lt;br /&gt;
            args,&lt;br /&gt;
            faphouse_model.paramBase,&lt;br /&gt;
            faphouse_model.maxCount&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if faphouse_pornstar.paramBase then&lt;br /&gt;
        pornstar_values = collectParametersWithSuffixes(&lt;br /&gt;
            args,&lt;br /&gt;
            faphouse_pornstar.paramBase,&lt;br /&gt;
            faphouse_pornstar.maxCount&lt;br /&gt;
        )&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if #model_values == 0 and #pornstar_values == 0 and args.qid then&lt;br /&gt;
        local entity = mw.wikibase.getEntity(args.qid)&lt;br /&gt;
        &lt;br /&gt;
        if faphouse_model.pbdProps and entity and entity.claims then&lt;br /&gt;
            for _, pbdProp in ipairs(faphouse_model.pbdProps) do&lt;br /&gt;
                if entity.claims[pbdProp] then&lt;br /&gt;
                    for _, statement in ipairs(entity.claims[pbdProp]) do&lt;br /&gt;
                        if statement.mainsnak.snaktype == &amp;quot;value&amp;quot; and &lt;br /&gt;
                           statement.mainsnak.datavalue then&lt;br /&gt;
                            local id&lt;br /&gt;
                            if statement.mainsnak.datavalue.type == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value&lt;br /&gt;
                            elseif statement.mainsnak.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value.id&lt;br /&gt;
                            end&lt;br /&gt;
                            &lt;br /&gt;
                            if id then&lt;br /&gt;
                                table.insert(model_values, {id = id, pbdProp = pbdProp, type = &amp;quot;model&amp;quot;})&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        if faphouse_pornstar.pbdProps and entity and entity.claims then&lt;br /&gt;
            for _, pbdProp in ipairs(faphouse_pornstar.pbdProps) do&lt;br /&gt;
                if entity.claims[pbdProp] then&lt;br /&gt;
                    for _, statement in ipairs(entity.claims[pbdProp]) do&lt;br /&gt;
                        if statement.mainsnak.snaktype == &amp;quot;value&amp;quot; and &lt;br /&gt;
                           statement.mainsnak.datavalue then&lt;br /&gt;
                            local id&lt;br /&gt;
                            if statement.mainsnak.datavalue.type == &amp;quot;string&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value&lt;br /&gt;
                            elseif statement.mainsnak.datavalue.type == &amp;quot;wikibase-entityid&amp;quot; then&lt;br /&gt;
                                id = statement.mainsnak.datavalue.value.id&lt;br /&gt;
                            end&lt;br /&gt;
                            &lt;br /&gt;
                            if id then&lt;br /&gt;
                                table.insert(pornstar_values, {id = id, pbdProp = pbdProp, type = &amp;quot;pornstar&amp;quot;})&lt;br /&gt;
                            end&lt;br /&gt;
                        end&lt;br /&gt;
                    end&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    if #model_values &amp;gt; 0 or #pornstar_values &amp;gt; 0 then&lt;br /&gt;
        local displayValues = {}&lt;br /&gt;
        &lt;br /&gt;
        for _, entry in ipairs(model_values) do&lt;br /&gt;
            local id, pbdProp, entryType&lt;br /&gt;
            if type(entry) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                id = entry.id&lt;br /&gt;
                pbdProp = entry.pbdProp&lt;br /&gt;
                entryType = entry.type&lt;br /&gt;
            else&lt;br /&gt;
                id = entry&lt;br /&gt;
                entryType = &amp;quot;model&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local urlFormat = faphouse_model.urlFormat&lt;br /&gt;
            local url = urlFormat:format(id)&lt;br /&gt;
            &lt;br /&gt;
            if faphouse_model.suffix then&lt;br /&gt;
                url = url .. faphouse_model.suffix&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local displayValue = string.format(&amp;#039;[%s %s]&amp;#039;, url, id)&lt;br /&gt;
            table.insert(displayValues, displayValue)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        for _, entry in ipairs(pornstar_values) do&lt;br /&gt;
            local id, pbdProp, entryType&lt;br /&gt;
            if type(entry) == &amp;quot;table&amp;quot; then&lt;br /&gt;
                id = entry.id&lt;br /&gt;
                pbdProp = entry.pbdProp&lt;br /&gt;
                entryType = entry.type&lt;br /&gt;
            else&lt;br /&gt;
                id = entry&lt;br /&gt;
                entryType = &amp;quot;pornstar&amp;quot;&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local urlFormat = faphouse_pornstar.urlFormat&lt;br /&gt;
            local url = urlFormat:format(id)&lt;br /&gt;
            &lt;br /&gt;
            if faphouse_pornstar.suffix then&lt;br /&gt;
                url = url .. faphouse_pornstar.suffix&lt;br /&gt;
            end&lt;br /&gt;
            &lt;br /&gt;
            local displayValue = string.format(&amp;#039;[%s %s]&amp;#039;, url, id)&lt;br /&gt;
            table.insert(displayValues, displayValue)&lt;br /&gt;
        end&lt;br /&gt;
        &lt;br /&gt;
        local combinedDisplay = table.concat(displayValues, &amp;#039;&amp;lt;br&amp;gt;&amp;#039;)&lt;br /&gt;
&lt;br /&gt;
        local label&lt;br /&gt;
        local frame = mw.getCurrentFrame()&lt;br /&gt;
        label = frame:expandTemplate{ title = &amp;#039;abbr&amp;#039;, args = { faphouse_model.abbr, faphouse_model.label } }&lt;br /&gt;
        &lt;br /&gt;
        section[#section + 1] = formatField(state, label, combinedDisplay, &amp;quot;faphouse&amp;quot;, rowIndex, faphouse_model.category)&lt;br /&gt;
        rowIndex = rowIndex + 1&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return section, rowIndex&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
function p.formatSharingSection(state, args, rowIndex)&lt;br /&gt;
    local section = {}&lt;br /&gt;
    local sharingSections = {}&lt;br /&gt;
    local hasAny = false&lt;br /&gt;
    &lt;br /&gt;
    local faphouseSection, newRowIndex = p.formatFapHouse(state, args, rowIndex)&lt;br /&gt;
    if #faphouseSection &amp;gt; 0 then&lt;br /&gt;
        hasAny = true&lt;br /&gt;
        for _, line in ipairs(faphouseSection) do&lt;br /&gt;
            sharingSections[#sharingSections + 1] = line&lt;br /&gt;
        end&lt;br /&gt;
        rowIndex = newRowIndex&lt;br /&gt;
    end&lt;br /&gt;
    &lt;br /&gt;
    for _, siteName in ipairs(siteOrder) do&lt;br /&gt;
        if siteName ~= &amp;quot;faphouse_model&amp;quot; and siteName ~= &amp;quot;faphouse_pornstar&amp;quot; then&lt;br /&gt;
            local config = sites[siteName]&lt;br /&gt;
            if config then&lt;br /&gt;
                local siteSection, newRowIndex = p.formatSite(state, args, config, rowIndex)&lt;br /&gt;
                if #siteSection &amp;gt; 0 then&lt;br /&gt;
                    hasAny = true&lt;br /&gt;
                    for _, line in ipairs(siteSection) do&lt;br /&gt;
                        sharingSections[#sharingSections + 1] = line&lt;br /&gt;
                    end&lt;br /&gt;
                    rowIndex = newRowIndex&lt;br /&gt;
                end&lt;br /&gt;
            end&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    if hasAny then&lt;br /&gt;
        section[#section + 1] = string.format(&amp;#039;|-\n! colspan=&amp;quot;2&amp;quot; %s | \&amp;#039;\&amp;#039;\&amp;#039;Porn sharing\&amp;#039;\&amp;#039;\&amp;#039;&amp;#039;, state.STYLES.SECTION_HEADER)&lt;br /&gt;
        for _, line in ipairs(sharingSections) do&lt;br /&gt;
            section[#section + 1] = line&lt;br /&gt;
        end&lt;br /&gt;
    end&lt;br /&gt;
&lt;br /&gt;
    return section, rowIndex&lt;br /&gt;
end&lt;br /&gt;
&lt;br /&gt;
return p&lt;/div&gt;</summary>
		<author><name>PeaceDeadC</name></author>
	</entry>
</feed>