Added DHing for someone

This commit is contained in:
2021-11-20 16:02:39 -06:00
parent 9a75ee1de0
commit 5e7b35926d
5 changed files with 57 additions and 42 deletions

View File

@@ -10,10 +10,7 @@ class PositioningForm(forms.ModelForm):
class Meta: class Meta:
model = Positioning model = Positioning
widgets = { widgets = {
# 'order': forms.NumberInput(attrs={'class':'w-100'}), 'position': forms.Select(attrs={'class': 'form-control form-control-sm'})
# 'player': forms.Select(attrs={'class': 'form-control'}),
'position': forms.Select(attrs={'class': 'form-control form-control-sm'}),
# 'ordering': forms.NumberInput(attrs={'class':'w-100'})
} }
exclude = () exclude = ()
@@ -25,11 +22,3 @@ PositioningFormSet = modelformset_factory(
extra=0 extra=0
) )
# class PositioningFormSet(modelformset_factory):
# class Meta:
# model = Positioning
# fields = ['player', 'position', 'order']
# widgets = {
# 'order':forms.NumberInput(attrs={'style':'width:6ch'})
# }

View File

@@ -46,9 +46,20 @@
<script id="sortable"> <script id="sortable">
function refresh_lineup_order (){ function refresh_lineup_order (){
var player_rows = document.getElementById('lineup').querySelectorAll('tr') var player_rows = document.getElementById('lineup').querySelectorAll('tr')
var has_dh = false
for (let i = 0; i < player_rows.length; i++) { for (let i = 0; i < player_rows.length; i++) {
player_rows[i].dataset.order = i + 1 if (player_rows[i].dataset.order == 0) {
var player_order = player_rows[i].querySelector('[id^="player-order"]') has_dh = true
continue
}
if (has_dh) {
player_rows[i].dataset.order = i
}
else {
player_rows[i].dataset.order = i+1
}
var player_order = player_rows[i].querySelector('[id^="player-order-button"]')
var form_element_order = player_rows[i].querySelector('[id$="order"]') var form_element_order = player_rows[i].querySelector('[id$="order"]')
player_order.innerText = parseInt(player_rows[i].dataset.order) player_order.innerText = parseInt(player_rows[i].dataset.order)
form_element_order.value = parseInt(player_rows[i].dataset.order) form_element_order.value = parseInt(player_rows[i].dataset.order)
@@ -64,19 +75,18 @@
pull:true pull:true
}, },
onAdd: function (/**Event*/evt) { onAdd: function (/**Event*/evt) {
console.log('added to lineup')
var itemEl = evt.item; // dragged HTMLElement var itemEl = evt.item; // dragged HTMLElement
var player_id = itemEl.dataset.playerId var player_id = itemEl.dataset.playerId
{#itemEl.order.set(99)#}
{#var statline = document.querySelector('#player-statline-'+player_id);#}
console.log(itemEl) console.log(itemEl)
var form_element_order =itemEl.querySelector('[id$="order"]') var form_element_order =itemEl.querySelector('[id$="order"]')
var player_order = itemEl.querySelector('[id^="player-order"]') var player_order = itemEl.querySelector('[id^="player-order"]')
var player_available =itemEl.querySelector('[id^="player-available"]') var player_available =itemEl.querySelector('[id^="player-available"]')
var player_order_button =itemEl.querySelector('[id^="player-order-button"]')
console.log(player_order.parentElement.dataset)
toggle_in_lineup(player_order_button)
player_order.parentElement.dataset.order = evt.newIndex
refresh_lineup_order() refresh_lineup_order()
player_available.parentElement.style.display="none" player_available.parentElement.style.display="none"
form_element_order.value = evt.newIndex + 1
player_order.innerHTML = evt.newIndex + 1
player_order.style.display="table-cell" player_order.style.display="table-cell"
evt.to; // target list evt.to; // target list
evt.from; // previous list evt.from; // previous list
@@ -91,11 +101,6 @@
console.log('update to lineup') console.log('update to lineup')
var itemEl = evt.item; // dragged HTMLElement var itemEl = evt.item; // dragged HTMLElement
refresh_lineup_order() refresh_lineup_order()
{#player_available.parentElement.style.display="none"#}
{#form_element_order.value = evt.newIndex - 4#}
{#player_order.innerHTML = evt.newIndex - 4#}
{#player_order.style.display="block"#}
}, },
}); });
var bench = new Sortable.create( var bench = new Sortable.create(
@@ -116,26 +121,29 @@
var player_order = itemEl.querySelector('[id^="player-order"]') var player_order = itemEl.querySelector('[id^="player-order"]')
var player_available =itemEl.querySelector('[id^="player-available"]') var player_available =itemEl.querySelector('[id^="player-available"]')
player_available.parentElement.style.display="table-cell" player_available.parentElement.style.display="table-cell"
form_element_order.value = evt.newIndex - 4 form_element_order.value = 0
player_order.innerHTML = evt.newIndex - 4 player_order.innerHTML = 1
player_order.style.display="none" player_order.style.display="none"
evt.to; // target list
evt.from; // previous list
evt.oldIndex; // element's old index within old parent
evt.newIndex; // element's new index within new parent
evt.oldDraggableIndex; // element's old index within old parent, only counting draggable elements
evt.newDraggableIndex; // element's new index within new parent, only counting draggable elements
evt.clone // the clone element
evt.pullMode; // when item is in another sortable: `"clone"` if cloning, `true` if moving
var player_id = itemEl.dataset.playerId var player_id = itemEl.dataset.playerId
var statline = document.querySelector('#player-statline-'+player_id);
refresh_lineup_order() refresh_lineup_order()
{#console.log(itemEl)#}
{#console.log(player_id)#}
{#console.log(statline)#}
{#statline.style.visibility='visible'#}
} }
}); });
function toggle_in_lineup(order_button){
var player_row = order_button.parentNode.parentNode
if (player_row.dataset.order == 0) {
order_button.innerText = "1"
order_button.classList.add("btn-light")
order_button.classList.remove("btn-dark")
player_row.dataset.order = 1
}
else {
order_button.innerText = "D"
order_button.classList.remove("btn-light")
order_button.classList.add("btn-dark")
player_row.dataset.order = 0
}
refresh_lineup_order()
}
</script> </script>

View File

@@ -41,7 +41,21 @@
id="player-order-{{ form.instance.player.id }}" id="player-order-{{ form.instance.player.id }}"
style="display:{{ order_display }};"> style="display:{{ order_display }};">
{% if form.order.value %} {% if form.order.value %}
{{ form.order.value }} <button type="button"
class="btn btn-light"
id="player-order-button-{{ form.instance.player.id }}"
onclick="toggle_in_lineup(this)"
>
{{ form.order.value }}
</button>
{% elif form.order.value == 0 %}
<button type="button"
class="btn btn-dark"
id="player-order-button-{{ form.instance.player.id }}"
onclick="toggle_in_lineup(this)"
>
D
</button>
{% endif %} {% endif %}
</th> </th>
<th> <th>

View File

@@ -17,7 +17,6 @@ def edit(request, event_id):
# process the data in form.cleaned_data as required # process the data in form.cleaned_data as required
# ... # ...
# redirect to a new URL: # redirect to a new URL:
# form.cleaned_data.pop('id')
if isinstance(form.cleaned_data['id'], Positioning): if isinstance(form.cleaned_data['id'], Positioning):
positioning_id = form.cleaned_data.pop('id').id #FIXME this is a workaround, not sure why it is necessary positioning_id = form.cleaned_data.pop('id').id #FIXME this is a workaround, not sure why it is necessary
@@ -27,7 +26,9 @@ def edit(request, event_id):
else: else:
positioning = Positioning.objects.create(**form.cleaned_data, event_id=event_id) positioning = Positioning.objects.create(**form.cleaned_data, event_id=event_id)
did_create = True did_create = True
return render(request, 'success.html', {'call_back':'edit lineup','id':event_id}, status=200) else:
pass
return render(request, 'success.html', {'call_back':'edit lineup','id':event_id, 'errors':[error for error in formset.errors if error]}, status=200)
# return render(request, 'success.html', {'call_back':'schedule'}) # return render(request, 'success.html', {'call_back':'schedule'})
event = Event.objects.get(id=event_id) event = Event.objects.get(id=event_id)
players = Player.objects.all().prefetch_related('availability_set', 'statline_set', 'positioning_set') players = Player.objects.all().prefetch_related('availability_set', 'statline_set', 'positioning_set')

View File

@@ -10,5 +10,8 @@
</head> </head>
<span class="text-success">Success!</span> <span class="text-muted">Redirecting...</span> <span class="text-success">Success!</span> <span class="text-muted">Redirecting...</span>
{% for error in errors %}
error
{% endfor %}
{% endblock %} {% endblock %}