Store and auto-populate info for Brain Tree daily quest.
当前为
// ==UserScript==
// @name Brain Tree
// @namespace http://tampermonkey.net/
// @version 0.3
// @description Store and auto-populate info for Brain Tree daily quest.
// @author baileyb (GC user bailey)
// @match http*://www.grundos.cafe/halloween/braintree*
// @match http*://www.grundos.cafe/halloween/esophagor*
// @icon https://www.google.com/s2/favicons?sz=64&domain=grundos.cafe
// @grant GM.setValue
// @grant GM_getValue
// @grant GM.deleteValue
// ==/UserScript==
const selectors = {
answer: "#page_content strong u",
submitButton: "#page_content input[type='submit']",
placeInput: "input[name='place']",
yearInput: "input[name='year']"
}
const elements = {
answer: document.querySelector(selectors.answer),
submitButton: document.querySelector(selectors.submitButton),
placeInput: document.querySelector(selectors.placeInput),
yearInput: document.querySelector(selectors.yearInput)
}
const currentDate = new Date()
/**
* Compute if Daylight Savings Time is active.
* @param {Object} date
* @returns {Boolean}
*/
function isDaylightSavings(date) {
let jan = new Date(date.getFullYear(), 0, 1).getTimezoneOffset()
let jul = new Date(date.getFullYear(), 6, 1).getTimezoneOffset()
return Math.max(jan, jul) !== date.getTimezoneOffset()
}
/**
* Compute Date for midnight when dailies reset.
* @param {Object} date
* @returns {Object} date at midnight
*/
function getMidnight(date) {
let midnightNumber = 0
if (isDaylightSavings(date)) {
midnightNumber = date.setUTCHours(7,0,0,0)
} else {
midnightNumber = date.setUTCHours(8,0,0,0)
}
return new Date(midnightNumber);
}
/**
* Handle locally stored answer value by clearing if expired, or populating input.
* @param {String} answerType - 'year' or 'place'
* @param {Object} date
*/
function handleStoredAnswer(answerType, date) {
const answer = GM_getValue(answerType)
const answerExpires = new Date(GM_getValue(`${answerType}Expires`))
if (!answer) {
return
} else {
if (answerExpires && date > answerExpires) {
GM.removeValue(answerType)
GM.removeValue(`${answerType}Expires`)
} else {
elements[`${answerType}Input`].value = answer
}
}
}
/**
* Store answer.
* @param {String} answer
*/
function storeAnswer(answer) {
const midnight = Date.parse(getMidnight(currentDate));
if (answer.match(/[\d]+[\w]*/)) {
GM.setValue('year', answer)
GM.setValue('yearExpires', midnight)
} else {
GM.setValue('place', answer)
GM.setValue('placeExpires', midnight)
}
}
(function() {
'use strict'
if (window.location.href.includes('braintree')) {
if (!elements.submitButton) {
return
} else {
handleStoredAnswer('year', currentDate)
handleStoredAnswer('place', currentDate)
}
}
if (window.location.href.includes('esophagor')) {
if (!elements.answer) {
return;
} else {
const answer = elements.answer.innerHTML;
storeAnswer(answer)
}
}
})();