case 'bn': $wgLanguageCode = "bn"; $wgServer = "https://bn.worldpedia.org"; $wgCanonicalServer = "https://bn.worldpedia.org"; $wgSitename = "ওয়ার্ল্ডপিডিয়া"; $wgSiteSlogan = "একটি মুক্ত বিশ্বকোষ!"; $wgTimezone = "GMT+6"; $wgFavicon = "$wgScriptPath/resources/assets/wikibedia-favicon.svg"; $wgRightsText = "ক্রিয়েটিভ কমন্স অ্যাট্রিবিউশন-শেয়ারঅ্যালাইক ৪.০ লাইসেন্স"; $wgExtraRandompageSQL = "page_title LIKE 'বাংলা:%'"; $wgHooks['SkinAddFooterLinks'][] = function ( Skin $skin, string $key, array &$footerlinks ) { if ( in_array( $key, ['places', 'mobile'] ) ) { $links = [ 'যোগাযোগ-ওয়ার্ল্ডপিডিয়া' => [ 'https://bn.worldpedia.org/wiki/Worldpedia:Contact_us', 'Contact Worldpedia' ], 'আচরণবিধি' => [ 'https://foundation.wikimedia.org/wiki/Policy:Universal_Code_of_Conduct/bn', 'Code of Conduct' ], 'উন্নয়নকারী' => [ 'https://developer.wikimedia.org/bn', 'Developers' ], 'পরিসংখ্যান' => [ 'https://stats.wikimedia.org/#/bn.wikipedia.org', 'Statistics' ], 'কুকির বিবৃতি' => [ 'https://foundation.wikimedia.org/wiki/Policy:Cookie_statement/bn', 'Cookie statement' ] ]; foreach ( $links as $key => $data ) { list( $url, $text ) = $data; $footerlinks[$key] = Html::rawElement( 'a', [ 'href' => $url, 'rel' => 'nofollow', 'target' => '_blank' ], $text ); } } }; $wgLogos = [ '1x' => "https://upload.wikimedia.org/wikipedia/commons/e/e5/Wikipedia-logo-v2-bn.svg", 'wordmark' => [ "src" => "https://worldpedia.org/logo/Worldpedia-wordmark-bangla-A0.svg", "width" => 122, "height" => 27, ], 'tagline' => [ "src" => "https://bn.wikipedia.org/static/images/mobile/copyright/wikipedia-tagline-bn.svg", "width" => 117, "height" => 13 ], 'icon' => "https://bn.wikipedia.org/static/images/icons/wikipedia.png", ]; break; Module:Arguments: Difference between revisions - Worldpedia Jump to content

Module:Arguments: Difference between revisions

From Worldpedia, the free encyclopedia
create argument-processing module
 
return a table rather than a function, improve the comments
Line 1: Line 1:
-- This module provides easy processing of arguments passed to Scribunto from #invoke.
-- This module provides easy processing of arguments passed to Scribunto from #invoke.
-- It is intended for use by other Lua modules, and should not be called from #invoke directly.


local function getArguments(frame, options)
local arguments = {}
 
function arguments.getArgs(frame, options)
options = type(options) == 'table' and options or {}
options = type(options) == 'table' and options or {}


-- Get the arguments from the frame object if available. If the frame object is not available, we are being called
-- from another Lua module or from the debug console, so assume arguments are passed directly in.
local fargs, pargs
local fargs, pargs
if frame == mw.getCurrentFrame() then
if frame == mw.getCurrentFrame() then
Line 31: Line 36:
end
end


-- Use a user-generated functions to tidy the values if specified.
local valueFunc = options.valueFunc
local valueFunc = options.valueFunc
if valueFunc then
if valueFunc then
Line 54: Line 60:
end
end


-- Set the order of precedence of frame args and parent args.
local firstArgs, secondArgs = fargs, pargs
local firstArgs, secondArgs = fargs, pargs
if options.parentFirst then
if options.parentFirst then
Line 59: Line 66:
end
end


