blob: fbe37e0cc1efbff6abce23c1141f5ed7ee7919ff [file] [log] [blame]
#!/usr/bin/env ruby
# Encapsulate (most) display of website checks between projects|podlings
require 'wunderbar'
require 'wunderbar/bootstrap'
require_relative '../whimsy/asf/themes'
# Display data for a single project's checks
# @param project id of project
# @param links site data for that specific project
# @param columns list of check types to report on
# @param analysis complete scan data
# @param tlp true if project (default); podling otherwise
def display_project(project, links, analysis, checks, tlp = true)
_whimsy_panel_table(
title: "Site Check For #{tlp ? 'Project' : 'Podling'} - #{links['display_name']}",
helpblock: -> {
_a href: '../', aria_label: 'Home to site checker' do
_span.glyphicon.glyphicon_home :aria_hidden
end
_span.glyphicon.glyphicon_menu_right
_ "Results for #{tlp ? 'Project' : 'Podling'} "
_a links['display_name'], href: links['uri']
_ '. '
if !tlp
_ 'Reminder: Incubation is the process of becoming an Apache project - podlings are not required to meet these checks until graduation. See '
_a "this project's incubation status.", href: "http://incubator.apache.org/projects/#{project}"
end
_br
_ 'Check Results column is the actual text or URL found on the homepage for this check (when applicable).'
}
) do
_table.table.table_striped do
_tbody do
_thead do
_tr do
_th! 'Check Type'
_th! 'Check Results'
_th! 'Check Description'
end
end
checks.keys.each do |col|
cls = SiteStandards.label(analysis, links, col, project)
_tr do
_td do
_a col.capitalize, href: "../check/#{col}"
end
if links[col] =~ /^https?:/
_td class: cls do
_a links[col], href: links[col]
end
else
_td links[col], class: cls
end
_td do
if cls != SiteStandards::SITE_PASS
if checks.keys.include? col
if checks[col][SiteStandards::CHECK_TYPE]
_ 'URL expected to match regular expression: '
_code checks[col][SiteStandards::CHECK_VALIDATE].source
else
_ 'Text of a link expected to match regular expression: '
_code checks[col][SiteStandards::CHECK_TEXT].source
end
_br
_a checks[col][SiteStandards::CHECK_DOC], href: checks[col][SiteStandards::CHECK_POLICY]
else
_ ''
end
end
end
end
end
end
end
end
end
# Display data for a single check across all projects/podlings
# @param col id of check to display
# @param sites site data for all projects
# @param analysis complete scan data
# @param checks complete set of checks performed
# @param tlp true if project (default); podling otherwise
def display_check(col, sites, analysis, checks, tlp = true)
_whimsy_panel_table(
title: "Site Check Of Type - #{col.capitalize}",
helpblock: -> {
_a href: '../', aria_label: 'Home to site checker' do
_span.glyphicon.glyphicon_home :aria_hidden
end
_span.glyphicon.glyphicon_menu_right
if checks.keys.include? col
if checks[col][SiteStandards::CHECK_TYPE]
_ 'Check Results URL expected to match regular expression: '
_code checks[col][SiteStandards::CHECK_VALIDATE].source
else
_ 'Check Results Text of a link expected to match regular expression: '
_code checks[col][SiteStandards::CHECK_TEXT].source
end
if checks.include? col
_br
_a checks[col][SiteStandards::CHECK_DOC], href: checks[col][SiteStandards::CHECK_POLICY]
end
_li.small " Click column badges to sort"
else
_span.text_danger "WARNING: the site checker may not understand type: #{col}, results may not be complete/available."
end
}
) do
_table.table.table_condensed.table_striped do
_thead do
_tr do
_th! "#{tlp ? 'Project' : 'Podling'}", data_sort: 'string-ins'
_th! data_sort: 'string' do
_ 'Check Results'
_br
analysis[0][col].each do |cls, val|
_ ' '
_span.label val, class: cls
end
end
end
end
_tbody do
sites.each do |n, links|
_tr do
_td do
_a links['display_name'], href: "../project/#{n}"
end
if links[col] =~ /^https?:/
_td class: SiteStandards.label(analysis, links, col, n) do
_a links[col], href: links[col]
end
else
_td links[col], class: SiteStandards.label(analysis, links, col, n)
end
end
end
end
end
end
end
# Display an overview of all checks/sites
# @param sites site data for all projects
# @param analysis complete scan data
# @param checks complete set of checks performed
# @param tlp true if project (default); podling otherwise
def display_overview(sites, analysis, checks, tlp = true)
_whimsy_panel_table(
title: "Site Check - All #{tlp ? 'Project' : 'Podling'} Results",
helpblock: -> {
_ul.list_inline do
_li.small "Data key: "
analysis[1].each do |cls, desc|
_li.label desc, class: cls
end
_li.small " Click column badges to sort"
end
}
) do
_table.table.table_condensed.table_striped do
_thead do
_tr do
_th! "#{tlp ? 'Project' : 'Podling'}", data_sort: 'string-ins'
checks.keys.each do |col|
_th! data_sort: 'string' do
_a col.capitalize, href: "check/#{col}"
_br
analysis[0][col].each do |cls, val|
_ ' '
_span.label val, class: cls
end
end
end
end
end
sort_order = {
SiteStandards::SITE_PASS => 1,
SiteStandards::SITE_WARN => 2,
SiteStandards::SITE_FAIL => 3
}
_tbody do
sites.each do |n, links|
_tr do
_td do
_a "#{links['display_name']}", href: "project/#{n}"
end
checks.keys.each do |c|
cls = SiteStandards.label(analysis, links, c, n)
_td '', class: cls, data_sort_value: sort_order[cls]
end
end
end
end
end
end
end
# Display an error page if a suburl we're given isn't supported
def display_error(path)
_whimsy_panel_table(
title: "ERROR - bad url provided",
helpblock: -> {
_a href: '../', aria_label: 'Home to site checker' do
_span.glyphicon.glyphicon_home :aria_hidden
end
_span.glyphicon.glyphicon_menu_right
_span.text_danger "ERROR: The path #{path} is not a recognized command for this tool, sorry! "
}
) do
_a.bold 'ERROR - please try again.', href: '../'
end
end
# Display our application's data - handles / and project/id|check/id paths
def display_application(path, sites, analysis, checks, tlp = true)
if path =~ %r{/project/(.+)} # Display a single project
if sites[$1]
display_project($1, sites[$1], analysis, checks, tlp)
else
display_error(path)
end
elsif path =~ %r{/check/(.+)} # Display a single check
if checks[$1]
display_check($1, sites, analysis, checks, tlp)
else
display_error(path)
end
else
display_overview(sites, analysis, checks, tlp)
end
end