diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/pairing/PairingAlgorithm.rb | 6 | ||||
-rw-r--r-- | lib/playing/.keep | 0 | ||||
-rw-r--r-- | lib/scheduling/elimination.rb | 80 | ||||
-rw-r--r-- | lib/scheduling/elimination.svg.erb | 72 | ||||
-rw-r--r-- | lib/scoring/.FibonacciPeerWithBlowout.rb.swp | bin | 0 -> 12288 bytes | |||
-rw-r--r-- | lib/scoring/FibonacciPeerWithBlowout.rb (renamed from lib/scoring_algorithms/FibonacciPeerWithBlowout.rb) | 0 | ||||
-rw-r--r-- | lib/scoring/MarginalPeer.rb (renamed from lib/scoring_algorithms/MarginalPeer.rb) | 0 | ||||
-rw-r--r-- | lib/scoring/ScoringAlgorithm.rb (renamed from lib/scoring_algorithms/ScoringAlgorithm.rb) | 0 | ||||
-rw-r--r-- | lib/scoring/WinnerTakesAll.rb (renamed from lib/scoring_algorithms/WinnerTakesAll.rb) | 0 |
9 files changed, 80 insertions, 78 deletions
diff --git a/lib/pairing/PairingAlgorithm.rb b/lib/pairing/PairingAlgorithm.rb new file mode 100644 index 0000000..c3d7f7b --- /dev/null +++ b/lib/pairing/PairingAlgorithm.rb @@ -0,0 +1,6 @@ +module Leaguer + class PairingAlgorithm + def self.pair(matches, players) + end + end +end diff --git a/lib/playing/.keep b/lib/playing/.keep new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/lib/playing/.keep 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> diff --git a/lib/scoring/.FibonacciPeerWithBlowout.rb.swp b/lib/scoring/.FibonacciPeerWithBlowout.rb.swp Binary files differnew file mode 100644 index 0000000..49504ab --- /dev/null +++ b/lib/scoring/.FibonacciPeerWithBlowout.rb.swp diff --git a/lib/scoring_algorithms/FibonacciPeerWithBlowout.rb b/lib/scoring/FibonacciPeerWithBlowout.rb index 19ac9a7..19ac9a7 100644 --- a/lib/scoring_algorithms/FibonacciPeerWithBlowout.rb +++ b/lib/scoring/FibonacciPeerWithBlowout.rb diff --git a/lib/scoring_algorithms/MarginalPeer.rb b/lib/scoring/MarginalPeer.rb index 0e1cfa8..0e1cfa8 100644 --- a/lib/scoring_algorithms/MarginalPeer.rb +++ b/lib/scoring/MarginalPeer.rb diff --git a/lib/scoring_algorithms/ScoringAlgorithm.rb b/lib/scoring/ScoringAlgorithm.rb index 6277da8..6277da8 100644 --- a/lib/scoring_algorithms/ScoringAlgorithm.rb +++ b/lib/scoring/ScoringAlgorithm.rb diff --git a/lib/scoring_algorithms/WinnerTakesAll.rb b/lib/scoring/WinnerTakesAll.rb index ad2471b..ad2471b 100644 --- a/lib/scoring_algorithms/WinnerTakesAll.rb +++ b/lib/scoring/WinnerTakesAll.rb |