Module:Load WikiProject Modules
| This module depends on the following other modules: |
| This page was a component of WikiProject X, a project that is now defunct. |
Implements {{Load WikiProject Modules}}
Can be called directly using {{#invoke:Load WikiProject Modules|invoke|parameters}}
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',
['Assessments'] = '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)
modules[id] = 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 = 'https://en.wikipedia.org/wiki/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
function p.invoke(frame)
return p.build(frame:newChild{title = frame:getTitle()})
end
return p
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.