nix/pkgs/subnetplan: use colspan

This commit is contained in:
Astro 2021-11-18 04:17:10 +01:00
parent 9e39f9b21f
commit 3902efd3f3
1 changed files with 18 additions and 12 deletions

View File

@ -26,11 +26,12 @@ class Group
end end
class Block class Block
attr_accessor :label, :name attr_accessor :label, :name, :span
def initialize label, name def initialize label, name
@label = label @label = label
@name = name @name = name
@span = 1
end end
end end
@ -72,25 +73,25 @@ groups = groups.collect do |group, nets|
blocks = [] blocks = []
row = [] row = []
x = 0
allnet.subnet(max_prefix).each do |addr| allnet.subnet(max_prefix).each do |addr|
net = nets.select { |net| net.addr.include? addr }[0] net = nets.select { |net| net.addr.include? addr }[0]
label = net ? "#{addr}/#{net.addr.prefix}" : addr.to_s label = net ? "#{addr}/#{net.addr.prefix}" : addr.to_s
row << Block.new(label, net ? net.desc : "") name = net ? net.desc : ""
if row.size >= TABLE_WIDTH if row.last and name != "" and row.last.name == name
row.last.span += 1
else
row << Block.new(label, name)
end
x += 1
if x >= TABLE_WIDTH
blocks << row blocks << row
row = [] row = []
x = 0
end end
end end
blocks << row if row.size > 0 blocks << row if row.size > 0
blocks.each do |row|
prev_name = nil
row.each_with_index do |block|
block.label = "" if prev_name == block.name
prev_name = block.name
end
end
Group.new(allnet, blocks) Group.new(allnet, blocks)
end end
@ -117,6 +118,11 @@ html = ERB::new <<~EOF
<html> <html>
<head> <head>
<title>Subnetwork Plan</title> <title>Subnetwork Plan</title>
<style>
table {
margin: 3rem auto;
}
</style>
</head> </head>
<body> <body>
<table border="1"> <table border="1">
@ -127,7 +133,7 @@ html = ERB::new <<~EOF
<% group.blocks.each do |row| %> <% group.blocks.each do |row| %>
<tr> <tr>
<% row.each do |block| %> <% row.each do |block| %>
<td style="background-color: <%= background_color(block.name) %>"><%= block.label %> <%= block.name %></td> <td colspan="<%= block.span %>" style="background-color: <%= background_color(block.name) %>"><%= block.label %> <%= block.name %></td>
<% end %> <% end %>
</tr> </tr>
<% end %> <% end %>