Bật tắt bảng chọn
Bật tắt bảng chọn cá nhân
Chưa đăng nhập
Địa chỉ IP của bạn sẽ được hiển thị công khai nếu bạn thực hiện bất kỳ sửa đổi nào.

Mô đun:Prevnext

Một thế giới nơi chỉ có đam mê, niềm vui và sắc màu...

Có thể viết tài liệu về mô đun này tại Mô đun:Prevnext/tài liệu.

require( 'strict' )

local Prevnext = {}

local metatable = {}
local methodtable = {}


metatable.__index = methodtable


--- Returns true if a page exists
--- @param page string
--- @return boolean
local function pageExists( page )
	local title = mw.title.new( page )
	return title and title.exists
end


--- Creates the prev/next header
---
--- @return string
function methodtable.make( self )
	local function makeLink( dir )
		if not self.frameArgs[ dir ] then
			return
		end

		local arrow = 'ArrowPrevious'
		if dir == 'next' then arrow = 'ArrowNext' end

		local inner = mw.html.create( 'div' )
		inner:addClass( 'template-prevnext__' .. dir )
		   :addClass( 'template-prevnext__link' )

		if not pageExists( self.frameArgs[ dir ] ) then
			inner:addClass( 'template-prevnext__link--new' )
		end

		local icon = mw.html.create( 'div' )

		icon:addClass( 'template-prevnext__icon' )
				:wikitext( string.format( '[[File:WikimediaUI-%s-ltr.svg|14px|link=]]', arrow ) )
			:done()

		if dir == 'prev' then
			inner:node( icon )
		end

		local content = inner:tag( 'div' )
				:addClass( 'template-prevnext__content' )
					:tag( 'div' )
						:addClass( 'template-prevnext__title' )
						:wikitext( self.frameArgs[ dir .. 'Title' ] or self.frameArgs[ dir ] )
					:done()

		if self.frameArgs[ dir .. 'Desc' ] then
			content:tag( 'div' )
					:addClass( 'template-prevnext__desc' )
						:wikitext( self.frameArgs[ dir .. 'Desc' ] )
					:done()
		end

		if dir == 'next' then
			inner:node( icon )
		end

		inner:tag( 'div' )
				:addClass( 'template-prevnext__linkoverlay' )
					:wikitext( string.format( '[[%s]]', self.frameArgs[ dir ] ) )
				:allDone()

		return inner
	end

	local div = mw.html.create( 'div' )
		div:addClass( 'template-prevnext' )

	local current = mw.html.create( 'div' )
	current:addClass( 'template-prevnext__current' )

	local content = current:tag( 'div' )
			:addClass('template-prevnext__content')
				:tag( 'div' )
					:addClass('template-prevnext__title')
					:wikitext( self.frameArgs[ 'title' ] or mw.title.getCurrentTitle().subpageText )
				:done()

	if self.frameArgs[ 'desc' ] then
		content:tag( 'div' )
			:addClass( 'template-prevnext__desc' )
			:wikitext( self.frameArgs[ 'desc' ] )
	end

	current:allDone()

	div:node(makeLink('prev')):node(current):node(makeLink('next'))

	return tostring( div:allDone() ) .. mw.getCurrentFrame():extensionTag{
		name = 'templatestyles', args = { src = 'Module:Prevnext/styles.css' }
	}
end


--- Set the frame and load args
--- @param frame table
function methodtable.setFrame( self, frame )
	self.currentFrame = frame
	self.frameArgs = require( 'Module:Arguments' ).getArgs( frame )
end


--- New Instance
function Prevnext.new( self, args )
	local instance = {
		frameArgs = args
	}

	setmetatable( instance, metatable )

	return instance
end


--- Template entry
function Prevnext.main( frame )
	local instance = Prevnext:new()
	instance:setFrame( frame )

	return instance:make()
end


return Prevnext
Cookies help us deliver our services. By using our services, you agree to our use of cookies.