// ==UserScript==
// @name DuckDuckGo Search Buttons v8
// @namespace http://tampermonkey.net/
// @version 8
// @description Adds Google, Google Shopping, YouTube, Amazon, eBay, Bing, Reddit, and GitHub search buttons to DuckDuckGo search results with a visually appealing design for small and large displays, following the DuckDuckGo color scheme
// @match https://duckduckgo.com/*
// @grant none
// ==/UserScript==
(function() {
'use strict';
const colorScheme = {
lightBG: 'var(--ddg-light-bg)',
lightHoverBG: 'var(--ddg-light-hover-bg)',
text: 'var(--ddg-text)',
lightHoverText: 'var(--ddg-light-hover-text)',
google: '#4285f4',
googleShopping: '#f4b400',
youtube: '#ff0000',
amazon: '#ff9900',
ebay: '#0064d2',
bing: '#2d89ef',
reddit: '#ff4500',
github: '#24292e'
};
// Create container for buttons
const buttonsContainer = document.createElement('div');
buttonsContainer.classList.add('ddg-buttons-container');
const searchForm = document.querySelector('#search_form');
searchForm.insertAdjacentElement('beforebegin', buttonsContainer);
// Create buttons
const buttons = [
{ text: 'Google', dataLink: 'google', className: 'ddg-google-button' },
{ text: 'Google Shopping', dataLink: 'googles', className: 'ddg-google-shopping-button' },
{ text: 'YouTube', dataLink: 'youtube', className: 'ddg-youtube-button' },
{ text: 'Amazon', dataLink: 'amazon', className: 'ddg-amazon-button' },
{ text: 'eBay', dataLink: 'ebay', className: 'ddg-ebay-button' },
{ text: 'Bing', dataLink: 'bing', className: 'ddg-bing-button' },
{ text: 'Reddit', dataLink: 'reddit', className: 'ddg-reddit-button' },
{ text: 'GitHub', dataLink: 'github', className: 'ddg-github-button' }
];
buttons.forEach(button => {
const buttonElement = createButtonElement(button.text, button.dataLink, button.className);
buttonsContainer.appendChild(buttonElement);
buttonElement.addEventListener('click', () => {
const searchQuery = getSearchQuery();
const url = getSearchUrl(button.dataLink, searchQuery);
openUrlInNewTab(url);
});
});
// Helper function to create button elements
function createButtonElement(text, dataLink, className) {
const button = document.createElement('a');
button.classList.add(className);
button.setAttribute('data-zci-link', dataLink);
button.textContent = text;
button.href = '#';
return button;
}
// Helper function to get search query from DuckDuckGo search bar
function getSearchQuery() {
const searchInput = document.querySelector('#search_form_input');
return searchInput.value;
}
// Helper function to get search URL for a button
function getSearchUrl(dataLink, searchQuery) {
switch (dataLink) {
case 'google':
return `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}`;
case 'googles':
return `https://www.google.com/search?q=${encodeURIComponent(searchQuery)}&tbm=shop`;
case 'youtube':
return `https://www.youtube.com/results?search_query=${encodeURIComponent(searchQuery)}`;
case 'amazon':
return `https://www.amazon.com/s?k=${encodeURIComponent(searchQuery)}`;
case 'ebay':
return `https://www.ebay.com/sch/i.html?_nkw=${encodeURIComponent(searchQuery)}`;
case 'bing':
return `https://www.bing.com/search?q=${encodeURIComponent(searchQuery)}`;
case 'reddit':
return `https://www.reddit.com/search?q=${encodeURIComponent(searchQuery)}`;
case 'github':
return `https://github.com/search?q=${encodeURIComponent(searchQuery)}`;
default:
return '';
}
}
// Helper function to open URL in new tab
function openUrlInNewTab(url) {
const newTab = window.open(url, '_blank');
newTab.focus();
}
// Add styles to buttons container
const styles = `
.ddg-buttons-container {
display: flex;
justify-content: center;
align-items: center;
margin: 10px 0;
padding: 5px;
background-color: ${colorScheme.lightBG};
border-radius: 5px;
width: 100%;
overflow-x: auto;
}
.ddg-buttons-container a {
display: flex;
align-items: center;
justify-content: center;
text-decoration: none;
color: ${colorScheme.text};
font-size: 14px;
font-weight: bold;
border-radius: 5px;
padding: 10px;
margin-right: 5px;
transition: background-color 0.2s ease;
height: auto;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
.ddg-buttons-container a:last-child {
margin-right: 0;
}
.ddg-buttons-container a:hover {
background-color: ${colorScheme.lightHoverBG};
color: ${colorScheme.lightHoverText};
}
.ddg-google-button {
background-color: ${colorScheme.google};
}
.ddg-google-shopping-button {
background-color: ${colorScheme.googleShopping};
}
.ddg-youtube-button {
background-color: ${colorScheme.youtube};
}
.ddg-amazon-button {
background-color: ${colorScheme.amazon};
}
.ddg-ebay-button {
background-color: ${colorScheme.ebay};
}
.ddg-bing-button {
background-color: ${colorScheme.bing};
}
.ddg-reddit-button {
background-color: ${colorScheme.reddit};
}
.ddg-github-button {
background-color: #4B0082;
}
@media (max-width: 767px) {
.ddg-buttons-container {
flex-wrap: wrap;
justify-content: center;
}
.ddg-buttons-container a {
margin: 5px;
font-size: 12px;
padding: 6px;
}
}
/* Dark mode styles */
:root[data-theme="dark"] {
--ddg-light-bg: #282828;
--ddg-light-hover-bg: #3a3a3a;
--ddg-text: #fff;
--ddg-light-hover-text: #fff;
}
:root[data-theme="dark"] .ddg-google-button {
background-color: #1a73e8;
}
:root[data-theme="dark"] .ddg-google-shopping-button {
background-color: #f4b400;
}
:root[data-theme="dark"] .ddg-youtube-button {
background-color: #ff0000;
}
:root[data-theme="dark"] .ddg-amazon-button {
background-color: #ff9900;
}
:root[data-theme="dark"] .ddg-ebay-button {
background-color: #0064d2;
}
:root[data-theme="dark"] .ddg-bing-button {
background-color: #2d89ef;
}
:root[data-theme="dark"] .ddg-reddit-button {
background-color: #ff4500;
}
:root[data-theme="dark"] .ddg-github-button {
background-color: #4B0082;
}
`;
const styleElement = document.createElement('style');
styleElement.textContent = styles;
document.head.appendChild(styleElement);
})();