Permanently protected module
From Wikipedia, the free encyclopedia


-- This module implements {{clickable button 2}}.



local yesno = require('Module:Yesno')

local delink = require('Module:Delink')._delink



local p = {}



function p.main(frame)

	local getArgs = require('Module:Arguments').getArgs

	local args = getArgs(frame)

	return p._main(args)

end



function p._main(args)

	-- If first arg or a url is not provided,

	-- but we have a second arg, make a button.

	-- Otherwise, return nothing.

	args.originalInput = args1

	args1 = delink({args1]})

	if args1 == "" then

		args1 = nil

	end



	if not args1 and not args.url then

		if args2 then

			p.nolink = true

		else

			return ''

		end

	end



	local data = p.makeLinkData(args)

	local link = p.renderLink(args.originalInput, data)

	local trackingCategories = p.renderTrackingCategories(args)

	return link .. trackingCategories

end



function p.makeLinkData(args)

	local data = {}



	-- Get the link and display values,

	-- and find whether we are outputting

	-- a wikilink or a URL.

	if args.url then

		data.isUrl = true

		data.link = args.url

		if args1 then

			data.display = args1

		elseif args2 then

			data.display = args2

		else

			data.display = args.url

			p.urlisdisplay = true

		end

	else

		data.isUrl = false

		p.urlisdisplay = false

		data.link = args1

		if args2 then

			data.display = args2

		else

			data.display = args1

		end

		if args1 and args1]:find('http') then

			data.isUrl = true

		end

	end

	

	if yesno(args.link) == false then

		p.nolink = true

	end



	-- Colours

	-- For the merge with {{clickable button}}

	local colour = args.color and args.color:lower()



	-- Classes

	local class = args.class and args.class:lower()

	data.classes = {}

	if class == 'ui-button-green'

		or class == 'ui-button-blue'

		or class == 'ui-button-red'

	then

		table.insert(

			data.classes,

			'submit ui-button ui-widget ui-state-default ui-corner-all'

				.. ' ui-button-text-only ui-button-text'

		)

	else

		table.insert(data.classes, 'mw-ui-button')

	end

	

	--If class is unset,

	--then let color determine class

	if not class then

		if colour == 'blue' then

			class = 'mw-ui-progressive'

		elseif colour == 'red' then

			class = 'mw-ui-destructive'

		elseif colour == 'green' then

			class = 'mw-ui-constructive'

		end

	end

	

	if class then

		table.insert(data.classes, class)

	end



	-- Styles

	do

		--[[

		-- Check whether we are on the same page as we have specified in

		-- args[1], but not if we are using a URL link, as then args[1] is only

		-- a display value. If we are currently on the page specified in

		-- args[1] make the button colour darker so that it stands out from

		-- other buttons on the page.

		--]]

		local success, linkTitle, currentTitle

		if not data.isUrl then

			currentTitle = mw.title.getCurrentTitle()

			success, linkTitle = pcall(mw.title.new, args1])

		elseif p.urlisdisplay then

			currentTitle = mw.title.getCurrentTitle()

		end

		if success

			and linkTitle

			and mw.title.equals(currentTitle, linkTitle)

			and not p.urlisdisplay

		then

			if class == 'ui-button-blue'

				or class == 'mw-ui-progressive'

				or class == 'mw-ui-constructive'

			then

				data.backgroundColor = '#2962CB'

				data.color = '#fff'

			elseif class == 'ui-button-green' then

				data.backgroundColor = '#008B6D'

			elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then

				data.backgroundColor = '#A6170F'

			else

				data.backgroundColor = '#CCC'

				data.color = '#666'

			end

		elseif p.urlisdisplay then

			data.dummyLink = tostring(currentTitle)

		end

		-- Add user-specified styles.

		data.style = args.style

	end

	return data

end



function p.renderLink(originalInput, data)

	-- Render the display span tag.

	local display

	do

		local displaySpan = mw.html.create('span')

		for i, class in ipairs(data.classes or {}) do

			displaySpan:addClass(class)

		end



		displaySpan

			:css{

				'background-color' = data.backgroundColor,

				color = data.color

			}

		if data.style then

			displaySpan:cssText(data.style)

		end

		displaySpan:wikitext(data.display)

		display = tostring(displaySpan)

	end



	-- Render the link

	local link

	if originalInput and originalInput:find('|') then

		link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)

	elseif p.nolink then

		if p.urlisdisplay then

			link = string.format('[[%s|%s]]', data.dummyLink, display)

		else

			link = string.format('%s', display)

		end

	else

		if data.isUrl then

			link = string.format('[%s %s]', data.link, display)

		else

			link = string.format('[[%s |%s]]', data.link, display)

		end

	end



	return string.format('<span class="plainlinks clickbutton">%s</span>', link)

end



function p.renderTrackingCategories(args)

	if yesno(args.category) == false then

		return ''

	end

	local class = args.class and args.class:lower()

	if class == 'ui-button-green'

		or class == 'ui-button-blue'

		or class == 'ui-button-red'

	then

		return '[[Category:Pages using old style ui-button-color]]'

	else

		return ''

	end

end



return p
Permanently protected module
From Wikipedia, the free encyclopedia


-- This module implements {{clickable button 2}}.



local yesno = require('Module:Yesno')

