This commit is contained in:
Alyssa X
2022-01-11 22:18:04 +01:00
parent 98afae5d2a
commit 4e2ccfaee0
9 changed files with 1615 additions and 737 deletions

1
.prettierrc.json Normal file
View File

@@ -0,0 +1 @@
{}

View File

@@ -1,4 +1,5 @@
# Omni
![Preview](preview.gif)
<br>
<br>
@@ -11,30 +12,34 @@ With Omni you can use Chrome like a pro. Manage tabs, bookmarks, your browser hi
Made by [Alyssa X](https://alyssax.com)
## Table of contents
- [Features](#features)
- [Controlling the interface](#controlling-the-interface)
- [Opening Omni](#opening-omni)
- [Closing Omni](#closing-omni)
- [Switching between dark and light mode](#switching-between-dark-and-light-mode)
- [Opening Omni](#opening-omni)
- [Closing Omni](#closing-omni)
- [Switching between dark and light mode](#switching-between-dark-and-light-mode)
- [List of commands](#list-of-commands)
- [Libraries used](#libraries-used)
## Features
🗄 Switch, open, close, and search your tabs<br> 📚 Browse and manage your bookmarks<br> 🔍 Search your browsing history<br> ⚡️ 50+ actions to improve your productivity<br> 🔮 Special commands to filter and perform more actions<br> 🧩 Integrations with Notion, Figma, Docs, Asana...<br> ⌨️ Shortcuts for actions such as muting, pinning, bookmarking...<br> ⚙️ Advanced settings to help troubleshoot browsing issues<br> 🌙 Dark mode<br> ...and much more - all for free & no sign in needed!
## Controlling the interface
### Opening Omni
To open Omni, simply press `⌘+K` on Mac or `Ctrl+K` on Windows. You can change the shortcut by going to chrome://extensions/shortcuts.
To open Omni, simply press `⌘+K` on Mac or `Ctrl+K` on Windows. You can change the shortcut by going to chrome://extensions/shortcuts.
Alternatively you can click on the extension icon in the toolbar to toggle it.
### Closing Omni
To close Omni you can press `Esc`, click on the background, or press the extension icon.
### Switching between dark and light mode
The dark and light theme in Omni is tied to your system's theme.
The dark and light theme in Omni is tied to your system's theme.
On Mac you can change the theme by clicking on the Apple menu (on the top left), opening the System preferences, going into the General section, and then choosing between dark, light, or auto.
@@ -43,6 +48,7 @@ On Windows it depends on the OS version. [Here is a guide for Windows 11 and 10.
After switching the theme you might need to restart Chrome.
## List of commands
You can use a variety of commands with Omni to perform actions or filter your results.
- **/tabs**: Search your tabs
@@ -53,6 +59,8 @@ You can use a variety of commands with Omni to perform actions or filter your re
## Libraries used
- [jQuery](https://jquery.com/) - for better event handling and DOM manipulation
- [jQuery](https://jquery.com/) - for better event handling and DOM manipulation
#
Feel free to reach out to me through email at hi@alyssax.com or [on Twitter](https://twitter.com/alyssaxuu) if you have any questions or feedback! Hope you find this useful 💜
Feel free to reach out to me through email at hi@alyssax.com or [on Twitter](https://twitter.com/alyssaxuu) if you have any questions or feedback! Hope you find this useful 💜

View File

@@ -1,4 +1,119 @@
/* jQuery Nice Select - v1.0
https://github.com/hernansartorio/jquery-nice-select
Made by Hernán Sartorio */
!function(e){e.fn.niceSelect=function(t){function s(t){t.after(e("<div></div>").addClass("nice-select").addClass(t.attr("class")||"").addClass(t.attr("disabled")?"disabled":"").attr("tabindex",t.attr("disabled")?null:"0").html('<span class="current"></span><ul class="list"></ul>'));var s=t.next(),n=t.find("option"),i=t.find("option:selected");s.find(".current").html(i.data("display")||i.text()),n.each(function(t){var n=e(this),i=n.data("display");s.find("ul").append(e("<li></li>").attr("data-value",n.val()).attr("data-display",i||null).addClass("option"+(n.is(":selected")?" selected":"")+(n.is(":disabled")?" disabled":"")).html(n.text()))})}if("string"==typeof t)return"update"==t?this.each(function(){var t=e(this),n=e(this).next(".nice-select"),i=n.hasClass("open");n.length&&(n.remove(),s(t),i&&t.next().trigger("click"))}):"destroy"==t?(this.each(function(){var t=e(this),s=e(this).next(".nice-select");s.length&&(s.remove(),t.css("display",""))}),0==e(".nice-select").length&&e(document).off(".nice_select")):console.log('Method "'+t+'" does not exist.'),this;this.hide(),this.each(function(){var t=e(this);t.next().hasClass("nice-select")||s(t)}),e(document).off(".nice_select"),e(document).on("click.nice_select",".nice-select",function(t){var s=e(this);e(".nice-select").not(s).removeClass("open"),s.toggleClass("open"),s.hasClass("open")?(s.find(".option"),s.find(".focus").removeClass("focus"),s.find(".selected").addClass("focus")):s.focus()}),e(document).on("click.nice_select",function(t){0===e(t.target).closest(".nice-select").length&&e(".nice-select").removeClass("open").find(".option")}),e(document).on("click.nice_select",".nice-select .option:not(.disabled)",function(t){var s=e(this),n=s.closest(".nice-select");n.find(".selected").removeClass("selected"),s.addClass("selected");var i=s.data("display")||s.text();n.find(".current").text(i),n.prev("select").val(s.data("value")).trigger("change")}),e(document).on("keydown.nice_select",".nice-select",function(t){var s=e(this),n=e(s.find(".focus")||s.find(".list .option.selected"));if(32==t.keyCode||13==t.keyCode)return s.hasClass("open")?n.trigger("click"):s.trigger("click"),!1;if(40==t.keyCode){if(s.hasClass("open")){var i=n.nextAll(".option:not(.disabled)").first();i.length>0&&(s.find(".focus").removeClass("focus"),i.addClass("focus"))}else s.trigger("click");return!1}if(38==t.keyCode){if(s.hasClass("open")){var l=n.prevAll(".option:not(.disabled)").first();l.length>0&&(s.find(".focus").removeClass("focus"),l.addClass("focus"))}else s.trigger("click");return!1}if(27==t.keyCode)s.hasClass("open")&&s.trigger("click");else if(9==t.keyCode&&s.hasClass("open"))return!1});var n=document.createElement("a").style;return n.cssText="pointer-events:auto","auto"!==n.pointerEvents&&e("html").addClass("no-csspointerevents"),this}}(jQuery);
!(function (e) {
e.fn.niceSelect = function (t) {
function s(t) {
t.after(
e("<div></div>")
.addClass("nice-select")
.addClass(t.attr("class") || "")
.addClass(t.attr("disabled") ? "disabled" : "")
.attr("tabindex", t.attr("disabled") ? null : "0")
.html('<span class="current"></span><ul class="list"></ul>')
);
var s = t.next(),
n = t.find("option"),
i = t.find("option:selected");
s.find(".current").html(i.data("display") || i.text()),
n.each(function (t) {
var n = e(this),
i = n.data("display");
s.find("ul").append(
e("<li></li>")
.attr("data-value", n.val())
.attr("data-display", i || null)
.addClass(
"option" +
(n.is(":selected") ? " selected" : "") +
(n.is(":disabled") ? " disabled" : "")
)
.html(n.text())
);
});
}
if ("string" == typeof t)
return (
"update" == t
? this.each(function () {
var t = e(this),
n = e(this).next(".nice-select"),
i = n.hasClass("open");
n.length && (n.remove(), s(t), i && t.next().trigger("click"));
})
: "destroy" == t
? (this.each(function () {
var t = e(this),
s = e(this).next(".nice-select");
s.length && (s.remove(), t.css("display", ""));
}),
0 == e(".nice-select").length && e(document).off(".nice_select"))
: console.log('Method "' + t + '" does not exist.'),
this
);
this.hide(),
this.each(function () {
var t = e(this);
t.next().hasClass("nice-select") || s(t);
}),
e(document).off(".nice_select"),
e(document).on("click.nice_select", ".nice-select", function (t) {
var s = e(this);
e(".nice-select").not(s).removeClass("open"),
s.toggleClass("open"),
s.hasClass("open")
? (s.find(".option"),
s.find(".focus").removeClass("focus"),
s.find(".selected").addClass("focus"))
: s.focus();
}),
e(document).on("click.nice_select", function (t) {
0 === e(t.target).closest(".nice-select").length &&
e(".nice-select").removeClass("open").find(".option");
}),
e(document).on(
"click.nice_select",
".nice-select .option:not(.disabled)",
function (t) {
var s = e(this),
n = s.closest(".nice-select");
n.find(".selected").removeClass("selected"), s.addClass("selected");
var i = s.data("display") || s.text();
n.find(".current").text(i),
n.prev("select").val(s.data("value")).trigger("change");
}
),
e(document).on("keydown.nice_select", ".nice-select", function (t) {
var s = e(this),
n = e(s.find(".focus") || s.find(".list .option.selected"));
if (32 == t.keyCode || 13 == t.keyCode)
return (
s.hasClass("open") ? n.trigger("click") : s.trigger("click"), !1
);
if (40 == t.keyCode) {
if (s.hasClass("open")) {
var i = n.nextAll(".option:not(.disabled)").first();
i.length > 0 &&
(s.find(".focus").removeClass("focus"), i.addClass("focus"));
} else s.trigger("click");
return !1;
}
if (38 == t.keyCode) {
if (s.hasClass("open")) {
var l = n.prevAll(".option:not(.disabled)").first();
l.length > 0 &&
(s.find(".focus").removeClass("focus"), l.addClass("focus"));
} else s.trigger("click");
return !1;
}
if (27 == t.keyCode) s.hasClass("open") && s.trigger("click");
else if (9 == t.keyCode && s.hasClass("open")) return !1;
});
var n = document.createElement("a").style;
return (
(n.cssText = "pointer-events:auto"),
"auto" !== n.pointerEvents && e("html").addClass("no-csspointerevents"),
this
);
};
})(jQuery);

View File

@@ -21,118 +21,146 @@
-webkit-transition: all 0.2s ease-in-out;
transition: all 0.2s ease-in-out;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
white-space: nowrap;
width: auto; }
.nice-select:hover {
border-color: #dbdbdb; }
.nice-select:active, .nice-select.open, .nice-select:focus {
border-color: #999; }
.nice-select:after {
border-bottom: 2px solid #999;
border-right: 2px solid #999;
content: '';
display: block;
height: 5px;
margin-top: -4px;
pointer-events: none;
position: absolute;
right: 12px;
top: 50%;
-webkit-transform-origin: 66% 66%;
-ms-transform-origin: 66% 66%;
transform-origin: 66% 66%;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out;
width: 5px; }
.nice-select.open:after {
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg); }
.nice-select.open .list {
opacity: 1;
pointer-events: auto;
-webkit-transform: scale(1) translateY(0);
-ms-transform: scale(1) translateY(0);
transform: scale(1) translateY(0); }
.nice-select.disabled {
border-color: #ededed;
color: #999;
pointer-events: none; }
.nice-select.disabled:after {
border-color: #cccccc; }
.nice-select.wide {
width: 100%; }
.nice-select.wide .list {
left: 0 !important;
right: 0 !important; }
.nice-select.right {
float: right; }
.nice-select.right .list {
left: auto;
right: 0; }
.nice-select.small {
font-size: 12px;
height: 36px;
line-height: 34px; }
.nice-select.small:after {
height: 4px;
width: 4px; }
.nice-select.small .option {
line-height: 34px;
min-height: 34px; }
.nice-select .list {
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11);
box-sizing: border-box;
margin-top: 4px;
opacity: 0;
overflow: hidden;
padding: 0;
pointer-events: none;
position: absolute;
top: 100%;
left: 0;
-webkit-transform-origin: 50% 0;
-ms-transform-origin: 50% 0;
transform-origin: 50% 0;
-webkit-transform: scale(0.75) translateY(-21px);
-ms-transform: scale(0.75) translateY(-21px);
transform: scale(0.75) translateY(-21px);
-webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
z-index: 9; }
.nice-select .list:hover .option:not(:hover) {
background-color: transparent !important; }
.nice-select .option {
cursor: pointer;
font-weight: 400;
line-height: 40px;
list-style: none;
min-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 29px;
text-align: left;
-webkit-transition: all 0.2s;
transition: all 0.2s; }
.nice-select .option:hover, .nice-select .option.focus, .nice-select .option.selected.focus {
background-color: #f6f6f6; }
.nice-select .option.selected {
font-weight: bold; }
.nice-select .option.disabled {
background-color: transparent;
color: #999;
cursor: default; }
width: auto;
}
.nice-select:hover {
border-color: #dbdbdb;
}
.nice-select:active,
.nice-select.open,
.nice-select:focus {
border-color: #999;
}
.nice-select:after {
border-bottom: 2px solid #999;
border-right: 2px solid #999;
content: "";
display: block;
height: 5px;
margin-top: -4px;
pointer-events: none;
position: absolute;
right: 12px;
top: 50%;
-webkit-transform-origin: 66% 66%;
-ms-transform-origin: 66% 66%;
transform-origin: 66% 66%;
-webkit-transform: rotate(45deg);
-ms-transform: rotate(45deg);
transform: rotate(45deg);
-webkit-transition: all 0.15s ease-in-out;
transition: all 0.15s ease-in-out;
width: 5px;
}
.nice-select.open:after {
-webkit-transform: rotate(-135deg);
-ms-transform: rotate(-135deg);
transform: rotate(-135deg);
}
.nice-select.open .list {
opacity: 1;
pointer-events: auto;
-webkit-transform: scale(1) translateY(0);
-ms-transform: scale(1) translateY(0);
transform: scale(1) translateY(0);
}
.nice-select.disabled {
border-color: #ededed;
color: #999;
pointer-events: none;
}
.nice-select.disabled:after {
border-color: #cccccc;
}
.nice-select.wide {
width: 100%;
}
.nice-select.wide .list {
left: 0 !important;
right: 0 !important;
}
.nice-select.right {
float: right;
}
.nice-select.right .list {
left: auto;
right: 0;
}
.nice-select.small {
font-size: 12px;
height: 36px;
line-height: 34px;
}
.nice-select.small:after {
height: 4px;
width: 4px;
}
.nice-select.small .option {
line-height: 34px;
min-height: 34px;
}
.nice-select .list {
background-color: #fff;
border-radius: 5px;
box-shadow: 0 0 0 1px rgba(68, 68, 68, 0.11);
box-sizing: border-box;
margin-top: 4px;
opacity: 0;
overflow: hidden;
padding: 0;
pointer-events: none;
position: absolute;
top: 100%;
left: 0;
-webkit-transform-origin: 50% 0;
-ms-transform-origin: 50% 0;
transform-origin: 50% 0;
-webkit-transform: scale(0.75) translateY(-21px);
-ms-transform: scale(0.75) translateY(-21px);
transform: scale(0.75) translateY(-21px);
-webkit-transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25),
opacity 0.15s ease-out;
transition: all 0.2s cubic-bezier(0.5, 0, 0, 1.25), opacity 0.15s ease-out;
z-index: 9;
}
.nice-select .list:hover .option:not(:hover) {
background-color: transparent !important;
}
.nice-select .option {
cursor: pointer;
font-weight: 400;
line-height: 40px;
list-style: none;
min-height: 40px;
outline: none;
padding-left: 18px;
padding-right: 29px;
text-align: left;
-webkit-transition: all 0.2s;
transition: all 0.2s;
}
.nice-select .option:hover,
.nice-select .option.focus,
.nice-select .option.selected.focus {
background-color: #f6f6f6;
}
.nice-select .option.selected {
font-weight: bold;
}
.nice-select .option.disabled {
background-color: transparent;
color: #999;
cursor: default;
}
.no-csspointerevents .nice-select .list {
display: none; }
display: none;
}
.no-csspointerevents .nice-select.open .list {
display: block; }
display: block;
}

File diff suppressed because it is too large Load Diff

View File

@@ -1,67 +1,67 @@
@media (prefers-color-scheme: dark) {
:root {
--background: #1E2128;
--border: #35373E;
--text: #F1F1F1;
--text-2: #C5C6CA;
--text-3: #A5A5AE;
--select: #17191E;
--accent: #6068D2;
--accent-hover: #484FAC;
--shortcut: #383E4A;
--placeholder: #63687B;
--background-2: #292D36;
}
:root {
--background: #1e2128;
--border: #35373e;
--text: #f1f1f1;
--text-2: #c5c6ca;
--text-3: #a5a5ae;
--select: #17191e;
--accent: #6068d2;
--accent-hover: #484fac;
--shortcut: #383e4a;
--placeholder: #63687b;
--background-2: #292d36;
}
}
@media (prefers-color-scheme: light) {
:root {
--background: #FAFCFF;
--border: #F2F3FB;
--text: #2B2D41;
--text-2: #2B2D41;
--text-3: #929DB2;
--select: #EFF3F9;
--accent: #6068D2;
--accent-hover: #484FAC;
--shortcut: #DADEEA;
--placeholder: #BAC2D1;
--background-2: #292D36;
}
:root {
--background: #fafcff;
--border: #f2f3fb;
--text: #2b2d41;
--text-2: #2b2d41;
--text-3: #929db2;
--select: #eff3f9;
--accent: #6068d2;
--accent-hover: #484fac;
--shortcut: #dadeea;
--placeholder: #bac2d1;
--background-2: #292d36;
}
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 400;
src: url('chrome-extension://__MSG_@@extension_id__/assets/Inter-Regular.ttf');
font-family: "Inter";
font-style: normal;
font-weight: 400;
src: url("chrome-extension://__MSG_@@extension_id__/assets/Inter-Regular.ttf");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 500;
src: url('chrome-extension://__MSG_@@extension_id__/assets/Inter-Medium.ttf');
font-family: "Inter";
font-style: normal;
font-weight: 500;
src: url("chrome-extension://__MSG_@@extension_id__/assets/Inter-Medium.ttf");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 600;
src: url('chrome-extension://__MSG_@@extension_id__/assets/Inter-SemiBold.ttf');
font-family: "Inter";
font-style: normal;
font-weight: 600;
src: url("chrome-extension://__MSG_@@extension_id__/assets/Inter-SemiBold.ttf");
}
@font-face {
font-family: 'Inter';
font-style: normal;
font-weight: 700;
src: url('chrome-extension://__MSG_@@extension_id__/assets/Inter-Bold.ttf');
font-family: "Inter";
font-style: normal;
font-weight: 700;
src: url("chrome-extension://__MSG_@@extension_id__/assets/Inter-Bold.ttf");
}
.omni-extension .omni-item-details * {
line-height: normal;
line-height: normal;
}
.omni-extension {
font-family: Inter!important;
z-index: 99999999999;
font-family: Inter !important;
z-index: 99999999999;
}
.omni-extension #omni-wrap {
position: fixed;
position: fixed;
width: 700px;
border: 1px solid transparent;
border-radius: 5px;
@@ -72,7 +72,7 @@
left: 0px;
z-index: 9999999999;
height: 540px;
transition: all .2s cubic-bezier(.05,.03,.35,1);
transition: all 0.2s cubic-bezier(0.05, 0.03, 0.35, 1);
}
.omni-extension #omni {
position: absolute;
@@ -84,16 +84,16 @@
left: 0px;
z-index: 9999999998;
height: fit-content;
transition: all .2s cubic-bezier(.05,.03,.35,1);
display: block;
transition: all 0.2s cubic-bezier(0.05, 0.03, 0.35, 1);
display: block;
}
.omni-closing #omni {
transform: scale(.9);
transform: scale(0.9);
opacity: 0;
display: none!important;
display: none !important;
}
.omni-closing {
pointer-events: none;
pointer-events: none;
}
.omni-extension #omni-overlay {
height: 100%;
@@ -103,11 +103,11 @@
left: 0px;
background-color: #000;
z-index: 9999;
opacity: .6;
transition: all .1s cubic-bezier(.05,.03,.35,1);
opacity: 0.6;
transition: all 0.1s cubic-bezier(0.05, 0.03, 0.35, 1);
}
.omni-closing #omni-overlay {
opacity: 0!important;
opacity: 0 !important;
}
.omni-extension #omni-head {
height: 50px;
@@ -134,7 +134,7 @@
}
.omni-extension .omni-shortcut {
display: inline-block;
font-size: 13px;
font-size: 13px;
border-radius: 5px;
background-color: var(--shortcut);
color: var(--text);
@@ -158,7 +158,7 @@
display: block;
color: var(--text);
caret-color: var(--accent);
font-family: Inter!important;
font-family: Inter !important;
margin-top: 5px;
margin-bottom: 5px;
box-sizing: border-box;
@@ -214,7 +214,7 @@
margin-left: 3px;
}
.omni-extension .omni-item-active .omni-select {
display: block!important;
display: block !important;
}
.omni-extension .omni-icon {
width: 20px;
@@ -225,14 +225,14 @@
margin-top: -12px;
}
.omni-extension .omni-emoji-action {
display: inline-block;
vertical-align: middle;
margin-top: -12px;
width: 20px;
height: 20px;
text-align: center;
margin-left: 5%;
font-size: 18px;
display: inline-block;
vertical-align: middle;
margin-top: -12px;
width: 20px;
height: 20px;
text-align: center;
margin-left: 5%;
font-size: 18px;
}
.omni-extension .omni-item-details {
display: inline-block;
@@ -250,12 +250,12 @@
width: 450px;
}
.omni-extension .omni-item-active .omni-item-name {
color: var(--text)!important;
color: var(--text) !important;
}
.omni-extension .omni-item-desc {
color: var(--text-3);
margin-top: 5px;
font-size: 14px;
font-size: 14px;
}
.omni-extension #omni-footer {
height: 45px;
@@ -289,7 +289,7 @@
margin-right: 5%;
}
.omni-extension .omni-item-active .omni-keys {
display: none!important;
display: none !important;
}
.omni-extension .omni-keys span {
margin-left: 3px;
@@ -300,4 +300,4 @@
position: absolute;
top: 0px;
left: 0px;
}
}

View File

@@ -1,21 +1,22 @@
<html>
<head>
</head>
<head> </head>
<body>
<div id="omni-extension" class="omni-closing omni-extension">
<div id="omni-wrap">
<div id="omni">
<div id="omni-search">
<input placeholder="Type a command or search">
</div>
<div id="omni-list">
</div>
<div id="omni-footer">
<div id="omni-results">153 results</div>
<div id="omni-arrows">Use arrow keys <span class="omni-shortcut"></span><span class="omni-shortcut"></span> to navigate</div>
</div>
</div>
</div>
<div id="omni-wrap">
<div id="omni">
<div id="omni-search">
<input placeholder="Type a command or search" />
</div>
<div id="omni-list"></div>
<div id="omni-footer">
<div id="omni-results">153 results</div>
<div id="omni-arrows">
Use arrow keys <span class="omni-shortcut"></span
><span class="omni-shortcut"></span> to navigate
</div>
</div>
</div>
</div>
<div id="omni-overlay"></div>
</div>
</body>

View File

@@ -1,268 +1,425 @@
$(document).ready(function(){
var isOpen = false;
$(document).ready(function () {
var isOpen = false;
var actions = [];
// Append the omni into the current page
$.get(chrome.runtime.getURL('/content.html'), function(data) {
$(data).appendTo('body');
// Append the omni into the current page
$.get(chrome.runtime.getURL("/content.html"), function (data) {
$(data).appendTo("body");
});
// Request actions from the background
chrome.runtime.sendMessage({request:"get-actions"}, function(response) {
// Request actions from the background
chrome.runtime.sendMessage({ request: "get-actions" }, function (response) {
actions = response.actions;
populateOmni();
populateOmni();
});
// Add actions to the omni
function populateOmni() {
$("#omni-extension #list").html("");
actions.forEach(function(action, index){
var keys = "";
if (action.keycheck) {
keys = "<div class='omni-keys'>";
action.keys.forEach(function(key){
keys += "<span class='omni-shortcut'>"+key+"</span>";
});
keys += "</div>";
}
var img = "<img src='"+action.favIconUrl+"' alt='favicon' onerror='this.src=&quot;"+chrome.runtime.getURL("/assets/globe.svg")+"&quot;' class='omni-icon'>";
if (action.emoji) {
img = "<span class='omni-emoji-action'>"+action.emojiChar+"</span>"
}
if (index != 0) {
$("#omni-extension #omni-list").append("<div class='omni-item' data-type='"+action.type+"'>"+img+"<div class='omni-item-details'><div class='omni-item-name'>"+action.title+"</div><div class='omni-item-desc'>"+action.desc+"</div></div>"+keys+"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>");
} else {
$("#omni-extension #omni-list").append("<div class='omni-item omni-item-active' data-type='"+action.type+"'>"+img+"<div class='omni-item-details'><div class='omni-item-name'>"+action.title+"</div><div class='omni-item-desc'>"+action.desc+"</div></div>"+keys+"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>");
}
})
$(".omni-extension #omni-results").html(actions.length+" results");
}
// Add actions to the omni
function populateOmniHistory(actions) {
$("#omni-extension #omni-list").html("");
actions.forEach(function(action, index){
var keys = "";
if (action.keycheck) {
keys = "<div class='omni-keys'>";
action.keys.forEach(function(key){
keys += "<span class='omni-shortcut'>"+key+"</span>";
});
keys += "</div>";
}
var img = "<img src='"+action.favIconUrl+"' alt='favicon' onerror='this.src=&quot;"+chrome.runtime.getURL("/assets/globe.svg")+"&quot;' class='omni-icon'>";
if (action.emoji) {
img = "<span class='omni-emoji-action'>"+action.emojiChar+"</span>"
}
if (index != 0) {
$("#omni-extension #omni-list").append("<div class='omni-item' data-type='"+action.type+"' data-url='"+action.url+"'>"+img+"<div class='omni-item-details'><div class='omni-item-name'>"+action.title+"</div><div class='omni-item-desc'>"+action.desc+"</div></div>"+keys+"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>");
} else {
$("#omni-extension #omni-list").append("<div class='omni-item omni-item-active' data-type='"+action.type+"' data-url='"+action.url+"'>"+img+"<div class='omni-item-details'><div class='omni-item-name'>"+action.title+"</div><div class='omni-item-desc'>"+action.desc+"</div></div>"+keys+"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>");
}
})
$(".omni-extension #omni-results").html(actions.length+" results");
}
// Open the omni
function openOmni() {
chrome.runtime.sendMessage({request:"get-actions"}, function(response) {
isOpen = true;
actions = response.actions;
populateOmni();
$("#omni-extension input").val("");
$("html, body").stop();
$("#omni-extension").removeClass("omni-closing");
window.setTimeout(function(){
$("#omni-extension input").focus();
}, 100);
});
// Add actions to the omni
function populateOmni() {
$("#omni-extension #list").html("");
actions.forEach(function (action, index) {
var keys = "";
if (action.keycheck) {
keys = "<div class='omni-keys'>";
action.keys.forEach(function (key) {
keys += "<span class='omni-shortcut'>" + key + "</span>";
});
keys += "</div>";
}
var img =
"<img src='" +
action.favIconUrl +
"' alt='favicon' onerror='this.src=&quot;" +
chrome.runtime.getURL("/assets/globe.svg") +
"&quot;' class='omni-icon'>";
if (action.emoji) {
img = "<span class='omni-emoji-action'>" + action.emojiChar + "</span>";
}
if (index != 0) {
$("#omni-extension #omni-list").append(
"<div class='omni-item' data-type='" +
action.type +
"'>" +
img +
"<div class='omni-item-details'><div class='omni-item-name'>" +
action.title +
"</div><div class='omni-item-desc'>" +
action.desc +
"</div></div>" +
keys +
"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>"
);
} else {
$("#omni-extension #omni-list").append(
"<div class='omni-item omni-item-active' data-type='" +
action.type +
"'>" +
img +
"<div class='omni-item-details'><div class='omni-item-name'>" +
action.title +
"</div><div class='omni-item-desc'>" +
action.desc +
"</div></div>" +
keys +
"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>"
);
}
});
$(".omni-extension #omni-results").html(actions.length + " results");
}
// Close the omni
// Add actions to the omni
function populateOmniHistory(actions) {
$("#omni-extension #omni-list").html("");
actions.forEach(function (action, index) {
var keys = "";
if (action.keycheck) {
keys = "<div class='omni-keys'>";
action.keys.forEach(function (key) {
keys += "<span class='omni-shortcut'>" + key + "</span>";
});
keys += "</div>";
}
var img =
"<img src='" +
action.favIconUrl +
"' alt='favicon' onerror='this.src=&quot;" +
chrome.runtime.getURL("/assets/globe.svg") +
"&quot;' class='omni-icon'>";
if (action.emoji) {
img = "<span class='omni-emoji-action'>" + action.emojiChar + "</span>";
}
if (index != 0) {
$("#omni-extension #omni-list").append(
"<div class='omni-item' data-type='" +
action.type +
"' data-url='" +
action.url +
"'>" +
img +
"<div class='omni-item-details'><div class='omni-item-name'>" +
action.title +
"</div><div class='omni-item-desc'>" +
action.desc +
"</div></div>" +
keys +
"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>"
);
} else {
$("#omni-extension #omni-list").append(
"<div class='omni-item omni-item-active' data-type='" +
action.type +
"' data-url='" +
action.url +
"'>" +
img +
"<div class='omni-item-details'><div class='omni-item-name'>" +
action.title +
"</div><div class='omni-item-desc'>" +
action.desc +
"</div></div>" +
keys +
"<div class='omni-select'>Select <span class='omni-shortcut'>⏎</span></div></div>"
);
}
});
$(".omni-extension #omni-results").html(actions.length + " results");
}
// Open the omni
function openOmni() {
chrome.runtime.sendMessage({ request: "get-actions" }, function (response) {
isOpen = true;
actions = response.actions;
populateOmni();
$("#omni-extension input").val("");
$("html, body").stop();
$("#omni-extension").removeClass("omni-closing");
window.setTimeout(function () {
$("#omni-extension input").focus();
}, 100);
});
}
// Close the omni
function closeOmni() {
isOpen = false;
isOpen = false;
$("#omni-extension").addClass("omni-closing");
}
// Hover over an action in the omni
// Hover over an action in the omni
function hoverItem() {
$(".omni-item-active").removeClass("omni-item-active");
$(this).addClass("omni-item-active");
}
// Search for an action in the omni
// Search for an action in the omni
function search() {
var value = $(this).val().toLowerCase();
if (value.startsWith("/history")) {
var tempvalue = value.replace("/tabs ", "");
var query = "";
if (tempvalue != "/history") {
query = value.replace("/history ", "");
}
chrome.runtime.sendMessage({request:"search-history", query:query}, function(response){
populateOmniHistory(response.history);
});
} else {
populateOmni();
$("#omni-extension #omni-list .omni-item").filter(function(){
if (value.startsWith("/tabs")) {
var tempvalue = value.replace("/tabs ", "");
if (tempvalue == "/tabs") {
$(this).toggle($(this).attr("data-type") == "tab");
} else {
tempvalue = value.replace("/tabs ", "");
$(this).toggle(($(this).find(".omni-item-name").text().toLowerCase().indexOf(tempvalue) > -1 || $(this).find(".omni-item-desc").text().toLowerCase().indexOf(tempvalue) > -1) && $(this).attr("data-type") == "tab");
}
} else if (value.startsWith("/bookmarks")) {
var tempvalue = value.replace("/bookmarks ", "");
if (tempvalue == "/bookmarks") {
$(this).toggle($(this).attr("data-type") == "bookmark");
} else {
tempvalue = value.replace("/bookmarks ", "");
$(this).toggle(($(this).find(".omni-item-name").text().toLowerCase().indexOf(tempvalue) > -1 || $(this).find(".omni-item-desc").text().toLowerCase().indexOf(tempvalue) > -1) && $(this).attr("data-type") == "bookmark");
}
} else if (value.startsWith("/remove")) {
var tempvalue = value.replace("/remove ", "");
if (tempvalue == "/remove") {
$(this).toggle($(this).attr("data-type") == "bookmark" || $(this).attr("data-type") == "tab");
} else {
tempvalue = value.replace("/remove ", "");
$(this).toggle(($(this).find(".omni-item-name").text().toLowerCase().indexOf(tempvalue) > -1 || $(this).find(".omni-item-desc").text().toLowerCase().indexOf(tempvalue) > -1) && ($(this).attr("data-type") == "bookmark" || $(this).attr("data-type") == "tab"));
}
} else if (value.startsWith("/actions")) {
var tempvalue = value.replace("/actions ", "");
if (tempvalue == "/actions") {
$(this).toggle($(this).attr("data-type") == "action");
} else {
tempvalue = value.replace("/actions ", "");
$(this).toggle(($(this).find(".omni-item-name").text().toLowerCase().indexOf(tempvalue) > -1 || $(this).find(".omni-item-desc").text().toLowerCase().indexOf(tempvalue) > -1) && $(this).attr("data-type") == "action");
}
} else {
$(this).toggle($(this).find(".omni-item-name").text().toLowerCase().indexOf(value) > -1 || $(this).find(".omni-item-desc").text().toLowerCase().indexOf(value) > -1);
}
});
}
$(".omni-extension #omni-results").html($("#omni-extension #omni-list .omni-item:visible").length+" results");
if (value.startsWith("/history")) {
var tempvalue = value.replace("/tabs ", "");
var query = "";
if (tempvalue != "/history") {
query = value.replace("/history ", "");
}
chrome.runtime.sendMessage(
{ request: "search-history", query: query },
function (response) {
populateOmniHistory(response.history);
}
);
} else {
populateOmni();
$("#omni-extension #omni-list .omni-item").filter(function () {
if (value.startsWith("/tabs")) {
var tempvalue = value.replace("/tabs ", "");
if (tempvalue == "/tabs") {
$(this).toggle($(this).attr("data-type") == "tab");
} else {
tempvalue = value.replace("/tabs ", "");
$(this).toggle(
($(this)
.find(".omni-item-name")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1 ||
$(this)
.find(".omni-item-desc")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1) &&
$(this).attr("data-type") == "tab"
);
}
} else if (value.startsWith("/bookmarks")) {
var tempvalue = value.replace("/bookmarks ", "");
if (tempvalue == "/bookmarks") {
$(this).toggle($(this).attr("data-type") == "bookmark");
} else {
tempvalue = value.replace("/bookmarks ", "");
$(this).toggle(
($(this)
.find(".omni-item-name")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1 ||
$(this)
.find(".omni-item-desc")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1) &&
$(this).attr("data-type") == "bookmark"
);
}
} else if (value.startsWith("/remove")) {
var tempvalue = value.replace("/remove ", "");
if (tempvalue == "/remove") {
$(this).toggle(
$(this).attr("data-type") == "bookmark" ||
$(this).attr("data-type") == "tab"
);
} else {
tempvalue = value.replace("/remove ", "");
$(this).toggle(
($(this)
.find(".omni-item-name")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1 ||
$(this)
.find(".omni-item-desc")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1) &&
($(this).attr("data-type") == "bookmark" ||
$(this).attr("data-type") == "tab")
);
}
} else if (value.startsWith("/actions")) {
var tempvalue = value.replace("/actions ", "");
if (tempvalue == "/actions") {
$(this).toggle($(this).attr("data-type") == "action");
} else {
tempvalue = value.replace("/actions ", "");
$(this).toggle(
($(this)
.find(".omni-item-name")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1 ||
$(this)
.find(".omni-item-desc")
.text()
.toLowerCase()
.indexOf(tempvalue) > -1) &&
$(this).attr("data-type") == "action"
);
}
} else {
$(this).toggle(
$(this)
.find(".omni-item-name")
.text()
.toLowerCase()
.indexOf(value) > -1 ||
$(this)
.find(".omni-item-desc")
.text()
.toLowerCase()
.indexOf(value) > -1
);
}
});
}
$(".omni-extension #omni-results").html(
$("#omni-extension #omni-list .omni-item:visible").length + " results"
);
}
// Handle actions from the omni
function handleAction() {
var action = actions.find(x => x.title == $(".omni-item-active .omni-item-name").text());
closeOmni();
if ($(".omni-extension input").val().toLowerCase().startsWith("/remove")) {
chrome.runtime.sendMessage({request:"remove", type:action.type, action:action});
} else if ($(".omni-extension input").val().toLowerCase().startsWith("/history")) {
window.open($(".item-active").attr("data-url"), "_self");
} else {
chrome.runtime.sendMessage({request:action.action, tab:action});
if (action.action == "bookmark") {
window.open(action.url, "_self");
} else if (action.action == "scroll-bottom") {
window.scrollTo(0,document.body.scrollHeight);
} else if (action.action == "scroll-top") {
window.scrollTo(0,0);
} else if (action.action == "close-tab") {
window.close();
} else if (action.action == "navigation") {
window.open(action.url, "_self");
} else if (action.action == "fullscreen") {
var elem = document.documentElement;
elem.requestFullscreen();
} else if (action.action == "new-tab") {
window.open("");
} else if (action.action == "email") {
window.open("mailto:");
} else if (action.action == "url") {
window.open(action.url, "_self");
}
}
// Handle actions from the omni
function handleAction() {
var action = actions.find(
(x) => x.title == $(".omni-item-active .omni-item-name").text()
);
closeOmni();
if ($(".omni-extension input").val().toLowerCase().startsWith("/remove")) {
chrome.runtime.sendMessage({
request: "remove",
type: action.type,
action: action,
});
} else if (
$(".omni-extension input").val().toLowerCase().startsWith("/history")
) {
window.open($(".item-active").attr("data-url"), "_self");
} else {
chrome.runtime.sendMessage({ request: action.action, tab: action });
if (action.action == "bookmark") {
window.open(action.url, "_self");
} else if (action.action == "scroll-bottom") {
window.scrollTo(0, document.body.scrollHeight);
} else if (action.action == "scroll-top") {
window.scrollTo(0, 0);
} else if (action.action == "close-tab") {
window.close();
} else if (action.action == "navigation") {
window.open(action.url, "_self");
} else if (action.action == "fullscreen") {
var elem = document.documentElement;
elem.requestFullscreen();
} else if (action.action == "new-tab") {
window.open("");
} else if (action.action == "email") {
window.open("mailto:");
} else if (action.action == "url") {
window.open(action.url, "_self");
}
}
// Fetch actions again
chrome.runtime.sendMessage({request:"get-actions"}, function(response) {
actions = response.actions;
populateOmni();
});
}
// Fetch actions again
chrome.runtime.sendMessage({ request: "get-actions" }, function (response) {
actions = response.actions;
populateOmni();
});
}
// Customize the shortcut to open the Omni box
function openShortcuts() {
chrome.runtime.sendMessage({request:"extensions/shortcuts"});
}
// Customize the shortcut to open the Omni box
function openShortcuts() {
chrome.runtime.sendMessage({ request: "extensions/shortcuts" });
}
// Check which keys are down
var down = [];
$(document).keydown(function(e) {
down[e.keyCode] = true;
}).keyup(function(e) {
if (down[18] && down[16] && down[80]) {
if (actions.find(x => x.action == "pin") != undefined) {
chrome.runtime.sendMessage({request:"pin-tab"});
} else {
chrome.runtime.sendMessage({request:"unpin-tab"});
}
chrome.runtime.sendMessage({request:"get-actions"}, function(response) {
actions = response.actions;
populateOmni();
});
} else if (down[18] && down[16] && down[77]) {
if (actions.find(x => x.action == "mute") != undefined) {
chrome.runtime.sendMessage({request:"mute-tab"});
} else {
chrome.runtime.sendMessage({request:"unmute-tab"});
}
chrome.runtime.sendMessage({request:"get-actions"}, function(response) {
actions = response.actions;
populateOmni();
});
} else if (down[18] && down[16] && down[67]) {
window.open("mailto:");
}
if (down[38]) {
// Up key
if ($(".omni-item-active").prevAll("div").not(":hidden").first().length) {
var previous = $(".omni-item-active").prevAll("div").not(":hidden").first();
$(".omni-item-active").removeClass("item-active");
previous.addClass("omni-item-active");
previous[0].scrollIntoView({block:"nearest", inline:"nearest"});
// Check which keys are down
var down = [];
$(document)
.keydown(function (e) {
down[e.keyCode] = true;
})
.keyup(function (e) {
if (down[18] && down[16] && down[80]) {
if (actions.find((x) => x.action == "pin") != undefined) {
chrome.runtime.sendMessage({ request: "pin-tab" });
} else {
chrome.runtime.sendMessage({ request: "unpin-tab" });
}
chrome.runtime.sendMessage(
{ request: "get-actions" },
function (response) {
actions = response.actions;
populateOmni();
}
);
} else if (down[18] && down[16] && down[77]) {
if (actions.find((x) => x.action == "mute") != undefined) {
chrome.runtime.sendMessage({ request: "mute-tab" });
} else {
chrome.runtime.sendMessage({ request: "unmute-tab" });
}
chrome.runtime.sendMessage(
{ request: "get-actions" },
function (response) {
actions = response.actions;
populateOmni();
}
);
} else if (down[18] && down[16] && down[67]) {
window.open("mailto:");
}
} else if (down[40]) {
// Down key
if ($(".omni-item-active").nextAll("div").not(":hidden").first().length) {
var next = $(".omni-item-active").nextAll("div").not(":hidden").first();
$(".omni-item-active").removeClass("omni-item-active");
next.addClass("omni-item-active");
next[0].scrollIntoView({block:"nearest", inline:"nearest"});
if (down[38]) {
// Up key
if (
$(".omni-item-active").prevAll("div").not(":hidden").first().length
) {
var previous = $(".omni-item-active")
.prevAll("div")
.not(":hidden")
.first();
$(".omni-item-active").removeClass("item-active");
previous.addClass("omni-item-active");
previous[0].scrollIntoView({ block: "nearest", inline: "nearest" });
}
} else if (down[40]) {
// Down key
if (
$(".omni-item-active").nextAll("div").not(":hidden").first().length
) {
var next = $(".omni-item-active")
.nextAll("div")
.not(":hidden")
.first();
$(".omni-item-active").removeClass("omni-item-active");
next.addClass("omni-item-active");
next[0].scrollIntoView({ block: "nearest", inline: "nearest" });
}
} else if (down[27] && isOpen) {
// Esc key
closeOmni();
} else if (down[13] && isOpen) {
// Enter key
handleAction();
}
} else if (down[27] && isOpen) {
// Esc key
closeOmni();
} else if (down[13] && isOpen) {
// Enter key
handleAction();
}
down = [];
});
// Recieve messages from background
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.request == "open-omni") {
if (isOpen) {
closeOmni();
} else {
openOmni();
}
}
});
down = [];
});
// Recieve messages from background
chrome.runtime.onMessage.addListener((message, sender, sendResponse) => {
if (message.request == "open-omni") {
if (isOpen) {
closeOmni();
} else {
openOmni();
}
}
});
// Events
$(document).on("click", "#open-page-omni-extension-thing", openShortcuts);
$(document).on("mouseover", ".omni-extension .omni-item:not(.omni-item-active)", hoverItem);
$(document).on("click", "#open-page-omni-extension-thing", openShortcuts);
$(document).on(
"mouseover",
".omni-extension .omni-item:not(.omni-item-active)",
hoverItem
);
$(document).on("input", ".omni-extension input", search);
$(document).on("click", ".omni-item-active", handleAction);
$(document).on("click", ".omni-extension #omni-overlay", closeOmni);
$(document).on("click", ".omni-item-active", handleAction);
$(document).on("click", ".omni-extension #omni-overlay", closeOmni);
});

View File

@@ -5,49 +5,54 @@
"version": "1.0.3",
"manifest_version": 3,
"action": {
"icons": {
"16": "assets/logo-16.png",
"48": "assets/logo-48.png",
"128": "assets/logo-128.png"
}
"icons": {
"16": "assets/logo-16.png",
"48": "assets/logo-48.png",
"128": "assets/logo-128.png"
}
},
"icons": {
"16": "assets/logo-16.png",
"48": "assets/logo-48.png",
"128": "assets/logo-128.png"
},
"commands": {
"open-omni": {
"suggested_key": {
"icons": {
"16": "assets/logo-16.png",
"48": "assets/logo-48.png",
"128": "assets/logo-128.png"
},
"commands": {
"open-omni": {
"suggested_key": {
"default": "Ctrl+K",
"mac": "Command+K"
},
"description": "Open command menu"
}
},
"description": "Open command menu"
}
},
"background": {
"service_worker": "background.js"
},
"content_scripts": [
{
"matches": [
"<all_urls>"
],
"run_at": "document_end",
"js": ["jquery.js", "assets/jquery.nice-select.min.js", "content.js"],
"css": ["assets/nice-select.css", "content.css"]
}
{
"matches": ["<all_urls>"],
"run_at": "document_end",
"js": ["jquery.js", "assets/jquery.nice-select.min.js", "content.js"],
"css": ["assets/nice-select.css", "content.css"]
}
],
"web_accessible_resources": [
{
"resources": ["content.html", "assets/*", "popup.css", "popup.js"],
"resources": ["content.html", "assets/*", "popup.css", "popup.js"],
"matches": ["<all_urls>"]
}
],
"permissions": [
"tabs", "activeTab", "bookmarks", "browsingData", "history", "scripting"
"tabs",
"activeTab",
"bookmarks",
"browsingData",
"history",
"scripting"
],
"host_permissions": [
"https://www.googleapis.com/*", "https://gstatic.com/*", "*://*/*"
"https://www.googleapis.com/*",
"https://gstatic.com/*",
"*://*/*"
]
}