From 9b85c7e727bcb2c106868384e43d9736177cf84d Mon Sep 17 00:00:00 2001 From: OmegaGiven <9ncjohnson@gmail.com> Date: Thu, 9 Apr 2026 00:03:52 -0400 Subject: [PATCH 1/2] added a option that you can select if you are accessing custom domains say if you are in a homelab env or setup locoal env tools that need that so it doesnt default to duck duck go --- js/default.js | 1 + js/searchbar/domainGuessPlugin.js | 30 ++++++++++++++++++++++++++++++ js/util/urlParser.js | 17 +++++++++++++++++ localization/languages/en-US.json | 1 + 4 files changed, 49 insertions(+) create mode 100644 js/searchbar/domainGuessPlugin.js diff --git a/js/default.js b/js/default.js index acacba620..af10bae8f 100644 --- a/js/default.js +++ b/js/default.js @@ -171,6 +171,7 @@ require('macHandoff.js').initialize() // default searchbar plugins require('searchbar/placesPlugin.js').initialize() +require('searchbar/domainGuessPlugin.js').initialize() require('searchbar/instantAnswerPlugin.js').initialize() require('searchbar/bangsPlugin.js').initialize() require('searchbar/customBangs.js').initialize() diff --git a/js/searchbar/domainGuessPlugin.js b/js/searchbar/domainGuessPlugin.js new file mode 100644 index 000000000..d305828ce --- /dev/null +++ b/js/searchbar/domainGuessPlugin.js @@ -0,0 +1,30 @@ +var searchbarPlugins = require('searchbar/searchbarPlugins.js') + +var urlParser = require('util/urlParser.js') + +function showDomainGuess (text) { + searchbarPlugins.reset('domainGuess') + + if (!text || text.indexOf(' ') !== -1 || text.indexOf('!') === 0 || urlParser.isPossibleURL(text)) { + return + } + + searchbarPlugins.addResult('domainGuess', { + icon: 'carbon:earth-filled', + title: text, + secondaryText: l('visitSite'), + url: urlParser.parseAsURL(text) + }, { allowDuplicates: true }) +} + +function initialize () { + searchbarPlugins.register('domainGuess', { + index: 3, + trigger: function (text) { + return !!text && !tabs.get(tabs.getSelected()).private + }, + showResults: showDomainGuess + }) +} + +module.exports = { initialize } diff --git a/js/util/urlParser.js b/js/util/urlParser.js index 109264a8e..e37371ce2 100644 --- a/js/util/urlParser.js +++ b/js/util/urlParser.js @@ -92,6 +92,23 @@ var urlParser = { // else, do a search return searchEngine.getCurrent().searchURL.replace('%s', encodeURIComponent(url)) }, + parseAsURL: function (url) { + url = url.trim() + + if (!url) { + return 'about:blank' + } + + if (urlParser.isURL(url) || url.startsWith('view-source:') || url.startsWith('min:')) { + return urlParser.parse(url) + } + + if (urlParser.isHTTPSUpgreadable(url)) { + return 'https://' + url + } + + return 'http://' + url + }, basicURL: function (url) { return removeWWW(urlParser.removeProtocol(removeTrailingSlash(url))) }, diff --git a/localization/languages/en-US.json b/localization/languages/en-US.json index 6fc6a6c53..286f5b8da 100644 --- a/localization/languages/en-US.json +++ b/localization/languages/en-US.json @@ -35,6 +35,7 @@ "pasteAndGo": "Paste and Go", //context menu item "DDGAnswerSubtitle": "Answer", //this is a noun - it is used as a subtitle when displaying Instant Answers from DuckDuckGo in the searchbar "suggestedSite": "Suggested site", //this is used to label suggested websites from the DuckDuckGo API, + "visitSite": "Visit site", "resultsFromDDG": "Results from DuckDuckGo", //this is used as a label to indicate which results come from DuckDuckGo's API "taskN": "Task %n", //this is used as a way to identify which tab a task is in "task 1", "task 2", ... /* custom commands From 270759ca376f9fa5f6a0fe0344e05461f63436d1 Mon Sep 17 00:00:00 2001 From: OmegaGiven <9ncjohnson@gmail.com> Date: Thu, 9 Apr 2026 00:29:52 -0400 Subject: [PATCH 2/2] removed redundancy: emoved the extra generic helper from --- js/searchbar/domainGuessPlugin.js | 12 ++++++++++-- js/util/urlParser.js | 17 ----------------- 2 files changed, 10 insertions(+), 19 deletions(-) diff --git a/js/searchbar/domainGuessPlugin.js b/js/searchbar/domainGuessPlugin.js index d305828ce..840507fae 100644 --- a/js/searchbar/domainGuessPlugin.js +++ b/js/searchbar/domainGuessPlugin.js @@ -9,11 +9,19 @@ function showDomainGuess (text) { return } + var url + + if (urlParser.isHTTPSUpgreadable(text)) { + url = 'https://' + text + } else { + url = 'http://' + text + } + searchbarPlugins.addResult('domainGuess', { icon: 'carbon:earth-filled', title: text, secondaryText: l('visitSite'), - url: urlParser.parseAsURL(text) + url: url }, { allowDuplicates: true }) } @@ -21,7 +29,7 @@ function initialize () { searchbarPlugins.register('domainGuess', { index: 3, trigger: function (text) { - return !!text && !tabs.get(tabs.getSelected()).private + return !!text }, showResults: showDomainGuess }) diff --git a/js/util/urlParser.js b/js/util/urlParser.js index e37371ce2..109264a8e 100644 --- a/js/util/urlParser.js +++ b/js/util/urlParser.js @@ -92,23 +92,6 @@ var urlParser = { // else, do a search return searchEngine.getCurrent().searchURL.replace('%s', encodeURIComponent(url)) }, - parseAsURL: function (url) { - url = url.trim() - - if (!url) { - return 'about:blank' - } - - if (urlParser.isURL(url) || url.startsWith('view-source:') || url.startsWith('min:')) { - return urlParser.parse(url) - } - - if (urlParser.isHTTPSUpgreadable(url)) { - return 'https://' + url - } - - return 'http://' + url - }, basicURL: function (url) { return removeWWW(urlParser.removeProtocol(removeTrailingSlash(url))) },