local delink = require('Module:Delink')._delink



local p = {}



function p.main(frame)

	local getArgs = require('Module:Arguments').getArgs

	local args = getArgs(frame)

	return p._main(args)

end



function p._main(args)

	-- If first arg or a url is not provided,

	-- but we have a second arg, make a button.

	-- Otherwise, return nothing.

	args.originalInput = args1

	args1 = delink({args1]})

	if args1 == "" then

		args1 = nil

	end



	if not args1 and not args.url then

		if args2 then

			p.nolink = true

		else

			return ''

		end

	end



	local data = p.makeLinkData(args)

	local link = p.renderLink(args.originalInput, data)

	local trackingCategories = p.renderTrackingCategories(args)

	return link .. trackingCategories

end



function p.makeLinkData(args)

	local data = {}



	-- Get the link and display values,

	-- and find whether we are outputting

	-- a wikilink or a URL.

	if args.url then

		data.isUrl = true

		data.link = args.url

		if args1 then

			data.display = args1

		elseif args2 then

			data.display = args2

		else

			data.display = args.url

			p.urlisdisplay = true

		end

	else

		data.isUrl = false

		p.urlisdisplay = false

		data.link = args1

		if args2 then

			data.display = args2

		else

			data.display = args1

		end

		if args1 and args1]:find('http') then

			data.isUrl = true

		end

	end

	

	if yesno(args.link) == false then

		p.nolink = true

	end



	-- Colours

	-- For the merge with {{clickable button}}

	local colour = args.color and args.color:lower()



	-- Classes

	local class = args.class and args.class:lower()

	data.classes = {}

	if class == 'ui-button-green'

		or class == 'ui-button-blue'

		or class == 'ui-button-red'

	then

		table.insert(

			data.classes,

			'submit ui-button ui-widget ui-state-default ui-corner-all'

				.. ' ui-button-text-only ui-button-text'

		)

	else

		table.insert(data.classes, 'mw-ui-button')

	end

	

	--If class is unset,

	--then let color determine class

	if not class then

		if colour == 'blue' then

			class = 'mw-ui-progressive'

		elseif colour == 'red' then

			class = 'mw-ui-destructive'

		elseif colour == 'green' then

			class = 'mw-ui-constructive'

		end

	end

	

	if class then

		table.insert(data.classes, class)

	end



	-- Styles

	do

		--[[

		-- Check whether we are on the same page as we have specified in

		-- args[1], but not if we are using a URL link, as then args[1] is only

		-- a display value. If we are currently on the page specified in

		-- args[1] make the button colour darker so that it stands out from

		-- other buttons on the page.

		--]]

		local success, linkTitle, currentTitle

		if not data.isUrl then

			currentTitle = mw.title.getCurrentTitle()

			success, linkTitle = pcall(mw.title.new, args1])

		elseif p.urlisdisplay then

			currentTitle = mw.title.getCurrentTitle()

		end

		if success

			and linkTitle

			and mw.title.equals(currentTitle, linkTitle)

			and not p.urlisdisplay

		then

			if class == 'ui-button-blue'

				or class == 'mw-ui-progressive'

				or class == 'mw-ui-constructive'

			then

				data.backgroundColor = '#2962CB'

				data.color = '#fff'

			elseif class == 'ui-button-green' then

				data.backgroundColor = '#008B6D'

			elseif class == 'ui-button-red' or class == 'mw-ui-destructive' then

				data.backgroundColor = '#A6170F'

			else

				data.backgroundColor = '#CCC'

				data.color = '#666'

			end

		elseif p.urlisdisplay then

			data.dummyLink = tostring(currentTitle)

		end

		-- Add user-specified styles.

		data.style = args.style

	end

	return data

end



function p.renderLink(originalInput, data)

	-- Render the display span tag.

	local display

	do

		local displaySpan = mw.html.create('span')

		for i, class in ipairs(data.classes or {}) do

			displaySpan:addClass(class)

		end



		displaySpan

			:css{

				'background-color' = data.backgroundColor,

				color = data.color

			}

		if data.style then

			displaySpan:cssText(data.style)

		end

		displaySpan:wikitext(data.display)

		display = tostring(displaySpan)

	end



	-- Render the link

	local link

	if originalInput and originalInput:find('|') then

		link = string.format('[[%s|%s]]', delink({originalInput, wikilinks = 'target'}), display)

	elseif p.nolink then

		if p.urlisdisplay then

			link = string.format('[[%s|%s]]', data.dummyLink, display)

		else

			link = string.format('%s', display)

		end

	else

		if data.isUrl then

			link = string.format('[%s %s]', data.link, display)

		else

			link = string.format('[[%s |%s]]', data.link, display)

		end

	end



	return string.format('<span class="plainlinks clickbutton">%s</span>', link)

end



function p.renderTrackingCategories(args)

	if yesno(args.category) == false then

		return ''

	end

	local class = args.class and args.class:lower()

	if class == 'ui-button-green'

		or class == 'ui-button-blue'

		or class == 'ui-button-red'

	then

		return '[[Category:Pages using old style ui-button-color]]'

	else

		return ''

	end

end



return p

Videos

Youtube | Vimeo | Bing

Websites

Google | Yahoo | Bing

Encyclopedia

Google | Yahoo | Bing

Facebook