initial commit
This commit is contained in:
14
app/views/event/_availability_bar.html.slim
Normal file
14
app/views/event/_availability_bar.html.slim
Normal file
@@ -0,0 +1,14 @@
|
||||
- pct_going = (availability_summary.player_going_count.to_f/team.player_member_count.to_f)*100.0
|
||||
- pct_maybe = (availability_summary.player_maybe_count.to_f/team.player_member_count.to_f)*100.0
|
||||
- pct_not_going = (availability_summary.player_not_going_count.to_f/team.player_member_count.to_f)*100.0
|
||||
- pct_unknown = (availability_summary.player_unknown_count.to_f/team.player_member_count.to_f)*100.0
|
||||
|
||||
.progress
|
||||
div id="availability-bar-player-going-count-#{event.id}" class="progress-bar availability-bar going" role="progressbar" style="width:#{pct_going}%"
|
||||
= availability_summary.player_going_count
|
||||
div id="availability-bar-player-maybe-count-#{event.id}" class="progress-bar availability-bar maybe" role="progressbar" style="width:#{pct_maybe}%"
|
||||
= availability_summary.player_maybe_count
|
||||
div id="availability-bar-player-not-going-count-#{event.id}" class="progress-bar availability-bar not-going" role="progressbar" style="width:#{pct_not_going}%"
|
||||
= availability_summary.player_not_going_count
|
||||
div id="availability-bar-player-unknown-count-#{event.id}" class="progress-bar availability-bar unknown" role="progressbar" style="width:#{pct_unknown}%"
|
||||
= availability_summary.player_unknown_count
|
||||
53
app/views/event/_lineup_slot.html.slim
Normal file
53
app/views/event/_lineup_slot.html.slim
Normal file
@@ -0,0 +1,53 @@
|
||||
|
||||
.Panel-expandableRow.lineup-slot
|
||||
=form.hidden_field name="[event_lineup_entries][][label]", value: !event_lineup_entry.nil? ? event_lineup_entry['label'] : nil
|
||||
=form.hidden_field name="[event_lineup_entries][][sequence]", value: !event_lineup_entry.nil? ? event_lineup_entry['sequence'] : nil
|
||||
=form.hidden_field name="[event_lineup_entries][][member_id]", value: member.id
|
||||
=form.hidden_field name="[event_lineup_entries][][event_id]", value: event.id
|
||||
=form.hidden_field name="[event_lineup_entries][][id]", value: !event_lineup_entry.nil? ? event_lineup_entry['id'] : nil
|
||||
=form.hidden_field name="[event_lineup_entries][][availability_status_code]", value: availability.status_code
|
||||
=form.hidden_field name="[event_lineup_entries][][member][last_name]", value: member.last_name
|
||||
=form.hidden_field name="[event_lineup_entries][][member][first_name]", value: member.first_name
|
||||
=form.hidden_field name="[event_lineup_entries][][member][jersey_number]", value: member.jersey_number
|
||||
=form.hidden_field name="[event_lineup_entries][][member][email_addresses]", value: member.email_addresses
|
||||
- if event_lineup_entry
|
||||
- selected_position, flags = extract_flags(event_lineup_entry)
|
||||
div.u-hidden #{selected_position} #{flags}
|
||||
- else
|
||||
- selected_position = "--"
|
||||
.Panel-row.Panel-row--withCells.Panel-row--parent
|
||||
.Panel-cell.Panel-cell--header.u-padXs.u-sizeFit
|
||||
a.Panel-expandableControl onclick="this.classList.toggle('is-expanded');this.closest('.Panel-expandableRow').querySelector('.Panel-childRows').classList.toggle('is-expanded')"
|
||||
<span class="Panel-expandableControlIcon">
|
||||
<svg viewBox="0 0 960 960" class="Icon"><path d="M497 854c-6.7 6.7-14.7 10-24 10H225c-14.7 0-24.7-6.3-30-19-2-4-3-8.3-3-13 0-7.3 2.7-14.3 8-21l313-331-313-330c-9.3-11.3-11-23-5-35 6-12.7 16-19 30-19h248c10 0 18 3.7 24 11l326 352c6 6 9 13 9 21s-3 15.3-9 22L497 854z"/></svg>
|
||||
</span>
|
||||
.u-flexAlignSelfCenter.Panel-expandableControl
|
||||
div.sequence.u-textNoWrap style="width:2ch;"
|
||||
div(class="Panel-cell u-padXs u-size6of12 u-xs-size8of12.u-sm-size10of12 d-block")
|
||||
div class="d-flex availability-status-code-#{availability.status_code}"
|
||||
div
|
||||
span.lastname #{member.last_name}
|
||||
span.lastname.u-hidden.u-md-inline , #{member.first_name}
|
||||
span.jerseynumber.u-hidden.u-md-inline ##{member.jersey_number}
|
||||
|
||||
.Panel-cell.u-padXs.u-size3of12.u-xs-size2of12.u-sm-size1of12
|
||||
.SelectBox.position-selection
|
||||
select(onchange="onPositionSelectChange(this)" class="position-select-box SelectBox-options")
|
||||
=options_for_select ["--", "P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "EH", "DH"], selected_position
|
||||
.Panel-cell.u-padXs.u-flexAlignSelfCenter.u-size1of12
|
||||
.drag-handle
|
||||
i.bi.bi-grip-vertical.text-secondary.drag-handle
|
||||
.Panel-childRows
|
||||
.Panel-row.Panel-row--withCells
|
||||
- for timeline_i in [*4.downto(1).to_a,*5...9]
|
||||
- unless timeline[timeline_i].nil? or timeline[timeline_i][:event].nil?
|
||||
.Panel-cell.u-padXs
|
||||
.span.u-textDecorationNone class="Tooltip Tooltip--text" data-tooltip="#{timeline[timeline_i][:event].formatted_title}"
|
||||
| #{timeline[timeline_i][:event].start_date.strftime("%a, %-m/%-d")}
|
||||
.Panel-row.Panel-row--withCells
|
||||
- for timeline_i in [*4.downto(1).to_a,*5...9]
|
||||
- unless timeline[timeline_i].nil? or timeline[timeline_i][:event].nil?
|
||||
- availability_in_timeline = timeline[timeline_i][:by_member][member][:availability]
|
||||
- lineup_entry_in_timeline = timeline[timeline_i][:by_member][member][:event_lineup_entry]
|
||||
.Panel-cell.u-padXs class="availability-status-code-#{availability_in_timeline.status_code}"
|
||||
small style="font-size:10px;" #{lineup_entry_in_timeline.nil? ? "": lineup_entry_in_timeline.label}
|
||||
710
app/views/event/bak2_lineup_card.html copy.slim
Normal file
710
app/views/event/bak2_lineup_card.html copy.slim
Normal file
@@ -0,0 +1,710 @@
|
||||
=stylesheet_link_tag 'gamecard', media: 'all'
|
||||
|
||||
body(class="B5")
|
||||
#page-1.sheet.gamecard
|
||||
section#todays-game
|
||||
.grid-container
|
||||
.section-header
|
||||
#todays-game-header.bar-left.event-title
|
||||
| G#00-XX at Team 00/00/20XX 0:00 XM
|
||||
.bar-right.homeaway
|
||||
| Axxx
|
||||
.bar-span.gametitle
|
||||
#offense-pane.left
|
||||
table#starting-lineup-offense
|
||||
tbody
|
||||
- for i in 1...11
|
||||
tr
|
||||
th[rowspan="2"]
|
||||
| #{i}
|
||||
td#offense-slot-2-name.player-name
|
||||
| Lastname
|
||||
td#offense-slot-2-jersey-number.jersey-number
|
||||
| 00
|
||||
td#offense-slot-2-position.position
|
||||
| XX
|
||||
tr
|
||||
td
|
||||
td
|
||||
td
|
||||
|
||||
#defense-pane.right
|
||||
.container
|
||||
.field-container
|
||||
image[src="../baseball-diamond.svg"]
|
||||
.row[style="justify-content: center"]
|
||||
.defense-slot-set
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
| CF
|
||||
td#defense-slot-CF-name.player-name
|
||||
| player
|
||||
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
|
||||
| player
|
||||
tr
|
||||
td[colspan="2"]
|
||||
tr
|
||||
td[colspan="2"]
|
||||
.defense-slot-set
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
| RF
|
||||
td#defense-slot-RF-name.player-name
|
||||
| player
|
||||
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
|
||||
| player
|
||||
tr
|
||||
td[colspan="2"]
|
||||
tr
|
||||
td[colspan="2"]
|
||||
.defense-slot-set
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
| 2B
|
||||
td#defense-slot-2B-name.player-name
|
||||
| player
|
||||
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
|
||||
| player
|
||||
tr
|
||||
td[colspan="2"]
|
||||
tr
|
||||
td[colspan="2"]
|
||||
.defense-slot-set
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
| 1B
|
||||
td#defense-slot-1B-name.player-name
|
||||
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
|
||||
| player
|
||||
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
|
||||
| player
|
||||
td.position
|
||||
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 (15|1)
|
||||
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
|
||||
th.today-plus-1
|
||||
.rotate
|
||||
| MON
|
||||
th.today-plus-2
|
||||
.rotate
|
||||
| TUE
|
||||
th.today-plus-3
|
||||
.rotate
|
||||
| WED
|
||||
th.today-plus-4
|
||||
.rotate
|
||||
| THU
|
||||
th.today-minus-1
|
||||
.rotate
|
||||
| MON
|
||||
th.today-minus-2
|
||||
.rotate
|
||||
| TUE
|
||||
th.today-minus-3
|
||||
.rotate
|
||||
| WED
|
||||
th.today-minus-4
|
||||
.rotate
|
||||
| THU
|
||||
tbody
|
||||
- for i in 1...26
|
||||
tr id="roster-history-slot-#{i}"
|
||||
td.is-present-checkbox
|
||||
span
|
||||
| ■
|
||||
td.jersey-number.border-left
|
||||
| XX
|
||||
td.player-name
|
||||
| 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
|
||||
| ?
|
||||
td.position-capability.catcher
|
||||
| ?
|
||||
td.position-capability.infield
|
||||
| ?
|
||||
td.position-capability.outfield
|
||||
| ?
|
||||
td.availability.future.today-plus-1
|
||||
| U
|
||||
td.availability.future.today-plus-2
|
||||
| U
|
||||
td.availability.future.today-plus-3
|
||||
| U
|
||||
td.availability.future.today-plus-4
|
||||
| U
|
||||
td.availability.past.today-minus-1
|
||||
| U
|
||||
td.availability.past.today-minus-2
|
||||
| U
|
||||
td.availability.past.today-minus-3
|
||||
| U
|
||||
td.availability.past.today-minus-4
|
||||
| U
|
||||
tfoot
|
||||
tr
|
||||
th[colspan="3"]
|
||||
th
|
||||
th[colspan="4"]
|
||||
th.today-plus-1
|
||||
.rotate
|
||||
th.today-plus-2
|
||||
.rotate
|
||||
th.today-plus-3
|
||||
.rotate
|
||||
th.today-plus-4
|
||||
.rotate
|
||||
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
|
||||
| GAME
|
||||
.bar-right.homeaway
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
tbody
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
.substitution-table
|
||||
table[style="width: 100%"]
|
||||
thead
|
||||
tr
|
||||
th
|
||||
| Substitution
|
||||
tbody
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
section#lineup-card-exchange.lineup-card
|
||||
.grid-container
|
||||
.section-header.event-title
|
||||
| GAME
|
||||
.starting-lineup-table
|
||||
table.starting-lineup-table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
th.player-name
|
||||
| Name
|
||||
th.jersey-number
|
||||
| Num
|
||||
th.position
|
||||
| Pos
|
||||
tbody
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
#page-2.sheet.gamecard
|
||||
section#back-cover
|
||||
section#front-cover
|
||||
p
|
||||
span.event-label
|
||||
br
|
||||
span.opponent
|
||||
br
|
||||
span.event-date
|
||||
br
|
||||
span.event-time
|
||||
br
|
||||
span.event-location-name
|
||||
br
|
||||
span.homeaway
|
||||
br
|
||||
section#lineup-card-dugout-empty.lineup-card
|
||||
.grid-container
|
||||
.section-header
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
tbody
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
.substitution-table
|
||||
table[style="width: 100%"]
|
||||
thead
|
||||
tr
|
||||
th
|
||||
| Substitution
|
||||
tbody
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
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
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
386
app/views/event/bak_lineup_card.html copy.slim
Normal file
386
app/views/event/bak_lineup_card.html copy.slim
Normal file
@@ -0,0 +1,386 @@
|
||||
=stylesheet_link_tag 'gamecard', media: 'all'
|
||||
|
||||
body(class="B5")
|
||||
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.formatted_title}
|
||||
| #{event.start_date}
|
||||
| #{event.start_date}
|
||||
.bar-right.homeaway #{event.game_type}
|
||||
.bar-span.gametitle
|
||||
#offense-pane.left
|
||||
table#starting-lineup-offense
|
||||
tbody
|
||||
- for i in 0...11
|
||||
- if (event_lineup_entries_offense[i])?)
|
||||
tr
|
||||
th(rowspan='2') #{i+1}
|
||||
td(id="offense-slot-#{i}-name" class="player-name") #{event_lineup_entries_offense[i].member.last_name}
|
||||
td(id="offense-slot-#{i}-jersey-number" class="jersey-number") #{event_lineup_entries_offense[i].member.jersey_number}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
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.last_name}
|
||||
td.jersey-number
|
||||
| #{(event_lineup_entries.find((lue)=>lue.label.startsWith("P")) || {"member":{}}).member.jersey_number}
|
||||
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 (
|
||||
| #{availability_summaries.find((e)=>e.id==event.id).player_going_count}|
|
||||
| #{availability_summaries.find((e)=>e.id==event.id).player_maybe_count}
|
||||
| )
|
||||
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
|
||||
- for event_future, i in events_future
|
||||
th(id="avail-header-today-plus-#{i+1}" class="availability future")
|
||||
.rotate #{event_future.start_date}
|
||||
- for event_past, i in events_past
|
||||
th(id="avail-header-today-minus-#{i+1}" class="availability past")
|
||||
.rotate #{event_past.start_date}
|
||||
tbody
|
||||
- for row, index in availabilities.filter((e)=>e.event.id==event.id && !e.member.is_non_player)
|
||||
tr(id="roster-history-slot-#{index+1}" class="")
|
||||
td(class="is-present-checkbox available-status-code-#{row.status_code}")
|
||||
span ■
|
||||
td(
|
||||
class="jersey-number border-left available-status-code-#{row.status_code} #{event_lineup_entries.find((lue)=>lue.member.id==row.member.id) !== undefined ? "starting" : ""}")
|
||||
| #{row.member.jersey_number}
|
||||
td(
|
||||
class="player-name available-status-code-#{row.status_code} #{event_lineup_entries.find((lue)=>lue.member.id==row.member.id) !== undefined ? "starting" : ""}")
|
||||
| #{row.member.last_name}
|
||||
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_lineup_entry
|
||||
- for future_event, i in events_future
|
||||
- future_availability = availabilities.find((el)=>el.event.id ==future_event.id && el.memberId==row.member.id)
|
||||
- future_lineup_entry = all_lineup_entries.find((el)=>el.event.id ==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 availabilityavailable-status-code-#{future_availability.status_code}")
|
||||
if future_lineupEntry
|
||||
|#{future_lineupEntry.label.slice(0,2)}
|
||||
else
|
||||
|#{future_availability.status[0]}
|
||||
- var past_availability
|
||||
- var past_lineupEntry
|
||||
- for past_event, i in events_past
|
||||
- past_availability = availabilities.find((el)=>el.event.id==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 availabilityavailable-status-code-#{past_availability.status_code}#{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')
|
||||
- for event_future, i in events_future
|
||||
th(class="availability future")
|
||||
.rotate #{availabilitySummaries.find((el)=>el.event.id == 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.game_type}
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th(colspan='4') Starting
|
||||
tbody
|
||||
- for 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.last_name}
|
||||
td.jersey-number #{event_lineup_entries_offense[i].member.jersey_number}
|
||||
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
|
||||
- for i in 0...11
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
section#lineup-card-exchange.lineup-card
|
||||
.grid-container
|
||||
.section-header.event-title #{event.formatted_title_for_multi_team}
|
||||
.starting-lineup-table
|
||||
table.starting-lineup-table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
th.player-name Name
|
||||
th.jersey-number Num
|
||||
th.position Pos
|
||||
tbody
|
||||
- for i in 0...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.last_name}
|
||||
td.jersey-number #{event_lineup_entries_offense[i].member.jersey_number}
|
||||
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.game_type}
|
||||
.event-title
|
||||
| #{event.startDate},
|
||||
| #{event.startDate}
|
||||
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
|
||||
- for _ in 0...12
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
.substitution-table
|
||||
table(style='width: 100%')
|
||||
thead
|
||||
tr
|
||||
th Substitution
|
||||
tbody
|
||||
- for _ in 0...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
|
||||
- for _ in 0...12
|
||||
tr
|
||||
th.sequence.label
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
|
||||
103
app/views/event/lineup.html.slim
Normal file
103
app/views/event/lineup.html.slim
Normal file
@@ -0,0 +1,103 @@
|
||||
div id="messages"
|
||||
#success-message.Feedback.Feedback--positive.u-hidden role="alert"
|
||||
.Feedback-icon
|
||||
i.Icon.bi.bi-hand-thumbs-up-fill.u-fontSizeXl
|
||||
h5.headline Successful
|
||||
span.message
|
||||
p
|
||||
a href="javascript:void(0)" onclick="javascript:this.closest('.Feedback').classList.add('u-hidden')" Dismiss
|
||||
#failure-message.Feedback.Feedback--negative.u-hidden role="alert"
|
||||
.Feedback-icon.bi.bi-hand-thumbs-down-fill
|
||||
h5.headline Not Successful!
|
||||
span.message Error encountered.
|
||||
p
|
||||
a href="javascript:void(0)" onclick="javascript:this.closest('.Feedback').classList.add('u-hidden')" Dismiss
|
||||
#waiting-message.Feedback.u-hidden role="alert"
|
||||
.Feedback-icon
|
||||
.Icon.Icon--loader.u-colorForeground.u-fontSizeXl
|
||||
<svg viewBox="0 0 66 66" role="presentation" class="Icon Icon--loader">
|
||||
<circle fill="none" stroke-width="12" stroke="currentColor" stroke-linecap="round" cx="33" cy="33" r="24" />
|
||||
</svg>
|
||||
h5.headline Sending...
|
||||
div id="modals"
|
||||
#email-modal.Modal
|
||||
.Modal-content
|
||||
.Modal-header
|
||||
.Modal-title Email
|
||||
a href="javascript:void(0)" onclick="javascript:this.closest('.Modal').classList.toggle('is-open')" Dismiss
|
||||
.Modal-body
|
||||
|
||||
div id="event-lineup-#{event.id}" class="event-lineup"
|
||||
= form_with(url: url_for(event_lineup_submit_path :team_id=>team.id, :event_id=>event.id), method: :post, :html => { :onsubmit => "onSubmit(this,event)" }) do |form|
|
||||
=form.hidden_field name="event_lineup_id", value: !event_lineup.nil? ? event_lineup.id : nil
|
||||
.event-card.u-maxWidthSm
|
||||
.event-card-body
|
||||
div.Grid
|
||||
div.Grid-cell.u-sizeFill
|
||||
h3.title #{event.formatted_title}
|
||||
div.Grid-cell.u-sizeFit
|
||||
.ButtonGroup
|
||||
= form.submit("Save", class: "Button Button--orange")
|
||||
.Button.Button--orange.u-padSidesXs.Popup onclick="togglePopup(this)"
|
||||
.bi.bi-caret-down.u-spaceNone
|
||||
.Popup-container.Popup-container--down.Popup-container--rightHang data-popup="demo4a" style="width: 200px"
|
||||
.Popup-content
|
||||
.u-textBold
|
||||
|
||||
a href="javascript:void(0)" onclick="emailModal(this, '#{url_for(event_lineup_email_path :team_id=>team.id, :event_id=>event.id)}')"
|
||||
i.bi.bi-envelope
|
||||
span Generate Email
|
||||
hr.Divider.u-spaceEndsNone
|
||||
a href=""
|
||||
p.u-padEndsSm.u-padSidesMd Action 2
|
||||
div.date #{event.start_date.strftime("%a, %b %e, %l:%M %p")}
|
||||
div.location #{event.location_name}
|
||||
div.availability-bar=render("event/availability_bar", team:team, event:event, availability_summary: availability_summary)
|
||||
.Panel.u-maxWidthSm.starting
|
||||
.Panel-body
|
||||
.Panel-row.Panel-title.u-padXs
|
||||
i.bi.bi-clipboard-check.me-1
|
||||
span Starting Lineup
|
||||
.Panel-row.Grid.Grid--fit.fw-bold.text-center.u-padXs
|
||||
- for pos in ["P", "C", "1B", "2B", "3B", "SS", "LF", "CF", "RF", "EH", "DH"]
|
||||
.Grid-cell.position-status #{pos}
|
||||
.slot-set
|
||||
- event_lineup_entry.select{|d| extract_flags(d)[1].exclude?(PositionLabelFlag::POSITION_ONLY)}.sort_by{|d| d['sequence']}.each_with_index do |d|
|
||||
- m = members.find{|m| m.id == d['member_id']}
|
||||
=render("lineup_slot",event_lineup_entry: by_member[m][:event_lineup_entry],availability: by_member[m][:availability], member:m, event:event, timeline: timeline, form: form, event_lineup:d)
|
||||
.Panel.u-maxWidthSm.position-only
|
||||
.Panel-body
|
||||
.Panel-row.Panel-title.u-padXs
|
||||
i.bi.bi-clipboard-check.me-1
|
||||
span Position Only
|
||||
.slot-set
|
||||
- event_lineup_entry.select{ |d| extract_flags(d)[1].include?(PositionLabelFlag::POSITION_ONLY)}.sort_by{|d| d['sequence']}.each_with_index do |d|
|
||||
- m = members.find{|m| m.id == d['member_id']}
|
||||
=render("lineup_slot",event_lineup_entry: by_member[m][:event_lineup_entry],availability: by_member[m][:availability], member:m, event:event, timeline: timeline, form: form, event_lineup:d)
|
||||
|
||||
.Panel.u-maxWidthSm.bench
|
||||
.Panel-body
|
||||
.Panel-row.Panel-title.u-padXs
|
||||
i.bi.bi-clipboard-minus.me-1
|
||||
span Bench
|
||||
.slot-set
|
||||
- by_member.select{|m,d| !d[:availability].status_code.nil? and d[:availability].status_code != 0 and !m.is_non_player and d[:event_lineup_entry].nil?}.each_with_index do |(m, d), i|
|
||||
=render("lineup_slot",event_lineup_entry: by_member[m][:event_lineup_entry],availability: by_member[m][:availability], member:m, event:event, timeline: timeline, form: form, event_lineup:event_lineup)
|
||||
|
||||
.Panel.u-maxWidthSm.out
|
||||
.Panel-body
|
||||
.Panel-row.Panel-title.u-padXs
|
||||
i.bi.bi-clipboard-x.me-1
|
||||
span Out
|
||||
.slot-set
|
||||
- by_member.select{|m,d| (d[:availability].status_code.nil? or d[:availability].status_code == 0) and !m.is_non_player and d[:event_lineup_entry].nil?}.each_with_index do |(m, d), i|
|
||||
=render("lineup_slot",event_lineup_entry: by_member[m][:event_lineup_entry],availability: by_member[m][:availability], member:m, event:event, timeline: timeline, form: form, event_lineup:event_lineup)
|
||||
|
||||
|
||||
script src="https://cdn.jsdelivr.net/npm/sortablejs@latest/Sortable.min.js"
|
||||
=javascript_include_tag 'lineup'
|
||||
javascript:
|
||||
colorPositions();
|
||||
refreshLineupOrder();
|
||||
|
||||
|
||||
232
app/views/event/lineup_card.html.slim
Normal file
232
app/views/event/lineup_card.html.slim
Normal file
@@ -0,0 +1,232 @@
|
||||
=stylesheet_link_tag 'gamecard', media: 'all'
|
||||
|
||||
body.B5
|
||||
#page-1.sheet.gamecard
|
||||
section#todays-game
|
||||
header
|
||||
.event-title.float-left
|
||||
| #{event.formatted_title} – #{event.start_date.strftime("%a, %b %e %l:%M %p")}
|
||||
.homeaway.float-right
|
||||
| #{event.game_type}
|
||||
.grid-container
|
||||
#offense-pane
|
||||
table#starting-lineup-offense
|
||||
tbody
|
||||
.slot-set
|
||||
- offensive_lineup_entries = by_member.select{|m,d| d[:event_lineup_entry] and d[:event_lineup_entry].label.exclude?("[PO]")}.sort_by{|m,d| d[:event_lineup_entry].sequence}.each_with_index do |(member, d), i|
|
||||
- if i < 11
|
||||
tr.slot
|
||||
th.sequence(rowspan="2")
|
||||
| #{i+1}
|
||||
td.player-name
|
||||
| #{member.last_name}
|
||||
td.jersey-number
|
||||
| #{member.jersey_number}
|
||||
td.position
|
||||
| #{d[:event_lineup_entry].label}
|
||||
tr.slot.substitute
|
||||
td
|
||||
td
|
||||
td
|
||||
#defense-pane
|
||||
.field-container
|
||||
img[src="/assets/baseball-diamond.svg"]
|
||||
- for pos in ["CF", "LF", "RF", "SS", "2B", "3B", "1B", "C"]
|
||||
- (member, d) = by_member.find{|m,d| d[:event_lineup_entry] and d[:event_lineup_entry].label == pos}
|
||||
div class="slot-set pos-slot-#{pos}"
|
||||
table
|
||||
tbody
|
||||
tr.slot
|
||||
th.position
|
||||
td.player-name
|
||||
| #{member.last_name}
|
||||
tr.slot.substitute
|
||||
th
|
||||
td
|
||||
tr.slot.substitute
|
||||
th
|
||||
td
|
||||
- (member, d) = by_member.find{|m,d| d[:event_lineup_entry] and (d[:event_lineup_entry].label == "P" or d[:event_lineup_entry].label == "P [PO]")}
|
||||
div class="slot-set pos-slot-p"
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
td.player-name #{!member.nil? ? member.last_name : ""}
|
||||
td.jersey-number #{!member.nil? ? member.jersey_number : ""}
|
||||
td.jersey-number
|
||||
tr
|
||||
th.position.pos-slot-rp-1
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.jersey-number
|
||||
tr
|
||||
th.position.pos-slot-rp-2
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.jersey-number
|
||||
.footer
|
||||
table.notes
|
||||
tbody
|
||||
tr
|
||||
th
|
||||
| Notes
|
||||
tr
|
||||
td
|
||||
tr
|
||||
td
|
||||
tr
|
||||
td
|
||||
section#roster-and-history
|
||||
div
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th#today-availability[colspan="3"]
|
||||
| Available (#{availability_summary.player_going_count}|#{availability_summary.player_maybe_count})
|
||||
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
|
||||
- for timepoint, i in timeline.select{|tp| tp[:comparison_to_selected]>0}.sort{|tp| -tp[:comparison_to_selected]}.each_with_index
|
||||
th class="avail-today-plus-#{timepoint[:comparison_to_selected]} future availability"
|
||||
div
|
||||
| #{timepoint[:event].start_date.strftime("%a")}
|
||||
- for timepoint, i in timeline.select{|tp| tp[:comparison_to_selected]<0}.sort{|tp| tp[:comparison_to_selected]}.each_with_index
|
||||
th class="avail-today-minus-#{timepoint[:comparison_to_selected].abs} past availability available-status-code-#{timepoint[:by_member][member][:availability].status_code}"
|
||||
div
|
||||
| #{timepoint[:event].start_date.strftime("%a")}
|
||||
|
||||
tbody
|
||||
- by_member.select{|m,d| !m.is_non_player}.each_with_index do |(member, d), i|
|
||||
tr id="roster-history-slot-#{i}"
|
||||
td class="is-present-checkbox available-status-code-#{d[:availability].status_code}"
|
||||
span
|
||||
| ■
|
||||
td class="jersey-number border-left available-status-code-#{d[:availability].status_code} #{!d[:event_lineup_entry].nil? ? 'starting' : ''}"
|
||||
| #{member.jersey_number}
|
||||
td class="player-name available-status-code-#{d[:availability].status_code} #{!d[:event_lineup_entry].nil? ? 'starting' : ''}"
|
||||
| #{member.last_name}
|
||||
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
|
||||
| #{member.position.split(",",-1).include?("P") ? "\u2713" : ""}
|
||||
td.position-capability.catcher
|
||||
| #{member.position.split(",",-1).include?("C") ? "\u2713" : ""}
|
||||
td.position-capability.infield
|
||||
| #{member.position.split(",",-1).include?("IF") ? "\u2713" : ""}
|
||||
td.position-capability.outfield
|
||||
| #{member.position.split(",",-1).include?("OF") ? "\u2713" : ""}
|
||||
|
||||
- for timepoint, i in timeline.select{|tp| tp[:comparison_to_selected]>0}.sort{|tp| -tp[:comparison_to_selected]}.each_with_index
|
||||
td class="avail-today-plus-#{timepoint[:comparison_to_selected]} future availability available-status-code-#{timepoint[:by_member][member][:availability].status_code}"
|
||||
| #{timepoint[:by_member][member][:event_lineup_entry] ? timepoint[:by_member][member][:event_lineup_entry].label : timepoint[:by_member][member][:availability].status[0]}
|
||||
- for timepoint, i in timeline.select{|tp| tp[:comparison_to_selected]<0}.sort{|tp| -tp[:comparison_to_selected]}.each_with_index
|
||||
td class="avail-today-minus-#{timepoint[:comparison_to_selected].abs} past availability available-status-code-#{timepoint[:by_member][member][:availability].status_code}"
|
||||
| #{timepoint[:by_member][member][:event_lineup_entry] ? timepoint[:by_member][member][:event_lineup_entry].label : timepoint[:by_member][member][:availability].status[0]}
|
||||
-for section_name in ["lineup-card-dugout", "lineup-card-exchange"]
|
||||
section.lineup-card id="#{section_name}"
|
||||
header
|
||||
.float-left.event-title
|
||||
| #{event.formatted_title}
|
||||
.float-right.homeaway
|
||||
| #{event.game_type}
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
th.substitution
|
||||
| Substitution
|
||||
tbody
|
||||
- offensive_lineup_entries = by_member.select{|m,d| d[:event_lineup_entry] and d[:event_lineup_entry].label.exclude?("[PO]")}.sort_by{|m,d| d[:event_lineup_entry].sequence}
|
||||
- num_entries = offensive_lineup_entries.length
|
||||
- for i in (0...12)
|
||||
tr.slot
|
||||
th.sequence
|
||||
| #{i<num_entries ? i+1 : nil}
|
||||
td.player-name
|
||||
| #{i<num_entries ? offensive_lineup_entries[i][0].last_name : nil}
|
||||
td.jersey-number
|
||||
| #{i<num_entries ? offensive_lineup_entries[i][0].jersey_number : nil}
|
||||
td.position
|
||||
| #{i<num_entries ? offensive_lineup_entries[i][1][:event_lineup_entry].label : nil}
|
||||
td.substitution
|
||||
|
||||
#page-2.sheet.gamecard
|
||||
section#back-cover
|
||||
section#front-cover
|
||||
header
|
||||
.float-left.homeaway
|
||||
| #{event.game_type[0]}
|
||||
.event-title
|
||||
| #{event.start_date.strftime('%A %b %-d, %l:%M %P')}
|
||||
br
|
||||
| #{event.location_name}
|
||||
.container
|
||||
.team
|
||||
| #{team.name}
|
||||
div vs.
|
||||
.opponent
|
||||
| #{event.opponent_name}
|
||||
-for section_name in ["lineup-card-dugout-blank", "lineup-card-exchange-blank"]
|
||||
section.lineup-card id="#{section_name}"
|
||||
header
|
||||
.float-left.event-title
|
||||
.float-right.homeaway
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
th.substitution
|
||||
| Substitution
|
||||
tbody
|
||||
- for i in (0...12)
|
||||
tr.slot
|
||||
th.sequence
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
td.substitution
|
||||
320
app/views/event/lineup_card_template.html.slim
Normal file
320
app/views/event/lineup_card_template.html.slim
Normal file
@@ -0,0 +1,320 @@
|
||||
=stylesheet_link_tag 'gamecard', media: 'all'
|
||||
|
||||
body.B5
|
||||
#page-1.sheet.gamecard
|
||||
section#todays-game
|
||||
header
|
||||
.event-title.float-left
|
||||
| G#00 vs. XXX Xxx, Xxx 00 0:00 XM
|
||||
.homeaway.float-right
|
||||
| Hxxx
|
||||
.grid-container
|
||||
#offense-pane.left
|
||||
table#starting-lineup-offense
|
||||
tbody
|
||||
.slot-set
|
||||
- for i in 1...11
|
||||
tr.slot
|
||||
th.sequence(rowspan="2")
|
||||
| #{i}
|
||||
td.player-name
|
||||
| Lastname
|
||||
td.jersey-number
|
||||
| 00
|
||||
td.position
|
||||
| XX
|
||||
tr.slot.substitute
|
||||
td
|
||||
td
|
||||
td
|
||||
#defense-pane
|
||||
.field-container
|
||||
img[src="/assets/baseball-diamond.svg"]
|
||||
- for pos in ["cf", "lf", "rf", "ss", "second", "third", "first", "catcher"]
|
||||
div class="slot-set #{pos}"
|
||||
table
|
||||
tbody
|
||||
tr.slot
|
||||
th.position
|
||||
td.player-name
|
||||
| Lastname
|
||||
tr.slot.substitute
|
||||
th
|
||||
td
|
||||
tr.slot.substitute
|
||||
th
|
||||
td
|
||||
div class="slot-set pitcher"
|
||||
table
|
||||
tr
|
||||
th.position
|
||||
| P
|
||||
td.player-name
|
||||
| player
|
||||
td.jersey-number
|
||||
td.jersey-number
|
||||
tr
|
||||
th.position.relief-pitcher
|
||||
| RP
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.jersey-number
|
||||
tr
|
||||
th.position.relief-pitcher
|
||||
| RP
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.jersey-number
|
||||
.footer
|
||||
table.notes
|
||||
tbody
|
||||
tr
|
||||
th
|
||||
| Notes
|
||||
tr
|
||||
td
|
||||
tr
|
||||
td
|
||||
tr
|
||||
td
|
||||
section#roster-and-history
|
||||
div
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th#today-availability[colspan="3"]
|
||||
| Available (00|0)
|
||||
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
|
||||
th#avail-header-today-plus-1.availability.future
|
||||
.rotate
|
||||
| Sun
|
||||
th#avail-header-today-plus-2.availability.future
|
||||
.rotate
|
||||
| Tue
|
||||
th#avail-header-today-plus-3.availability.future
|
||||
.rotate
|
||||
| Sun
|
||||
th#avail-header-today-plus-4.availability.future
|
||||
.rotate
|
||||
| Sun
|
||||
th#avail-header-today-minus-1.availability.past
|
||||
.rotate
|
||||
| Tue
|
||||
th#avail-header-today-minus-2.availability.past
|
||||
.rotate
|
||||
| Sun
|
||||
th#avail-header-today-minus-3.availability.past
|
||||
.rotate
|
||||
| Tue
|
||||
th#avail-header-today-minus-4.availability.past
|
||||
.rotate
|
||||
| Sun
|
||||
tbody
|
||||
- for i in 1...24
|
||||
tr id="roster-history-slot-#{i}"
|
||||
td.is-present-checkbox.available-status-code-1
|
||||
span
|
||||
| ■
|
||||
td.jersey-number.border-left.available-status-code-1.starting
|
||||
| 00
|
||||
td.player-name.available-status-code-1.starting
|
||||
| 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
|
||||
| ✓
|
||||
td.position-capability.catcher
|
||||
| ✓
|
||||
td.position-capability.infield
|
||||
| ✓
|
||||
td.position-capability.outfield
|
||||
| ✓
|
||||
td#avail--today-plus-1.row.future.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-plus-2.row.future.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-plus-3.row.future.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-plus-4.row.future.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-minus-1.row.past.availability.available-status-code-.started
|
||||
| X
|
||||
td#avail-xx-today-minus-2.row.past.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-minus-3.row.past.availability.available-status-code-
|
||||
| X
|
||||
td#avail-xx-today-minus-4.row.past.availability.available-status-code-
|
||||
| X
|
||||
|
||||
section#lineup-card-dugout.lineup-card
|
||||
.grid-container
|
||||
header
|
||||
.float-left.event-title
|
||||
| G#XX vs. Xxxxxx
|
||||
.float-right.homeaway
|
||||
| Xxxx
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
th.sequence
|
||||
| #{i}
|
||||
td.player-name
|
||||
| Lastname
|
||||
td.jersey-number
|
||||
| XX
|
||||
td.position
|
||||
| XX
|
||||
|
||||
.substitution-table
|
||||
table[style="width: 100%"]
|
||||
thead
|
||||
tr
|
||||
th
|
||||
| Substitution
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
|
||||
section#lineup-card-exchange.lineup-card
|
||||
.grid-container
|
||||
header.event-title
|
||||
| Xxxxx G#XX vs. Xxxxxx
|
||||
.starting-lineup-table
|
||||
table.starting-lineup-table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
th.player-name
|
||||
| Name
|
||||
th.jersey-number
|
||||
| Num
|
||||
th.position
|
||||
| Pos
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
th.sequence
|
||||
| #{i}
|
||||
td.player-name
|
||||
| Lastname
|
||||
td.jersey-number
|
||||
| XX
|
||||
td.position
|
||||
| XX
|
||||
#page-2.sheet.gamecard
|
||||
section#back-cover
|
||||
section#front-cover
|
||||
header
|
||||
.float-right.homeaway
|
||||
| Xxxx
|
||||
.event-title
|
||||
| XXXXXX, XXX 00, 0:00 XM
|
||||
br
|
||||
| XXXXX Park
|
||||
.container
|
||||
.team
|
||||
| Xxxxx
|
||||
div vs.
|
||||
.opponent
|
||||
| Xxxxx
|
||||
section#lineup-card-dugout-blank.lineup-card
|
||||
.grid-container
|
||||
header
|
||||
.starting-lineup-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th[colspan="4"]
|
||||
| Starting
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
th.sequence
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
.substitution-table
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
| Substitution
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
td.substitution
|
||||
tr
|
||||
td.substitution
|
||||
section#lineup-card-exchange-blank.lineup-card
|
||||
.grid-container
|
||||
header
|
||||
.starting-lineup-table
|
||||
table.starting-lineup-table
|
||||
thead
|
||||
tr
|
||||
th
|
||||
th.player-name
|
||||
| Name
|
||||
th.jersey-number
|
||||
| Num
|
||||
th.position
|
||||
| Pos
|
||||
tbody
|
||||
- for i in 1...13
|
||||
tr
|
||||
th.sequence
|
||||
td.player-name
|
||||
td.jersey-number
|
||||
td.position
|
||||
84
app/views/event/lineup_email.html.slim
Normal file
84
app/views/event/lineup_email.html.slim
Normal file
@@ -0,0 +1,84 @@
|
||||
css:
|
||||
.lineup-email {
|
||||
font-family: "Helvaetica", sans-serif;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-family: inherit;
|
||||
font-weight: bold;
|
||||
color: white;
|
||||
}
|
||||
|
||||
.title-cell {
|
||||
font-weight:bold;
|
||||
background-color:#323669;
|
||||
color:#fff;
|
||||
padding:2px 5px;
|
||||
}
|
||||
|
||||
.title-cell.out {
|
||||
background-color: rgb(244, 199, 195);
|
||||
color: black;
|
||||
}
|
||||
|
||||
.sequence-cell {
|
||||
font-weight:bold;
|
||||
padding:2px 5px;
|
||||
}
|
||||
|
||||
.name-cell {
|
||||
width:200px;
|
||||
}
|
||||
|
||||
.lineup-email
|
||||
table
|
||||
thead
|
||||
tr
|
||||
th.title-cell colSpan=3
|
||||
| STARTING LINEUP
|
||||
tbody
|
||||
- for entry in event_lineup_entries.select{|e| !e[:label].blank? and extract_flags(e)[1].exclude?(PositionLabelFlag::POSITION_ONLY)}
|
||||
tr
|
||||
td.sequence-cell
|
||||
| #{entry[:sequence].to_i+1}
|
||||
td.name-cell
|
||||
| #{entry[:member][:last_name]}, #{entry[:member][:first_name]} – ##{entry[:member][:jersey_number]}
|
||||
td
|
||||
| #{entry[:label]}
|
||||
tr
|
||||
th.title-cell colSpan=3 Starting (Pos. Only)
|
||||
- for entry in event_lineup_entries.select{|e| !e[:label].blank? and extract_flags(e)[1].include?(PositionLabelFlag::POSITION_ONLY)}
|
||||
tr
|
||||
td.sequence-cell
|
||||
td.name-cell
|
||||
| #{entry[:member][:last_name]}, #{entry[:member][:first_name]} - ##{entry[:member][:jersey_number]}
|
||||
td
|
||||
| #{extract_flags(entry)[0]}
|
||||
tr
|
||||
th.title-cell colSpan=3 Subs
|
||||
- for entry in event_lineup_entries.select{|e| e[:label].blank? and !(e[:availability_status_code] == "0" or e[:availability_status_code]== "")}
|
||||
tr
|
||||
td.sequence-cell
|
||||
- if entry[:availability_status_code] == "1"
|
||||
| YES
|
||||
- if entry[:availability_status_code] == "2"
|
||||
| MAY
|
||||
td.name-cell
|
||||
| #{entry[:member][:last_name]}, #{entry[:member][:first_name]} - ##{entry[:member][:jersey_number]}
|
||||
td
|
||||
tr
|
||||
th.title-cell.out colSpan=3 Out
|
||||
- for entry in event_lineup_entries.select{|e| e[:label].blank? and (e[:availability_status_code] == "0" or e[:availability_status_code]== "")}
|
||||
tr
|
||||
td.sequence-cell
|
||||
- if entry[:availability_status_code] == "0"
|
||||
| NO
|
||||
- if entry[:availability_status_code] == ""
|
||||
| UNK
|
||||
td.name-cell
|
||||
| #{entry[:member][:last_name]}, #{entry[:member][:first_name]} - ##{entry[:member][:jersey_number]}
|
||||
td
|
||||
|
||||
|
||||
|
||||
|
||||
15
app/views/event/list.html.slim
Normal file
15
app/views/event/list.html.slim
Normal file
@@ -0,0 +1,15 @@
|
||||
.Panel
|
||||
.Panel-header
|
||||
.Panel-title Schedule
|
||||
.Panel-body
|
||||
- for event in events
|
||||
a.Panel-row--withCells.u-textDecorationNone.u-colorInfo href=url_for( event_path :team_id=>team.id, :event_id=>event.id)
|
||||
.Panel-cell
|
||||
|#{event.formatted_title}
|
||||
.Panel-cell
|
||||
|#{event.start_date.strftime("%a %b %e")}
|
||||
.Panel-cell
|
||||
|#{event.start_date.strftime("%l:%M %p")}
|
||||
.Panel-cell
|
||||
|#{event.location_name}
|
||||
|
||||
23
app/views/event/show.html.slim
Normal file
23
app/views/event/show.html.slim
Normal file
@@ -0,0 +1,23 @@
|
||||
div.event-card
|
||||
div.event-card-body
|
||||
h3.title #{event.formatted_title}
|
||||
div.date #{event.start_date.strftime("%a, %b %e, %l:%M %p")}
|
||||
div.location #{event.location_name}
|
||||
div.availability-bar=render("event/availability_bar", team:team, event:event, availability_summary: availability_summary)
|
||||
div.event-card-footer.Grid
|
||||
div.Grid-cell.u-sizeFill
|
||||
a.Button href=url_for(event_path :team_id=>team.id, :event_id=>event.id)
|
||||
i.bi.bi-calendar
|
||||
span.u-hidden.u-xs-inline Details
|
||||
div.Grid-cell.u-sizeFill
|
||||
a(class="Button" href=url_for(event_lineup_path :team_id => team.id, :event_id => event.id))
|
||||
i(class="bi bi-clipboard")
|
||||
span.u-hidden.u-xs-inline Lineup
|
||||
div.Grid-cell.u-sizeFill
|
||||
a(class="Button" href=url_for(event_lineup_card_path :team_id => team.id, :event_id => event.id))
|
||||
i(class="bi bi-book")
|
||||
span.u-hidden.u-xs-inline Card
|
||||
div.Grid-cell.u-sizeFill
|
||||
a(class="Button" href="https://go.teamsnap.com/#{team.id}/schedule/view_game/#{event.id}")
|
||||
i(class="bi bi-asterisk")
|
||||
span.u-hidden.u-xs-inline TeamSnap
|
||||
Reference in New Issue
Block a user