Modulo:Status indicator

El Vikifontaro

Dokumentado por ĉi tiu modulo povas esti kreata ĉe Modulo:Status indicator/dokumentado

function pagoj_nro(index_name)
	local manko_i = '<span title="mankas informoj">[...]</span>'
	if index_name == '' or index_name == nil then
		return manko_i
	end
	local index_data_title = mw.title.makeTitle( 'Template', 'IndexPages/' .. index_name )	
	if index_data_title == nil then
		return manko_i
	end
	local index_data = index_data_title:getContent()
	if index_data == nil then
		return manko_i
	end
	local index_pages = tonumber((string.gsub( index_data, '.*<pc>(.-)</pc>.*','%1')))
	if index_pages == nil then
		return manko_i
	else
		return index_pages
	end
end

function bar_code(index_name, type, bar_height, bar_width, index_nodata )
	if index_name == '' or index_name == nil then
		return index_nodata
	end
	local index_data_title = mw.title.makeTitle( 'Template', 'IndexPages/' .. index_name )	
	if index_data_title == nil then
		return index_nodata
	end
	local index_data = index_data_title:getContent()
	if index_data == nil then
		return index_nodata
	end
	local index_pages = tonumber((string.gsub( index_data, '.*<pc>(.-)</pc>.*','%1')))
	local q4_pages = tonumber((string.gsub( index_data, '.*<q4>(.-)</q4>.*','%1')))
	local q3_pages = tonumber((string.gsub( index_data, '.*<q3>(.-)</q3>.*','%1')))
	local q2_pages = tonumber((string.gsub( index_data, '.*<q2>(.-)</q2>.*','%1')))
	local q1_pages = tonumber((string.gsub( index_data, '.*<q1>(.-)</q1>.*','%1')))
	local q0_pages = tonumber((string.gsub( index_data, '.*<q0>(.-)</q0>.*','%1')))
	if index_pages == nil or q4_pages == nil or q3_pages == nil or q2_pages == nil or q1_pages == nil or q0_pages == nil then
		return index_nodata
	end
	local qn_pages = index_pages - q4_pages - q3_pages - q2_pages - q1_pages - q0_pages
	if type == 'd' then
		bar_width = math.ceil((index_pages / 800) * 100)
		if bar_width > 100 then bar_width = 100 end
		bar_width = bar_width .. '%'
	end
	local status_indicator = mw.html.create( 'table' )
		status_indicator
		:addClass( 'p_qb' )
		:css( {['height'] = bar_height , ['width'] = bar_width .. ' !important'} )
		local status_tr = status_indicator:tag('tr')
		if q4_pages > 0 then
			local status_td_q4 = status_tr:tag('td')
			status_td_q4
			:addClass( 'pq4' )
			:css( {['width']= math.floor((q4_pages/index_pages) * 100 + 0.5) .. '%'} )
		end
		if q3_pages > 0 then
			local status_td_q3 = status_tr:tag('td')
			status_td_q3
			:addClass( 'pq3' )
			:css( {['width']= math.floor((q3_pages/index_pages) * 100 + 0.5) .. '%'} )
		end
		if q2_pages > 0 then
			local status_td_q2 = status_tr:tag('td')
			status_td_q2
			:addClass( 'pq2' )
			:css( {['width']= math.floor((q2_pages/index_pages) * 100 + 0.5) .. '%'} )	
		end
		if q1_pages > 0 then
			local status_td_q1 = status_tr:tag('td')
			status_td_q1
			:addClass( 'pq1' )
			:css( {['width']= math.floor((q1_pages/index_pages) * 100 + 0.5) .. '%'} )
		end
		if q0_pages > 0 then
			local status_td_q0 = status_tr:tag('td')
			status_td_q0
			:addClass( 'pq0' )
			:css( {['width']= math.floor((q0_pages/index_pages) * 100 + 0.5) .. '%'} )
		end
		if qn_pages > 0 then
			local status_td_qn = status_tr:tag('td')
			status_td_qn
			:addClass( 'pqn' )
			:css( {['width']= math.floor((qn_pages/index_pages) * 100 + 0.5) .. '%'} )
		end
	return tostring(status_indicator:allDone())
end



function stato_nro(index_name, problem)
	if index_name == '' or index_name == nil then
		return -1
	end
	local index_data_title = mw.title.makeTitle( 'Template', 'IndexPages/' .. index_name )	
	if index_data_title == nil then
		return -1
	end
	local index_data = index_data_title:getContent()
	if index_data == nil then
		return -1
	end
	local index_pages = tonumber((string.gsub( index_data, '.*<pc>(.-)</pc>.*','%1')))
	local q4_pages = tonumber((string.gsub( index_data, '.*<q4>(.-)</q4>.*','%1')))
	local q3_pages = tonumber((string.gsub( index_data, '.*<q3>(.-)</q3>.*','%1')))
	local q2_pages = tonumber((string.gsub( index_data, '.*<q2>(.-)</q2>.*','%1')))
	local q1_pages = tonumber((string.gsub( index_data, '.*<q1>(.-)</q1>.*','%1')))
	local q0_pages = tonumber((string.gsub( index_data, '.*<q0>(.-)</q0>.*','%1')))
	if index_pages == nil or q4_pages == nil or q3_pages == nil or q2_pages == nil or q1_pages == nil or q0_pages == nil then
		return -1
	end
	local qn_pages = index_pages - q4_pages - q3_pages - q2_pages - q1_pages - q0_pages
	if q2_pages == 0 or problem == nil then
		if qn_pages == 0 then
			if q1_pages == 0 then
				if q3_pages == 0 then
					return 4
				end
				return 3
			end
			return 2
		end
		return 1
	end
	return 5
