Module: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) 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] = "" .. module .. "" if module == "Related WikiProjects" then -- Load the appropriate subpage of 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 " 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 .. '' .. 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 = " " .. require('Module:Image array')._imagearray(toc_args) .. " "

-- Adding header local header = "\n " -- top container if displaymode == "womeninred" then header = header .. " " -- intro else header = header .. " " -- intro end -- Adding project icon header = header .. "" header = header .. image .. " "	-- Adding project title header = header .. " " -- header header = header .. "" .. title .. " "   if displaymode == "womeninred" then header = header .. toc end -- Adding intro blurb header = header .. " "	header = header .. intro .. " "	-- 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 .. " "	-- Adding member box header = header .. " "	header = header .. frame:expandTemplate{ title = 'WPX participants box', args = { } } header = header .. " "	-- Closing off header header = header .. " "

-- 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