tournament 3.1.1 → 3.2.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +6 -0
- data/lib/tournament.rb +1 -1
- data/webgui/app/models/pool.rb +1 -1
- data/webgui/app/views/admin/index.html.erb +1 -1
- data/webgui/app/views/pool/index.html.erb +3 -3
- data/webgui/app/views/teams/choose.html.erb +5 -2
- data/webgui/public/javascripts/application.js +63 -0
- data/webgui/public/javascripts/controls.js +11 -3
- data/webgui/public/stylesheets/main.css +4 -0
- metadata +4 -4
data/History.txt
CHANGED
@@ -1,3 +1,9 @@
|
|
1
|
+
== 3.2.0 / 2009-03-14
|
2
|
+
* Fix team selection page to not jump around when using arrow keys
|
3
|
+
with the autocomplete pop ups.
|
4
|
+
* Allow switch between seed and matchup order in team selection page.
|
5
|
+
* Minor cosmetic formatting changes.
|
6
|
+
|
1
7
|
== 3.1.1 / 2009-03-13
|
2
8
|
* Bugfixes for showing add entry links. Makes sure participants can
|
3
9
|
add entries once the teams are set.
|
data/lib/tournament.rb
CHANGED
data/webgui/app/models/pool.rb
CHANGED
@@ -6,7 +6,7 @@ class Pool < ActiveRecord::Base
|
|
6
6
|
before_save :marshal_pool
|
7
7
|
belongs_to :user
|
8
8
|
has_many :entries
|
9
|
-
has_many :user_entries, :class_name => 'Entry', :conditions => ['user_id != ?', '#{user_id}']
|
9
|
+
has_many :user_entries, :class_name => 'Entry', :conditions => ['user_id != ?', '#{user_id}'], :include => :user, :order => 'users.login, entries.name'
|
10
10
|
has_many :users, :through => :user_entries
|
11
11
|
has_many :pending_entries, :class_name => 'Entry', :conditions => ['completed = ? and user_id != ?', false, '#{user_id}']
|
12
12
|
has_one :tournament_entry, :class_name => 'Entry', :conditions => ['user_id = \'#{user_id}\'']
|
@@ -3,7 +3,7 @@
|
|
3
3
|
<% if Pool.active_pools.size > 0 %>
|
4
4
|
<% Pool.active_pools.each do |pool| -%>
|
5
5
|
<div class="poollistblock">
|
6
|
-
<span class="poollisthead"><%= pool.name %></span>
|
6
|
+
<span class="poollisthead<%= pool.completed? ? ' poollistheaddone' : ''%>"><%= pool.name %></span>
|
7
7
|
<small>
|
8
8
|
<% if current_user && pool.user_id == current_user.id %>
|
9
9
|
<% if pool.tournament_entry -%>
|
@@ -31,7 +31,7 @@ Total Entries: <%= pool.user_entries.size%>
|
|
31
31
|
Last Update: <%=pool.updated_at.to_formatted_s(:long)%>
|
32
32
|
</div>
|
33
33
|
<div class="poollistinfodetail">
|
34
|
-
Entry Fee:
|
34
|
+
Entry Fee: <%=number_to_currency(pool.fee)%>
|
35
35
|
</div>
|
36
36
|
<% if pool.user_entries.size > 0 -%>
|
37
37
|
<div class="poollistinfodetail">
|
@@ -39,7 +39,7 @@ Payouts:
|
|
39
39
|
<% take = pool.user_entries.size * pool.fee.to_f -
|
40
40
|
(pool.payouts.inject(0) {|sum, p| sum += p.kind == '$' ? p.payout.to_i : 0}) %>
|
41
41
|
<% pool.payouts.delete_if{|p| p.kind.blank?}.sort_by {|p| p.rank }.each do |p| -%>
|
42
|
-
<%=p.rank != 'L' ? p.rank.to_i.ordinal : 'Last'%>:
|
42
|
+
<%=p.rank != 'L' ? p.rank.to_i.ordinal : 'Last'%>: <%=number_to_currency(p.kind == '$' ? p.payout : p.payout.to_f / 100.0 * take)%>
|
43
43
|
<% end -%>
|
44
44
|
</div>
|
45
45
|
<% end -%>
|
@@ -17,19 +17,22 @@
|
|
17
17
|
<p>
|
18
18
|
<i>Same color region champs play each other in final four:</i>
|
19
19
|
</p>
|
20
|
+
<p>
|
21
|
+
Order: <%= button_to_function('Seed Order', 'switch_to_seed_order()', :id => 'seed_button', :disabled => true) %> <%= button_to_function('Matchup Order', 'switch_to_matchup_order()', :id => 'matchup_button')%>
|
22
|
+
</p>
|
20
23
|
<%= form_tag({:controller => 'teams', :action => 'change', :id => @pool.id}, {:method => "POST"}) %>
|
21
24
|
<% @pool.region_seedings.each_with_index do |arr, index| -%>
|
22
25
|
<% region_name = arr[0]; teams = arr[1] %>
|
23
26
|
<div class="<%= cycle('regionLeft', 'regionRight', :name => 'tbclass')%> <%= cycle('regionTop', 'regionTop', 'regionBottom', 'regionBottom', :name => 'lrclass')%>">
|
24
27
|
Region Name: <input type="text" name="region<%=index%>[name]" value="<%=region_name%>">
|
25
|
-
<table>
|
28
|
+
<table id="<%="region_#{index}"%>">
|
26
29
|
<tr>
|
27
30
|
<th>Seed</th>
|
28
31
|
<th>Name</th>
|
29
32
|
<th>Short<br/>Name</th>
|
30
33
|
</tr>
|
31
34
|
<% teams.each_with_index do |team, seed_idx| -%>
|
32
|
-
<tr>
|
35
|
+
<tr id="<%="region_#{index}_#{seed_idx}"%>">
|
33
36
|
<td>
|
34
37
|
<%= seed_idx + 1%>
|
35
38
|
</td>
|
@@ -1,2 +1,65 @@
|
|
1
1
|
// Place your application-specific JavaScript functions and classes here
|
2
2
|
// This file is automatically included by javascript_include_tag :defaults
|
3
|
+
var swapMethod = {
|
4
|
+
swap: function(element, el) {
|
5
|
+
element = $(element);
|
6
|
+
el = $(el);
|
7
|
+
|
8
|
+
if (element == el) return element;
|
9
|
+
|
10
|
+
var clone = el.cloneNode(false); // no need to clone deep
|
11
|
+
Element.replace(element, clone);
|
12
|
+
Element.replace(el, element);
|
13
|
+
Element.replace(clone, el); // make sure references (like event observers) are kept
|
14
|
+
return element;
|
15
|
+
}
|
16
|
+
}
|
17
|
+
Element.addMethods(swapMethod);
|
18
|
+
|
19
|
+
var swaps = [
|
20
|
+
[15,2],
|
21
|
+
[10,7],
|
22
|
+
[7,14],
|
23
|
+
[10,3],
|
24
|
+
[10,11],
|
25
|
+
[7,6],
|
26
|
+
[3,13],
|
27
|
+
[7,4],
|
28
|
+
[6,12],
|
29
|
+
[4,9],
|
30
|
+
[3,8],
|
31
|
+
[2,16]
|
32
|
+
];
|
33
|
+
var order = 'seed';
|
34
|
+
|
35
|
+
function switch_to_seed_order() {
|
36
|
+
if (order == 'seed') {
|
37
|
+
return;
|
38
|
+
}
|
39
|
+
$('matchup_button').enable();
|
40
|
+
$('seed_button').disable();
|
41
|
+
order = 'seed';
|
42
|
+
apply_swaps(swaps.reverse());
|
43
|
+
}
|
44
|
+
|
45
|
+
function switch_to_matchup_order() {
|
46
|
+
if (order == 'matchup') {
|
47
|
+
return;
|
48
|
+
}
|
49
|
+
$('matchup_button').disable();
|
50
|
+
$('seed_button').enable();
|
51
|
+
order = 'matchup';
|
52
|
+
apply_swaps(swaps.reverse());
|
53
|
+
}
|
54
|
+
|
55
|
+
function apply_swaps(swaps) {
|
56
|
+
for(var region = 0; region < 4; ++region) {
|
57
|
+
swaps.forEach(function(s) {
|
58
|
+
var index1 = s[0] - 1;
|
59
|
+
var index2 = s[1] - 1;
|
60
|
+
var node1 = $('region_' + region + '_' + index1);
|
61
|
+
var node2 = $('region_' + region + '_' + index2);
|
62
|
+
node1.swap(node2);
|
63
|
+
});
|
64
|
+
}
|
65
|
+
}
|
@@ -211,13 +211,21 @@ Autocompleter.Base = Class.create({
|
|
211
211
|
markPrevious: function() {
|
212
212
|
if(this.index > 0) this.index--;
|
213
213
|
else this.index = this.entryCount-1;
|
214
|
-
this.getEntry(this.index)
|
214
|
+
var entry = this.getEntry(this.index);
|
215
|
+
var doff = document.viewport.getScrollOffsets();
|
216
|
+
var eoff = entry.cumulativeOffset();
|
217
|
+
if (eoff[1] < doff[1])
|
218
|
+
entry.scrollIntoView(true);
|
215
219
|
},
|
216
220
|
|
217
221
|
markNext: function() {
|
218
222
|
if(this.index < this.entryCount-1) this.index++;
|
219
223
|
else this.index = 0;
|
220
|
-
this.getEntry(this.index)
|
224
|
+
var entry = this.getEntry(this.index);
|
225
|
+
var doff = document.viewport.getScrollOffsets();
|
226
|
+
var eoff = entry.cumulativeOffset();
|
227
|
+
if (eoff[1] + entry.getHeight() > doff[1] + document.viewport.getHeight())
|
228
|
+
entry.scrollIntoView(false);
|
221
229
|
},
|
222
230
|
|
223
231
|
getEntry: function(index) {
|
@@ -960,4 +968,4 @@ Form.Element.DelayedObserver = Class.create({
|
|
960
968
|
this.timer = null;
|
961
969
|
this.callback(this.element, $F(this.element));
|
962
970
|
}
|
963
|
-
});
|
971
|
+
});
|
@@ -13,6 +13,7 @@ h1 {
|
|
13
13
|
}
|
14
14
|
.poollistblock {
|
15
15
|
margin-left: 10px;
|
16
|
+
margin-bottom: 30px;
|
16
17
|
}
|
17
18
|
.poollistinfo {
|
18
19
|
margin-left: 20px;
|
@@ -27,6 +28,9 @@ h1 {
|
|
27
28
|
font-weight: bold;
|
28
29
|
color: green;
|
29
30
|
}
|
31
|
+
.poollistheaddone {
|
32
|
+
color: gray;
|
33
|
+
}
|
30
34
|
#wrap {
|
31
35
|
margin:0 auto;
|
32
36
|
width:auto;
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 3
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 3.
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 3.2.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Douglas A. Seifert
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-03-13
|
17
|
+
date: 2010-03-13 23:00:00 -08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|