diff options
author | tkimia <tkimia@purdue.edu> | 2014-04-22 17:43:02 -0400 |
---|---|---|
committer | tkimia <tkimia@purdue.edu> | 2014-04-22 17:43:02 -0400 |
commit | 27ed02ceaafe466307fc5a5d584aa329ea147be5 (patch) | |
tree | 0a54bb2c9c8cfb7d82eeea8cf4fca9283e0b27d5 /lib/scheduling | |
parent | bb53f8ac2ab52301b32fe65ddc10a32f6bc730e8 (diff) | |
parent | 42aa0fe7fdfc51f79cda90c4d71621a797995a6c (diff) |
Merge branch 'master' of https://github.com/LukeShu/leaguer
Diffstat (limited to 'lib/scheduling')
-rw-r--r-- | lib/scheduling/elimination.rb | 80 | ||||
-rw-r--r-- | lib/scheduling/elimination.svg.erb | 72 |
2 files changed, 74 insertions, 78 deletions
diff --git a/lib/scheduling/elimination.rb b/lib/scheduling/elimination.rb index 519d08a..e718d54 100644 --- a/lib/scheduling/elimination.rb +++ b/lib/scheduling/elimination.rb @@ -43,13 +43,81 @@ module Scheduling end def graph - require 'erb' - erb_filename = File.join(File.dirname(__FILE__), 'elimination.svg.erb') + matches = @tournament_stage.matches_ordered + # depth of SVG tree + depth = Math.log2(matches.count).floor+1; + # height of SVG + height = [200 * 2**Math.log2(matches.count).floor + 100, 500].max; + lastrx = 0 + lastry = 0 + lastrh = 0 + lastrw = 0 - erb = ERB.new(File.read(erb_filename)) - erb.filename = erb_filename - return erb.result - end + str = <<-STRING +<svg version="1.1" baseProfile="full" + xmlns="http://www.w3.org/2000/svg" + xmlns:xlink="http://www.w3.org/1999/xlink" + width="100%" height="#{height}"> + <defs> + <radialGradient id="gradMatch" cx="50%" cy="50%" r="80%" fx="80%" fy="80%"> + <stop offset="0%" style="stop-color:#ffd281; stop-opacity:0" /> + <stop offset="100%" style="stop-color:#ccc;stop-opacity:1" /> + </radialGradient> + </defs> +STRING + (1..matches.count).each do |i| + rh = 100/(2**(depth-1)+1) - 5 + rw = 100/(depth+1) - 5 + rx = 50/(depth+1) + 100/(depth+1)*(depth-(Math.log2(i).floor+1)) + ry = ( 100/(2**(Math.log2(i).floor)+1) + rh * 1.1 * (2**Math.log2(i).ceil-i)) + + str += "\t<a id=\"svg-match-#{i}\" xlink:href=\"# {match_path(matches[i])}\">\n" + str += "\t\t<rect height=\"#{rh}%\" width=\"#{rw}%\" x=\"#{rx}%\" y=\"#{ry}%\" fill=\"url(#gradMatch)\" rx=\"5px\" stroke-width=\"2\"" + case matches[i].status + when 0 + if matches[i].teams.count < @tournament_stage.tournament.min_teams_per_match + str += ' stroke="red"' + str += ' fill-opacity="0.6"' + else + str += ' stroke="green"' + end + when 1 + str += ' stroke="orange"' + when 2 + str += ' stroke="yellow"' + when 3 + str += ' stroke="grey"' + end + str += "/>\n" + color = matches[i].teams.first and matches[i].teams.first.users.include?(current_user) ? "#BCED91" : "white" + str += "\t\t<rect width=\"#{rw-5}%\" height=\"#{rh/4}%\" x=\"#{rx + 2.5}%\" y=\"#{ry + rh/6}%\" fill=\"#{color}\" />\n" + if matches[i].teams.first + str += '\t\t<text x="#{rx + rw/4}%" y="#{ry + rh/3}%" font-size="#{rh}">Team #{matches[i].teams.first.id}</text>\n' + end + + str += "\t\t<text x=\"#{rx + 1.3*rw/3}%\" y=\"#{ry + 5.2*rh/9}%\" font-size=\"#{rh}\"> VS </text>\n" + + color = matches[i].teams[1] and matches[i].teams[1].users.include?(current_user) ? "#BCED91" : "white" + str += "\t\t<rect width=\"#{rw-5}%\" height=\"#{rh/4}%\" x=\"#{rx + 2.5}%\" y=\"#{ry + 3*rh/5}%\" fill=\"#{color}\" />\n" + if matches[i].teams[1] + str += "\t\t<text x=\"#{rx + rw/4}%\" y=\"#{ry + 4*rh/5}%\" font-size=\"#{rh}\">Team #{matches[i].teams[1].id}</text>\n" + end + + if i > 1 + str += "\t\t<line x1=\"#{rx+rw}%\" y1=\"#{ry+rh/2}%\" x2=\"#{lastrx}%\" y2=\"#{lastry+lastrh/2}%\" stroke=\"black\" stroke-width=\"2\" >\n" + end + if Math.log2(i+1) == Math.log2(i+1).ceil + lastrx = rx + lastry = ry + lastrh = rh + lastrw = rw + end + str += "</a>\n" + end + str += '</svg>' + + return str + end end end diff --git a/lib/scheduling/elimination.svg.erb b/lib/scheduling/elimination.svg.erb deleted file mode 100644 index 91b8f6a..0000000 --- a/lib/scheduling/elimination.svg.erb +++ /dev/null @@ -1,72 +0,0 @@ -<% - -matches = @tournament_stage.matches_ordered -# depth of SVG tree -depth = Math.log2(matches.count).floor+1; -# height of SVG -height = 200 * 2**Math.log2(matches.count).floor + 100; -lastrx = 0 -lastry = 0 -lastrh = 0 -lastrw = 0 - -%><svg version="1.1" baseProfile="full" - xmlns="http://www.w3.org/2000/svg" - xmlns:xlink="http://www.w3.org/1999/xlink" - width="100%" height="<%= height = [height, 500].max %>"> - <% %> - <defs> - <radialGradient id="gradMatch" cx="50%" cy="50%" r="80%" fx="80%" fy="80%"> - <stop offset="0%" style="stop-color:#ffd281; stop-opacity:0" /> - <stop offset="100%" style="stop-color:#ccc;stop-opacity:1" /> - </radialGradient> - </defs> - <% (1..matches.count).each do |i| %> - <a id="svg-match-<%= i %>" xlink:href="<%= match_path(matches[i-1]) %>"> - <rect height="<%= rh = 100/(2**(depth-1)+1) - 5 %>%" - width="<%= rw = 100/(depth+1) - 5 %>%" - x="<%= rx = 50/(depth+1) + 100/(depth+1)*(depth-(Math.log2(i).floor+1)) %>%" - y="<%= ry = ( 100/(2**(Math.log2(i).floor)+1) + rh * 1.1 * (2**Math.log2(i).ceil-i)) %>%" - fill="url(#gradMatch)" - rx="5px" - stroke-width="2" - <% case matches[i-1].status %> - <% when 0 %> - <% if matches[i-1].teams.count < @tournament_stage.tournament.min_teams_per_match %> - stroke="red" - fill-opacity="0.6" - <% else %> - stroke="green" - <% end %> - <% when 1 %> - stroke="orange" - <% when 2 %> - stroke="yellow" - <% when 3 %> - stroke="grey" - <% end %> /> - <rect width="<%= rw-5 %>%" height="<%= rh/4 %>%" x="<%= rx + 2.5 %>%" y="<%= ry + rh/6 %>%" fill="<%= matches[i-1].teams.first and matches[i-1].teams.first.users.include?(current_user) ? "#BCED91" : "white" %>" /> - <text x="<%= rx + rw/4 %>%" y="<%= ry + rh/3 %>%" font-size="<%= rh %>"> - <% if matches[i-1].teams.first %> - Team <%= matches[i-1].teams.first.id %> - <% end %> - </text> - <text x="<%= rx + 1.3*rw/3 %>%" y="<%= ry + 5.2*rh/9 %>%" font-size="<%= rh %>"> VS </text> - <rect width="<%= rw-5 %>%" height="<%= rh/4 %>%" x="<%= rx + 2.5 %>%" y="<%= ry + 3*rh/5 %>%" fill="<%= matches[i-1].teams[1] and matches[i-1].teams[1].users.include?(current_user) ? "#BCED91" : "white" %>" /> - <text x="<%= rx + rw/4 %>%" y="<%= ry + 4*rh/5 %>%" font-size="<%= rh %>"> - <% if matches[i-1].teams[1] %> - Team <%= matches[i-1].teams[1].id %> - <% end %> - </text> - <% if i > 1 %> - <line x1="<%= rx+rw %>%" y1="<%= ry+rh/2 %>%" x2="<%= lastrx %>%" y2="<%= lastry+lastrh/2 %>%" stroke="black" stroke-width="2" > - <% end %> - <% if Math.log2(i+1) == Math.log2(i+1).ceil %> - <% lastrx = rx - lastry = ry - lastrh = rh - lastrw = rw %> - <% end %> - </a> - <% end %> -</svg> |