Module:SiteList: Difference between revisions

From Porn Base Central
Jump to navigation Jump to search
Content deleted Content added
No edit summary
No edit summary
 
(153 intermediate revisions by the same user not shown)
Line 1: Line 1:
local p = {}
local p = {}


local function createURL(site, id, sceneid)
function p.site(frame)
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:SiteList'})
site = string.lower(site) -- приводим имя сайта к нижнему регистру
local site_data = mw.loadData('Module:SiteDictionary')[site]
local site, error = getSite(args.site)
if site_data then
local url = site_data.base_url


if sceneid then
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)
url = url .. string.format(site_data.scene_url, sceneid)
elseif id then
elseif site then
url = url .. string.format(site_data.id_url, id)
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
end


local alias = args.alias or '<div style="font-size: 1em;">' .. mw.title.getCurrentTitle().text .. '</div>'
return url
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
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 ''
end
end
end
end


function p.siteList(frame)
function table.contains(table, element)
for _, value in pairs(table) do
local args = require('Module:Arguments').getArgs(frame, {wrappers = 'Template:SiteList'})
local site = args.site or ""
if value == element then
local id = args.id or ""
return true
end
local sceneid = args.sceneid or ""
end
local alias = args.alias or mw.title.getCurrentTitle().text
return false
local notes = args.notes or "N/A"
end


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


if success then
local output = '<tr><td>' .. site .. '</td><td><a href="' .. url .. '">' .. site .. '</a></td><td>' .. alias .. '</td><td>' .. notes .. '</td></tr>'
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 output
return nil
end
end



Latest revision as of 09: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