// ==UserScript== // @name Add/Edit: add Last Service button to some dates // @namespace https://github.com/nate-kean/ // @version 2025.11.23.1 // @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 // @run-at document-end // @require https://update.greasyfork.icu/scripts/554804/1689525/Nate%27s%20Day%20Button.js // @downloadURL none // ==/UserScript== (function() { document.head.insertAdjacentHTML("beforeend", ` `); const fieldNames = [ "First Visit Date", "Baptized", "Salvation Date", "Rededication Date", ]; 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 isSameDate(a, b) { return ( a.getDate() === b.getDate() && a.getMonth() === b.getMonth() && a.getFullYear() === b.getFullYear() ); } const today = new Date(); const lastSunday = getLastWeekday(today, Day.SUNDAY); const lastWednesday = getLastWeekday(today, Day.WEDNESDAY); const lastServiceDate = new Date(Math.max(lastSunday, lastWednesday)); const buttonName = (isSameDate(today, lastServiceDate)) ? "Today" : "Last Service"; const dateString = 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 = buttonName; btn.type = "button"; btn.addEventListener("click", () => { formGroup.querySelector("input").value = dateString; }, { passive: true }); formGroup.prepend(btn); } })();