Moduł:Status indicator

Z Wikiźródeł, wolnej biblioteki

Generuje kod dla Szablonów {{Wiersz tabelki proofread}}, {{Postęp}}, {{Stan indeksu}} oraz {{Stron indeksu}}.


function strony_nr(index_name)
	local brak_i = '<span title="brak danych">[...]</span>'
	if index_name == '' or index_name == nil then
		return brak_i
	end
	local index_data_title = mw.title.makeTitle( 'Template', 'IndexPages/' .. index_name )	
	if index_data_title == nil then
		return brak_i
	end
	local index_data = index_data_title:getContent()
	if index_data == nil then
		return brak_i
	end
	local index_pages = tonumber((string.gsub( index_data, '.*<pc>(.-)</pc>.*','%1')))
	if index_pages == nil then
		return brak_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 stan_nr(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['indeks'] ~= nil then
		index_name = string.gsub(frame.args['indeks'], 'Indeks:', '')
	end
	local tytul = args['tytuł']
	local autor = frame.args['autor']
	local autor2 = frame.args['autor2']
	local index_strony = frame.args['strony']
	local uwagi = frame.args['uwagi']
	local start = frame.args['start']
	local index_stan = frame.args['stan']
	local index_stan_withp = frame.args['stan']
	local bcgrnd = {["2"] = 'style="background-color:#f99"', ["3"] = 'style="background-color:#ff9"', ["4"] = 'style="background-color:#90ff90"', ["5"] = 'style="background-color:#6495ED"'  }
	local stan_icon = {["-1"] = '<span title="brak danych">[...]</span>', ["0"] = '[[Plik:00%.svg|0% Poszukiwany, niezamieszczony]]', ["1"] = '[[Plik:25%.svg|25% Rozpoczęty]]',
		["2"] = '[[Plik:50%.svg|50% Przepisany]]', ["3"] = '[[Plik:75%.svg|75% Przepisany i skorygowany]]', ["4"] = '[[Plik:100%.svg|100% Przepisany i uwierzytelniony]]',
		["5"] = '[[File:Crystal 128 error.svg|9px|Problemy]]'}

	--/param
	if autor == nil then autor = '' end
	if uwagi == nil then uwagi = '' end
	if start == nil then start = '' end
	
	local ret_row_code = ''
	if index_stan == nil or index_stan == '' then
		index_stan = tostring(stan_nr(index_name))
		index_stan_withp = tostring(stan_nr(index_name, 1))
	end
	if index_stan == nil then index_stan = '' end
	local bar = bar_code(index_name, 'd', '0.95em', '', '<br>[w trakcie zmiany statusu]' )
	if index_strony == nil or index_strony == '' then
		index_strony = strony_nr(index_name)
	end	
	if index_strony == nil then index_strony = '' end
	if bcgrnd[index_stan] == nil then
		bcgrnd[index_stan] = ''
	end
	ret_row_code = ret_row_code .. '|- ' .. bcgrnd[index_stan] .. '\n'
	ret_row_code = ret_row_code .. '|'
	local index_link = '[[Indeks:' .. index_name
	if tytul == nil or tytul == '' then
		index_link = index_link .. '|' .. index_name .. ']]'
	else
		index_link = index_link .. '|' .. tytul .. ']]'
	end
	
	if index_stan == "4" then
		ret_row_code = ret_row_code .. index_link .. '\n'
	else
		if index_stan == "2" or index_stan == "3" or index_stan == "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 autor_opis = autor
	if autor2 ~= nil and autor2 ~= '' then
		autor_opis = autor2	
	end
	local autor_code =  autor
	if string.find( autor, '%[') == nil and string.find( autor, '<br') == nil and autor ~= '' and autor ~= nil then
		autor_code = '[[Autor:' .. autor .. '|' .. autor_opis .. ']]'
	end
	local stan_code = stan_icon[index_stan_withp]
	if stan_code == nil then
		stan_code = '<span title="błędny parametr">!!!</span>'		
	end
	ret_row_code = ret_row_code .. '|' .. autor_code .. '\n'
	ret_row_code = ret_row_code .. '|style="text-align:right;"|' .. index_strony .. '\n'
	ret_row_code = ret_row_code .. '|' .. uwagi .. '\n'	
	ret_row_code = ret_row_code .. '|' .. start .. '\n'
	ret_row_code = ret_row_code .. '|class=center|' .. stan_code .. '\n'
	return ret_row_code

end



local p = {}
 
function p.bar(frame)
	--param
	local index_nodata = '<br>[w trakcie zmiany statusu]'
	local index_name = string.gsub(frame.args[1], 'Indeks:', '')
	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.stan(frame)
	--param
	local index_name = string.gsub(frame.args[1], 'Indeks:', '')
	--/param
	return stan_nr(index_name)
end
 
function p.strony(frame)
	--param
	local index_name = string.gsub(frame.args[1], 'Indeks:', '')
	--/param
	return strony_nr(index_name)
end

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

return p