From be23cad97f0f2af30991bc292ff3c65e0406157d Mon Sep 17 00:00:00 2001 From: Cade Scroggins Date: Wed, 20 Jan 2021 12:47:54 +0530 Subject: [PATCH] sorting is crucial --- index.html | 579 +++++++++++++++++++++++++++-------------------------- 1 file changed, 296 insertions(+), 283 deletions(-) diff --git a/index.html b/index.html index 2338f43..e57b962 100644 --- a/index.html +++ b/index.html @@ -23,6 +23,271 @@ // Show a twenty-four-hour clock instead of a twelve-hour clock. clockTwentyFourHour: true, + // The "category", "name", "key", "url", "search" path and "color"/"hues" + // for your commands. If none of the specified keys are matched, the * key + // is used. Commands without a category don't show up in the help menu. + + // You can specify either "hues" or "color" to change a command's background + // color. "hues" is an array of CSS HSL hues that will be converted into a + // linear gradient. There are CSS variables defined below, prefixed with + // "--command-color-", that determine the gradient angle, saturation, + // lightness and alpha for each generated color. "color", if defined, will + // be applied as-is to the command's "background" CSS property. + commands: [ + { + key: '*', + name: 'Google', + search: '/search?q={}', + url: 'https://www.google.com', + }, + { + category: 'Google', + hues: ['217', '197'], + key: 'm', + name: 'Mail', + search: '/mail/u/0/?q={}#search/{}', + url: 'https://mail.google.com/mail/u/0', + }, + { + category: 'Google', + hues: ['136', '156'], + key: 'd', + name: 'Drive', + search: '/drive/u/0/search?q={}', + url: 'https://drive.google.com/drive/u/0/my-drive', + }, + { + category: 'Google', + hues: ['45', '40'], + key: 'k', + name: 'Keep', + search: '/u/0/#search/text={}', + url: 'https://keep.google.com/u/0', + }, + { + category: 'Google', + hues: ['5', '355'], + key: 'c', + name: 'Cal', + search: '/calendar/u/0/r/search?q={}', + url: 'https://calendar.google.com/calendar/u/0/r', + }, + { + category: 'Work', + hues: ['190', '210'], + key: 's', + name: 'Slack', + url: 'https://app.slack.com/client/T09M5UWSV', + }, + { + category: 'Work', + hues: ['4', '24'], + key: 'n', + name: 'Notion', + url: 'https://www.notion.so', + }, + { + category: 'Work', + hues: ['357', '337'], + key: 'a', + name: 'Asana', + url: 'https://app.asana.com/0/inbox/490539250066176', + }, + { + category: 'Work', + hues: ['167', '187'], + key: '.', + name: 'AND', + url: 'https://app.and.co/timers', + }, + { + category: 'Create', + hues: ['36', '26'], + key: 'A', + name: 'AWS', + url: 'https://console.aws.amazon.com', + }, + { + category: 'Create', + hues: ['214', '234'], + key: 'g', + name: 'GitHub', + search: '/search?q={}', + url: 'https://github.com', + }, + { + category: 'Create', + hues: ['266', '286'], + key: 'f', + name: 'Figma', + url: 'https://www.figma.com/files/recent', + }, + { + category: 'Create', + key: '0', + name: 'Local', + search: ':{}', + url: 'https://http://localhost:3000', + }, + { + category: 'Learn', + hues: ['166', '146'], + key: '+', + name: 'Khan', + search: '/search?page_search_query={}', + url: 'https://www.khanacademy.org', + }, + { + category: 'Learn', + hues: ['5', '345'], + key: '=', + name: 'Wolfram', + search: '/input/?i={}', + url: 'https://www.wolframalpha.com', + }, + { + category: 'Learn', + hues: ['217', '237'], + key: 'w', + name: 'Wikipedia', + search: '/wiki/{}', + url: 'https://en.wikipedia.org/wiki/Main_Page', + }, + { + category: 'Learn', + hues: ['198', '218'], + key: ';', + name: 'MDN', + search: '/en-US/search?q={}', + url: 'https://developer.mozilla.org/en-US', + }, + { + category: 'Lurk', + hues: ['254', '234'], + key: 'r', + name: 'Reddit', + search: '/search?q={}', + url: 'https://www.reddit.com', + }, + { + category: 'Lurk', + hues: ['230', '280'], + key: 'i', + name: 'Instagram', + url: 'https://www.instagram.com', + }, + { + category: 'Lurk', + hues: ['201', '221'], + key: 'l', + name: 'LinkedIn', + search: '/search/results/all/?keywords={}', + url: 'https://www.linkedin.com', + }, + { + category: 'Lurk', + hues: ['203', '183'], + key: 't', + name: 'Twitter', + search: '/search?q={}', + url: 'https://twitter.com/home', + }, + { + category: 'Inspire', + hues: ['349', '329'], + key: '1', + name: 'OPL', + search: '/?s={}', + url: 'https://onepagelove.com/inspiration', + }, + { + category: 'Inspire', + hues: ['337', '317'], + key: 'b', + name: 'Dribbble', + search: '/search/{}', + url: 'https://dribbble.com/shots/popular', + }, + { + category: 'Inspire', + key: 'u', + name: 'Unsplash', + search: '/search/{}', + url: 'https://unsplash.com/images', + }, + { + category: 'Inspire', + hues: ['13', '33'], + key: 'p', + name: 'Hunt', + search: '/search?q={}', + url: 'https://www.producthunt.com', + }, + { + category: 'Listen', + hues: ['141'], + key: 'S', + name: 'Spotify', + search: '/search/{}', + url: 'https://open.spotify.com', + }, + { + category: 'Listen', + hues: ['32', '22'], + key: 'o', + name: 'SoundCloud', + search: '/search?q={}', + url: 'https://soundcloud.com/discover', + }, + { + category: 'Listen', + hues: ['202', '222'], + key: 'P', + name: 'Pandora', + search: '/search/{}/all', + url: 'https://www.pandora.com', + }, + { + category: 'Listen', + hues: ['90'], + key: 'h', + name: 'Hypem', + search: '/search/{}', + url: 'https://hypem.com/latest', + }, + { + category: 'Watch', + hues: ['213', '193'], + key: 'v', + name: 'Vimeo', + search: '/search?q={}', + url: 'https://vimeo.com/watch', + }, + { + category: 'Watch', + hues: ['5', '355'], + key: 'y', + name: 'YouTube', + search: '/results?search_query={}', + url: 'https://youtube.com', + }, + { + category: 'Watch', + hues: ['357', '357'], + key: 'x', + name: 'Netflix', + search: '/search?q={}', + url: 'https://www.netflix.com/browse', + }, + { + category: 'Watch', + hues: ['264', '244'], + key: 'T', + name: 'Twitch', + url: 'https://www.twitch.tv/directory/following', + }, + ], + // Instantly redirect when a key is matched. Put a space before any other // queries to prevent unwanted redirects. queryInstantRedirect: false, @@ -57,12 +322,12 @@ // An "influencer" is just a suggestion source. "limit" is the max number of // suggestions an influencer will produce. "minChars" determines how many // characters need to be typed before the influencer kicks in. - // + // The following influencers are available: // - "Default" suggestions come from CONFIG.suggestionDefaults (sync) // - "History" suggestions come from your previously entered queries (sync) // - "DuckDuckGo" suggestions come from the duck duck go search api (async) - // + // To disable suggestions, remove all influencers. suggestionInfluencers: [ { name: 'Default', limit: 4, minChars: 1 }, @@ -71,283 +336,6 @@ // Max number of suggestions that will ever be shown. suggestionLimit: 4, - - // The category, name, key, url, search path and color for your commands. - // If none of the specified keys are matched, the '*' key is used. - // Commands without a category don't show up in the help menu. - commands: [ - { - name: 'Google', - key: '*', - url: 'www.google.com', - search: '/search?q={}', - }, - { - category: 'Google', - name: 'Mail', - key: 'm', - url: 'mail.google.com/mail/u/0', - search: '/mail/u/0/?q={}#search/{}', - hues: ['217', '197'], - }, - { - category: 'Google', - name: 'Drive', - key: 'd', - url: 'drive.google.com/drive/u/0/my-drive', - search: '/drive/u/0/search?q={}', - hues: ['136', '156'], - }, - { - category: 'Google', - name: 'Keep', - key: 'k', - url: 'keep.google.com/u/0', - search: '/u/0/#search/text={}', - hues: ['45', '40'], - }, - { - category: 'Google', - name: 'Cal', - key: 'c', - url: 'calendar.google.com/calendar/u/0/r', - search: '/calendar/u/0/r/search?q={}', - hues: ['5', '355'], - }, - { - category: 'Work', - name: 'Slack', - key: 's', - url: 'app.slack.com/client/T09M5UWSV', - hues: ['190', '210'], - }, - { - category: 'Work', - name: 'Notion', - key: 'n', - url: 'www.notion.so', - hues: ['4', '24'], - }, - { - category: 'Work', - name: 'Asana', - key: 'a', - url: 'app.asana.com/0/inbox/490539250066176', - hues: ['357', '337'], - }, - { - category: 'Work', - name: 'AND', - key: '.', - url: 'app.and.co/timers', - hues: ['167', '187'], - }, - { - category: 'Create', - name: 'AWS', - key: 'A', - url: 'console.aws.amazon.com', - hues: ['36', '26'], - }, - { - category: 'Create', - name: 'GitHub', - key: 'g', - url: 'github.com', - search: '/search?q={}', - hues: ['214', '234'], - }, - { - category: 'Create', - name: 'Figma', - key: 'f', - url: 'www.figma.com/files/recent', - hues: ['266', '286'], - }, - { - category: 'Create', - name: 'Local', - key: '0', - url: 'http://localhost:3000', - search: ':{}', - }, - { - category: 'Learn', - name: 'Khan', - key: '+', - url: 'www.khanacademy.org', - search: '/search?page_search_query={}', - hues: ['166', '146'], - }, - { - category: 'Learn', - name: 'Wolfram', - key: '=', - url: 'www.wolframalpha.com', - search: '/input/?i={}', - hues: ['5', '345'], - }, - { - category: 'Learn', - name: 'Wikipedia', - key: 'w', - url: 'en.wikipedia.org/wiki/Main_Page', - search: '/wiki/{}', - hues: ['217', '237'], - }, - { - category: 'Learn', - name: 'MDN', - key: ';', - url: 'developer.mozilla.org/en-US', - search: '/en-US/search?q={}', - hues: ['198', '218'], - }, - { - category: 'Lurk', - name: 'Reddit', - key: 'r', - url: 'www.reddit.com', - search: '/search?q={}', - hues: ['254', '234'], - }, - { - category: 'Lurk', - name: 'Instagram', - key: 'i', - url: 'www.instagram.com', - hues: ['230', '280'], - }, - { - category: 'Lurk', - name: 'LinkedIn', - key: 'l', - url: 'www.linkedin.com', - search: '/search/results/all/?keywords={}', - hues: ['201', '221'], - }, - { - category: 'Lurk', - name: 'Twitter', - key: 't', - url: 'twitter.com/home', - search: '/search?q={}', - hues: ['203', '183'], - }, - { - category: 'Inspire', - name: 'OPL', - key: '1', - url: 'onepagelove.com/inspiration', - search: '/?s={}', - hues: ['349', '329'], - }, - { - category: 'Inspire', - name: 'Dribbble', - key: 'b', - url: 'dribbble.com/shots/popular', - search: '/search/{}', - hues: ['337', '317'], - }, - { - category: 'Inspire', - name: 'Unsplash', - key: 'u', - url: 'unsplash.com/images', - search: '/search/{}', - }, - { - category: 'Inspire', - name: 'Hunt', - key: 'p', - url: 'www.producthunt.com', - search: '/search?q={}', - hues: ['13', '33'], - }, - { - category: 'Listen', - name: 'Spotify', - key: 'S', - url: 'open.spotify.com', - search: '/search/{}', - hues: ['141'], - }, - { - category: 'Listen', - name: 'SoundCloud', - key: 'o', - url: 'soundcloud.com/discover', - search: '/search?q={}', - hues: ['32', '22'], - }, - { - category: 'Listen', - name: 'Pandora', - key: 'P', - url: 'www.pandora.com', - search: '/search/{}/all', - hues: ['202', '222'], - }, - { - category: 'Listen', - name: 'Hypem', - key: 'h', - url: 'hypem.com/latest', - search: '/search/{}', - hues: ['90'], - }, - { - category: 'Watch', - name: 'Vimeo', - key: 'v', - url: 'vimeo.com/watch', - search: '/search?q={}', - hues: ['213', '193'], - }, - { - category: 'Watch', - name: 'YouTube', - key: 'y', - url: 'youtube.com', - search: '/results?search_query={}', - hues: ['5', '355'], - }, - { - category: 'Watch', - name: 'Netflix', - key: 'x', - url: 'www.netflix.com/browse', - search: '/search?q={}', - hues: ['357', '357'], - }, - { - category: 'Watch', - name: 'Twitch', - key: 'T', - url: 'www.twitch.tv/directory/following', - hues: ['264', '244'], - }, - ].map((command) => { - const hsla = (hue, saturation = 'var(--command-color-saturation)') => - `hsla(${hue}, ${saturation}, var(--command-color-lightness), var(--command-color-alpha))`; - - command.url = `https://${command.url}`; - command.color = command.category ? hsla(0, '0%') : null; - - if (!Array.isArray(command.hues) || command.hues.length === 0) { - return command; - } - - if (command.hues.length === 1) { - command.color = hsla(command.hues[0]); - } else { - const c = command.hues.reduce((a, h) => `${a}, ${hsla(h)}`, ''); - command.color = `linear-gradient(var(--command-color-gradient) ${c})`; - } - - return command; - }), }; @@ -1337,8 +1325,11 @@ } _redirect(redirect) { - if (this._newTab) window.open(redirect, '_blank'); - else window.location.href = redirect; + if (this._newTab) { + window.open(redirect, '_blank', 'noopener noreferrer'); + } else { + window.location.href = redirect; + } } _registerEvents() { @@ -1372,8 +1363,30 @@ } } + class CommandParser { + static commandHuesToColor(command) { + const hsla = (hue, saturation = 'var(--command-color-saturation)') => + `hsla(${hue}, ${saturation}, var(--command-color-lightness), var(--command-color-alpha))`; + + if (command.color) return command; + command.color = command.category ? hsla(0, '0%') : null; + if (!command.hues) return command; + + if (command.hues.length === 1) { + command.color = hsla(command.hues[0]); + return command; + } + + const c = command.hues.reduce((a, h) => `${a}, ${hsla(h)}`, ''); + command.color = `linear-gradient(var(--command-color-gradient) ${c})`; + return command; + } + } + + const commands = CONFIG.commands.map(CommandParser.commandHuesToColor); + const queryParser = new QueryParser({ - commands: CONFIG.commands, + commands, pathDelimiter: CONFIG.queryPathDelimiter, searchDelimiter: CONFIG.querySearchDelimiter, }); @@ -1397,7 +1410,7 @@ }); const help = new Help({ - commands: CONFIG.commands, + commands, newTab: CONFIG.queryNewTab, });