From 6576d17539cd12db0aa776215a986f43202d5753 Mon Sep 17 00:00:00 2001 From: Anthony Correa Date: Sat, 19 Aug 2023 16:30:28 -0500 Subject: [PATCH] reorganized --- src/controllers/events.js | 171 ++++++++++++-- src/controllers/members.js | 18 ++ src/controllers/opponents.js | 80 +++++++ src/routes/index.js | 307 +------------------------ src/views/event-lineup.pug | 9 +- src/views/event-lineupcard.pug | 409 +++++++++++++++++++++++++++++++++ src/views/event.pug | 2 +- src/views/members.pug | 14 ++ src/views/opponent.pug | 15 +- src/views/opponents.pug | 26 +-- src/views/roster.pug | 17 -- src/views/team.pug | 2 +- 12 files changed, 698 insertions(+), 372 deletions(-) create mode 100644 src/controllers/members.js create mode 100644 src/controllers/opponents.js create mode 100644 src/views/event-lineupcard.pug create mode 100644 src/views/members.pug delete mode 100644 src/views/roster.pug diff --git a/src/controllers/events.js b/src/controllers/events.js index 4dc833c..6d28a24 100644 --- a/src/controllers/events.js +++ b/src/controllers/events.js @@ -3,40 +3,167 @@ utils = require("../lib/utils"); exports.getEvents = (req, res, next) => { team_id = req.params.team_id; utils.initTeamsnap(req, res, () => { - teamsnap - .bulkLoad(team_id, ["team", "event", "availabilitySummary"]) - .then(() => { - items = teamsnap.getAllItems(); - context = { - title: "Events", - team: items.find((i) => i.type == "team" && i.id == team_id), - availabilitySummaries: items.filter( - (i) => i.type == "availabilitySummary" - ), - events: items.filter((i) => i.type == "event"), - }; - res.render("events", context); - }); + teamsnap.bulkLoad(team_id, ["team", "event", "availabilitySummary"]).then(() => { + items = teamsnap.getAllItems(); + context = { + title: "Events", + team: items.find((i) => i.type == "team" && i.id == team_id), + availabilitySummaries: items.filter((i) => i.type == "availabilitySummary"), + events: items.filter((i) => i.type == "event"), + }; + res.render("events", context); + }); }); }; exports.getEvent = (req, res, next) => { + team_id = req.params.team_id; + event_id = req.params.event_id; + utils.initTeamsnap(req, res, () => { + teamsnap.bulkLoad(team_id, ["team", "event", "availabilitySummary"]).then(() => { + items = teamsnap.getAllItems(); + context = { + title: "Event", + team: items.find((i) => i.type == "team" && i.id == team_id), + availabilitySummary: items.find((i) => i.type == "availabilitySummary" && i.id == event_id), + event: items.find((i) => i.type == "event" && i.id == event_id), + }; + res.render("event", context); + }); + }); +}; + +exports.getLineup = (req, res, next) => { team_id = req.params.team_id; event_id = req.params.event_id; utils.initTeamsnap(req, res, () => { teamsnap - .bulkLoad(team_id, ["team", "event", "availabilitySummary"]) + .bulkLoad(team_id, [ + "team", + "member", + // "member_photos", + "event", + "opponent", + "availability_summary", + ]) + .then((items) => { + events = items.filter((i) => i.type == "event").sort((a, b) => a.startDate - b.startDate); + event = events.find((i) => i.id == event_id); + events_past = events.slice( + events.findIndex((e) => e == event) - 4, + events.findIndex((e) => e == event) + ); + events_future = events.slice(events.findIndex((e) => e == event) + 1, events.findIndex((e) => e == event) + 5); + events = events_past.concat(event).concat(events_future); + }) + .then((items) => { + return teamsnap.loadAvailabilities({ + eventId: events.map((e) => e.id), + }); + }) + .then(() => { + return teamsnap.collections["eventLineups"] + .queryItems("search", { + eventId: events.map((e) => e.id), + }) + .then((event_lineups) => { + return Promise.all(event_lineups.map((elu) => elu.loadItem("eventLineupEntries"))); + }); + }) .then(() => { items = teamsnap.getAllItems(); + events = items.filter((i) => i.type == "event"); + current_event_index = events.findIndex((e) => e.id == event_id); + context = { - title: "Event", - team: items.find((i) => i.type == "team" && i.id == team_id), - availabilitySummary: items.find( - (i) => i.type == "availabilitySummary" && i.id == event_id - ), - event: items.find((i) => i.type == "event" && i.id == event_id), + title: "Lineup", + team: items.find((e) => e.type == "team" && e.id == team_id), + team_id: req.params.team_id, + event_id: req.params.event_id, + current_event_index: current_event_index, + events: items.filter((a) => a.type == "event"), + availabilitySummaries: items.filter((i) => i.type == "availabilitySummary"), + availabilitySummary: items.filter((i) => i.type == "availabilitySummary" && i.eventId == event_id), + event: items.find((e) => e.type == "event" && e.id == event_id), + events_past: events_past, + events_future: events_future, + members: items.filter((a) => a.type == "member"), + availabilities: items.filter((i) => i.type == "availability").sort(utils.teamsnapAvailabilitiesSort), + all_lineup_entries: items.filter((i) => i.type == "eventLineupEntry"), + event_lineup_entries: items + .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id) + .sort((a, b) => a.sequence - b.sequence), }; - res.render("event", context); + + res.render("event-lineup", context); + }); + }); +}; + +exports.getLineupCard = (req, res, next) => { + team_id = req.params.team_id; + event_id = req.params.event_id; + utils.initTeamsnap(req, res, () => { + teamsnap + .bulkLoad(team_id, [ + "team", + "member", + // "member_photos", + "event", + "opponent", + "availability_summary", + ]) + .then((items) => { + events = items.filter((i) => i.type == "event").sort((a, b) => a.startDate - b.startDate); + event = events.find((i) => i.id == event_id); + events_past = events.slice( + events.findIndex((e) => e == event) - 4, + events.findIndex((e) => e == event) + ); + events_future = events.slice(events.findIndex((e) => e == event) + 1, events.findIndex((e) => e == event) + 5); + events = events_past.concat(event).concat(events_future); + }) + .then((items) => { + return teamsnap.loadAvailabilities({ + eventId: events.map((e) => e.id), + }); + }) + .then(() => { + return teamsnap.collections["eventLineups"] + .queryItems("search", { + eventId: events.map((e) => e.id), + }) + .then((event_lineups) => { + return Promise.all(event_lineups.map((elu) => elu.loadItem("eventLineupEntries"))); + }); + }) + .then(() => { + items = teamsnap.getAllItems(); + events = items.filter((i) => i.type == "event"); + current_event_index = events.findIndex((e) => e.id == event_id); + + context = { + title: "Gamecard", + team_id: req.params.team_id, + event_id: req.params.event_id, + current_event_index: current_event_index, + events: items.filter((a) => a.type == "event"), + availabilitySummaries: items.filter((i) => i.type == "availabilitySummary"), + event: items.find((e) => e.type == "event" && e.id == event_id), + events_past: events_past, + events_future: events_future, + members: items.filter((a) => a.type == "member"), + availabilities: items.filter((i) => i.type == "availability").sort(utils.teamsnapAvailabilitiesSort), + all_lineup_entries: items.filter((i) => i.type == "eventLineupEntry"), + event_lineup_entries_offense: items + .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id && !i.label.includes("[PO]")) + .sort((a, b) => a.sequence - b.sequence), + event_lineup_entries: items + .filter((i) => i.type == "eventLineupEntry" && i.eventId == event_id) + .sort((a, b) => a.sequence - b.sequence), + }; + + res.render("event-lineupcard", context); }); }); }; diff --git a/src/controllers/members.js b/src/controllers/members.js new file mode 100644 index 0000000..e30e9f8 --- /dev/null +++ b/src/controllers/members.js @@ -0,0 +1,18 @@ +utils = require("../lib/utils"); + +exports.getMembers = (req, res, next) => { + team_id = req.params.team_id; + utils.initTeamsnap(req, res, () => { + teamsnap.bulkLoad(team_id, ["team", "member"]).then(() => { + items = teamsnap.getAllItems(); + context = { + title: `Roster`, + team_id: team_id, + team: items.find((i) => i.type == "team" && i.id == team_id), + members: items.filter((i) => i.type == "member" && i.teamId == team_id), + }; + res.set("Content-Type", "text/html"); + res.render("members", context); + }); + }); +}; diff --git a/src/controllers/opponents.js b/src/controllers/opponents.js new file mode 100644 index 0000000..46abac3 --- /dev/null +++ b/src/controllers/opponents.js @@ -0,0 +1,80 @@ +exports.getOpponents = (req, res, next) => { + team_id = req.params.team_id; + utils.initTeamsnap(req, res, () => { + teamsnap.bulkLoad(team_id, ["team", "opponent"]).then((items) => { + res.set("Content-Type", "text/html"); + res.render("opponents", { + title: "Opponents", + team: items.find((i) => i.type == "team" && i.id == team_id), + opponents: items.filter((i) => i.type == "opponent"), + team_id: team_id, + }); + }); + }); +}; + +exports.uploadOpponentLogoForm = (req, res, next) => { + opponent_id = req.params.opponent_id; + team_id = req.params.team_id; + res.set("Content-Type", "text/html"); + res.render("upload-logo", { + title: "Upload Logo", + csrf_token: req.csrfToken(), + team_id: team_id, + opponent_id: opponent_id, + }); +}; + +exports.uploadOpponentLogo = (req, res, next) => { + opponent_id = req.body.opponent_id; + team_id = req.body.team_id; + member_id = req.user.id; + file = new File(req.file.buffer, `team-logo-${opponent_id}.png`, { + type: "image/png", + }); + authTeamsnap(req.user); + teamsnap + .loadCollections() + .then(() => { + return teamsnap.createTeamMedium({ + file: file, + mediaFormat: "file", + memberId: member_id, + teamId: team_id, + teamMediaGroupId: "4927028", + description: `team-logo-${opponent_id}.png`, + }); + }) + .then((item) => { + return teamsnap.uploadTeamMedium(item); + }) + .then((item) => { + res.send("Data Received: " + JSON.stringify(item)); + }) + .fail((err) => console.log(err)); +}; + +exports.getOpponent = (req, res, next) => { + team_id = req.params.team_id; + opponent_id = req.params.opponent_id; + utils.initTeamsnap(req, res, () => { + teamsnap + .bulkLoad(team_id, ["team", "opponent"]) + .then(() => { + teamsnap.loadTeamMedia(team_id); + }) + .then(() => { + items = teamsnap.getAllItems(); + context = { + team: items.find((i) => i.type == "team" && i.id == team_id), + opponent: items.find((i) => i.type == "opponent" && i.id == opponent_id), + opponent_logo: items.find( + (i) => i.type == "teamMedium" && i.description == `opponent-logo-${opponent_id}.png` + ), + team_id: team_id, + }; + res.set("Content-Type", "text/html"); + res.render("opponent", context); + }); + }); +}; diff --git a/src/routes/index.js b/src/routes/index.js index 0cc1f61..3596dab 100644 --- a/src/routes/index.js +++ b/src/routes/index.js @@ -11,307 +11,18 @@ const storage = multer.memoryStorage(); const upload = multer({ storage: storage }); const teamsController = require("../controllers/teams"); const eventsController = require("../controllers/events"); +const membersController = require("../controllers/members"); +const opponentsController = require("../controllers/opponents"); router.get("/", ensureLoggedIn, teamsController.getTeams); router.get("/:team_id/home", ensureLoggedIn, teamsController.getTeamHome); router.get("/:team_id/events", ensureLoggedIn, eventsController.getEvents); -router.get( - "/:team_id/event/:event_id", - ensureLoggedIn, - eventsController.getEvent -); - -router.get( - "/:team_id/event/:event_id/gamecard", - ensureLoggedIn, - function (req, res, next) { - authTeamsnap(req.user); - team_id = req.params.team_id; - event_id = req.params.event_id; - teamsnap.loadCollections((err) => { - teamsnap.enablePersistence(); - var events; - teamsnap - .bulkLoad(team_id, [ - "team", - "member", - // "member_photos", - "event", - "opponent", - "availability_summary", - ]) - .then((items) => { - events = items - .filter((i) => i.type == "event") - .sort((a, b) => a.startDate - b.startDate); - event = events.find((i) => i.id == event_id); - events_past = events.slice( - events.findIndex((e) => e == event) - 4, - events.findIndex((e) => e == event) - ); - events_future = events.slice( - events.findIndex((e) => e == event) + 1, - events.findIndex((e) => e == event) + 5 - ); - events = events_past.concat(event).concat(events_future); - }) - .then((items) => { - return teamsnap.loadAvailabilities({ - eventId: events.map((e) => e.id), - }); - }) - .then(() => { - return teamsnap.collections["eventLineups"] - .queryItems("search", { - eventId: events.map((e) => e.id), - }) - .then((event_lineups) => { - return Promise.all( - event_lineups.map((elu) => elu.loadItem("eventLineupEntries")) - ); - }); - }) - .then(() => { - items = teamsnap.getAllItems(); - events = items.filter((i) => i.type == "event"); - current_event_index = events.findIndex((e) => e.id == event_id); - - context = { - title: "Gamecard", - team_id: req.params.team_id, - event_id: req.params.event_id, - current_event_index: current_event_index, - events: items.filter((a) => a.type == "event"), - availabilitySummaries: items.filter( - (i) => i.type == "availabilitySummary" - ), - event: items.find((e) => e.type == "event" && e.id == event_id), - events_past: events_past, - events_future: events_future, - members: items.filter((a) => a.type == "member"), - availabilities: items - .filter((i) => i.type == "availability") - .sort(availabilitiesSort), - all_lineup_entries: items.filter( - (i) => i.type == "eventLineupEntry" - ), - event_lineup_entries_offense: items - .filter( - (i) => - i.type == "eventLineupEntry" && - i.eventId == event_id && - !i.label.includes("[PO]") - ) - .sort((a, b) => a.sequence - b.sequence), - event_lineup_entries: items - .filter( - (i) => i.type == "eventLineupEntry" && i.eventId == event_id - ) - .sort((a, b) => a.sequence - b.sequence), - }; - - res.render("gamecard", context); - }); - }); - } -); - -router.get( - "/:team_id/event/:event_id/lineup", - ensureLoggedIn, - function (req, res, next) { - authTeamsnap(req.user); - team_id = req.params.team_id; - event_id = req.params.event_id; - teamsnap.loadCollections((err) => { - teamsnap.enablePersistence(); - var events; - teamsnap - .bulkLoad(team_id, [ - "team", - "member", - // "member_photos", - "event", - "opponent", - "availability_summary", - ]) - .then((items) => { - events = items - .filter((i) => i.type == "event") - .sort((a, b) => a.startDate - b.startDate); - event = events.find((i) => i.id == event_id); - events_past = events.slice( - events.findIndex((e) => e == event) - 4, - events.findIndex((e) => e == event) - ); - events_future = events.slice( - events.findIndex((e) => e == event) + 1, - events.findIndex((e) => e == event) + 5 - ); - events = events_past.concat(event).concat(events_future); - }) - .then((items) => { - return teamsnap.loadAvailabilities({ - eventId: events.map((e) => e.id), - }); - }) - .then(() => { - return teamsnap.collections["eventLineups"] - .queryItems("search", { - eventId: events.map((e) => e.id), - }) - .then((event_lineups) => { - return Promise.all( - event_lineups.map((elu) => elu.loadItem("eventLineupEntries")) - ); - }); - }) - .then(() => { - items = teamsnap.getAllItems(); - events = items.filter((i) => i.type == "event"); - current_event_index = events.findIndex((e) => e.id == event_id); - - context = { - title: "Lineup", - team: items.find((e) => e.type == "team" && e.id == team_id), - team_id: req.params.team_id, - event_id: req.params.event_id, - current_event_index: current_event_index, - events: items.filter((a) => a.type == "event"), - availabilitySummaries: items.filter( - (i) => i.type == "availabilitySummary" - ), - event: items.find((e) => e.type == "event" && e.id == event_id), - events_past: events_past, - events_future: events_future, - members: items.filter((a) => a.type == "member"), - availabilities: items - .filter((i) => i.type == "availability") - .sort(availabilitiesSort), - all_lineup_entries: items.filter( - (i) => i.type == "eventLineupEntry" - ), - event_lineup_entries_offense: items - .filter( - (i) => - i.type == "eventLineupEntry" && - i.eventId == event_id && - !i.label.includes("[PO]") - ) - .sort((a, b) => a.sequence - b.sequence), - event_lineup_entries: items - .filter( - (i) => i.type == "eventLineupEntry" && i.eventId == event_id - ) - .sort((a, b) => a.sequence - b.sequence), - }; - - res.render("lineup/lineup", context); - }); - }); - } -); - -router.get("/:team_id/events", ensureLoggedIn); - -router.get("/:team_id/opponents", ensureLoggedIn, function (req, res, next) { - authTeamsnap(req.user); - team_id = req.params.team_id; - teamsnap.loadCollections(function (err) { - teamsnap.bulkLoad(team_id, ["team", "opponent"]).then((items) => { - res.set("Content-Type", "text/html"); - res.render("opponents", { - title: "Opponents", - team: items.find((i) => i.type == "team" && i.id == team_id), - opponents: items.filter((i) => i.type == "opponent"), - team_id: team_id, - }); - }); - }); -}); - -router.get("/:team_id/opponents", ensureLoggedIn, function (req, res, next) { - authTeamsnap(req.user); - team_id = req.params.team_id; - teamsnap.loadCollections(function (err) { - teamsnap.bulkLoad(team_id, ["team", "opponent"]).then((items) => { - res.set("Content-Type", "text/html"); - res.render("opponents", { - title: "Opponents", - team: items.find((i) => i.type == "team" && i.id == team_id), - opponents: items.filter((i) => i.type == "opponent"), - team_id: team_id, - }); - }); - }); -}); - -router.get("/:team_id/roster", ensureLoggedIn, function (req, res, next) { - authTeamsnap(req.user); - team_id = req.params.team_id; - teamsnap.loadCollections(function (err) { - teamsnap.enablePersistence(); - teamsnap.bulkLoad(team_id, ["team", "members"]).then(() => { - items = teamsnap.getAllItems(); - res.set("Content-Type", "text/html"); - res.render("roster", { - title: `Roster`, - team: items.find((i) => i.type == "team" && i.id == team_id), - members: items.find((i) => i.type == "member" && team.id == team_id), - team_id: team_id, - }); - }); - }); -}); - -router.get( - "/:team_id/opponent/:opponent_id/upload-logo", - ensureLoggedIn, - function (req, res, next) { - opponent_id = req.params.opponent_id; - team_id = req.params.team_id; - res.set("Content-Type", "text/html"); - res.render("upload-logo", { - title: "Upload Logo", - csrf_token: req.csrfToken(), - team_id: team_id, - opponent_id: opponent_id, - }); - } -); - -router.post( - "/:team_id/opponent/:opponent_id/upload-logo", - ensureLoggedIn, - upload.single("file"), - function (req, res, next) { - opponent_id = req.body.opponent_id; - team_id = req.body.team_id; - member_id = req.user.id; - file = new File(req.file.buffer, `team-logo-${opponent_id}.png`, { - type: "image/png", - }); - authTeamsnap(req.user); - teamsnap - .loadCollections() - .then(() => { - return teamsnap.createTeamMedium({ - file: file, - mediaFormat: "file", - memberId: member_id, - teamId: team_id, - teamMediaGroupId: "4927028", - description: `team-logo-${opponent_id}.png`, - }); - }) - .then((item) => { - return teamsnap.uploadTeamMedium(item); - }) - .then((item) => { - res.send("Data Received: " + JSON.stringify(item)); - }) - .fail((err) => console.log(err)); - } -); +router.get("/:team_id/event/:event_id", ensureLoggedIn, eventsController.getEvent); +router.get("/:team_id/event/:event_id/lineup", ensureLoggedIn, eventsController.getLineup); +router.get("/:team_id/event/:event_id/lineup_card", ensureLoggedIn, eventsController.getLineupCard); +router.get("/:team_id/members", ensureLoggedIn, membersController.getMembers); +router.get("/:team_id/opponents", ensureLoggedIn, opponentsController.getOpponents); +router.get("/:team_id/opponent/:opponent_id", ensureLoggedIn, opponentsController.getOpponent); +// router.get("/:team_id/opponent/:opponent_id/logo", ensureLoggedIn, opponentsController.getOpponentLogo); module.exports = router; diff --git a/src/views/event-lineup.pug b/src/views/event-lineup.pug index 63ccd7a..173c7f7 100644 --- a/src/views/event-lineup.pug +++ b/src/views/event-lineup.pug @@ -1,6 +1,6 @@ -extends ../base.pug -include lineup-slot.pug -include ../widgets/availability-progress-bar.pug +extends base.pug +include mixin-lineup-slot.pug +include mixin-availability-progress-bar.pug block append styles link(rel='stylesheet' href='/css/lineup.css') @@ -28,7 +28,8 @@ block content each pos in ["P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "EH", "DH"] .Grid-cell.position-status #{pos} .slot-set - each lineup_entry, i in event_lineup_entries_offense + each lineup_entry, i in event_lineup_entries + if !lineup_entry.label.includes("PO") +lineup-slot(lineup_entry, i) .Panel .Panel-body diff --git a/src/views/event-lineupcard.pug b/src/views/event-lineupcard.pug new file mode 100644 index 0000000..9f98da7 --- /dev/null +++ b/src/views/event-lineupcard.pug @@ -0,0 +1,409 @@ +html + head + meta(charset='utf-8') + title #{event.formattedTitle} + link(rel='stylesheet' href='/css/gamecard.css') + + body(class="B5") + input(name="team_id", type="hidden" value=`${team_id}`) + input(name="event_id", type="hidden" value=`${event_id}`) + #page-1.sheet.gamecard + section#todays-game + .grid-container + .section-header + #todays-game-header.bar-left.event-title + | #{event.formattedTitle} + | #{event.startDate.toLocaleDateString("en-us",{weekday: "short", day: "numeric",month: "short"})} + | #{event.startDate.toLocaleTimeString("en-us",{hour: "numeric", minute: "2-digit"})} + .bar-right.homeaway #{event.gameType} + .bar-span.gametitle + #offense-pane.left + table#starting-lineup-offense + tbody + each _, i in Array(11) + - if (typeof(event_lineup_entries_offense[i]) !== 'undefined'){ + tr + th(rowspan='2') #{i+1} + td(id=`offense-slot-${i}-name` class="player-name") #{event_lineup_entries_offense[i].member.lastName} + td(id=`offense-slot-${i}-jersey-number` class="jersey-number") #{event_lineup_entries_offense[i].member.jerseyNumber} + td(id=`offense-slot-${i}-position` class="position") #{event_lineup_entries_offense[i].label} + tr.substitute + td + td + td + - } else { + tr + th(rowspan='2') + td(id=`offense-slot-${i}-name` class="player-name") + td(id=`offense-slot-${i}-jersey-number` class="jersey-number") + td(id=`offense-slot-${i}-position` class="position") + tr.substitute + td + td + td + - } + + #defense-pane.right + .container + .field-container + image(src='/media/baseball-diamond.svg') + .row(style='justify-content: center') + .defense-slot-set + table + tr + th.position CF + td#defense-slot-CF-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("CF")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .row(style='justify-content: space-between') + .defense-slot-set + table + tr + th.position LF + td#defense-slot-LF-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("LF")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .defense-slot-set + table + tr + th.position RF + td#defense-slot-RF-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("RF")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .row(style='justify-content: space-around') + .defense-slot-set + table + tr + th.position SS + td#defense-slot-SS-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("SS")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .defense-slot-set + table + tr + th.position 2B + td#defense-slot-2B-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("2B")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .row(style='justify-content: space-between') + .defense-slot-set + table + tr + th.position 3B + td#defense-slot-3B-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("3B")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .defense-slot-set + table + tr + th.position 1B + td#defense-slot-1B-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("1B")) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .row(style='justify-content: center') + .defense-slot-set + table + tr + th.position C + td#defense-slot-C-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("C") && !lue.label.startsWith("CF") ) || {"member":{}}).member.lastName} + tr + td(colspan='2') + tr + td(colspan='2') + .pitching-container + .defense-slot-set + table + tr + th.position P + td#defense-slot-P-name.player-name + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("P")) || {"member":{}}).member.lastName} + td.jersey-number + | #{(event_lineup_entries.find((lue)=>lue.label.startsWith("P")) || {"member":{}}).member.jerseyNumber} + td.position + tr + th.position RP + td#defense-slot-RP1-name.player-name + td + td + tr + th.position RP + td#defense-slot-RP2-name.player-name + td + td + .footer + table + tr + th Notes + td + tr + td + tr + td + section#roster-and-history + div + table + thead + tr + th#today-availability(colspan='3') Available ( + | #{availabilitySummaries.find((e)=>e.id==event_id).playerGoingCount}| + | #{availabilitySummaries.find((e)=>e.id==event_id).playerMaybeCount} + | ) + th.player-stats + span.decimal-point . + | AVG + span.delimiter / + span.decimal-point . + | OBP + span.delimiter / + span.decimal-point . + | SLG + span.delimiter : + | PA + th.position-capability.pitcher P + th.position-capability.catcher C + th.position-capability.infield I + th.position-capability.outfield O + each event_future, i in events_future + th(id=`avail-header-today-plus-${i+1}` class="availability future") + .rotate #{event_future.startDate.toLocaleDateString("en-us", {weekday: "short"})} + each event_past, i in events_past + th(id=`avail-header-today-minus-${i+1}` class="availability past") + .rotate #{event_past.startDate.toLocaleDateString("en-us", {weekday: "short"})} + tbody + each row, index in availabilities.filter((e)=>e.event.id==event_id && !e.member.isNonPlayer) + tr(id=`roster-history-slot-${index+1}` class=``) + td(class=`is-present-checkbox available-status-code-${row.statusCode}`) + span ■ + td( + class=` + jersey-number + border-left + available-status-code-${row.statusCode} + ${event_lineup_entries.find((lue)=>lue.member.id==row.member.id) !== undefined ? "starting" : ""} + `) + | #{row.member.jerseyNumber} + td( + class=` + player-name + available-status-code-${row.statusCode} + ${event_lineup_entries.find((lue)=>lue.member.id==row.member.id) !== undefined ? "starting" : ""} + `) + | #{row.member.lastName} + td.player-stats.border-left.border-right + span.decimal-point . + span.avg 000 + span.delimiter / + span.decimal-point . + span.obp 000 + span.delimiter / + span.decimal-point . + span.slg 000 + span.delimiter : + span.pa 00 + td.position-capability.pitcher #{row.member.position.includes("P") ? "\u2713" : ""} + td.position-capability.catcher #{row.member.position.includes("C") ? "\u2713" : ""} + td.position-capability.infield #{row.member.position.includes("IF") ? "\u2713" : ""} + td.position-capability.outfield #{row.member.position.includes("OF") ? "\u2713" : ""} + - var future_availability + - var future_lineupEntry + each future_event, i in events_future + - future_availability = availabilities.find((el)=>el.eventId ==future_event.id && el.memberId==row.member.id) + - future_lineupEntry = all_lineup_entries.find((el)=>el.eventId ==future_event.id && el.member.id==row.member.id) + - console.log(future_availability) + td(id=`avail-${row.member}-today-plus-${i+1}` class=` + row + future + availability + available-status-code-${future_availability.statusCode} + `) + if future_lineupEntry + |#{future_lineupEntry.label.slice(0,2)} + else + |#{future_availability.status[0]} + - var past_availability + - var past_lineupEntry + each past_event, i in events_past + - past_availability = availabilities.find((el)=>el.eventId==past_event.id && el.memberId==row.memberId) + - past_lineupEntry = all_lineup_entries.find((el)=>el.event.id==past_event.id && el.member.id==row.member.id) + td(id=`avail-${row.member}-today-minus-${i+1}` class=` + row + past + availability + available-status-code-${past_availability.statusCode} + ${past_lineupEntry ? "started" : ""} + `) + if past_lineupEntry + |#{past_lineupEntry.label.slice(0,2)} + else + |#{past_availability.status[0]} + tfoot + tr + th(colspan='3') + th + th(colspan='4') + each event_future, i in events_future + th(class=`availability future`) + .rotate #{availabilitySummaries.find((el)=>el.eventId == event_future.id).playerGoingCount} + th.today-minus-1 + .rotate + th.today-minus-2 + .rotate + th.today-minus-3 + .rotate + th.today-minus-4 + .rotate + section#lineup-card-dugout.lineup-card + .grid-container + .section-header + .bar-left.event-title + | #{event.formattedTitle} + .bar-right.homeaway #{event.gameType} + .starting-lineup-table + table + thead + tr + th(colspan='4') Starting + tbody + each i in [0,1,2,3,4,5,6,7,8,9,10] + - if (typeof(event_lineup_entries_offense[i]) !== 'undefined'){ + tr + th.sequence.label #{event_lineup_entries_offense[i].sequence +1} + td.player-name #{event_lineup_entries_offense[i].member.lastName} + td.jersey-number #{event_lineup_entries_offense[i].member.jerseyNumber} + td.position #{event_lineup_entries_offense[i].label} + - } else { + tr + th.sequence.label + td.player-name + td.jersey-number + td.position + tr + td + td + td + td + - } + + .substitution-table + table(style='width: 100%') + thead + tr + th Substitution + tbody + each i in [0,1,2,3,4,5,6,7,8,9,10,11] + tr + td.substitution + tr + td.substitution + section#lineup-card-exchange.lineup-card + .grid-container + .section-header.event-title #{event.formattedTitleForMultiTeam} + .starting-lineup-table + table.starting-lineup-table + thead + tr + th + th.player-name Name + th.jersey-number Num + th.position Pos + tbody + each _,i in Array(10) + - if (typeof(event_lineup_entries_offense[i]) !== 'undefined'){ + tr + th.sequence.label #{event_lineup_entries_offense[i].sequence+1} + td.player-name #{event_lineup_entries_offense[i].member.lastName} + td.jersey-number #{event_lineup_entries_offense[i].member.jerseyNumber} + td.position #{event_lineup_entries_offense[i].label} + - } else { + tr + th.sequence.label + td.player-name + td.jersey-number + td.position + tr + td + td + td + td + - } + #page-2.sheet.gamecard + section#back-cover + section#front-cover + div.grid-container + .section-header + .bar-right.homeaway #{event.gameType} + .event-title + | #{event.startDate.toLocaleDateString("en-us",{weekday: "long", day: "numeric",month: "short"})}, + | #{event.startDate.toLocaleTimeString("en-us",{hour: "numeric", minute: "2-digit"})} + br + | #{event.locationName} + div.team + |#{event.team.name} + div.opponent + |#{event.opponent.name} + section#lineup-card-dugout-empty.lineup-card + .grid-container + .section-header + .starting-lineup-table + table + thead + tr + th(colspan='4') Starting + tbody + each _ in Array(12) + tr + th.sequence.label + td.player-name + td.jersey-number + td.position + .substitution-table + table(style='width: 100%') + thead + tr + th Substitution + tbody + each _ in Array(11) + tr + td.substitution + tr + td.substitution + section#lineup-card-exchange-empty.lineup-card + .grid-container + .section-header + .starting-lineup-table + table.starting-lineup-table + thead + tr + th + th.player-name Name + th.jersey-number Num + th.position Pos + tbody + each _ in Array(12) + tr + th.sequence.label + td.player-name + td.jersey-number + td.position diff --git a/src/views/event.pug b/src/views/event.pug index 4b5bea5..e2bc168 100644 --- a/src/views/event.pug +++ b/src/views/event.pug @@ -19,7 +19,7 @@ block content a(class="Button m-auto" href=`/${team_id}/event/${event.id}/lineup`) i(class="bi bi-clipboard") span.mx-1 Lineup - a(class="Button m-auto" href=`/${team_id}/event/${event.id}/gamecard`) + a(class="Button m-auto" href=`/${team_id}/event/${event.id}/lineup_card`) i(class="bi bi-book") span.mx-1 Game Card a(class="Button m-auto" href=`https://go.teamsnap.com/${team_id}/schedule/view_game/${event.id}`) diff --git a/src/views/members.pug b/src/views/members.pug new file mode 100644 index 0000000..adb42a7 --- /dev/null +++ b/src/views/members.pug @@ -0,0 +1,14 @@ +extends base.pug + +block content + .Panel + .Panel-header + .Panel-title Roster + .Panel-body + each member in members + a(class="" href=`/${team_id}/member/${member.id}`).Panel-row--withCells + .Panel-cell + |#{member.firstName} + .Panel-cell + |#{member.lastName} + diff --git a/src/views/opponent.pug b/src/views/opponent.pug index 179c6c1..2adddc7 100644 --- a/src/views/opponent.pug +++ b/src/views/opponent.pug @@ -1,14 +1,5 @@ -html -head - meta(charset='utf-8') - meta(name='viewport' content='width=device-width, initial-scale=1') - title BenchCoach - Teams - link(rel='stylesheet' href='/css/bootstrap.min.css') - link(rel='stylesheet' href='/font/bootstrap-icons.min.css') - link(rel='stylesheet' href='/css/teamsnap-ui.css') - -body - .container +extends base +block content .Panel .Panel-header .Panel-title #{opponent.name} @@ -39,7 +30,7 @@ body a.Button(target="_blank" rel="noopener noreferrer" href=`https://go.teamsnap.com/${team_id}/files/list/${team_media_group.id}`) Upload else a.Button(target="_blank" rel="noopener noreferrer" href=`https://go.teamsnap.com/${team_id}/files/`) Upload - Button(onclick=`navigator.clipboard.writeText("team-logo-${opponent.id}.png");`).Button + Button(onclick=`navigator.clipboard.writeText("opponent-logo-${opponent.id}.png");`).Button i.bi.bi-clipboard.Icon span Copy Filename .Panel-row.Panel-row--withCells diff --git a/src/views/opponents.pug b/src/views/opponents.pug index 1a43136..800d72a 100644 --- a/src/views/opponents.pug +++ b/src/views/opponents.pug @@ -1,18 +1,10 @@ -html -head - meta(charset='utf-8') - meta(name='viewport' content='width=device-width, initial-scale=1') - title BenchCoach - Teams - link(rel='stylesheet' href='/css/bootstrap.min.css') - link(rel='stylesheet' href='/font/bootstrap-icons.min.css') - link(rel='stylesheet' href='/css/teamsnap-ui.css') +extends base -body - .container - .Panel - .Panel-header - .Panel-title Opponents - .Panel-body - each opponent in opponents - .Panel-row - a(class='opponent' href=`/${team.id}/opponent/${opponent.id}`) #{opponent.name} +block content + .Panel + .Panel-header + .Panel-title Opponents + .Panel-body + each opponent in opponents + .Panel-row + a(class='opponent' href=`/${team.id}/opponent/${opponent.id}`) #{opponent.name} diff --git a/src/views/roster.pug b/src/views/roster.pug deleted file mode 100644 index 5e068dc..0000000 --- a/src/views/roster.pug +++ /dev/null @@ -1,17 +0,0 @@ -extends base.pug -include widgets/availability-progress-bar.pug - -block content - .Panel - .Panel-header - .Panel-title roster - .Panel-body - each member in members - - var availabilitySummary = availabilitySummaries.find((a)=>a.eventId==event.id) - a(class="event list-group-item" href=`/${team_id}/event/${event.id}`).Panel-row--withCells - .Panel-cell - |#{member.firstName} - .Panel-cell - |#{event.lastName} - - diff --git a/src/views/team.pug b/src/views/team.pug index ba42d04..8bd58d9 100644 --- a/src/views/team.pug +++ b/src/views/team.pug @@ -15,7 +15,7 @@ block content | Events .Panel-row - a(href=`/${team.id}/roster`) + a(href=`/${team.id}/members`) | Roster .Panel-row