diff --git a/2024/crescendo_config.js b/2024/crescendo_config.js
new file mode 100644
index 000000000..e604720b8
--- /dev/null
+++ b/2024/crescendo_config.js
@@ -0,0 +1,189 @@
+var config_data = `
+{
+ "dataFormat": "tvs",
+ "title": "Scouting PASS 2024",
+ "page_title": "Crescendo",
+ "checkboxAs": "10",
+ "prematch": [
+ { "name": "Scouter Initials",
+ "code": "s",
+ "type": "scouter",
+ "size": 5,
+ "maxSize": 5,
+ "required": "true"
+ },
+ { "name": "Event",
+ "code": "e",
+ "type": "event",
+ "defaultValue": "2023tnkn",
+ "required": "true"
+ },
+ { "name": "Match Level",
+ "code": "l",
+ "type": "level",
+ "choices": {
+ "qm": "Quals
",
+ "sf": "Semifinals
",
+ "f": "Finals"
+ },
+ "defaultValue": "qm",
+ "required": "true"
+ },
+ { "name": "Match #",
+ "code": "m",
+ "type": "match",
+ "min": 1,
+ "max": 150,
+ "required": "true"
+ },
+ { "name": "Robot",
+ "code": "r",
+ "type": "robot",
+ "choices": {
+ "r1": "Red-1",
+ "b1": "Blue-1
",
+ "r2": "Red-2",
+ "b2": "Blue-2
",
+ "r3": "Red-3",
+ "b3": "Blue-3"
+ },
+ "required":"true"
+ },
+ { "name": "Team #",
+ "code": "t",
+ "type": "team",
+ "min": 1,
+ "max": 99999
+ },
+ { "name": "Auto Start Position",
+ "code": "as",
+ "type": "clickable_image",
+ "filename": "2024/field_image.png",
+ "clickRestriction": "one",
+ "allowableResponses": "1 12 13 24 25 36 37 48 49 60 61 72",
+ "shape": "circle 5 black red true"
+ }
+ ],
+ "auton": [
+ { "name": "Leave Starting Zone",
+ "code": "al",
+ "type": "bool"
+ },
+ { "name": "Amp Scores",
+ "code": "aas",
+ "type": "counter"
+ },
+ { "name": "Speaker Scores",
+ "code": "ass",
+ "type": "counter"
+ }
+ ],
+ "teleop": [
+ { "name": "Amp Scores",
+ "code": "tas",
+ "type": "counter"
+ },
+ { "name": "Speaker Scores",
+ "code": "tss",
+ "type": "counter"
+ },
+ { "name": "Times Amplified",
+ "code": "tta",
+ "type": "counter"
+ },
+ { "name": "Pickup From",
+ "code": "tpu",
+ "type": "radio",
+ "choices": {
+ "s": "Source
",
+ "f": "Floor
",
+ "b": "Both
",
+ "x": "Not Attempted"
+ },
+ "defaultValue": "x"
+ }
+ ],
+ "endgame": [
+ { "name": "Stage Timer",
+ "code": "dt",
+ "type": "timer"
+ },
+ { "name": "Final Status",
+ "code": "fs",
+ "type":"radio",
+ "choices": {
+ "p": "Parked
",
+ "o": "Onstage
",
+ "s": "Onstage (Spotlit)
",
+ "h": "Harmony
",
+ "a": "Attempted but failed
",
+ "x": "Not attempted"
+ },
+ "defaultValue": "x"
+ },
+ { "name": "Note in Trap",
+ "code": "nit",
+ "type": "bool"
+ }
+ ],
+ "postmatch": [
+ { "name": "Driver Skill",
+ "code": "ds",
+ "type": "radio",
+ "choices": {
+ "n": "Not Effective
",
+ "a": "Average
",
+ "v": "Very Effective
",
+ "x": "Not Observed"
+ },
+ "defaultValue": "x"
+ },
+ { "name": "Defense Rating",
+ "code": "dr",
+ "type": "radio",
+ "choices": {
+ "b": "Below Average
",
+ "a": "Average
",
+ "g": "Good
",
+ "e": "Excellent
",
+ "x": "Did not play defense"
+ },
+ "defaultValue": "x"
+ },
+ { "name": "Speed Rating",
+ "code": "sr",
+ "type": "radio",
+ "choices": {
+ "1": "1 (slow)
",
+ "2": "2
",
+ "3": "3
",
+ "4": "4
",
+ "5": "5 (fast)"
+ },
+ "defaultValue":"3"
+ },
+ { "name": "Died/Immobilized",
+ "code": "die",
+ "type": "bool"
+ },
+ { "name": "Tippy
(almost tipped over)",
+ "code": "tip",
+ "type": "bool"
+ },
+ { "name": "Dropped Notes (>2)",
+ "code": "dn",
+ "type": "bool"
+ },
+ { "name": "Make good
alliance partner?",
+ "tooltip": "Would you want this robot on your alliance in eliminations?",
+ "code": "all",
+ "type": "bool"
+ },
+ { "name": "Comments",
+ "code": "co",
+ "type": "text",
+ "size": 15,
+ "maxSize": 55
+ }
+ ]
+}`;
diff --git a/2024/crescendo_pit_config.js b/2024/crescendo_pit_config.js
new file mode 100644
index 000000000..58477b516
--- /dev/null
+++ b/2024/crescendo_pit_config.js
@@ -0,0 +1,98 @@
+var config_data = `
+{
+ "title": "Scouting PASS 2024",
+ "page_title": "Crescendo",
+ "pitConfig": "true",
+ "prematch": [
+ { "name": "Team Number",
+ "code": "t",
+ "type": "number"
+ },
+ { "name": "Width",
+ "code": "wid",
+ "type": "number",
+ "defaultValue": "0"
+ },
+ { "name": "Weight",
+ "code": "wei",
+ "type": "number",
+ "defaultValue": "0"
+ },
+ { "name": "Drivetrain",
+ "code": "drv",
+ "type": "radio",
+ "choices": {
+ "s": "Swerve
",
+ "w": "West Coast/Tank
",
+ "b": "Butterfly/Grashopper
",
+ "m": "Mechanum
",
+ "o": "Other"
+ },
+ "defaultValue": "o"
+ },
+ { "name": "Other Drivetrain",
+ "code": "odt",
+ "type": "text",
+ "size": 20,
+ "maxSize": 50
+ },
+ { "name": "Swerve Ratio",
+ "code": "sr",
+ "type": "radio",
+ "choices": {
+ "1": "L1 (8.14:1)
",
+ "2": "L2 (6.75:1)
",
+ "3": "L3 (6.12:1)
",
+ "4": "L4 (5.14:1)
",
+ "o": "Other ratio (put in comments)
",
+ "x": "Not Swerve"
+ },
+ "defaultValue":"x"
+ },
+ { "name": "Drivetrain Motor",
+ "code": "mot",
+ "type": "radio",
+ "choices": {
+ "n": "Neo
",
+ "f": "Falcon
",
+ "c": "CIM
",
+ "x": "Other
"
+ },
+ "defaultValue":"x"
+ },
+ { "name": "# of Batteries",
+ "code": "nob",
+ "type": "number"
+ },
+ { "name": "Floor pickup Notes",
+ "code": "fpu",
+ "type": "bool"
+ },
+ { "name": "Autos",
+ "code": "aut",
+ "type": "text",
+ "size": 20,
+ "maxSize": 250
+ },
+ { "name": "Scouting Method /
Program (ScoutingPASS?)",
+ "code": "sct",
+ "type": "text",
+ "size": 20,
+ "maxSize": 250
+ },
+ { "name": "Comments",
+ "code": "co",
+ "type": "text",
+ "size": 20,
+ "maxSize": 250
+ }
+ ],
+ "auton": [
+ ],
+ "teleop": [
+ ],
+ "endgame": [
+ ],
+ "postmatch": [
+ ]
+}`;
diff --git a/2024/field_image.png b/2024/field_image.png
new file mode 100644
index 000000000..ef8e6f9ba
Binary files /dev/null and b/2024/field_image.png differ
diff --git a/index.html b/index.html
index 34b22a3a9..fc0fd68bb 100644
--- a/index.html
+++ b/index.html
@@ -9,7 +9,7 @@
-
+
diff --git a/pit.html b/pit.html
index 729cdabd9..c0d552530 100644
--- a/pit.html
+++ b/pit.html
@@ -9,7 +9,7 @@
-
+
diff --git a/resources/js/scoutingPASS.js b/resources/js/scoutingPASS.js
index 5105100a7..89b58aad0 100644
--- a/resources/js/scoutingPASS.js
+++ b/resources/js/scoutingPASS.js
@@ -1093,15 +1093,15 @@ function onFieldClick(event) {
let box = ((Math.ceil(event.offsetY / target.height * resY) - 1) * resX) + Math.ceil(event.offsetX / target.width * resX);
let coords = event.offsetX + "," + event.offsetY;
- let allowableResponses = document.getElementById("allowableResponses" + base).value.split(',').map(Number);
-
+ let allowableResponses = document.getElementById("allowableResponses" + base).value;
+
if(allowableResponses != "none"){
- if (allowableResponses.indexOf(box)==-1){
+ allowableResponsesList = allowableResponses.split(',').map(Number);
+ if (allowableResponsesList.indexOf(box)==-1){
return;
}
}
-
//Cumulating values
let changingXY = document.getElementById("XY" + base);
let changingInput = document.getElementById("input" + base);