Merge branch 'v2' into gamecard

# Conflicts:
#	benchcoach/static/css/gamecard.css
#	benchcoach/static/fonts/dinpro/dinpro.css
#	benchcoach/static/fonts/m+1m/m+1m.css
#	benchcoach/static/fonts/m+1m/mplus-1m-bold-webfont.woff
#	benchcoach/static/fonts/m+1m/mplus-1m-light-webfont.woff
#	benchcoach/static/fonts/m+1m/mplus-1m-medium-webfont.woff
#	benchcoach/static/fonts/m+1m/mplus-1m-regular-webfont.woff
#	benchcoach/static/fonts/m+1m/mplus-1m-thin-webfont.woff
#	benchcoach/static/fonts/refrigerator/refigerator.css
#	benchcoach/static/fonts/vera/Vera-Bold-Italic-webfont.woff
#	benchcoach/static/fonts/vera/Vera-Bold-webfont.woff
#	benchcoach/static/fonts/vera/Vera-Italic-webfont.woff
#	benchcoach/static/fonts/vera/Vera-webfont.woff
#	benchcoach/static/fonts/vera/VeraMono-Bold-Italic-webfont.woff
#	benchcoach/static/fonts/vera/VeraMono-Bold-webfont.woff
#	benchcoach/static/fonts/vera/VeraMono-Italic-webfont.woff
#	benchcoach/static/fonts/vera/VeraMono-webfont.woff
#	benchcoach/static/fonts/vera/bitstreamvera.css
#	benchcoach/static/fonts/verdana/VerdanaPro-Black.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-BlackItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-Bold.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-BoldItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondBlack.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondBlackItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondBold.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondBoldItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondLight.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondLightItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondRegular.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondSemiBold.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-CondSemiBoldItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-Italic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-Light.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-LightItalic.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-Regular.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-SemiBold.ttf
#	benchcoach/static/fonts/verdana/VerdanaPro-SemiBoldItalic.ttf
#	benchcoach/static/fonts/verdana/verdanapro.css
#	benchcoachproject/static/css/base.css
#	teamsnap/templates/lineup/gamecard.html
#	teamsnap/urls.py
#	teamsnap/views.py
This commit is contained in:
2022-06-07 18:31:38 -05:00
533 changed files with 5402 additions and 28338 deletions

View File

