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',
		['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.

  1. 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:
  2. 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.
  3. 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.
  4. 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.
  5. Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.