Add a button that sets its to the closest past Sunday or Wednesday, in the fields that are usually set to last service.
נכון ליום
// ==UserScript==
// @name Add/Edit: add Last Service button to some dates
// @namespace https://github.com/nate-kean/
// @version 2025.11.4
// @description Add a button that sets its to the closest past Sunday or Wednesday, in the fields that are usually set to last service.
// @author Nate Kean
// @match https://jamesriver.fellowshiponego.com/members/edit/*
// @match https://jamesriver.fellowshiponego.com/members/add*
// @icon https://www.google.com/s2/favicons?sz=64&domain=fellowshiponego.com
// @grant none
// @license MIT
// ==/UserScript==
(async function() {
document.head.insertAdjacentHTML("beforeend", `
<style id="nates-day-button-css">
.nates-day-button {
float: right;
font-weight: 600;
border: none;
font-size: 13px;
margin-top: -2px;
padding: 0;
}
.dates-panel .date-section {
max-width: 700px !important;
& .date-holder {
width: 225px !important;
& label {
width: unset !important;
}
& .input-holder {
width: 100%;
}
}
}
</style>
`);
const fieldNames = [
"First Visit Date",
"Baptized",
"Salvation Date",
"Rededication Date",
];
function delay(ms) {
return new Promise((resolve) => setTimeout(resolve, ms));
}
const Day = Object.freeze({
SUNDAY: 0,
MONDAY: 1,
TUESDAY: 2,
WEDNESDAY: 3,
THURSDAY: 4,
FRIDAY: 5,
SATURDAY: 6,
});
function getLastWeekday(targetDate, day) {
const currentWeekday = targetDate.getDay();
const daysToSubtract = (currentWeekday - day + 7) % 7;
const lastWeekdayDate = new Date(targetDate);
lastWeekdayDate.setDate(targetDate.getDate() - daysToSubtract);
return lastWeekdayDate;
}
function getDateString() {
const today = new Date();
const lastSunday = getLastWeekday(today, Day.SUNDAY);
const lastWednesday = getLastWeekday(today, Day.WEDNESDAY);
const lastServiceDate = Math.max(lastSunday, lastWednesday)
return new Intl.DateTimeFormat("en-US", {
month: "2-digit",
day: "2-digit",
year: "numeric",
}).format(lastServiceDate);
}
for (const formGroup of document.querySelectorAll(".form-group")) {
if (!fieldNames.includes(formGroup.querySelector("label")?.textContent.trim())) {
continue;
}
const btn = document.createElement("button");
btn.classList.add("nates-day-button");
btn.textContent = "Last Service";
btn.type = "button";
btn.addEventListener("click", () => {
formGroup.querySelector("input").value = getDateString();
}, { passive: true });
formGroup.prepend(btn);
}
})();