76 lines
2.6 KiB
JavaScript
Executable file
76 lines
2.6 KiB
JavaScript
Executable file
const checkForTracking = () => {
|
|
const mainDiv = document.getElementById("main");
|
|
const searchBar = document.getElementById("search-bar");
|
|
// some pages (e.g. images) do not have these
|
|
if (!mainDiv || !searchBar)
|
|
return;
|
|
const query = searchBar.value.replace(/\s+/g, '');
|
|
|
|
// Note: regex functions for checking for tracking queries were derived
|
|
// from here -- https://stackoverflow.com/questions/619977
|
|
const matchTracking = {
|
|
"ups": {
|
|
"link": `https://www.ups.com/track?tracknum=${query}`,
|
|
"expr": [
|
|
/\b(1Z ?[0-9A-Z]{3} ?[0-9A-Z]{3} ?[0-9A-Z]{2} ?[0-9A-Z]{4} ?[0-9A-Z]{3} ?[0-9A-Z]|[\dT]\d\d\d ?\d\d\d\d ?\d\d\d)\b/
|
|
]
|
|
},
|
|
"usps": {
|
|
"link": `https://tools.usps.com/go/TrackConfirmAction_input?origTrackNum=${query}`,
|
|
"expr": [
|
|
/(\b\d{30}\b)|(\b91\d+\b)|(\b\d{20}\b)/,
|
|
/^E\D{1}\d{9}\D{2}$|^9\d{15,21}$/,
|
|
/^91[0-9]+$/,
|
|
/^[A-Za-z]{2}[0-9]+US$/
|
|
]
|
|
},
|
|
"fedex": {
|
|
"link": `https://www.fedex.com/apps/fedextrack/?tracknumbers=${query}`,
|
|
"expr": [
|
|
/(\b96\d{20}\b)|(\b\d{15}\b)|(\b\d{12}\b)/,
|
|
/\b((98\d\d\d\d\d?\d\d\d\d|98\d\d) ?\d\d\d\d ?\d\d\d\d( ?\d\d\d)?)\b/,
|
|
/^[0-9]{15}$/
|
|
]
|
|
}
|
|
};
|
|
|
|
// Creates a link to a UPS/USPS/FedEx tracking page
|
|
const createTrackingLink = href => {
|
|
let link = document.createElement("a");
|
|
link.className = "tracking-link";
|
|
link.innerHTML = "View Tracking Info";
|
|
link.href = href;
|
|
mainDiv.prepend(link);
|
|
};
|
|
|
|
// Compares the query against a set of regex patterns
|
|
// for tracking numbers
|
|
const compareQuery = provider => {
|
|
provider.expr.some(regex => {
|
|
if (query.match(regex)) {
|
|
createTrackingLink(provider.link);
|
|
return true;
|
|
}
|
|
});
|
|
};
|
|
|
|
for (const key of Object.keys(matchTracking)) {
|
|
compareQuery(matchTracking[key]);
|
|
}
|
|
};
|
|
|
|
document.addEventListener("DOMContentLoaded", function() {
|
|
checkForTracking();
|
|
|
|
// Clear input if reset button tapped
|
|
const searchBar = document.getElementById("search-bar");
|
|
const resetBtn = document.getElementById("search-reset");
|
|
// some pages (e.g. images) do not have these
|
|
if (!searchBar || !resetBtn)
|
|
return;
|
|
resetBtn.addEventListener("click", event => {
|
|
event.preventDefault();
|
|
searchBar.value = "";
|
|
searchBar.focus();
|
|
});
|
|
});
|