Mô đun:Plain sister

Văn thư lưu trữ mở Wikisource
Bước tới điều hướng Bước tới tìm kiếm

Mô đun này cung cấp một hàm duy nhất, dùng để liệt kê các liên kết từ các dự án liên quan từ trang hiện tại. Nó dùng trong {{đề mục liên quan}}.


local p = {}

local sites = { 
-- interwiki prefix, parameter,     label and               site id (for Wikidata)
	{ 'w',           'wikipedia',   'bài viết Wikipedia',   'viwiki' },
	{ 'c',           'commons',     'thư viện ảnh Commons', 'commonswiki' },
	{ 'c:Category',  'commonscat',  'thể loại Commons',     'commonswiki' },
	{ 'q',           'wikiquote',   'danh ngôn',            'viwikiquote' },
	{ 'n',           'wikinews',    'tin tức',              'viwikinews' },
	{ 'wikt',        'wiktionary',  'từ điển',              'viwiktionary' },
	{ 'b',           'wikibooks',   'sách'    ,             'viwikibooks' },
--	{ 'v',           'wikiversity', 'course',               'viwikiversity' },
	{ 'wikispecies', 'wikispecies', 'danh mục loài',        'specieswiki' },
	{ 'voy',         'wikivoyage',  'cẩm nang du lịch',     'viwikivoyage' },
	{ 'd',           'wikidata',    'mục Wikidata',         'wikidatawiki' },
	{ 'bibliowiki',  'wikilivres',  'bibliowiki',           '' }, -- wikilivres now bibliowiki
	{ 'bibliowiki',  'bibliowiki',  'bibliowiki',           '' },
	{ 'm',           'meta',        'Meta',                 'metawiki' }
}

function p.interprojetPart( frame )
	local frame = frame:getParent()
	local item  = mw.wikibase.getEntityObject()
	local links = {}

	for _, site in pairs( sites ) do
		local val = frame.args[site[2]]             -- link provided as input parameter
		if val == '' then
			val = nil;
		end
		if not val and site[4] ~= '' and item then  -- fetch it from wikidata
			val = item:getSitelink( site[4] )
			if site[4] == 'wikidatawiki' then
				val = item.id 
			elseif site[4] == 'commonswiki' and val then -- we have link to commons 
				local catFlag = (#val>9 and string.sub(val,1,9) == 'Category:')
				if (site[2]=='commonscat' and catFlag==false) or (site[2]=='commons' and catFlag==true) then
					val = nil  -- link is to a wrong namespace so let's nuke it
				elseif (site[2]=='commonscat' and catFlag==true) then
					val = string.sub(val,10) -- trim 'Category:' from the front
				end
			end		
		end
		if not val and site[2] == 'commons' and item then
			local statements = item:getBestStatements('P935' ) -- get commons gallery page from P935 property
			if statements[1] and statements[1].mainsnak.datavalue  then
				val = statements[1].mainsnak.datavalue.value  
			end
		end	
		if not val and site[2] == 'commonscat' and item then
			local statements = item:getBestStatements('P373' )   -- get commons category page from P373 property
			if statements[1] and statements[1].mainsnak.datavalue  then
				val = statements[1].mainsnak.datavalue.value 
			end
		end		

		if val then
			table.insert( links, '[[' .. site[1] .. ':' .. val .. '|' .. site[3] .. ']]' )
		end
	end

	if #links == 0 then -- links table length is zero
		return ''
	end

	return '<li class="sisitem">'
		.. '<span class="sisicon" style="padding-right:1ex;">[[Tập tin:Wikimedia-logo.svg|frameless|18px|link=Đặc biệt:Ma trận trang|alt=Các dự án wiki khác.]]</span>'
		.. '[[Đặc biệt:Ma trận trang|các dự án wiki khác]]:&#32;' .. table.concat( links, ',&#32;' )
		.. '.</li>'
end

return p