@@ -0,0 +1,148 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ title }}{% endblock %}
{% block page_heading %}{% endblock %}
{% block content %}
<h3>Dashboard</h3>
<div class="row">
<div class="col-md pb-2">
<div class="card">
<div class="card-header">
<h4>Upcoming Games</h4>
</div>
<div class="card-body p-0 m-0">
{% for event, availability_summary in events_availabilities|slice:":4" %}
<div class="row m-0 p-2 border-bottom">
<div class="col p-0 m-auto" style="flex: 0 0 100px;">
<div class="d-inline-flex m-0 p-0">
<div class="chart-container" style="height: 100px;width: 100px;">
<canvas id="availability-donut-{{ event.data.id }}" class="availability-donut"
data-event-id="{{ event.data.id }}"
data-available-yes="{{ availability_summary.data.player_going_count }}"
data-available-no="{{ availability_summary.data.player_not_going_count }}"
data-available-maybe="{{ availability_summary.data.player_maybe_count }}"
data-available-unknown="{{ availability_summary.data.player_unknown_count }}"
>
</canvas></div>
</div>
</div>
<div class="col">
<div>
<h4><strong><a class="text-decoration-none text-black" href="{% url 'teamsnap_view_event' team_id=event.data.team_id event_id=event.data.id %}">{{ event.data.formatted_title }}</a></strong></h4>
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j, g:i A" }}</h6>
<h6 class="text-muted mb-2">{{ event.data.location_name }}</h6>
</div>
<div class="d-flex">
<a class="btn btn-primary btn-sm mx-1" role="button" href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=event.data.team_id %}">Go to Lineup</a>
<form method="get"
action="{% url 'instagen_generate' team_id=event.data.team_id event_id=event.data.id %}">
<select hidden class="form-select" name="game_id" id="game_id">
<optgroup label="Events">
<option value="" disabled="disabled">Select an event...</option>
<option selected
value="{{ event.data.id }}">{{ event.data.formatted_title }}</option>
</optgroup>
</select>
<input hidden class="form-check-input" type="radio" name="background"
id="backgroundLocation" checked value="location">
<input hidden class="form-check-input" type="radio" name="dimensions" id="square" checked
value="1080x1080">
<button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-instagram"></i>
</button>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="col-md pb-2">
<div class="card">
<div class="card-header">
<h4>Past Games</h4>
</div>
<div class="card-body p-0 m-0">
{% for event in ts_events_past|slice:":4" %}
<div class="row m-0 p-2 border-bottom">
<div class="col p-0 m-auto rounded-circle bg-light" style="flex: 0 0 100px;">
<div class="d-inline-flex m-0 p-0">
<div class="d-flex align-items-center justify-content-center" style="height: 100px;width: 100px;">
<h4 class="text-center"><strong>{{ event.data.formatted_results }}</strong></h4>
</div>
</div>
</div>
<div class="col">
<h4 class=""><strong><a class="text-decoration-none text-black" href="{% url 'teamsnap_view_event' team_id=event.data.team_id event_id=event.data.id %}">{{ event.data.formatted_title }}</a></strong></h4>
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j" }}</h6>
{# <h6 class="text-muted mb-2">{{ event.data.location_name }}</h6><a class="btn btn-primary btn-sm" role="button" href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=request.user.teamsnapsettings.managed_team.id %}">Go to Lineup</a>#}
<div class="d-flex">
<form method="get"
action="{% url 'instagen_generate' team_id=event.data.team_id event_id=event.data.id %}">
<select hidden class="form-select" name="game_id" id="game_id">
<optgroup label="Events">
<option value="" disabled="disabled">Select an event...</option>
<option selected
value="{{ event.data.id }}">{{ event.data.formatted_title }}</option>
</optgroup>
</select>
<input hidden class="form-check-input" type="radio" name="background"
id="backgroundLocation" checked value="location">
<input hidden class="form-check-input" type="radio" name="dimensions" id="square" checked
value="1080x1080">
<button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-instagram"></i>
</button>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
{% endblock %}
{% block inline_javascript %}
<script>
function donut(ctx, yes_count, maybe_count, no_count, unknown_count) {
var style = getComputedStyle(document.body);
const myChart = new Chart(ctx, {
type: 'doughnut',
responsive: 'true',
data: {
datasets: [{
label: 'Availability',
labels: [
'Yes',
'Maybe',
'No',
'Unknown'
],
data: [yes_count, maybe_count, no_count, unknown_count],
backgroundColor: [
style.getPropertyValue('--bs-success'),
style.getPropertyValue('--bs-info'),
style.getPropertyValue('--bs-danger'),
style.getPropertyValue('--bs-secondary')
],
hoverOffset: 4
}]
},
});
}
for (ctx of document.querySelectorAll('.availability-donut')){
donut(ctx,
ctx.dataset.availableYes,
ctx.dataset.availableMaybe,
ctx.dataset.availableNo,
ctx.dataset.availableUnknown,
)
}
</script>
{% endblock %}

View File

@@ -73,4 +73,4 @@
</div>
</form>
{% endblock %}
{% endblock %}

View File

@@ -1,5 +1,5 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ event.data.formatted_title }}{% endblock %}
{% block title %} {{ title }}{% endblock %}
{% block content %}
<div class="card mx-auto" style="max-width: 455px">
@@ -10,7 +10,7 @@
<div class="row">
<div class="col text-end">
<form method="get"
action="{% url "teamsnap_image_generator_generate" team_id=request.user.profile.teamsnapsettings.managed_team.id event_id=event.data.id %}">
action="{% url 'instagen_generate' team_id=event.data.team_id event_id=event.data.id %}">
<select hidden class="form-select" name="game_id" id="game_id">
<optgroup label="Events">
<option value="" disabled="disabled">Select an event...</option>
@@ -26,7 +26,7 @@
</button>
</form>
<a class="btn btn-primary btn-sm py-0 m-1"
href="{% url "teamsnap_image_generator" team_id=request.user.profile.teamsnapsettings.managed_team.id event_id=event.data.id %}"
href="{% url "instagen" team_id=event.data.team_id event_id=event.data.id %}"
role="button">
<div class="d-inline-block"><i class="bi bi-instagram"></i> <i class="bi bi-three-dots"></i>
</div>
@@ -61,7 +61,7 @@
Opponent
</th>
<td>
<a href="{% url 'teamsnap_opponent' team_id=request.user.profile.teamsnapsettings.managed_team.id id=event.data.opponent_id %}">{{ event.data.opponent_name }}</a>
<a href="">{{ event.data.opponent_name }}</a>
</td>
</tr>
<tr>
@@ -69,7 +69,7 @@
Location
</th>
<td>
<a href="{% url 'teamsnap_location' team_id=request.user.profile.teamsnapsettings.managed_team.id id=event.data.location_id %}">{{ event.data.location_name }}</a>
<a href="">{{ event.data.location_name }}</a>
</td>
</tr>
</tbody>
@@ -134,11 +134,11 @@
<div class="row m-0">
<div class="flex-column m-2">
<a class="btn btn-primary btn-sm"
href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id %}"
href="{% url 'teamsnap_edit_lineup' team_id=event.data.team_id event_ids=event.data.id %}"
role="button">Edit</a>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% endblock %}

