Editing
Module:BioboxPersonalPages
Jump to navigation
Jump to search
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
local p = {} local platformsModule = require('Module:BioboxPersonalPages/platforms') local platforms = platformsModule.platforms local platformOrder = platformsModule.platformOrder local PBD = require('Module:PBD') local PBDIB = require('Module:PornBaseDataIB') local function isEmpty(value) return value == nil or value == '' end local function formatField(state, label, value, fieldName, rowIndex) if isEmpty(value) then return '' end local rowStyle = state:getRowStyle(rowIndex) return string.format('|-\n! style="%s %s" | \'\'\'%s\'\'\'\n| style="%s text-align:left; max-width: 100px; overflow: hidden; white-space: nowrap; text-overflow: ellipsis;" | %s', rowStyle, state.STYLES.LABEL, label, rowStyle, value) end local function formatFullWidthField(state, value, rowIndex) if isEmpty(value) then return '' end local rowStyle = state:getRowStyle(rowIndex) return string.format('|-\n| colspan="2" style="%s text-align:center;" | %s', rowStyle, value) end function formatArchiveInfo(archiveUrl, archiveDate) if isEmpty(archiveUrl) then return "" end archiveUrl = archiveUrl:match("^%s*(.-)%s*$") or archiveUrl local hasProtocol = archiveUrl:match("^https?://") if not hasProtocol then archiveUrl = "https://archive.is/" .. archiveUrl end local result = string.format('<br><small>([%s Archive copy])', archiveUrl) if not isEmpty(archiveDate) then result = result .. string.format('<br>%s', archiveDate) end result = result .. '</small>' return result end function collectParametersWithSuffixes(args, paramBase, archiveBase, maxCount, altParams, altArchiveBases) local values = {} maxCount = maxCount or 4 local mainParamUsed = false for i = 1, maxCount do local suffix = i > 1 and i or "" local paramName = paramBase .. suffix if not isEmpty(args[paramName]) then mainParamUsed = true break end end if mainParamUsed then for i = 1, maxCount do local suffix = i > 1 and i or "" local paramName = paramBase .. suffix local archiveParamName = archiveBase .. suffix if not isEmpty(args[paramName]) then local entry = {username = args[paramName]} if not isEmpty(args[archiveParamName]) then entry.archive = args[archiveParamName] end table.insert(values, entry) end end else for j, altParam in ipairs(altParams or {}) do local altArchiveBase = altArchiveBases and altArchiveBases[j] or archiveBase for i = 1, maxCount do local suffix = i > 1 and i or "" local paramName = altParam .. suffix local archiveParamName = altArchiveBase .. suffix if not isEmpty(args[paramName]) then local entry = {username = args[paramName]} if not isEmpty(args[archiveParamName]) then entry.archive = args[archiveParamName] end table.insert(values, entry) end end end end return values end function p.formatPlatform(state, args, platformConfig, rowIndex) local section = {} local values = {} if platformConfig.paramBase then values = collectParametersWithSuffixes( args, platformConfig.paramBase, platformConfig.archiveBase, platformConfig.maxCount, platformConfig.altParams, platformConfig.altArchiveBases ) elseif platformConfig.types then for _, typeConfig in ipairs(platformConfig.types) do local typeValues = collectParametersWithSuffixes( args, typeConfig.paramBase, typeConfig.archiveBase, typeConfig.maxCount, typeConfig.altParams, typeConfig.altArchiveBases ) for _, val in ipairs(typeValues) do val.typeConfig = typeConfig table.insert(values, val) end end end if #values == 0 and args.qid then local entity = mw.wikibase.getEntity(args.qid) if platformConfig.pbdProp and entity and entity.claims and entity.claims[platformConfig.pbdProp] then for _, statement in ipairs(entity.claims[platformConfig.pbdProp]) do if statement.mainsnak.snaktype == "value" and statement.mainsnak.datavalue and statement.mainsnak.datavalue.type == "string" then local username = statement.mainsnak.datavalue.value local entry = {username = username, statement = statement} if statement.qualifiers and statement.qualifiers.P208 then entry.archive = statement.qualifiers.P208[1].datavalue.value end if statement.qualifiers and statement.qualifiers.P227 then local timeValue = statement.qualifiers.P227[1].datavalue.value if timeValue and timeValue.time then local year, month, day = timeValue.time:match("^[+%-](%d%d%d%d)-(%d%d)-(%d%d)") if year and month and day then entry.archiveDate = day .. " " .. os.date("%B", os.time({year=2000, month=tonumber(month), day=1})) .. " " .. year end end end table.insert(values, entry) end end elseif platformConfig.types then for _, typeConfig in ipairs(platformConfig.types) do if typeConfig.pbdProp and entity and entity.claims and entity.claims[typeConfig.pbdProp] then for _, statement in ipairs(entity.claims[typeConfig.pbdProp]) do if statement.mainsnak.snaktype == "value" and statement.mainsnak.datavalue and statement.mainsnak.datavalue.type == "string" then local username = statement.mainsnak.datavalue.value local entry = {username = username, statement = statement, typeConfig = typeConfig} if statement.qualifiers and statement.qualifiers.P208 then entry.archive = statement.qualifiers.P208[1].datavalue.value end if statement.qualifiers and statement.qualifiers.P227 then local timeValue = statement.qualifiers.P227[1].datavalue.value if timeValue and timeValue.time then local year, month, day = timeValue.time:match("^[+%-](%d%d%d%d)-(%d%d)-(%d%d)") if year and month and day then entry.archiveDate = day .. " " .. os.date("%B", os.time({year=2000, month=tonumber(month), day=1})) .. " " .. year end end end table.insert(values, entry) end end end end end end if #values > 0 then local displayValues = {} for _, entry in ipairs(values) do local urlFormat = platformConfig.urlFormat or (entry.typeConfig and entry.typeConfig.urlFormat) local displayValue if platformConfig.isFullWidth then displayValue = string.format('[%s %s]', urlFormat:format(entry.username), platformConfig.label) else displayValue = string.format('[%s %s]', urlFormat:format(entry.username), entry.username) end if platformConfig.extraFormatFunc then displayValue = platformConfig.extraFormatFunc(displayValue, entry) end if entry.archive then displayValue = displayValue .. formatArchiveInfo(entry.archive, entry.archiveDate) end table.insert(displayValues, displayValue) end local combinedDisplay = table.concat(displayValues, '<br>') if platformConfig.category then local isMainNamespace = mw.title.getCurrentTitle().namespace == 0 if isMainNamespace then combinedDisplay = combinedDisplay .. '[[Category:' .. platformConfig.category .. '|' .. mw.title.getCurrentTitle().text .. ']]' end end if platformConfig.isFullWidth then section[#section + 1] = formatFullWidthField(state, combinedDisplay, rowIndex) else local label if platformConfig.labelFunc then label = platformConfig.labelFunc() else label = platformConfig.label if platformConfig.icon then label = '[[File:' .. platformConfig.icon .. '|16px|alt=' .. platformConfig.label .. '|link=]] ' .. label .. ':' end end section[#section + 1] = formatField(state, label, combinedDisplay, platformConfig.name, rowIndex) end rowIndex = rowIndex + 1 end return section, rowIndex end function p.formatPersonalPagesSection(state, args, rowIndex) local section = {} local platformSections = {} local hasAny = false for _, platformName in ipairs(platformOrder) do local config = platforms[platformName] if config then local platformSection, newRowIndex = p.formatPlatform(state, args, config, rowIndex) if #platformSection > 0 then hasAny = true for _, line in ipairs(platformSection) do platformSections[#platformSections + 1] = line end rowIndex = newRowIndex end end end if hasAny then section[#section + 1] = string.format('|-\n! colspan="2" %s | \'\'\'Personal pages\'\'\'', state.STYLES.SECTION_HEADER) for _, line in ipairs(platformSections) do section[#section + 1] = line end end return section, rowIndex end return p
Summary:
Please note that all contributions to Porn Base Central may be edited, altered, or removed by other contributors. If you do not want your writing to be edited mercilessly, then do not submit it here.
You are also promising us that you wrote this yourself, or copied it from a public domain or similar free resource (see
Porn Base Central:Copyrights
for details).
Do not submit copyrighted work without permission!
Cancel
Editing help
(opens in new window)
Preview page with this template
Template used on this page:
Module:BioboxPersonalPages/doc
(
view source
)
Navigation menu
Personal tools
English
Not logged in
Talk
Contributions
Create account
Log in
Namespaces
Module
Discussion
English
Views
Read
Edit source
View history
More
Search
Navigation
Main page
Recent changes
Random page
Help about MediaWiki
Special pages
Tools
What links here
Related changes
Upload file
Page information
In other projects