local p = {}
-- Создаем таблицу сайтов
local sites = {
website1 = {
url = 'https://website1.com/',
updatesUrl = 'https://website1.com/updates/',
modelsUrl = 'https://website1.com/models/',
category = 'Network1',
},
website2 = {
url = 'https://website2.com/',
updatesUrl = 'https://website2.com/scene/',
modelsUrl = 'https://website2.com/people/',
category = 'Network2',
},
website3 = {
url = 'https://website3.com/',
updatesUrl = 'https://website3.com/videos/',
modelsUrl = 'https://website3.com/performers/',
category = 'Network3',
},
-- Добавьте больше сайтов здесь по необходимости
}
-- Функция для обработки каждого сайта
function p.site(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:SiteList'})
local site, error = getSite(args.site and sites[args.site:lower()]
if siteerror 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')
if args.sceneid then
local archiveNotice = isArchived and " <small>(''Website archived'')</small>" or ''
url = site.updatesUrl .. args.sceneid .. '.html'
elseif args.id then
if isArchived url =and site.modelsUrlarchiveURL ..and argssite.idarchiveURL ..~= '.html' 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="text-alignwidth:center 0px;vertical-align padding:middle 0px; border: none;" | %s\n',
args[1] == 'Studio' and 'Studio' or 'Website'style,
siteType and siteType:gsub("^%l", string.upper) or 'Website',
string.format('[%s %s] <small>([[:Category:%s|%s]])</small>', url, args.site, site.category, site.category),
linkOrLabel,
categoryLink,
alias,
notes
)
local ns = mw.title.getCurrentTitle().namespace
-- Добавление в категории в зависимости от пространства имен
if ns == 0 then
local ns = mw.title.getCurrentTitle().namespace
if nstype(site.category) == 0"table" then
for _, cat in pairs(site.category) do
result = result .. '[[Category:Articles in the mainspace using Template:SiteList]]'
elseif ns = if cat ~= 2'' then
result = result .. '[[Category:Articles' in.. thecat userspace.. using Template:SiteList']]'
elseif ns == 118 thenend
end
result = result .. '[[Category:Drafts using Template:SiteList]]'
elseif site.category ~= '' endthen
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)
return mw.text.nowiki('{{SiteList}}') .. ' Error: invalid site parameter'
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
|