initial commit
This commit is contained in:
3
app/javascript/application.js
Normal file
3
app/javascript/application.js
Normal file
@@ -0,0 +1,3 @@
|
||||
// Configure your import map in config/importmap.rb. Read more: https://github.com/rails/importmap-rails
|
||||
import "@hotwired/turbo-rails"
|
||||
import "controllers"
|
||||
9
app/javascript/controllers/application.js
Normal file
9
app/javascript/controllers/application.js
Normal file
@@ -0,0 +1,9 @@
|
||||
import { Application } from "@hotwired/stimulus"
|
||||
|
||||
const application = Application.start()
|
||||
|
||||
// Configure Stimulus development experience
|
||||
application.debug = false
|
||||
window.Stimulus = application
|
||||
|
||||
export { application }
|
||||
7
app/javascript/controllers/hello_controller.js
Normal file
7
app/javascript/controllers/hello_controller.js
Normal file
@@ -0,0 +1,7 @@
|
||||
import { Controller } from "@hotwired/stimulus"
|
||||
|
||||
export default class extends Controller {
|
||||
connect() {
|
||||
this.element.textContent = "Hello World!"
|
||||
}
|
||||
}
|
||||
11
app/javascript/controllers/index.js
Normal file
11
app/javascript/controllers/index.js
Normal file
@@ -0,0 +1,11 @@
|
||||
// Import and register all your controllers from the importmap under controllers/*
|
||||
|
||||
import { application } from "controllers/application"
|
||||
|
||||
// Eager load all controllers defined in the import map under controllers/**/*_controller
|
||||
import { eagerLoadControllersFrom } from "@hotwired/stimulus-loading"
|
||||
eagerLoadControllersFrom("controllers", application)
|
||||
|
||||
// Lazy load controllers as they appear in the DOM (remember not to preload controllers in import map!)
|
||||
// import { lazyLoadControllersFrom } from "@hotwired/stimulus-loading"
|
||||
// lazyLoadControllersFrom("controllers", application)
|
||||
494
app/javascript/lineup.js
Normal file
494
app/javascript/lineup.js
Normal file
@@ -0,0 +1,494 @@
|
||||
/* Project specific Javascript goes here. */
|
||||
function onPositionSelectChange(elem) {
|
||||
elem.querySelectorAll("option").forEach((option) => {
|
||||
if (option.innerText == elem.value) {
|
||||
option.setAttribute("selected", "selected");
|
||||
} else {
|
||||
option.removeAttribute("selected");
|
||||
}
|
||||
});
|
||||
colorPositions();
|
||||
refreshLineupOrder();
|
||||
}
|
||||
|
||||
function togglePopup(el) {
|
||||
el.querySelector(".Popup-container").classList.toggle("is-open");
|
||||
}
|
||||
|
||||
function colorPositions() {
|
||||
for (bcLineup of document.getElementsByClassName("event-lineup")) {
|
||||
selected_lineup_positions = Array.from(
|
||||
bcLineup.querySelectorAll(".Panel-row .SelectBox.position-selection option[selected='selected']")
|
||||
).map((el) => el.value);
|
||||
for (position_status of bcLineup.querySelectorAll(".position-status")) {
|
||||
for (class_name of ["text-danger", "text-warning", "text-success"]) {
|
||||
position_status.classList.remove(class_name);
|
||||
}
|
||||
|
||||
occurrences = selected_lineup_positions.filter((s) => s == position_status.innerText).length;
|
||||
|
||||
if (occurrences == 1) {
|
||||
position_status.classList.add("text-success");
|
||||
} else if (occurrences > 1) {
|
||||
position_status.classList.add("text-warning");
|
||||
} else {
|
||||
position_status.classList.add("text-danger");
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
function refreshLineupOrder() {
|
||||
Array.from(document.querySelectorAll(".event-lineup")).forEach((bcLineup) => {
|
||||
Array.from(
|
||||
bcLineup.querySelectorAll(
|
||||
".event-lineup .starting .lineup-slot, \
|
||||
.event-lineup .position-only .lineup-slot, \
|
||||
.event-lineup .bench .lineup-slot"
|
||||
)
|
||||
).forEach((slot, i) => {
|
||||
slot.querySelector("input[name*=sequence]").value = i;
|
||||
selected_position = slot.querySelector("option[selected='selected']");
|
||||
if (selected_position && selected_position.text != "--") {
|
||||
slot.querySelector("input[name*=label]").value = selected_position.text;
|
||||
} else {
|
||||
slot.querySelector("input[name*=label]").value = null;
|
||||
}
|
||||
});
|
||||
Array.from(
|
||||
bcLineup.querySelectorAll(
|
||||
".event-lineup .position-only .lineup-slot, \
|
||||
.event-lineup .bench .lineup-slot"
|
||||
)
|
||||
).forEach((slot) => {
|
||||
selected_position = slot.querySelector("option[selected='selected']");
|
||||
if (selected_position && selected_position.text != "--") {
|
||||
slot.querySelector("input[name*=label]").value = `${selected_position.text} [PO]`;
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
function refresh_lineup_order(itemEl) {
|
||||
let bcLineup = itemEl.closest(".benchcoach-lineup");
|
||||
var player_rows = [];
|
||||
for (tbody of bcLineup.querySelectorAll("[class*='tbody-benchcoach-starting']")) {
|
||||
for (row of tbody.rows) {
|
||||
player_rows.push(row);
|
||||
}
|
||||
}
|
||||
|
||||
for (let i = 0; i < player_rows.length; i++) {
|
||||
var player_order = player_rows[i].querySelector('[id^="sequence"]');
|
||||
var form_element_order = player_rows[i].querySelector('[id$="sequence"]');
|
||||
player_order.innerText = parseInt(player_rows[i].dataset.order);
|
||||
player_rows[i].dataset.order = i;
|
||||
form_element_order.value = i;
|
||||
player_order.innerHTML = i + 1;
|
||||
}
|
||||
var player_rows = bcLineup.getElementsByClassName("tbody-benchcoach-bench")[0].rows;
|
||||
for (let i = 0; i < player_rows.length; i++) {
|
||||
var player_order = player_rows[i].querySelector('[id^="sequence"]');
|
||||
var form_element_order = player_rows[i].querySelector('[id$="sequence"]');
|
||||
player_rows[i].dataset.order = null;
|
||||
form_element_order.value = null;
|
||||
player_order.innerHTML = null;
|
||||
}
|
||||
}
|
||||
|
||||
for (bcLineup of document.querySelectorAll(".event-lineup")) {
|
||||
console.log();
|
||||
options = {
|
||||
animation: 150,
|
||||
handle: ".Panel-cell:has(.drag-handle), .Panel-cell:has(.sequence)",
|
||||
ghostClass: "ghost",
|
||||
group: {
|
||||
name: bcLineup.id,
|
||||
put: [bcLineup.id],
|
||||
pull: [bcLineup.id],
|
||||
},
|
||||
onAdd: function (/**Event*/ evt) {
|
||||
console.log("added to lineup");
|
||||
// Add to Lineup
|
||||
var itemEl = evt.item; // dragged HTMLElement
|
||||
|
||||
refreshLineupOrder();
|
||||
},
|
||||
onUpdate: function (/**Event*/ evt) {
|
||||
console.log("update to lineup");
|
||||
// var itemEl = evt.item; // dragged HTMLElement
|
||||
// refresh_lineup_order(itemEl);
|
||||
refreshLineupOrder();
|
||||
},
|
||||
};
|
||||
new Sortable.create(bcLineup.querySelector(".starting .slot-set"), options);
|
||||
new Sortable.create(bcLineup.querySelector(".position-only .slot-set"), options);
|
||||
options["sort"] = false;
|
||||
new Sortable.create(bcLineup.querySelector(".bench .slot-set"), options);
|
||||
}
|
||||
|
||||
function copyEmailTable(itemEl, subject, recipients) {
|
||||
// Create container for the HTML
|
||||
// [1]
|
||||
let bcLineup = itemEl.closest(".benchcoach-lineup");
|
||||
var container = document.createElement("div");
|
||||
var tbl = document.createElement("table");
|
||||
|
||||
let thead = tbl.createTHead();
|
||||
let thead_row = thead.insertRow();
|
||||
let thead_row_cell = thead_row.insertCell();
|
||||
thead_row_cell.appendChild(document.createElement("h3").appendChild(document.createTextNode("STARTING LINEUP")));
|
||||
thead_row_cell.colSpan = 3;
|
||||
thead_row_cell.classList.add("title-cell");
|
||||
var tbody = tbl.createTBody();
|
||||
for (row of bcLineup.querySelector(".table-benchcoach-startinglineup").rows) {
|
||||
let tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
cell.appendChild(document.createTextNode(parseInt(row.dataset.order) + 1));
|
||||
cell = tr.insertCell();
|
||||
cell.appendChild(document.createTextNode(row.dataset.playerName));
|
||||
cell.classList.add("name-cell");
|
||||
tr.insertCell().appendChild(document.createTextNode(row.dataset.position));
|
||||
}
|
||||
|
||||
if (bcLineup.querySelector(".table-benchcoach-startingpositionalonly").rows.length > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("STARTING (POS. ONLY)"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (row of bcLineup.querySelector(".table-benchcoach-startingpositionalonly").rows) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
cell.appendChild(document.createTextNode(""));
|
||||
cell = tr.insertCell();
|
||||
cell.appendChild(document.createTextNode(row.dataset.playerName));
|
||||
cell.classList.add("name-cell");
|
||||
tr.insertCell().appendChild(document.createTextNode(row.dataset.position));
|
||||
}
|
||||
}
|
||||
|
||||
if (bcLineup.querySelector(".table-benchcoach-bench").rows.length > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("SUBS"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (row of bcLineup.querySelector(".table-benchcoach-bench").rows) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
availability_status = {
|
||||
None: "UNK",
|
||||
0: "NO",
|
||||
2: "MAY",
|
||||
1: "YES",
|
||||
}[row.dataset.availabilityStatuscode];
|
||||
cell.appendChild(document.createTextNode(availability_status));
|
||||
cell = tr.insertCell();
|
||||
cell.appendChild(document.createTextNode(row.dataset.playerName));
|
||||
cell.classList.add("name-cell");
|
||||
tr.insertCell().appendChild(document.createTextNode(""));
|
||||
}
|
||||
}
|
||||
|
||||
if (bcLineup.querySelector(".table-benchcoach-out").rows.length > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("OUT"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (row of bcLineup.querySelector(".table-benchcoach-out").rows) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
availability_status = {
|
||||
None: "UNK",
|
||||
0: "NO",
|
||||
1: "MAY",
|
||||
2: "YES",
|
||||
}[row.dataset.availabilityStatuscode];
|
||||
cell.appendChild(document.createTextNode(availability_status));
|
||||
tr.insertCell().appendChild(document.createTextNode(row.dataset.playerName));
|
||||
tr.insertCell().appendChild(document.createTextNode(""));
|
||||
}
|
||||
}
|
||||
|
||||
container.appendChild(tbl);
|
||||
for (cell of container.getElementsByClassName("title-cell")) {
|
||||
cell.setAttribute("style", "font-weight:bold;background-color:#323669;color:#fff;padding:2px 5px;");
|
||||
}
|
||||
|
||||
for (cell of container.getElementsByClassName("sequence-cell")) {
|
||||
cell.setAttribute("style", "font-weight:bold;padding:2px 5px;");
|
||||
}
|
||||
|
||||
for (cell of container.getElementsByClassName("name-cell")) {
|
||||
cell.setAttribute("style", "width:200px;");
|
||||
}
|
||||
|
||||
// Detect all style sheets of the page
|
||||
var activeSheets = Array.prototype.slice.call(document.styleSheets).filter(function (sheet) {
|
||||
return !sheet.disabled;
|
||||
});
|
||||
|
||||
// Mount the container to the DOM to make `contentWindow` available
|
||||
// [3]
|
||||
document.body.appendChild(container);
|
||||
|
||||
// Copy to clipboard
|
||||
// [4]
|
||||
window.getSelection().removeAllRanges();
|
||||
|
||||
var range = document.createRange();
|
||||
range.selectNode(container);
|
||||
window.getSelection().addRange(range);
|
||||
|
||||
// [5.1]
|
||||
document.execCommand("copy");
|
||||
|
||||
// [5.2]
|
||||
for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = true;
|
||||
|
||||
// [5.3]
|
||||
// document.execCommand('copy')
|
||||
|
||||
// [5.4]
|
||||
for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = false;
|
||||
|
||||
// Remove the container
|
||||
// [6]
|
||||
document.body.removeChild(container);
|
||||
subject_encoded = encodeURIComponent(subject);
|
||||
window.open("readdle-spark://compose?recipient=manager@chihounds.com&subject=" + subject + "&bcc=" + recipients);
|
||||
}
|
||||
|
||||
function emailModal(el, url) {
|
||||
form = el.closest("form");
|
||||
console.log(url);
|
||||
data = new FormData(form);
|
||||
console.log(data);
|
||||
console.log(form);
|
||||
|
||||
email_modal = document.querySelector("#email-modal");
|
||||
|
||||
fetch(url, {
|
||||
method: "POST",
|
||||
body: data,
|
||||
})
|
||||
.then((response) => {
|
||||
if (response.ok) {
|
||||
return response.text();
|
||||
} else {
|
||||
return Promise.reject(response.text());
|
||||
}
|
||||
})
|
||||
.then((text) => {
|
||||
email_modal.classList.add("is-open");
|
||||
email_modal.querySelector(".Modal-body").innerHTML = text;
|
||||
});
|
||||
}
|
||||
|
||||
function onSubmit(form, event) {
|
||||
event.preventDefault();
|
||||
waiting_message = document.querySelector("#waiting-message.Feedback");
|
||||
success_message = document.querySelector("#success-message.Feedback");
|
||||
failure_message = document.querySelector("#failure-message.Feedback");
|
||||
data = new FormData(form);
|
||||
url = form.attributes.action.textContent;
|
||||
waiting_message.classList.remove("u-hidden");
|
||||
fetch(url, {
|
||||
method: "POST",
|
||||
body: data,
|
||||
})
|
||||
.then((response) => {
|
||||
waiting_message.classList.add("u-hidden");
|
||||
if (response.ok) {
|
||||
return response.text();
|
||||
} else {
|
||||
return Promise.reject(response.text());
|
||||
}
|
||||
})
|
||||
.then((text) => {
|
||||
success_message.classList.remove("u-hidden");
|
||||
success_message.querySelector("span.message").innerHTML = text;
|
||||
})
|
||||
.catch((error) => {
|
||||
failure_message.classList.remove("u-hidden");
|
||||
console.log(error);
|
||||
success_message.querySelector("span.message").innerHTML = error;
|
||||
waiting_message.classList.add("u-hidden");
|
||||
});
|
||||
}
|
||||
|
||||
function copyEmailTable(itemEl, subject, recipients) {
|
||||
// Create container for the HTML
|
||||
// [1]
|
||||
let bcLineup = itemEl.closest(".event-lineup");
|
||||
console.log(bcLineup);
|
||||
var container = document.createElement("div");
|
||||
var tbl = document.createElement("table");
|
||||
|
||||
let thead = tbl.createTHead();
|
||||
let thead_row = thead.insertRow();
|
||||
let thead_row_cell = thead_row.insertCell();
|
||||
thead_row_cell.appendChild(document.createElement("h3").appendChild(document.createTextNode("STARTING LINEUP")));
|
||||
thead_row_cell.colSpan = 3;
|
||||
thead_row_cell.classList.add("title-cell");
|
||||
var tbody = tbl.createTBody();
|
||||
|
||||
lineup_slots_starting = bcLineup.querySelectorAll(".starting .slot-set .lineup-slot");
|
||||
|
||||
for (node of lineup_slots_starting) {
|
||||
console.log("node", node);
|
||||
let tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
sequence = node.querySelector("input[name*='sequence']").value;
|
||||
console.log(sequence);
|
||||
cell.appendChild(document.createTextNode(parseInt(sequence) + 1));
|
||||
name = node.querySelector("div:has(.lastname)");
|
||||
cell = tr.insertCell();
|
||||
cell.appendChild(document.createTextNode(name.textContent));
|
||||
cell.classList.add("name-cell");
|
||||
position_label = node.querySelector("input[name*='label']").value;
|
||||
tr.insertCell().appendChild(document.createTextNode(position_label));
|
||||
}
|
||||
|
||||
lineup_slots_position_only = bcLineup.querySelector(".position-only .slot-set .lineup-slot");
|
||||
console.log("lineup slots position", lineup_slots_position_only);
|
||||
if (lineup_slots_position_only.length > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("STARTING (POS. ONLY)"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (node of lineup_slots_position_only) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
cell.appendChild(document.createTextNode(""));
|
||||
cell = tr.insertCell();
|
||||
name = node.querySelector("div:has(.lastname)");
|
||||
cell.appendChild(document.createTextNode(name.textCotent));
|
||||
cell.classList.add("name-cell");
|
||||
position_label = node.querySelector("input[name*='label']").value;
|
||||
tr.insertCell().appendChild(document.createTextNode(position_label));
|
||||
}
|
||||
}
|
||||
|
||||
lineup_slots_bench = bcLineup.querySelector(".bench .slot-set .lineup-slot");
|
||||
if (lineup_slots_bench > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("SUBS"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (node of lineup_slots_bench) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
|
||||
div_avail_code = node.querySelector("div[class*='availability-status-code']");
|
||||
if (div_with_avail_code.classList.includes("availability-status-code-1")) {
|
||||
cell.appendChild(document.createTextNode("YES"));
|
||||
} else if (div_with_avail_code.classList.includes("availability-status-code-2")) {
|
||||
cell.appendChild(document.createTextNode("MAY"));
|
||||
} else if (div_with_avail_code.classList.includes("availability-status-code-0")) {
|
||||
cell.appendChild(document.createTextNode("NO"));
|
||||
} else {
|
||||
cell.appendChild(document.createTextNode("UNK"));
|
||||
}
|
||||
cell = tr.insertCell();
|
||||
name = node.querySelector("div:has(.lastname)");
|
||||
cell.appendChild(document.createTextNode(name.textCotent));
|
||||
cell.classList.add("name-cell");
|
||||
tr.insertCell().appendChild(document.createTextNode(""));
|
||||
}
|
||||
}
|
||||
|
||||
lineup_slots_out = bcLineup.querySelector(".out .slot-set .lineup-slot");
|
||||
if (lineup_slots_out > 0) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.colSpan = 3;
|
||||
cell.appendChild(document.createTextNode("OUT"));
|
||||
cell.classList.add("title-cell");
|
||||
|
||||
for (node of lineup_slots_out) {
|
||||
var tr = tbody.insertRow();
|
||||
cell = tr.insertCell();
|
||||
cell.classList.add("sequence-cell");
|
||||
div_avail_code = node.querySelector("div[class*='availability-status-code']");
|
||||
if (div_with_avail_code.classList.includes("availability-status-code-1")) {
|
||||
cell.appendChild(document.createTextNode("YES"));
|
||||
} else if (div_with_avail_code.classList.includes("availability-status-code-2")) {
|
||||
cell.appendChild(document.createTextNode("MAY"));
|
||||
} else if (div_with_avail_code.classList.includes("availability-status-code-0")) {
|
||||
cell.appendChild(document.createTextNode("NO"));
|
||||
} else {
|
||||
cell.appendChild(document.createTextNode("UNK"));
|
||||
}
|
||||
cell = tr.insertCell();
|
||||
name = node.querySelector("div:has(.lastname)");
|
||||
cell.appendChild(document.createTextNode(name.textCotent));
|
||||
cell.classList.add("name-cell");
|
||||
tr.insertCell().appendChild(document.createTextNode(""));
|
||||
}
|
||||
}
|
||||
|
||||
container.appendChild(tbl);
|
||||
for (cell of container.getElementsByClassName("title-cell")) {
|
||||
cell.setAttribute("style", "font-weight:bold;background-color:#323669;color:#fff;padding:2px 5px;");
|
||||
}
|
||||
|
||||
for (cell of container.getElementsByClassName("sequence-cell")) {
|
||||
cell.setAttribute("style", "font-weight:bold;padding:2px 5px;");
|
||||
}
|
||||
|
||||
for (cell of container.getElementsByClassName("name-cell")) {
|
||||
cell.setAttribute("style", "width:200px;");
|
||||
}
|
||||
|
||||
// Detect all style sheets of the page
|
||||
var activeSheets = Array.prototype.slice.call(document.styleSheets).filter(function (sheet) {
|
||||
return !sheet.disabled;
|
||||
});
|
||||
|
||||
// Mount the container to the DOM to make `contentWindow` available
|
||||
// [3]
|
||||
document.body.appendChild(container);
|
||||
|
||||
// Copy to clipboard
|
||||
// [4]
|
||||
window.getSelection().removeAllRanges();
|
||||
|
||||
var range = document.createRange();
|
||||
range.selectNode(container);
|
||||
window.getSelection().addRange(range);
|
||||
|
||||
// [5.1]
|
||||
document.execCommand("copy");
|
||||
|
||||
// [5.2]
|
||||
for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = true;
|
||||
|
||||
// [5.3]
|
||||
// document.execCommand('copy')
|
||||
|
||||
// [5.4]
|
||||
for (var i = 0; i < activeSheets.length; i++) activeSheets[i].disabled = false;
|
||||
|
||||
// Remove the container
|
||||
// [6]
|
||||
document.body.removeChild(container);
|
||||
subject_encoded = encodeURIComponent(subject);
|
||||
window.open("readdle-spark://compose?recipient=manager@chihounds.com&subject=" + subject + "&bcc=" + recipients);
|
||||
}
|
||||
Reference in New Issue
Block a user