-- Define metatable behaviour.
metatable.__index = function (t, key)
metatable.__index = function (t, key)
local val = metaArgs[key]
local val = metaArgs[key]
Line 99: Line 107:
end
end


return getArguments
return arguments

Revision as of 08:19, 9 December 2013

This module provides easy processing of arguments passed from #invoke. It is a meta-module, meant for use by other modules, and should not be called from #invoke directly (for a module directly invocable by templates you might want to have a look at Template:Ml). Its features include:

  • Easy trimming of arguments and removal of blank arguments.
  • Arguments can be passed by both the current frame and by the parent frame at the same time. (More details below.)
  • Arguments can be passed in directly from another Lua module or from the debug console.
  • Most features can be customized.

-- This module provides easy processing of arguments passed to Scribunto from #invoke.
-- It is intended for use by other Lua modules, and should not be called from #invoke directly.

local arguments = {}

function arguments.getArgs(frame, options)
	options = type(options) == 'table' and options or {}

	-- Get the arguments from the frame object if available. If the frame object is not available, we are being called
	-- from another Lua module or from the debug console, so assume arguments are passed directly in.
	local fargs, pargs
	if frame == mw.getCurrentFrame() then
		fargs = frame.args
		pargs = frame:getParent().args
	else
		fargs = type(frame) == 'table' and frame or {}
		pargs = {}
	end

	local args, metaArgs, metatable = {}, {}, {}
	setmetatable(args, metatable)

	local function tidyVal(key, val)
		-- Processes a value according to the options given to getArguments. Can trim whitespace and remove blanks.
		-- Keys are not used here, but they can be used by user-generated functions, so defining it here to avoid breakage.
		if type(val) == 'string' then
			if options.trim ~= false then
				val = mw.text.trim(val)
			end
			if options.removeBlanks == false or mw.ustring.find(val, '%S') then
				return val
			end
		else
			return val
		end
	end

	-- Use a user-generated functions to tidy the values if specified.
	local valueFunc = options.valueFunc
	if valueFunc then
		local valueFuncType = type(valueFunc)
		if valueFuncType == 'function' then
			tidyVal = valueFunc
		else
			error('type error in option "valueFunc": expected function, got ' .. valueFuncType, 2)
		end
	end

	local function mergeArgs(iterator, ...)
		-- Accepts multiple tables as input and merges their keys and values into one table using the specified iterator.
		-- If a value is already present it is not overwritten; tables listed earlier have precendence.
		local tables = {...}
		for _, t in ipairs(tables) do
			for key, val in iterator(t) do
				if metaArgs[key] == nil then
					metaArgs[key] = tidyVal(key, val)
				end
			end
		end
	end

	-- Set the order of precedence of frame args and parent args.
	local firstArgs, secondArgs = fargs, pargs
	if options.parentFirst then
		firstArgs, secondArgs = pargs, fargs
	end

	-- Define metatable behaviour.
	metatable.__index = function (t, key)
		local val = metaArgs[key]
		if val ~= nil then
			return val
		else
			local firstVal = tidyVal(key, firstArgs[key])
			if firstVal ~= nil then
				return firstVal
			else
				return tidyVal(key, secondArgs[key])
			end
		end
	end

	metatable.__newindex = function (t, key, val)
		if not options.readOnly and (not options.noOverwrite or metaArgs[key] == nil) then
			metaArgs[key] = val
		end
	end

	metatable.__pairs = function ()
		if not metatable.donePairs then
			mergeArgs(pairs, firstArgs, secondArgs)
			metatable.donePairs = true
			metatable.doneIpairs = true
		end
		return pairs(metaArgs)
	end

	metatable.__ipairs = function ()
		if not metatable.doneIpairs then
			mergeArgs(ipairs, firstArgs, secondArgs)
			metatable.doneIpairs = true
		end
		return ipairs(metaArgs)
	end
	
	return args
end

return arguments