Adds a button to redirect based on user-defined rules
// ==UserScript==
// @name Website Shortcut Maker
// @namespace http://tampermonkey.net/
// @version 1.1.9
// @description Adds a button to redirect based on user-defined rules
// @license MIT
// @match http://*/*
// @match https://*/*
// @grant GM_setValue
// @grant GM_getValue
// ==/UserScript==
(function() {
'use strict';
// Function to create UI elements
function createUI() {
// Create button
const button = document.createElement('button');
button.textContent = 'Redirect Settings';
button.style.zIndex = '9999';
button.style.padding = '5px 10px';
button.style.border = '1px solid #ccc';
button.style.borderRadius = '3px';
button.style.cursor = 'pointer';
button.style.backgroundColor = 'white';
button.style.color = 'black';
// Set button position based on the current page
if (window.location.pathname === '/') {
// Center the button at the top on Google's main page
button.style.position = 'fixed';
button.style.top = '20px';
button.style.left = '50%';
button.style.transform = 'translateX(-50%)';
} else {
// Position in top-right corner for search results pages
button.style.position = 'fixed';
button.style.top = '10px';
button.style.right = '10px';
}
// Create menu
const menu = document.createElement('div');
menu.style.display = 'none';
menu.style.position = 'fixed';
menu.style.top = '40px';
menu.style.right = '10px';
menu.style.width = '250px';
menu.style.padding = '10px';
menu.style.backgroundColor = 'white';
menu.style.border = '1px solid black';
menu.style.zIndex = '9999';
menu.style.color = 'black';
menu.innerHTML = `
<p>Enter the keyword or exact URL to trigger the redirect:</p>
<input type="text" id="triggerInput"><br><br>
<p>Enter the URL to redirect to:</p>
<input type="text" id="redirectInput"><br><br>
<button id="saveButton" class="menu-button">Save</button>
<button id="closeButton" class="menu-button">Close</button>
<button id="viewAllButton" class="menu-button">View All Redirects</button>
`;
// Style for menu buttons
const style = document.createElement('style');
style.textContent = `
.menu-button {
background-color: black;
color: white;
border: none;
padding: 5px 10px;
margin: 5px;
cursor: pointer;
}
.menu-button:hover {
background-color: #333;
}
`;
document.head.appendChild(style);
// Create all redirects menu
const allRedirectsMenu = document.createElement('div');
allRedirectsMenu.style.display = 'none';
allRedirectsMenu.style.position = 'fixed';
allRedirectsMenu.style.top = '40px';
allRedirectsMenu.style.right = '280px';
allRedirectsMenu.style.width = '300px';
allRedirectsMenu.style.height = '400px';
allRedirectsMenu.style.padding = '10px';
allRedirectsMenu.style.backgroundColor = 'white';
allRedirectsMenu.style.border = '1px solid black';
allRedirectsMenu.style.zIndex = '9999';
allRedirectsMenu.style.color = 'black';
allRedirectsMenu.style.overflowY = 'auto';
allRedirectsMenu.innerHTML = '<h3>All Redirects:</h3><div id="allRulesList"></div>';
// Add elements to page
document.body.appendChild(button);
document.body.appendChild(menu);
document.body.appendChild(allRedirectsMenu);
// Button click event
button.addEventListener('click', () => {
menu.style.display = menu.style.display === 'none' ? 'block' : 'none';
allRedirectsMenu.style.display = 'none';
});
// Save button click event
document.getElementById('saveButton').addEventListener('click', saveRule);
// Close button click event
document.getElementById('closeButton').addEventListener('click', () => {
menu.style.display = 'none';
allRedirectsMenu.style.display = 'none';
});
// View All Redirects button click event
document.getElementById('viewAllButton').addEventListener('click', viewAllRedirects);
}
// Only create UI if we're on Google's main page or search results page
if (window.location.hostname === 'www.google.com' &&
(window.location.pathname === '/' || window.location.pathname.startsWith('/search'))) {
createUI();
}
function saveRule() {
let trigger = document.getElementById('triggerInput').value.trim();
let redirect = document.getElementById('redirectInput').value.trim();
if (trigger && redirect) {
const rules = GM_getValue('redirectRules', {});
rules[trigger] = redirect;
GM_setValue('redirectRules', rules);
document.getElementById('triggerInput').value = '';
document.getElementById('redirectInput').value = '';
// Update the all redirects list
updateAllRulesList();
} else {
alert('Please enter both a trigger (keyword or URL) and a redirect URL.');
}
}
function updateAllRulesList() {
const allRulesList = document.getElementById('allRulesList');
const rules = GM_getValue('redirectRules', {});
allRulesList.innerHTML = '';
for (const [trigger, redirect] of Object.entries(rules)) {
const ruleElement = document.createElement('div');
ruleElement.style.marginBottom = '10px';
ruleElement.style.wordBreak = 'break-all';
const triggerSpan = document.createElement('span');
triggerSpan.textContent = trigger;
triggerSpan.style.fontWeight = 'bold';
const arrowSpan = document.createElement('span');
arrowSpan.textContent = ' → ';
const redirectSpan = document.createElement('span');
redirectSpan.textContent = redirect;
ruleElement.appendChild(triggerSpan);
ruleElement.appendChild(arrowSpan);
ruleElement.appendChild(redirectSpan);
const deleteButton = document.createElement('button');
deleteButton.textContent = 'Delete';
deleteButton.className = 'menu-button';
deleteButton.style.marginLeft = '10px';
deleteButton.addEventListener('click', () => {
delete rules[trigger];
GM_setValue('redirectRules', rules);
updateAllRulesList();
});
ruleElement.appendChild(document.createElement('br'));
ruleElement.appendChild(deleteButton);
allRulesList.appendChild(ruleElement);
}
}
function viewAllRedirects() {
updateAllRulesList();
const allRedirectsMenu = document.querySelector('div[style*="overflow-y: auto"]');
if (allRedirectsMenu) {
allRedirectsMenu.style.display = allRedirectsMenu.style.display === 'none' ? 'block' : 'none';
}
}
// Check for redirects
function checkAndRedirect() {
const rules = GM_getValue('redirectRules', {});
const currentURL = window.location.href;
for (const [trigger, redirect] of Object.entries(rules)) {
if (currentURL === trigger) {
window.location.href = redirect;
return;
}
// Check for Google search URLs
if (currentURL.startsWith('https://www.google.com/search?')) {
const urlParams = new URLSearchParams(window.location.search);
const searchQuery = urlParams.get('q');
if (searchQuery && searchQuery.toLowerCase() === trigger.toLowerCase()) {
window.location.href = redirect;
return;
}
}
}
}
// Run redirect check immediately and set up an interval to check periodically
checkAndRedirect();
setInterval(checkAndRedirect, 1000); // Check every second
})();