This module depends on the following other modules: |
Implements {{ Load WikiProject Modules}}
local p = {}
local function standardicon(modulename)
-- Take modulename as input, returns corresponding icon filename
-- Returns default icon if no icon is defined
-- Grow the library! Add default icons as needed by adding this line below:
-- ['MODULENAME'] = 'FILE NAME.ext',
local index = {
'default' = 'Beta icon.svg', -- default if nothing matches
'About' = 'Information Noun 176431.svg',
'About us' = 'Information Noun 176431.svg',
'Alerts' = 'Bell icon.svg',
'Article alerts' = 'Bell icon.svg',
'Article Alerts' = 'Bell icon.svg',
'Partners' = 'Handshake noun.svg',
'Partnerships' = 'Handshake noun.svg',
'Discussions' = 'Speechbubbles icon.svg',
'Events' = 'Simpleicons Business calendar-with-a-clock-time-tools.svg', -- Is this PD-shapes?
'External Links' = 'Link icon.svg',
'External links' = 'Link icon.svg',
'Links' = 'Link icon.svg',
'Maps' = 'MapPin.svg',
'Metrics' = 'ArticleCheck.svg',
'News' = 'Calendar icon 2.svg',
'Offline App' = 'Offline logo.svg',
'Press' = 'Cite newspaper.svg',
'Recent changes' = 'Clock icon.svg',
'Recent Changes' = 'Clock icon.svg',
'Recognized content' = 'RibbonPrize.svg',
'Recognized Content' = 'RibbonPrize.svg',
'Related Projects' = 'Contributions icon.svg', -- Not for use for the update bot, special use case, that expands the page
'Related WikiProjects' = 'Contributions icon.svg',
'Requests' = 'Quotes icon.svg',
'Research' = 'Microscope icon (black OCL).svg',
'Resources' = 'Cite book.svg',
'Showcase' = 'RibbonPrize.svg',
'Tasks' = 'ListBullet.svg',
'Tools' = 'Octicons-tools-minor.svg',
'Translations' = 'Translation icon.svg',
'Watchlist' = 'OpenEye icon.svg',
'Worklists' = 'ListBullet.svg',
}
for t, fn in pairs(index) do
if t == modulename then
return fn
end
end
return index'default'
end
local function editlinktest(modulename)
local no_edit_links = {'Discussions', 'Alerts', 'Showcase', 'Related WikiProjects'} -- no edit link for these standard modules
for _, l in pairs(no_edit_links) do
if l == modulename then
return 'no'
end
end
return 'yes'
end
function p.build(frame)
local title = ''
local intro = ''
local image = ''
local color = '#6af' -- default value
local displaymode = 'normal' -- default value
local modules = {}
local id
for key, value in pairs(frame:getParent().args) do -- iterate through arguments, pick out values
if key == 'title' then
title = value
elseif key == 'intro' then
intro = value
elseif key == 'image' then
image = value
elseif key == 'color' then
color = value
elseif key == 'displaymode' then
displaymode = value
elseif string.find(key, 'module') ~= nil then -- matches module1, module2, etc.
id = string.gsub(key, 'module', '')
id = tonumber(id)
modulesid = value
end
end
-- Rendering table of contents and body
local toc_args = {
width = 80,
height = 55,
'font-size' = '100%',
'margin' = 0
} -- passed into Image Array module
local body = ""
-- Load a Table of Contents entry, transclude module, for each named module
local counter = 0
local moduletitle
local moduletitle_encoded
for _, module in pairs(modules) do
counter = counter + 1
toc_args'image' .. counter = standardicon(module)
toc_args'alt' .. counter = module
if displaymode == "womeninred" then
if module == "Metrics" or module == "Showcase" or module == "About us" or module == "Press" or module == "Research" or module == "External links" then
toc_args'link' .. counter = "Wikipedia:WikiProject Women in Red/" .. module
else
toc_args'link' .. counter = "#" .. module
end
else
toc_args'link' .. counter = "#" .. module
end
toc_args'caption' .. counter = "[[" .. toc_args'link' .. counter .. "|" .. module .. "]]"
if module == "Related WikiProjects" then
-- Load the appropriate subpage of [[Wikipedia:Related WikiProjects]]
moduletitle = 'Related WikiProjects' .. '/' .. title
moduletitle_encoded = string.gsub('Wikipedia:' .. moduletitle, ' ', '_')
body = body .. "\n" .. frame:expandTemplate{ title = 'WPX header', args = { module, color = color, modulename = moduletitle_encoded, editlink = editlinktest(module) } }
body = body .. "\n" .. frame:expandTemplate{ title = "Wikipedia:Related WikiProjects/" .. title, args = {color} }
else
if displaymode == "normal" or ( displaymode == "womeninred" and module ~= "Metrics" and module ~= "Showcase" and module ~= "About us" and module ~= "Press" and module ~= "Research" and module ~= "External links" ) then
moduletitle = title .. '/' .. module
moduletitle_encoded = string.gsub('Wikipedia:' .. moduletitle, ' ', '_')
body = body .. "\n" .. frame:expandTemplate{ title = 'WPX header', args = { module, color = color, modulename = moduletitle_encoded, editlink = editlinktest(module) } }
if mw.title.makeTitle('Wikipedia', moduletitle).exists == true then
body = body .. "\n" .. frame:expandTemplate{ title = 'Wikipedia:' .. moduletitle, args = {color} } .. "\n<div style='clear:both;'></div>"
else
-- Is module in question a Standard Module? If so, load the template with corresponding editintro
if mw.title.makeTitle('Template', 'WPX module/' .. module).exists == true then
preload = '&preload=Template:WPX_module/' .. string.gsub(module, ' ', '_')
editintro = '&editintro=Template:WPX_editintro/' .. string.gsub(module, ' ', '_')
else
preload = '' -- no preload
editintro = '&editintro=Template:WPX_editintro/Generic' -- generic editintro
end
-- Create notice
create_url = '/info/en/?search=Wikipedia:' .. string.gsub(moduletitle, ' ', '_') .. '?action=edit' .. preload .. editintro
create_button = frame:expandTemplate{ title = 'Template:Clickable button 2', args = {'Create Module', url = create_url, class = 'mw-ui-progressive' } }
body = body .. '[[Wikipedia:' .. moduletitle .. ']] does not exist. ' .. create_button
end
end
end
end
toc_args'perrow' = counter -- sets length of image array to the number of icons
local toc = "<div style='margin-bottom:4em;'>" .. require('Module:Image array')._imagearray(toc_args) .. "</div><div style='clear:both;'></div>"
-- Adding header
local header = "__NOTOC__\n<div style='display: flex; flex-flow: row wrap;'>" -- top container
if displaymode == "womeninred" then
header = header .. "<div style='flex: 1 0; border-top: solid .7em " .. color .. ";'>" -- intro
else
header = header .. "<div style='flex: 1 0; padding-bottom: 3em; border-top: solid .7em " .. color .. ";'>" -- intro
end
-- Adding project icon
header = header .. "<div class='nomobile' style='float:left; margin-top: 1em; margin-right: 2em; margin-bottom: 1em; text-align: center;'>"
header = header .. image .. "</div>"
-- Adding project title
header = header .. "<div style='font-size: 120%; padding: 0;'>" -- header
header = header .. "<h1 style='font-weight: bold; border-bottom: none; margin:0; padding-top:0.5em;'>" .. title .. "</h1></div>"
if displaymode == "womeninred" then
header = header .. toc
end
-- Adding intro blurb
header = header .. "<div style='margin-top: 1em; font-size: 110%;'>"
header = header .. intro .. "</div>"
-- Adding announcement section
if mw.title.makeTitle('Wikipedia', title .. "/" .. "Announcements").exists == true then
header = header .. frame:expandTemplate{ title = 'Wikipedia:' .. title .. "/" .. "Announcements", args = { } }
end
header = header .. "</div>"
-- Adding member box
header = header .. "<div style='flex: 0 1 20em;'>"
header = header .. frame:expandTemplate{ title = 'WPX participants box', args = { } }
header = header .. "</div>"
-- Closing off header
header = header .. "</div>"
-- Assembling parts
local contents
if displaymode == "womeninred" then
contents = header .. body
else
contents = header .. toc .. body
end
return contents
end
return p
This module depends on the following other modules: |
Implements {{ Load WikiProject Modules}}
local p = {}
local function standardicon(modulename)
-- Take modulename as input, returns corresponding icon filename
-- Returns default icon if no icon is defined
-- Grow the library! Add default icons as needed by adding this line below:
-- ['MODULENAME'] = 'FILE NAME.ext',
local index = {
'default' = 'Beta icon.svg', -- default if nothing matches
'About' = 'Information Noun 176431.svg',
'About us' = 'Information Noun 176431.svg',
'Alerts' = 'Bell icon.svg',
'Article alerts' = 'Bell icon.svg',
'Article Alerts' = 'Bell icon.svg',
'Partners' = 'Handshake noun.svg',
'Partnerships' = 'Handshake noun.svg',
'Discussions' = 'Speechbubbles icon.svg',
'Events' = 'Simpleicons Business calendar-with-a-clock-time-tools.svg', -- Is this PD-shapes?
'External Links' = 'Link icon.svg',
'External links' = 'Link icon.svg',
'Links' = 'Link icon.svg',
'Maps' = 'MapPin.svg',
'Metrics' = 'ArticleCheck.svg',
'News' = 'Calendar icon 2.svg',
'Offline App' = 'Offline logo.svg',
'Press' = 'Cite newspaper.svg',
'Recent changes' = 'Clock icon.svg',
'Recent Changes' = 'Clock icon.svg',
'Recognized content' = 'RibbonPrize.svg',
'Recognized Content' = 'RibbonPrize.svg',
'Related Projects' = 'Contributions icon.svg', -- Not for use for the update bot, special use case, that expands the page
'Related WikiProjects' = 'Contributions icon.svg',
'Requests' = 'Quotes icon.svg',
'Research' = 'Microscope icon (black OCL).svg',
'Resources' = 'Cite book.svg',
'Showcase' = 'RibbonPrize.svg',
'Tasks' = 'ListBullet.svg',
'Tools' = 'Octicons-tools-minor.svg',
'Translations' = 'Translation icon.svg',
'Watchlist' = 'OpenEye icon.svg',
'Worklists' = 'ListBullet.svg',
}
for t, fn in pairs(index) do
if t == modulename then
return fn
end
end
return index'default'
end
local function editlinktest(modulename)
local no_edit_links = {'Discussions', 'Alerts', 'Showcase', 'Related WikiProjects'} -- no edit link for these standard modules
for _, l in pairs(no_edit_links) do
if l == modulename then
return 'no'
end
end
return 'yes'
end
function p.build(frame)
local title = ''
local intro = ''
local image = ''
local color = '#6af' -- default value
local displaymode = 'normal' -- default value
local modules = {}
local id
for key, value in pairs(frame:getParent().args) do -- iterate through arguments, pick out values
if key == 'title' then
title = value
elseif key == 'intro' then
intro = value
elseif key == 'image' then
image = value
elseif key == 'color' then
color = value
elseif key == 'displaymode' then
displaymode = value
elseif string.find(key, 'module') ~= nil then -- matches module1, module2, etc.
id = string.gsub(key, 'module', '')
id = tonumber(id)
modulesid = value
end
end
-- Rendering table of contents and body
local toc_args = {
width = 80,
height = 55,
'font-size' = '100%',
'margin' = 0
} -- passed into Image Array module
local body = ""
-- Load a Table of Contents entry, transclude module, for each named module
local counter = 0
local moduletitle
local moduletitle_encoded
for _, module in pairs(modules) do
counter = counter + 1
toc_args'image' .. counter = standardicon(module)
toc_args'alt' .. counter = module
if displaymode == "womeninred" then
if module == "Metrics" or module == "Showcase" or module == "About us" or module == "Press" or module == "Research" or module == "External links" then
toc_args'link' .. counter = "Wikipedia:WikiProject Women in Red/" .. module
else
toc_args'link' .. counter = "#" .. module
end
else
toc_args'link' .. counter = "#" .. module
end
toc_args'caption' .. counter = "[[" .. toc_args'link' .. counter .. "|" .. module .. "]]"
if module == "Related WikiProjects" then
-- Load the appropriate subpage of [[Wikipedia:Related WikiProjects]]
moduletitle = 'Related WikiProjects' .. '/' .. title
moduletitle_encoded = string.gsub('Wikipedia:' .. moduletitle, ' ', '_')
body = body .. "\n" .. frame:expandTemplate{ title = 'WPX header', args = { module, color = color, modulename = moduletitle_encoded, editlink = editlinktest(module) } }
body = body .. "\n" .. frame:expandTemplate{ title = "Wikipedia:Related WikiProjects/" .. title, args = {color} }
else
if displaymode == "normal" or ( displaymode == "womeninred" and module ~= "Metrics" and module ~= "Showcase" and module ~= "About us" and module ~= "Press" and module ~= "Research" and module ~= "External links" ) then
moduletitle = title .. '/' .. module
moduletitle_encoded = string.gsub('Wikipedia:' .. moduletitle, ' ', '_')
body = body .. "\n" .. frame:expandTemplate{ title = 'WPX header', args = { module, color = color, modulename = moduletitle_encoded, editlink = editlinktest(module) } }
if mw.title.makeTitle('Wikipedia', moduletitle).exists == true then
body = body .. "\n" .. frame:expandTemplate{ title = 'Wikipedia:' .. moduletitle, args = {color} } .. "\n<div style='clear:both;'></div>"
else
-- Is module in question a Standard Module? If so, load the template with corresponding editintro
if mw.title.makeTitle('Template', 'WPX module/' .. module).exists == true then
preload = '&preload=Template:WPX_module/' .. string.gsub(module, ' ', '_')
editintro = '&editintro=Template:WPX_editintro/' .. string.gsub(module, ' ', '_')
else
preload = '' -- no preload
editintro = '&editintro=Template:WPX_editintro/Generic' -- generic editintro
end
-- Create notice
create_url = '/info/en/?search=Wikipedia:' .. string.gsub(moduletitle, ' ', '_') .. '?action=edit' .. preload .. editintro
create_button = frame:expandTemplate{ title = 'Template:Clickable button 2', args = {'Create Module', url = create_url, class = 'mw-ui-progressive' } }
body = body .. '[[Wikipedia:' .. moduletitle .. ']] does not exist. ' .. create_button
end
end
end
end
toc_args'perrow' = counter -- sets length of image array to the number of icons
local toc = "<div style='margin-bottom:4em;'>" .. require('Module:Image array')._imagearray(toc_args) .. "</div><div style='clear:both;'></div>"
-- Adding header
local header = "__NOTOC__\n<div style='display: flex; flex-flow: row wrap;'>" -- top container
if displaymode == "womeninred" then
header = header .. "<div style='flex: 1 0; border-top: solid .7em " .. color .. ";'>" -- intro
else
header = header .. "<div style='flex: 1 0; padding-bottom: 3em; border-top: solid .7em " .. color .. ";'>" -- intro
end
-- Adding project icon
header = header .. "<div class='nomobile' style='float:left; margin-top: 1em; margin-right: 2em; margin-bottom: 1em; text-align: center;'>"
header = header .. image .. "</div>"
-- Adding project title
header = header .. "<div style='font-size: 120%; padding: 0;'>" -- header
header = header .. "<h1 style='font-weight: bold; border-bottom: none; margin:0; padding-top:0.5em;'>" .. title .. "</h1></div>"
if displaymode == "womeninred" then
header = header .. toc
end
-- Adding intro blurb
header = header .. "<div style='margin-top: 1em; font-size: 110%;'>"
header = header .. intro .. "</div>"
-- Adding announcement section
if mw.title.makeTitle('Wikipedia', title .. "/" .. "Announcements").exists == true then
header = header .. frame:expandTemplate{ title = 'Wikipedia:' .. title .. "/" .. "Announcements", args = { } }
end
header = header .. "</div>"
-- Adding member box
header = header .. "<div style='flex: 0 1 20em;'>"
header = header .. frame:expandTemplate{ title = 'WPX participants box', args = { } }
header = header .. "</div>"
-- Closing off header
header = header .. "</div>"
-- Assembling parts
local contents
if displaymode == "womeninred" then
contents = header .. body
else
contents = header .. toc .. body
end
return contents
end
return p