// ==UserScript== // @name Add/Edit: add Last Service button to some dates // @namespace https://github.com/nate-kean/ // @version 2025.11.6 // @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 // @require https://update.greasyfork.icu/scripts/554804/1689525/Nate%27s%20Day%20Button.js // @downloadURL none // ==/UserScript== (async function() { document.head.insertAdjacentHTML("beforeend", ` `); 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", "last-service"); btn.textContent = "Last Service"; btn.type = "button"; btn.addEventListener("click", () => { formGroup.querySelector("input").value = getDateString(); }, { passive: true }); formGroup.prepend(btn); } })();