Moduł:Status indicator
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