Module:SiteList: Difference between revisions

From Porn Base Central
Jump to navigation Jump to search
No edit summary
Tags: Manual revert Reverted
No edit summary
 
(157 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


function p.list(frame)
function p.site(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:SiteList'})
local args = frame:getParent().args
local siteType = args[1] or ''
local site, error = getSite(args.site)
local site = args['site'] or ''
local id = args['id'] or ''
local sceneid = args['sceneid'] or ''
local alias = args['alias'] or ''
local notes = args['notes'] or 'N/A'


if error then
-- Создаем словарь соответствий для сайтов
return string.format('|-\n| colspan="4" style="text-align:center;vertical-align:middle;color:red;font-weight:bold;" | %s \n| style="width: 0px; padding: 0px; border: none;" |\n', error)
local siteData = mw.loadData('Module:SiteDictionary')
elseif site then
local siteInfo = siteData[site]
local url = site.url
local isArchived = site.archived and (site.archived == 'yes' or site.archived == 'y')
local archiveNotice = isArchived and " <small>(''Website archived'')</small>" or ''
if isArchived and site.archiveURL and site.archiveURL ~= '' then
url = site.archiveURL
elseif isArchived then
url = ''
else
if url ~= '' then
if args.sceneid and site.sceneUrl ~= '' then
url = site.sceneUrl .. args.sceneid .. site.suffix
elseif args.id and site.modelUrl ~= '' then
url = site.modelUrl .. args.id .. site.suffix
end
end
end


local alias = args.alias or '<div style="font-size: 1em;">' .. mw.title.getCurrentTitle().text .. '</div>'
local websiteText = "None"
local notes = args.notes and '<div style="font-size: 1em;">' .. args.notes .. '</div>' or '<div style="font-size: 1em;">N/A</div>'
if siteInfo then
local categoryLink = site.network and site.network ~= '' and string.format(" <small>([[:Category:%s|'''%s''']])</small>", site.network, site.network) or ''
websiteText = string.format(
siteInfo.template,
local siteType = site.sitetype or args[1]
local style
sceneid ~= '' and sceneid or id ~= '' and id or '',

siteInfo.name
if siteType == nil or siteType == '' then
siteType = 'Invalid type'
style = 'background-color:#E7E7E7;text-align:center;color:red;font-weight:bold'
elseif siteType:lower() == 'studio' then
style = 'background-color:#DADADA;text-align:center;color:black;font-weight:bold'
else
style = 'background-color:#E7E7E7;text-align:center;color:black;font-weight:bold'
end

local linkOrLabel
if url ~= '' then
if site.idtonum and (site.idtonum == 'yes' or site.idtonum == 'y') and args.id then
linkOrLabel = string.format('[%s %s #%s]%s', url, site.label, args.id, archiveNotice)
else
linkOrLabel = string.format('[%s %s]%s', url, site.label, archiveNotice)
end
else
linkOrLabel = site.label .. archiveNotice
end

if site.list and site.list ~= '' then
linkOrLabel = linkOrLabel .. string.format(' ([[%s|LIST]])', site.list)
end

local result = string.format(
'|-\n| style="%s" | %s\n| style="text-align:center;vertical-align:middle;" | %s%s\n| style="text-align:center;vertical-align:middle;" | %s\n| style="text-align:center;vertical-align:middle;" | %s\n| style="width: 0px; padding: 0px; border: none;" |\n',
style,
siteType and siteType:gsub("^%l", string.upper) or 'Website',
linkOrLabel,
categoryLink,
alias,
notes
)
)
end


local ns = mw.title.getCurrentTitle().namespace
-- Выбираем тип и форматируем данные
if ns == 0 then
local typeText = ''
if type(site.category) == "table" then
local backgroundColor = ''
for _, cat in pairs(site.category) do
if cat ~= '' then
result = result .. '[[Category:' .. cat .. ']]'
end
end
elseif site.category ~= '' then
result = result .. '[[Category:' .. site.category .. ']]'
end
result = result .. '[[Category:Articles in the mainspace using Template:SiteList]]'
elseif ns == 2 then
result = result .. '[[Category:Articles in the userspace using Template:SiteList]]'
elseif ns == 118 then
result = result .. '[[Category:Drafts using Template:SiteList]]'
end


return result
if string.lower(siteType) == 'website' then
typeText = 'Website'
backgroundColor = '#E7E7E7'
elseif string.lower(siteType) == 'studio' then
typeText = 'Studio'
backgroundColor = '#DADADA'
else
else
return string.format('|-\n| colspan="4" style="text-align:center;vertical-align:middle;color:red;font-weight:bold;" | Error: invalid site parameter: %s. See [[PBC:SiteList|PBC:SiteList for documentation]] \n| style="width: 0px; padding: 0px; border: none;" |\n', args.site)
typeText = siteType
end
end
end


function table.contains(table, element)
-- Проверяем пространство имен и добавляем категорию
for _, value in pairs(table) do
local title = mw.title.getCurrentTitle()
local category = ''
if value == element then
return true
if title.namespace == 0 then
category = '[[Category:Website' .. siteInfo.id .. ' models]]'
end
end
end
return false
end


function getSite(name)
-- Строим результат
local result = string.format([[
local firstLetter = name:sub(1, 1):upper()
local success, siteDictModule = pcall(require, 'Module:SiteDict/' .. firstLetter)
|-

| style="text-align:center;vertical-align:middle; background-color:%s;text-align:center;color:black" | '''%s'''
if success then
| style="text-align:center;vertical-align:middle;" | %s
local matchedSites = {}
| style="text-align:center;vertical-align:middle;" | %s
for _, site in pairs(siteDictModule.sites) do
| style="text-align:center;vertical-align:middle;" | <small>%s</small>
if site.label:lower() == name:lower() or table.contains(site.aliases, name:lower()) then
%s
table.insert(matchedSites, site)
]], backgroundColor, typeText, websiteText, alias ~= '' and alias or mw.title.getCurrentTitle().text, notes, category)
end
end

if #matchedSites > 1 then
return nil, 'Error: Duplicate sites found in module. Please check the module for errors.'
elseif #matchedSites == 1 then
return matchedSites[1]
end
else
mw.log('Could not load module: ' .. 'Module:SiteDict/' .. firstLetter)
end


return result
return nil
end
end



Latest revision as of 12:03, 23 July 2023

Documentation for this module may be created at Module:SiteList/doc

local p = {}

function p.site(frame)
    local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:SiteList'})
    local site, error = getSite(args.site)

    if error then
        return string.format('|-\n| colspan="4" style="text-align:center;vertical-align:middle;color:red;font-weight:bold;" | %s \n| style="width: 0px; padding: 0px; border: none;" |\n', error)
    elseif site then
        local url = site.url
        local isArchived = site.archived and (site.archived == 'yes' or site.archived == 'y')
        local archiveNotice = isArchived and " <small>(''Website archived'')</small>" or ''
        
        if isArchived and site.archiveURL and site.archiveURL ~= '' then
            url = site.archiveURL
        elseif isArchived then
            url = ''
        else
            if url ~= '' then
                if args.sceneid and site.sceneUrl ~= '' then
                    url = site.sceneUrl .. args.sceneid .. site.suffix
                elseif args.id and site.modelUrl ~= '' then
                    url = site.modelUrl .. args.id .. site.suffix
                end
            end
        end

        local alias = args.alias or '<div style="font-size: 1em;">' .. mw.title.getCurrentTitle().text .. '</div>'
        local notes = args.notes and '<div style="font-size: 1em;">' .. args.notes .. '</div>' or '<div style="font-size: 1em;">N/A</div>'
        local categoryLink = site.network and site.network ~= '' and string.format(" <small>([[:Category:%s|'''%s''']])</small>", site.network, site.network) or ''
        local siteType = site.sitetype or args[1]
        local style

        if siteType == nil or siteType == '' then
            siteType = 'Invalid type'
            style = 'background-color:#E7E7E7;text-align:center;color:red;font-weight:bold'
        elseif siteType:lower() == 'studio' then
            style = 'background-color:#DADADA;text-align:center;color:black;font-weight:bold'
        else
            style = 'background-color:#E7E7E7;text-align:center;color:black;font-weight:bold'
        end

        local linkOrLabel
        if url ~= '' then
            if site.idtonum and (site.idtonum == 'yes' or site.idtonum == 'y') and args.id then
                linkOrLabel = string.format('[%s %s #%s]%s', url, site.label, args.id, archiveNotice)
            else
                linkOrLabel = string.format('[%s %s]%s', url, site.label, archiveNotice)
            end
        else
            linkOrLabel = site.label .. archiveNotice
        end

        if site.list and site.list ~= '' then
            linkOrLabel = linkOrLabel .. string.format(' ([[%s|LIST]])', site.list)
        end

        local result = string.format(
            '|-\n| style="%s" | %s\n| style="text-align:center;vertical-align:middle;" | %s%s\n| style="text-align:center;vertical-align:middle;" | %s\n| style="text-align:center;vertical-align:middle;" | %s\n| style="width: 0px; padding: 0px; border: none;" |\n',
            style,
            siteType and siteType:gsub("^%l", string.upper) or 'Website',
            linkOrLabel,
            categoryLink,
            alias,
            notes
        )

		local ns = mw.title.getCurrentTitle().namespace
		if ns == 0 then
		    if type(site.category) == "table" then
		        for _, cat in pairs(site.category) do
		            if cat ~= '' then
		                result = result .. '[[Category:' .. cat .. ']]'
		            end
		        end
		    elseif site.category ~= '' then
		        result = result .. '[[Category:' .. site.category .. ']]'
		    end
		    result = result .. '[[Category:Articles in the mainspace using Template:SiteList]]'
		elseif ns == 2 then
		    result = result .. '[[Category:Articles in the userspace using Template:SiteList]]'
		elseif ns == 118 then
		    result = result .. '[[Category:Drafts using Template:SiteList]]'
		end

        return result
    else
        return string.format('|-\n| colspan="4" style="text-align:center;vertical-align:middle;color:red;font-weight:bold;" | Error: invalid site parameter: %s. See [[PBC:SiteList|PBC:SiteList for documentation]] \n| style="width: 0px; padding: 0px; border: none;" |\n', args.site)
    end
end

function table.contains(table, element)
  for _, value in pairs(table) do
    if value == element then
      return true
    end
  end
  return false
end

function getSite(name)
    local firstLetter = name:sub(1, 1):upper()
    local success, siteDictModule = pcall(require, 'Module:SiteDict/' .. firstLetter)

    if success then
        local matchedSites = {}
        for _, site in pairs(siteDictModule.sites) do
            if site.label:lower() == name:lower() or table.contains(site.aliases, name:lower()) then
                table.insert(matchedSites, site)
            end
        end

        if #matchedSites > 1 then
            return nil, 'Error: Duplicate sites found in module. Please check the module for errors.'
        elseif #matchedSites == 1 then
            return matchedSites[1]
        end
    else
        mw.log('Could not load module: ' .. 'Module:SiteDict/' .. firstLetter)
    end

    return nil
end

return p