end



function row_code(frame)
	local args = frame.args
	--param
	local index_name = ''
	if frame.args['indekso'] ~= nil then
		index_name = string.gsub(frame.args['indekso'], 'Indekso:', '')
	end
	local titolo = args['titolo']
	local autoro = frame.args['aŭtoro']
	local autoro2 = frame.args['aŭtoro2']
	local indekso_pagoj = frame.args['paĝoj']
	local rimarkoj = frame.args['rimarkoj']
	local komenco = frame.args['komenco']
	local indekso_stato = frame.args['stato']
	local indekso_stato_withp = frame.args['stato']
	local bcgrnd = {["2"] = 'style="background-color:#f99"', ["3"] = 'style="background-color:#ff9"', ["4"] = 'style="background-color:#90ff90"', ["5"] = 'style="background-color:#6495ED"'  }
	local stato_ikono = {["-1"] = '<span title="mankas informoj">[...]</span>', ["0"] = '[[Dosiero:00%.svg|0% Serĉata, nepublikigita]]', ["1"] = '[[Dosiero:25%.svg|25% Komencita]]',
		["2"] = '[[Dosiero:50%.svg|50% Transskribita]]', ["3"] = '[[Dosiero:75%.svg|75% Transskribita kaj korektita]]', ["4"] = '[[Dosiero:100%.svg|100% Transskribita kaj reviziita]]',
		["5"] = '[[Dosiero:Crystal 128 error.svg|9px|Problemoj]]'}

	--/param
	if autoro == nil then autoro = '' end
	if rimarkoj == nil then rimarkoj = '' end
	if komenco == nil then komenco = '' end
	
	local ret_row_code = ''
	if indekso_stato == nil or indekso_stato == '' then
		indekso_stato = tostring(stato_nro(index_name))
		indekso_stato_withp = tostring(stato_nro(index_name, 1))
	end
	if indekso_stato == nil then indekso_stato = '' end
	local bar = bar_code(index_name, 'd', '0.95em', '', '<br>[la statuso ŝanĝiĝas]' )
	if indekso_pagoj == nil or indekso_pagoj == '' then
		indekso_pagoj = pagoj_nro(index_name)
	end	
	if indekso_pagoj == nil then indekso_pagoj = '' end
	if bcgrnd[indekso_stato] == nil then
		bcgrnd[indekso_stato] = ''
	end
	ret_row_code = ret_row_code .. '|- ' .. bcgrnd[indekso_stato] .. '\n'
	ret_row_code = ret_row_code .. '|'
	local index_link = '[[Indekso:' .. index_name
	if titolo == nil or titolo == '' then
		index_link = index_link .. '|' .. index_name .. ']]'
	else
		index_link = index_link .. '|' .. titolo .. ']]'
	end
	
	if indekso_stato == "4" then
		ret_row_code = ret_row_code .. index_link .. '\n'
	else
		if indekso_stato == "2" or indekso_stato == "3" or indekso_stato == "5" then
			ret_row_code = ret_row_code .. 'style="background-color:#fff"|'
		end
		ret_row_code = ret_row_code .. index_link .. bar .. '\n'
	end
	local autoro_priskribo = autoro
	if autoro2 ~= nil and autoro2 ~= '' then
		autoro_priskribo = autoro2	
	end
	local autoro_kodo = autoro
	if string.find( autoro, '%[') == nil and string.find( autoro, '<br') == nil and autoro ~= '' and autoro ~= nil then
		autoro_kodo = '[[Aŭtoro:' .. autoro .. '|' .. autoro_priskribo .. ']]'
	end
	local stato_kodo = stato_ikono[indekso_stato_withp]
	if stato_kodo == nil then
		stato_kodo = '<span title="erara parametro">!!!</span>'		
	end
	ret_row_code = ret_row_code .. '|' .. autoro_kodo .. '\n'
	ret_row_code = ret_row_code .. '|style="text-align:right;"|' .. indekso_pagoj .. '\n'
	ret_row_code = ret_row_code .. '|' .. rimarkoj .. '\n'	
	ret_row_code = ret_row_code .. '|' .. komenco .. '\n'
	ret_row_code = ret_row_code .. '|class=center|' .. stato_kodo .. '\n'
	return ret_row_code

end



local p = {}
 
function p.bar(frame)
	--param
	local index_nodata = '<br>[la statuso ŝanĝiĝas]'
	local index_name = string.gsub(frame.args[1], 'Indekso:', '')
	local type = 'd'
	local bar_width = '100px' --default only for 'static' version
	local bar_height = '0.95em'
	if frame.args[3] ~= nil and frame.args[3] ~='' then
		bar_width = frame.args[3]
	end
	if frame.args[4] ~= nil and frame.args[4] ~='' then
		bar_height = frame.args[4]
	end	
	if frame.args[2] == 's' then
		type = 's'
	end
	--/param
	return bar_code(index_name, type, bar_height, bar_width, index_nodata )

end

function p.stato(frame)
	--param
	local index_name = string.gsub(frame.args[1], 'Indekso:', '')
	--/param
	return stato_nro(index_name)
end
 
function p.pagoj(frame)
	--param
	local index_name = string.gsub(frame.args[1], 'Indekso:', '')
	--/param
	return pagoj_nro(index_name)
end

function p.row_proofread( frame )
    return row_code( frame:getParent() )
end

return p