View File

@@ -7,4 +7,4 @@
{% include 'teamsnap/lineup/widgets/lineup.html' with formset_lineup=formset_lineup formset_bench=formset_bench%}
<script src="{% static 'js/Sortable.js' %}"></script>
<script src="{% static 'teamsnap/js/lineup-table.js' %}"></script>
{% endblock %}
{% endblock %}

View File

@@ -28,7 +28,7 @@
{{ form.checked }}
</td>
<td>
<a href="{% url 'teamsnap_view_event' event_id=form.event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id%}">{{ form.event.data.formatted_title }}</a>
<a href="{% url 'teamsnap_view_event' event_id=form.event.data.id team_id=request.user.teamsnapsettings.managed_team.id%}">{{ form.event.data.formatted_title }}</a>
</td>
<td>
{{ form.event.data.start_date | localtime}}

View File

@@ -0,0 +1,77 @@
{% extends "base.html" %}{% load static %}
{% block title %} Edit Lineups {% endblock %}
{#{% block page_heading %}Edit Lineups{% endblock %}#}
{#{% block page_subheading %}{% endblock %}#}
{% block content %}
{# <div class="container overflow-scroll mx-0 px-0">#}
{# <div class="row flex-row flex-nowrap">#}
{# {% for event_data in contexts %}#}
{# <div class="col border-start border-end">#}
{# <div class = "border-bottom">#}
{# <h4>{{ event_data.event.data.formatted_title }}</h4>#}
{# <h6 class="text-muted" >{{ event_data.data.start_date }}</h6>#}
{# </div>#}
{# {% include 'teamsnap/lineup/widgets/lineup.html' with formset_lineup=event_data.formset_lineup formset_bench=event_data.formset_bench event_id=event_data.event.data.id %}#}
{# </div>#}
{# {% endfor %}#}
{# </div>#}
{# </div>#}
<div class="container overflow-scroll">
<div id="popup-messages-content">
</div>
<div class="row flex-row flex-nowrap">
<table>
<tbody>
<tr class="align-top mx-1">
{% for event_data in contexts %}
<td class="px-1">
{% include "lineup/widgets/lineup.html" with event=event_data.event event_id=event_data.event.data.id formset=event_data.formset formset_startinglineup=event_data.formset_startinglineup formset_bench=event_data.formset_bench formset_out=event_data.formset_out formset_startingpositionalonly=event_data.formset_startingpositionalonly %}
</td>
{% endfor %}
</tr>
</tbody>
</table>
</div>
</div>
{% endblock %}
{% block inline_javascript %}
{{ block.super }}
<script src="{% static 'js/Sortable.js' %}"></script>
<script src="{% static 'js/lineup-table.js' %}"></script>
<script>
window.addEventListener('DOMContentLoaded', () => {
/* Run whatever you want */
const postForms = document.querySelectorAll("[id^=form-lineup]");
for (postForm of postForms) {
function handleSubmit(postForm) {
postForm.addEventListener("submit", e => {
e.preventDefault();
formData = new FormData(postForm);
fetch(postForm.action, {
method: 'POST',
body: formData,
})
.then(response => response.json())
.then(data => {
{#postForm.reset();#}
document.querySelector("#popup-messages-content").innerHTML = `<div class="alert alert-dismissible alert-success" role="alert">
<strong>Success!</strong> ${data.formatted_title} <strong>saved</strong>.
<button type="button" class="btn-close" data-bs-dismiss="alert" aria-label="Close"></button>
</div> `
})
.catch((error) => {
console.error('Error:', error);
});
})
}
handleSubmit(postForm)
}
});
</script>
{% endblock %}

View File

@@ -0,0 +1,97 @@
{% load static %}
<div class="card mx-auto benchcoach-lineup" style="max-width: 455px" id="benchcoach-lineup-{{ event_id }}">
<form method="post" action='{% url 'teamsnap_submit_lineup' team_id=event.data.team_id event_id=event.data.id %}' id="form-lineup-{{ event.data.id }}">
{{ formset.management_form }}
{% csrf_token %}
<div class="border-bottom p-2">
<h4 class="card-title text-nowrap">{{ event.data.formatted_title }}</h4>
<h6 class="text-muted card-subtitle text-nowrap">{{ event.data.start_date|date:"D, F j, Y g:i A" }}</h6>
<div class="row">
<div class="col">
<button class="btn btn-primary btn-sm py-0 m-1" onclick="importFromClipboard(this)" type="button"><i class="bi bi-arrow-90deg-down"></i></i><i class="bi bi-file-spreadsheet"></i> </button>
</div>
<div class="col text-end d-inline">
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle btn-sm py-0 m-1" type="button" id="dropdownMenuButton1" data-bs-toggle="dropdown" aria-expanded="false">
<i class="bi bi-share"></i> Export
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenuButton1">
<li>
<a class="dropdown-item" href="javascript:;" onclick="copyEmailTable(this, '{{ event.data.start_date|date:"D, F j, Y g:i A" }}, {{ event.data.location_name }}, ({% if event.data.game_type == 'Away' %}@{% endif %}{{ event.data.opponent_name }})', '{% for form in formset %}{{ form.member.data.email_addresses.0 }},{% endfor %}')">
<i class="bi bi-envelope"></i> Generate Lineup Email
</a>
</li>
<li>
<a class="dropdown-item" onclick="sendToClipboard(this)">
<i class="bi bi-file-spreadsheet"></i> Sheet format to Clipboard
</a>
</li>
</ul>
</div>
<div>
<button class="btn btn-teamsnap btn-sm py-0 m-1" type="submit">
<i class="bi bi-arrow-right"></i>
TeamSnap
</button>
</div>
</div>
</div>
</div>
<div class="card-body p-0 m-0">
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-check me-1"></i><span class="text-uppercase fw-bold small">Starting Lineup</span>
</div>
</div>
<div class = "row m-0">
<div class="col border-bottom px-0">
<div class="row mx-0 my-1 position-status">
{% with 'P C 1B 2B 3B SS LF CF RF EH DH' as position_list %}
{% for position in position_list.split %}
<div class="col fw-bold text-center small">
<span class="" id="position-status-{{ position }}">{{ position }}</span>
</div>
{% endfor %}
{% endwith %}
</div>
</div>
</div>
{% include 'lineup/widgets/lineup_table.html' with formset=formset_startinglineup table_id="benchcoach-startinglineup" %}
</div>
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-minus me-1"></i><span class="text-uppercase fw-bold small">Starting (Positional Only)</span>
</div>
</div>
{% include 'lineup/widgets/lineup_table.html' with formset=formset_startingpositionalonly table_id="benchcoach-startingpositionalonly" %}
</div>
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard me-1"></i><span class="text-uppercase fw-bold small">Bench</span>
</div>
</div>
</div>
{% include 'lineup/widgets/lineup_table.html' with formset=formset_bench table_id="benchcoach-bench" %}
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-x me-1"></i><span class="text-uppercase fw-bold small">Out</span>
</div>
</div>
</div>
{% include 'lineup/widgets/lineup_table.html' with formset=formset_out table_id="benchcoach-out" %}
</div>
</form>
</div>

View File

@@ -66,4 +66,4 @@
{% endfor %}
</tbody>
</table>
</div>
</div>

View File

@@ -0,0 +1,7 @@
{% extends "base.html" %}
{% block content %}
<form method="post">{% csrf_token %}
{{ form.as_p }}
<input type="submit" value="Save">
</form>
{% endblock content %}

View File

@@ -1,22 +1,6 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ title }}{% endblock %}
{% block page_heading %}
<div class="row d-none" >
<div hidden class="col">
<div class="container m-2">
<div class="container m-2">
<div class="btn-group">
<form action="">
<a class="btn btn-sm btn-outline-primary text-nowrap" href="{% url 'teamsnap_schedule' team_id=team_id%}?filters=no_past">No Past Events</a>
<button class="btn btn-sm btn-outline-primary text-nowrap">Games Only</button>
</form>
</div>
</div>
</div>
</div>
</div>
{% endblock %}
{% block content %}
{% load tz %}
<div class="">
@@ -51,7 +35,7 @@
{{ event.data.location_name }}
</td>
<td>
<a class="btn btn-outline-secondary btn-sm" href="{% url 'teamsnap_view_event' event_id=event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id%}"><i class="bi bi-three-dots"></i></a>
<a class="btn btn-outline-secondary btn-sm" href="{% url 'teamsnap_view_event' team_id=event.data.team_id event_id=event.data.id %}"><i class="bi bi-three-dots"></i></a>
</td>
</tr>
{% endfor %}
@@ -61,4 +45,4 @@
</div>
</div>
</div>
{% endblock %}
{% endblock %}

View File

@@ -1,27 +0,0 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ title }}{% endblock %}
{% block page_heading %}Schedule{% endblock %}
{% block content %}
{% load tz %}
<div class="table-responsive">
<table class="table table-striped table-sm">
{# <thead>#}
{# </thead>#}
<tbody>
{% for event in events %}
<tr>
<td>
<a href="{% url 'teamsnap_event' id=event.data.id team_id=schedule.html %}">{{ event.data.formatted_title }}</a>
</td>
<td>
{{ event.data.start_date | localtime}}
</td>
<td>
{{ event.data.location_name }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
{% endblock %}

View File

@@ -1,150 +0,0 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ title }}{% endblock %}
{% block page_heading %}{% endblock %}
{% block content %}
<h3>Dashboard</h3>
<div class="row">
<div class="col-md pb-2">
<div class="card">
<div class="card-header">
<h4>Upcoming Games</h4>
</div>
<div class="card-body p-0 m-0">
{% for event, availability_summary in events_availabilities|slice:":4" %}
<div class="row m-0 p-2 border-bottom">
<div class="col p-0 m-auto" style="flex: 0 0 100px;">
<div class="d-inline-flex m-0 p-0">
<div class="chart-container" style="height: 100px;width: 100px;">
<canvas id="availability-donut-{{ event.data.id }}" class="availability-donut"
data-event-id="{{ event.data.id }}"
data-available-yes="{{ availability_summary.data.player_going_count }}"
data-available-no="{{ availability_summary.data.player_not_going_count }}"
data-available-maybe="{{ availability_summary.data.player_maybe_count }}"
data-available-unknown="{{ availability_summary.data.player_unknown_count }}"
>
</canvas></div>
</div>
</div>
<div class="col">
<div>
<h4><strong><a class="text-decoration-none text-black" href="{% url 'teamsnap_view_event' team_id=team_id event_id=event.data.id %}">{{ event.data.formatted_title }}</a></strong></h4>
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j, g:i A" }}</h6>
<h6 class="text-muted mb-2">{{ event.data.location_name }}</h6>
</div>
<div class="d-flex">
<a class="btn btn-primary btn-sm mx-1" role="button" href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id %}">Go to Lineup</a>
<form method="get"
action="{% url "teamsnap_image_generator_generate" team_id=request.user.profile.teamsnapsettings.managed_team.id event_id=event.data.id %}">
<select hidden class="form-select" name="game_id" id="game_id">
<optgroup label="Events">
<option value="" disabled="disabled">Select an event...</option>
<option selected
value="{{ event.data.id }}">{{ event.data.formatted_title }}</option>
</optgroup>
</select>
<input hidden class="form-check-input" type="radio" name="background"
id="backgroundLocation" checked value="location">
<input hidden class="form-check-input" type="radio" name="dimensions" id="square" checked
value="1080x1080">
<button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-instagram"></i>
</button>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
<div class="col-md pb-2">
<div class="card">
<div class="card-header">
<h4>Past Games</h4>
</div>
<div class="card-body p-0 m-0">
{% for event in ts_events_past|slice:":4" %}
<div class="row m-0 p-2 border-bottom">
<div class="col p-0 m-auto rounded-circle bg-light" style="flex: 0 0 100px;">
<div class="d-inline-flex m-0 p-0">
<div class="d-flex align-items-center justify-content-center" style="height: 100px;width: 100px;">
<h4 class="text-center"><strong>{{ event.data.formatted_results }}</strong></h4>
</div>
</div>
</div>
<div class="col">
<h4 class=""><strong><a class="text-decoration-none text-black" href="{% url 'teamsnap_view_event' team_id=team_id event_id=event.data.id %}">{{ event.data.formatted_title }}</a></strong></h4>
<h6 class="text-muted mb-2">{{ event.data.start_date|date:"D, F j" }}</h6>
{# <h6 class="text-muted mb-2">{{ event.data.location_name }}</h6><a class="btn btn-primary btn-sm" role="button" href="{% url 'teamsnap_edit_lineup' event_ids=event.data.id team_id=request.user.profile.teamsnapsettings.managed_team.id %}">Go to Lineup</a>#}
<div class="d-flex">
<form method="get"
action="{% url "teamsnap_image_generator_generate" team_id=request.user.profile.teamsnapsettings.managed_team.id event_id=event.data.id %}">
<select hidden class="form-select" name="game_id" id="game_id">
<optgroup label="Events">
<option value="" disabled="disabled">Select an event...</option>
<option selected
value="{{ event.data.id }}">{{ event.data.formatted_title }}</option>
</optgroup>
</select>
<input hidden class="form-check-input" type="radio" name="background"
id="backgroundLocation" checked value="location">
<input hidden class="form-check-input" type="radio" name="dimensions" id="square" checked
value="1080x1080">
<button type="submit" class="btn btn-primary btn-sm"><i class="bi bi-instagram"></i>
</button>
</form>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
</div>
<script>
function donut(ctx, yes_count, maybe_count, no_count, unknown_count) {
var style = getComputedStyle(document.body);
const myChart = new Chart(ctx, {
type: 'doughnut',
responsive: 'true',
data: {
datasets: [{
label: 'Availability',
labels: [
'Yes',
'Maybe',
'No',
'Unknown'
],
data: [yes_count, maybe_count, no_count, unknown_count],
backgroundColor: [
style.getPropertyValue('--bs-success'),
style.getPropertyValue('--bs-info'),
style.getPropertyValue('--bs-danger'),
style.getPropertyValue('--bs-secondary')
],
hoverOffset: 4
}]
},
});
}
for (ctx of document.querySelectorAll('.availability-donut')){
donut(ctx,
ctx.dataset.availableYes,
ctx.dataset.availableMaybe,
ctx.dataset.availableNo,
ctx.dataset.availableUnknown,
)
}
</script>
{% endblock %}

View File

@@ -1,28 +0,0 @@
<div class="card">
<div class="row">
<div class="text-center my-2">
<h1><img class="mx-auto" src="{% static 'benchcoach.svg' %}" style="width: 64px;"/>
<strong>Welcome to <span class="text-nowrap">Bench Coach</span></strong>
</h1>
</div>
</div>
<div class="card-body">
<div class="row">
<div class="text-center my-2">
<div class="col-lg-6 m-auto">
<p class="lead mb-4">Quisque at curabitur mollis ornare, malesuada maecenas. Orci elit
tristique,
malesuada eu pharetra. Est praesent tortor porttitor aptent, amet quisque.</p>
{# <div class="d-grid gap-2 d-sm-flex justify-content-sm-center mx-1">#}
{# <button class="btn btn-primary" type="button">Login</button><button class="btn btn-outline-secondary" type="button">Sign Up</button>#}
{# </div>#}
</div>
<div class="container-sm">
{# <ul class="nav nav-pills flex-column mb-auto">#}
</div>
</div>
</div>
</div>
</div>

View File

@@ -1,191 +0,0 @@
{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<link rel="stylesheet" href="{% static 'teamsnap/css/gamecard.css' %}">
<title>Title</title>
</head>
<body class="b5">
<section class="sheet">
<div class="whole-card">
<div class="half-card">
<div class="content card-left">
<table>
<thead>
<tr>
<th colspan="8" class="gametitle">
{{ event.data.formatted_title }} {{ event.data.start_date|date:'m/d/Y g:i A' }}
{# G#01 at Browns 05/01/2021 12:30 PM#}
</th>
<th class="homeaway" colspan="4">{{ event.data.game_type }}</th>
</tr>
</thead>
</table>
<table>
<thead>
<tr>
<th class="numbercell">
</td>
<th class="customcol">
</td>
<th class="numbercell">
</td>
<th class="numbercell">
</td>
<th class="numbercell">1
</td>
<th class="numbercell">2
</td>
<th class="numbercell">3
</td>
<th class="numbercell">4
</td>
<th class="numbercell">5
</td>
<th class="numbercell">6
</td>
<th class="numbercell">7
</td>
<th class="numbercell">X
</td>
</tr>
</thead>
<tbody>
{% for member in members_startinglineup %}
<tr>
<td class="numbercell">{{ member.lineup_entry.sequence | add:"1" }}</td>
<td class="customcol">{{ member.member.last_name }}</td>
<td class="numbercell">{{ member.member.jersey_number }}</td>
<td class="numbercell">{{ member.lineup_entry.label }}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
<table>
<tbody>
{% for member in members_startingpositiononly %}
<tr>
<td class="numbercell"></td>
<td class="customcol">{{ member.member.last_name }}</td>
<td class="numbercell">{{ member.member.jersey_number }}</td>
<td class="numbercell">{{ member.lineup_entry.label }}</td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
<td></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
<div class="half-card">
<div class="content card-right">
<table class="tg">
<thead>
<tr>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="condensedNameCell">Available</th>
<th class="statscell">AVG/OBP/SLG:PA</th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
<th class="numbercell"></th>
</tr>
</thead>
<tbody>
{% for member in members %}
<tr>
<td class="numbercell"></td>
<td class="numbercell available-status-code-{{ member.availability.status_code }}">{{ member.member.jersey_number }}</td>
<td class="condensedNameCell available-status-code-{{ member.availability.status_code }}">{{ member.member.last_name }}</td>
<td class="statscell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
<td class="numbercell"></td>
</tr>
{% endfor %}
</tbody>
</table>
</div>
</div>
</div>
<div class="whole-card">
<div class="half-card">
<div class="content card-left"></div>
</div>
<div class="half-card">
<div class="content card-right">
<div>
<table>
<thead>
<tr>
<th class="numbercell" style="background-color: #323669">
{{ event.data.start_date|date:"D, F j, Y g:i A" }}
</th>
</tr>
<tr>
<th class="numbercell" style="background-color: #323669">
{{ event.data.location_name }}
</th>
</tr>
<tr>
<th class="numbercell" style="background-color: lightgray">
</th>
</tr>
</thead>
</table>
<div>
<div class="" width="100%">
<img src="{% static 'teamsnap/ig/logos/hounds.png' %}"
height="120px"
>
</div>
<div class="" width="100%" style="text-align: center;font-size: xxx-large; font-family: Pacifico">
VS.
</div>
<div class="" width="100%" style="text-align: right">
<img src="{% static 'teamsnap/ig/logos/hounds.png' %}"
width="120px"
>
</div>
</div>
</div>
</div>
</div>
</div>
</section>
</body>
</html>

View File

@@ -1,37 +0,0 @@
{% extends "base.html" %}{% load static %}
{% block title %} Edit Lineups {% endblock %}
{#{% block page_heading %}Edit Lineups{% endblock %}#}
{#{% block page_subheading %}{% endblock %}#}
{% block content %}
{# <div class="container overflow-scroll mx-0 px-0">#}
{# <div class="row flex-row flex-nowrap">#}
{# {% for event_data in contexts %}#}
{# <div class="col border-start border-end">#}
{# <div class = "border-bottom">#}
{# <h4>{{ event_data.event.data.formatted_title }}</h4>#}
{# <h6 class="text-muted" >{{ event_data.data.start_date }}</h6>#}
{# </div>#}
{# {% include 'teamsnap/lineup/widgets/lineup.html' with formset_lineup=event_data.formset_lineup formset_bench=event_data.formset_bench event_id=event_data.event.data.id %}#}
{# </div>#}
{# {% endfor %}#}
{# </div>#}
{# </div>#}
<div class="container overflow-scroll">
<div class="row flex-row flex-nowrap">
<table>
<tbody>
<tr class="align-top mx-1">
{% for event_data in contexts %}
<td class="px-1">
{% include "teamsnap/lineup/widgets/lineup.html" with event=event_data.event event_id=event_data.event.data.id formset=event_data.formset formset_startinglineup=event_data.formset_startinglineup formset_bench=event_data.formset_bench formset_out=event_data.formset_out formset_startingpositionalonly=event_data.formset_startingpositionalonly %}
</td>
{% endfor %}
</tr>
</tbody>
</table>
</div>
</div>
<script src="{% static 'js/Sortable.js' %}"></script>
<script src="{% static 'teamsnap/js/lineup-table.js' %}"></script>
{% endblock %}

View File

@@ -1,77 +0,0 @@
<div class="card mx-auto benchcoach-lineup" style="max-width: 455px" id="benchcoach-lineup-{{ event_id }}">
<form method="post" action="{% url 'teamsnap_submit_lineup' team_id=team_id event_id=event_id%}">
{{ formset.management_form }}
{% csrf_token %}
<div class="border-bottom p-2">
<h4 class="card-title text-nowrap">{{ event.data.formatted_title }}</h4>
<h6 class="text-muted card-subtitle text-nowrap">{{ event.data.start_date|date:"D, F j, Y g:i A" }}</h6>
<div class="row">
<div class="col">
<button class="btn btn-primary btn-sm py-0 m-1" onclick="importFromClipboard(this)" type="button"><i class="bi bi-arrow-90deg-down"></i></i><i class="bi bi-file-spreadsheet"></i> </button>
</div>
<div class="col text-end">
<button class="btn btn-primary btn-sm py-0 m-1" onclick="copyEmailTable(this, '{{ event.data.start_date|date:"D, F j, Y g:i A" }}, {{ event.data.location_name }}, ({% if event.data.game_type == 'Away' %}@{% endif %}{{ event.data.opponent_name }})', '{% for form in formset %}{{ form.member.data.email_addresses.0 }},{% endfor %}')" type="button"><i class="bi bi-arrow-right"></i><i class="bi bi-envelope"></i></button>
<button class="btn btn-primary btn-sm py-0 m-1" onclick="sendToClipboard(this)" type="button"><i class="bi bi-arrow-right"></i><i class="bi bi-file-spreadsheet"></i></button>
<button class="btn btn-success btn-sm py-0 m-1" type="submit"><i class="bi bi-arrow-right"></i><i class="bi bi-asterisk"></i></button>
</div>
</div>
</div>
<div class="card-body p-0 m-0">
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-check me-1"></i><span class="text-uppercase fw-bold small">Starting Lineup</span>
</div>
</div>
<div class = "row m-0">
<div class="col border-bottom px-0">
<div class="row mx-0 my-1 position-status">
{% with 'P C 1B 2B 3B SS LF CF RF EH DH' as position_list %}
{% for position in position_list.split %}
<div class="col fw-bold text-center small">
<span class="" id="position-status-{{ position }}">{{ position }}</span>
</div>
{% endfor %}
{% endwith %}
</div>
</div>
</div>
{% include 'teamsnap/lineup/widgets/lineup_table.html' with formset=formset_startinglineup table_id="benchcoach-startinglineup" %}
</div>
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-minus me-1"></i><span class="text-uppercase fw-bold small">Starting (Positional Only)</span>
</div>
</div>
{% include 'teamsnap/lineup/widgets/lineup_table.html' with formset=formset_startingpositionalonly table_id="benchcoach-startingpositionalonly" %}
</div>
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard me-1"></i><span class="text-uppercase fw-bold small">Bench</span>
</div>
</div>
</div>
{% include 'teamsnap/lineup/widgets/lineup_table.html' with formset=formset_bench table_id="benchcoach-bench" %}
<div>
<div class="row m-0">
<div class="col border-bottom bg-light">
<i class="bi bi-clipboard-x me-1"></i><span class="text-uppercase fw-bold small">Out</span>
</div>
</div>
</div>
{% include 'teamsnap/lineup/widgets/lineup_table.html' with formset=formset_out table_id="benchcoach-out" %}
</div>
</form>
</div>

View File

@@ -1,22 +0,0 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ location.data.name }}{% endblock %}
{% block page_heading %}{{ location.data.name }}{% endblock %}
{% block content %}
<div class="table-responsive">
<table class="table table-striped table-sm">
{# <thead>#}
{# </thead>#}
<tbody>
{% for key, value in location.data.items %}
<tr>
<th scope="col">
{{ key }}
</th>
<td>
{{ value }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,22 +0,0 @@
{% extends "base.html" %}{% load static %}
{% block title %} {{ opponent.data.name }}{% endblock %}
{% block page_heading %}{{ opponent.data.name }}{% endblock %}
{% block content %}
<div class="table-responsive">
<table class="table table-striped table-sm">
{# <thead>#}
{# </thead>#}
<tbody>
{% for key, value in opponent.data.items %}
<tr>
<th scope="col">
{{ key }}
</th>
<td>
{{ value }}
</td>
</tr>
{% endfor %}
</tbody>
</table>
{% endblock %}

View File

@@ -1,22 +0,0 @@
{% extends 'base.html' %}
{% block content %}
<form method="post">
{{ formset.management_form }}{% csrf_token %}
<table class="table">
<tr>
{% for _, field in formset.0.base_fields.items %}
<th>{{ field.label }}</th>
{% endfor %}
</tr>
{% for form in formset %}
<tr>
{% for field in form %}
<td>{{ field }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
<input type="submit" value="Submit">
</form>
{% endblock %}

View File

@@ -1,8 +0,0 @@
<form method="post" id="formSync" action="{% url 'sync from teamsnap' %}">{% csrf_token %}
<input type="hidden" name="object_name" value="{{ object_name }}">
<input type="hidden" name="object_id" value={{ object_id }}>
<input type="hidden" name="next" value="{{ next }}">
<button type="submit" value="update_event" class="btn btn-sm btn-outline-secondary d-xl-flex align-items-xl-center mx-1">
<i class="bi bi-arrow-clockwise"></i><i class="bi bi-asterisk"></i>
</button>
</form>