Jump to content

Մոդուլ:Քույրհղումներ

Վիքիպեդիայից՝ ազատ հանրագիտարանից

Documentation for this module may be created at Մոդուլ:Քույրհղումներ/doc

local p = {};

-- Configuration data
local config = require( 'Մոդուլ:Քույրհղումներ/config' );

-- Modules 
local getArgs = require( 'Module:Arguments' ).getArgs;
local errorMsg = require( 'Module:Error' ).error;
local yesno = require( 'Module:Yesno' );

-- Variables
local modules = {};

-- Helpers
local function formatProject( frame, args, item )
	local out = '';
	local context = frame;

	local entityId
	if args.from and args.from ~= '' then
		entityId = args.from
	else
		entityId = mw.wikibase.getEntityIdForCurrentPage()
	end

	if entityId and item.sitelink then
		item.value = mw.wikibase.getSitelink( entityId, item.sitelink )
	elseif item[ 'module' ] and item[ 'function' ] then
		if modules[ item[ 'module' ] ] == nil then
			modules[ item[ 'module' ] ] = require( 'Module:' .. item[ 'module' ] );
		end

		context.args = item[ 'args' ] or {}
		context.args.from = entityId

		item.wikiValue = modules[ item[ 'module' ] ][ item[ 'function' ] ]( context );
		-- add wiki prefix
		if item.wikiValue ~= nil and item.wikiValue ~= '' and item.wikiPrefix ~= nil and item.wikiPrefix ~= '' then
			item.wikiValue = item.wikiPrefix.. ':' .. item.wikiValue;
		end
		-- override value if local value does not exist
		if item.value == nil or item.value == '' then
			item.value = item.wikiValue;
		end
	end
	
	if item.value ~= nil and item.value ~= '' then
		-- format prefix
		if string.find( item.value, '^' .. item.prefix .. ':' ) ~= nil then
			item.prefixFormatted = '';
		else
			item.prefixFormatted = item.prefix .. ':';
		end
		-- replace variables
		if item.text ~= nil and item.text ~= '' then
			item.text = string.gsub( item.text, '%$1', '[[' .. item.prefixFormatted .. item.value .. '|' .. mw.title.getCurrentTitle().text  .. ']]' );
		end
		-- format image
		if item.imageTemplate ~= nil and item.imageTemplate ~= '' then
			item.imageFormatted = frame:expandTemplate{ title = item.imageTemplate, args = { item.value, size = config.params.itemImageSize } };
		elseif item.image ~= nil and item.image ~= '' then
			item.imageFormatted = '[[File:' .. item.image .. '|link=|alt=|' .. config.params.itemImageSize .. 'px]]';
		end
		-- format wikilink
		if item.text ~= nil then
			out = out .. item.text;
		end
	end
	
	return out;
end

local function formatCategory( value )
	return '[[Category:' .. value .. ']]';
end

local function getParamsList( frame, args, list )
	local result = {};
	
	for i, item in ipairs( list ) do
		local value = args[item.id];
		if value == nil or value ~= '-' then
			item.localValue = value;
			item.value = value;
			item.formatted = formatProject( frame, args, item );
			if item.formatted ~= '' then
				table.insert( result, item );
			end
		end
	end
	
	return result;
end

-- Renders
local function renderProjects( frame, list )
	local res = mw.html.create();
	
	for i, item in ipairs( list ) do
		-- wrapper
		local tbl = res:tag( 'table' )
			:addClass( 'toccolours' )
			:css('width', '100%');

		local tr = tbl:tag('tr');
		
		local image = tr:tag('td'):css('width', 'auto'):wikitext(item.imageFormatted);
		local content = tr:tag('td'):css('width', '100%'):wikitext(item.formatted);
	end
	
	return res;
end

local function render( frame, interprojects )
	local interprojectsFormatted = renderProjects( frame, interprojects );
	return interprojectsFormatted;
end

-- Main
function p.main( frame )
	local args = getArgs( frame, { wrappers = config.params.wrappers } );
	-- get parameters list
	local interprojects = getParamsList( frame, args, config['interprojects'] );
	-- wrapper
	local res = mw.html.create();
	-- render body
	if next( interprojects ) ~= nil then
		local body = render( frame, interprojects );
		res:node( body );
	else
		res:wikitext( formatCategory( config.categories['empty'] ) )
	end

	return tostring( res );
end

return p;
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy