From 2ad4f517c968c7b3b1c940e060d956d9a53764aa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=96zen=C3=A7=20Bilgili?= Date: Tue, 19 May 2020 02:36:44 +0300 Subject: [PATCH] Add CommandInfluencer --- js/script.js | 55 ++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) diff --git a/js/script.js b/js/script.js index 21b244d..720a262 100644 --- a/js/script.js +++ b/js/script.js @@ -149,6 +149,7 @@ let CONFIG = { * - "History" suggestions come from your previously entered queries */ influencers: [ + { name: 'Commands', limit: 2}, { name: 'Default', limit: 4 }, { name: 'History', limit: 1 }, { name: 'DuckDuckGo', limit: 4 }, @@ -476,6 +477,58 @@ class DefaultInfluencer extends Influencer { } } +class CommandsInfluencer extends Influencer { + constructor({ commands, queryParser }) { + super(...arguments); + this._commands = commands; + } + + getSuggestions(rawQuery) { + const { query } = this._parseQuery(rawQuery); + if (!query) return Promise.resolve([]); + + return new Promise(resolve => { + const suggestions = []; + const commands = this._commands; + + commands.forEach(command => { + if(command.key.startsWith(rawQuery)){ + suggestions.push(command.url); + } + }); + + resolve(suggestions); + }); + } + + _getHostName(url) { + let match = url.match(/:\/\/(www[0-9]?\.)?(.[^/:]+)/i); + if (match != null && match.length > 2 && typeof match[2] === 'string' && match[2].length > 0) { + return match[2]; + } + else { + return null; + } +} + + _getDomain(url){ + let hostName = this._getHostName(url); + let domain = hostName; + + if (hostName != null) { + let parts = hostName.split('.').reverse(); + if (parts != null && parts.length > 1) { + domain = parts[1] + '.' + parts[0]; + if (hostName.toLowerCase().indexOf('.co.uk') != -1 && parts.length > 2) { + domain = parts[2] + '.' + domain; + } + } + } + + return domain; + } +} + class DuckDuckGoInfluencer extends Influencer { constructor({ queryParser }) { super(...arguments); @@ -977,12 +1030,14 @@ const queryParser = new QueryParser({ const influencers = CONFIG.influencers.map(influencerConfig => { return new { Default: DefaultInfluencer, + Commands: CommandsInfluencer, DuckDuckGo: DuckDuckGoInfluencer, History: HistoryInfluencer, }[influencerConfig.name]({ defaultSuggestions: CONFIG.defaultSuggestions, limit: influencerConfig.limit, parseQuery: queryParser.parse, + commands: CONFIG.commands }); });