Модуль:StarRating
Материал из вики «Вече»
Дополнительные действия
Для документации этого модуля может быть создана страница Модуль:StarRating/doc
require( 'strict' )
local p = {}
local getArgs = require( 'Module:Arguments' ).getArgs
local currentTitle = mw.title.getCurrentTitle()
local ALT_TEXT = '%s из %s'
local ERROR_TEXT = 'Некорректно заполненный шаблон [[Шаблон:Рейтинг|Рейтинг]].'
-- [[Категория:Википедия:Страницы с некорректно заполненным шаблоном Рейтинг]]
local ERROR_CAT = 'Википедия:Страницы с некорректно заполненным шаблоном Рейтинг'
local function isEmpty( str )
return str == nil or str == ''
end
local function showError()
local result = mw.html.create( 'span' )
:addClass( 'error' )
:wikitext( ERROR_TEXT )
if currentTitle.namespace == 0 and not isEmpty( ERROR_CAT ) then
result:wikitext( string.format( '[[Category:%s]]', ERROR_CAT ) )
end
return tostring( result )
end
function p._main( num, to )
local floorNum = math.floor( num )
local ceilNum = math.ceil( num )
local result = ''
local size = '11px'
if to > 6 then
size = '7px'
end
local altText = string.format(
ALT_TEXT,
tostring( num ):gsub( '%.', ',' ),
tostring( to ):gsub( '%.', ',' )
)
for i = 1, to, 1 do
local alt = i == 1 and altText or ''
local starType = 'empty'
if i <= floorNum then
starType = 'full'
elseif i > floorNum and i == ceilNum then
starType = 'half'
end
result = result .. string.format( '[[File:Star %s.svg|%s|alt=%s|link=]]', starType, size, alt )
end
return string.format(
'<span class="nowrap" title="%s">%s</span>',
altText,
result
)
end
function p.main( frame )
local args = getArgs( frame )
local num = args[ 1 ]
local to = args[ 2 ]
if isEmpty( num ) or isEmpty( to ) then
return showError()
end
-- Russian numeral conversion
num = num:gsub( ',', '.' )
to = to:gsub( ',', '.' )
if tonumber( num ) == nil or tonumber( to ) == nil then
return showError()
end
num = tonumber( num )
to = tonumber( to )
if num < 0 or to == 0 or to > 15 or num > to then
return showError()
end
return p._main( num, to )
end
return p