mirror of
https://github.com/XFox111/TabsAsideExtension.git
synced 2026-04-22 07:58:01 +03:00
Merge pull request #2 from XFox111/v1-minor2
[v1.2] Restore without removing, tabs thumbnails and more
This commit is contained in:
@@ -2,9 +2,7 @@
|
|||||||
|
|
||||||
[](https://chrome.google.com/webstore/detail/tabs-aside/mgmjbodjgijnebfgohlnjkegdpbdjgin)
|
[](https://chrome.google.com/webstore/detail/tabs-aside/mgmjbodjgijnebfgohlnjkegdpbdjgin)
|
||||||
[](https://chrome.google.com/webstore/detail/tabs-aside/mgmjbodjgijnebfgohlnjkegdpbdjgin)
|
[](https://chrome.google.com/webstore/detail/tabs-aside/mgmjbodjgijnebfgohlnjkegdpbdjgin)
|
||||||
|
|
||||||
[](https://github.com/xfox111/chromiumtabsaside/releases/latest)
|
[](https://github.com/xfox111/chromiumtabsaside/releases/latest)
|
||||||
[](https://github.com/xfox111/chromiumtabsaside/releases/latest)
|
|
||||||
|
|
||||||
[](https://github.com/xfox111/ChromiumTabsAside/issues)
|
[](https://github.com/xfox111/ChromiumTabsAside/issues)
|
||||||
[](https://github.com/xfox111/ChromiumTabsAside/commits/master)
|
[](https://github.com/xfox111/ChromiumTabsAside/commits/master)
|
||||||
@@ -32,17 +30,8 @@ Unfortunately, in new Chromium-based Microsoft Edge, the devs decided not to imp
|
|||||||
- [Microsoft Edge Add-ons Webstore](https://microsoftedge.microsoft.com/addons/detail/kmnblllmalkiapkfknnlpobmjjdnlhnd)
|
- [Microsoft Edge Add-ons Webstore](https://microsoftedge.microsoft.com/addons/detail/kmnblllmalkiapkfknnlpobmjjdnlhnd)
|
||||||
- [GitHub Releases](https://github.com/xfox111/chromiumtabsaside/releases/latest)
|
- [GitHub Releases](https://github.com/xfox111/chromiumtabsaside/releases/latest)
|
||||||
|
|
||||||
## To-do list
|
## Project roadmap
|
||||||
- Add ability to backup and restore saved tabs
|
You can go to the project's [roadmap kanban board](https://github.com/XFox111/ChromiumTabsAside/projects/1) and see what have we planned and watch our progress in realtime
|
||||||
- Add ability to share collections
|
|
||||||
- Add ability to add collections to bookmarks
|
|
||||||
- Add ability to sync saved tabs across different devices
|
|
||||||
- Add saved tabs thumbnails
|
|
||||||
- Add ability to reorder tabs inside collections
|
|
||||||
- Add ability to restore collections without removing them from the pane
|
|
||||||
- Add more languages (probably engage auto translator)
|
|
||||||
- Code cleanup
|
|
||||||
- Fix appearance on some websites
|
|
||||||
|
|
||||||
## Copyrights
|
## Copyrights
|
||||||
> ©2020 Michael "XFox" Gordeev
|
> ©2020 Michael "XFox" Gordeev
|
||||||
|
|||||||
+1
-29
@@ -33,7 +33,7 @@
|
|||||||
<nav>
|
<nav>
|
||||||
<div>
|
<div>
|
||||||
<button value="https://github.com/xfox111/ChromiumTabsAside">Visit GitHub page</button>
|
<button value="https://github.com/xfox111/ChromiumTabsAside">Visit GitHub page</button>
|
||||||
<button value="https://chrome.google.com/webstore/category/extensions">Leave feedback</button>
|
<button value="https://chrome.google.com/webstore/detail/tabs-aside/mgmjbodjgijnebfgohlnjkegdpbdjgin">Leave feedback</button>
|
||||||
<button value="https://buymeacoffee.com/xfox111">Buy me a coffee!</button>
|
<button value="https://buymeacoffee.com/xfox111">Buy me a coffee!</button>
|
||||||
<button hidden>Backup saved tabs</button>
|
<button hidden>Backup saved tabs</button>
|
||||||
</div>
|
</div>
|
||||||
@@ -50,34 +50,6 @@
|
|||||||
|
|
||||||
<section>
|
<section>
|
||||||
<h2>You have no aside tabs</h1>
|
<h2>You have no aside tabs</h1>
|
||||||
|
|
||||||
<!--<div>
|
|
||||||
<div>
|
|
||||||
<span>Tabs: $(tabsCount)</span>
|
|
||||||
<small>$(timestamp)</small>
|
|
||||||
|
|
||||||
<a>Restore tabs</a>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<button title="More..."></button>
|
|
||||||
<nav>
|
|
||||||
<button>Add tabs to favorites</button>
|
|
||||||
<button>Share tabs</button>
|
|
||||||
</nav>
|
|
||||||
</div>
|
|
||||||
<button title="Remove collection"></button>
|
|
||||||
</div>
|
|
||||||
|
|
||||||
<div>
|
|
||||||
<div title="Tab title caption">
|
|
||||||
<div>
|
|
||||||
<div></div>
|
|
||||||
<span>$(title)</span>
|
|
||||||
<button title="Remove tab from collection"></button>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>
|
|
||||||
</div>-->
|
|
||||||
</section>
|
</section>
|
||||||
</aside>
|
</aside>
|
||||||
|
|
||||||
|
|||||||
+4
-7
@@ -162,15 +162,10 @@
|
|||||||
line-height: initial !important;
|
line-height: initial !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
.tabsAside.pane > section > div > div:first-child > div
|
|
||||||
{
|
|
||||||
display: none !important; /* TODO: Implement this menu */
|
|
||||||
}
|
|
||||||
|
|
||||||
.tabsAside.pane > section > div > div:first-child > div > nav
|
.tabsAside.pane > section > div > div:first-child > div > nav
|
||||||
{
|
{
|
||||||
width: 200px !important;
|
width: 250px !important;
|
||||||
margin-top: 10px !important;
|
margin-top: 40px !important;
|
||||||
right: 50px !important;
|
right: 50px !important;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -196,6 +191,8 @@
|
|||||||
|
|
||||||
background-color: #c2c2c2 !important;
|
background-color: #c2c2c2 !important;
|
||||||
background-image: url("chrome-extension://__MSG_@@extension_id__/images/tab_thumbnail.png");
|
background-image: url("chrome-extension://__MSG_@@extension_id__/images/tab_thumbnail.png");
|
||||||
|
background-size: cover !important;
|
||||||
|
background-position-x: center !important;
|
||||||
|
|
||||||
display: inline-grid !important;
|
display: inline-grid !important;
|
||||||
grid-template-rows: 1fr auto !important;
|
grid-template-rows: 1fr auto !important;
|
||||||
|
|||||||
@@ -35,6 +35,7 @@
|
|||||||
{
|
{
|
||||||
font-family: 'Segoe UI', 'Segoe MDL2 Assets' !important;
|
font-family: 'Segoe UI', 'Segoe MDL2 Assets' !important;
|
||||||
color: #0078d7 !important;
|
color: #0078d7 !important;
|
||||||
|
font-weight: 400 !important;
|
||||||
}
|
}
|
||||||
.tabsAside a:hover
|
.tabsAside a:hover
|
||||||
{
|
{
|
||||||
@@ -108,6 +109,7 @@
|
|||||||
cursor: pointer !important;
|
cursor: pointer !important;
|
||||||
background-color: transparent !important;
|
background-color: transparent !important;
|
||||||
border: none !important;
|
border: none !important;
|
||||||
|
box-sizing: border-box !important;
|
||||||
|
|
||||||
font-size: medium !important;
|
font-size: medium !important;
|
||||||
text-align: start !important;
|
text-align: start !important;
|
||||||
|
|||||||
+16
-6
@@ -123,7 +123,7 @@ function AddCollection(collection)
|
|||||||
for (var i = 0; i < collection.links.length; i++)
|
for (var i = 0; i < collection.links.length; i++)
|
||||||
{
|
{
|
||||||
rawTabs +=
|
rawTabs +=
|
||||||
"<div title='" + collection.titles[i] + "'>" +
|
"<div title='" + collection.titles[i] + "'" + ((collection.thumbnails[i]) ? " style='background-image: url(" + collection.thumbnails[i] + ")'" : "") + ">" +
|
||||||
"<span value='" + collection.links[i] + "'></span>" +
|
"<span value='" + collection.links[i] + "'></span>" +
|
||||||
"<div>" +
|
"<div>" +
|
||||||
"<div" + ((collection.icons[i] == 0 || collection.icons[i] == null) ? "" : " style='background-image: url(\"" + collection.icons[i] + "\")'") + "></div>" +
|
"<div" + ((collection.icons[i] == 0 || collection.icons[i] == null) ? "" : " style='background-image: url(\"" + collection.icons[i] + "\")'") + "></div>" +
|
||||||
@@ -141,8 +141,9 @@ function AddCollection(collection)
|
|||||||
"<div>" +
|
"<div>" +
|
||||||
"<button title='More...'></button>" +
|
"<button title='More...'></button>" +
|
||||||
"<nav>" +
|
"<nav>" +
|
||||||
"<button>Add tabs to favorites</button>" +
|
"<button>Restore without removing</button>" +
|
||||||
"<button>Share tabs</button>" +
|
"<button hidden>Add tabs to favorites</button>" +
|
||||||
|
"<button hidden>Share tabs</button>" +
|
||||||
"</nav>" +
|
"</nav>" +
|
||||||
"</div>" +
|
"</div>" +
|
||||||
"<button title='Remove collection'></button>" +
|
"<button title='Remove collection'></button>" +
|
||||||
@@ -156,6 +157,11 @@ function AddCollection(collection)
|
|||||||
i.onclick = function () { RestoreTabs(i.parentElement.parentElement) };
|
i.onclick = function () { RestoreTabs(i.parentElement.parentElement) };
|
||||||
});
|
});
|
||||||
|
|
||||||
|
list.querySelectorAll("nav button:first-child").forEach(i =>
|
||||||
|
{
|
||||||
|
i.onclick = function () { RestoreTabs(i.parentElement.parentElement.parentElement.parentElement, false) };
|
||||||
|
});
|
||||||
|
|
||||||
list.querySelectorAll("div > div:last-child > div > span").forEach(i =>
|
list.querySelectorAll("div > div:last-child > div > span").forEach(i =>
|
||||||
{
|
{
|
||||||
i.onclick = function () {
|
i.onclick = function () {
|
||||||
@@ -173,14 +179,14 @@ function AddCollection(collection)
|
|||||||
i.onclick = function () { RemoveTabs(i.parentElement.parentElement) };
|
i.onclick = function () { RemoveTabs(i.parentElement.parentElement) };
|
||||||
});
|
});
|
||||||
|
|
||||||
document.querySelectorAll(".tabsAside.pane > section > div > div:first-child > div > nav > button:first-child").forEach(i =>
|
/*document.querySelectorAll(".tabsAside.pane > section > div > div:first-child > div > nav > button:first-child").forEach(i =>
|
||||||
{
|
{
|
||||||
i.onclick = function () { AddToFavorites(i.parentElement.parentElement.parentElement.parentElement) };
|
i.onclick = function () { AddToFavorites(i.parentElement.parentElement.parentElement.parentElement) };
|
||||||
});
|
});
|
||||||
document.querySelectorAll(".tabsAside.pane > section > div > div:first-child > div > nav > button:last-child").forEach(i =>
|
document.querySelectorAll(".tabsAside.pane > section > div > div:first-child > div > nav > button:last-child").forEach(i =>
|
||||||
{
|
{
|
||||||
i.onclick = function () { ShareTabs(i.parentElement.parentElement.parentElement.parentElement) };
|
i.onclick = function () { ShareTabs(i.parentElement.parentElement.parentElement.parentElement) };
|
||||||
});
|
});*/
|
||||||
|
|
||||||
document.querySelectorAll(".tabsAside.pane > section > div > div:last-child > div > div > button").forEach(i =>
|
document.querySelectorAll(".tabsAside.pane > section > div > div:last-child > div > div > button").forEach(i =>
|
||||||
{
|
{
|
||||||
@@ -193,15 +199,19 @@ function SetTabsAside()
|
|||||||
chrome.runtime.sendMessage({ command: "saveTabs" });
|
chrome.runtime.sendMessage({ command: "saveTabs" });
|
||||||
}
|
}
|
||||||
|
|
||||||
function RestoreTabs(collectionData)
|
function RestoreTabs(collectionData, removeCollection = true)
|
||||||
{
|
{
|
||||||
chrome.runtime.sendMessage(
|
chrome.runtime.sendMessage(
|
||||||
{
|
{
|
||||||
command: "restoreTabs",
|
command: "restoreTabs",
|
||||||
|
removeCollection: removeCollection,
|
||||||
collectionIndex: Array.prototype.slice.call(collectionData.parentElement.children).indexOf(collectionData) - 1
|
collectionIndex: Array.prototype.slice.call(collectionData.parentElement.children).indexOf(collectionData) - 1
|
||||||
},
|
},
|
||||||
function ()
|
function ()
|
||||||
{
|
{
|
||||||
|
if (!removeCollection)
|
||||||
|
return;
|
||||||
|
|
||||||
if (collectionData.parentElement.children.length < 3)
|
if (collectionData.parentElement.children.length < 3)
|
||||||
{
|
{
|
||||||
RemoveElement(collectionData);
|
RemoveElement(collectionData);
|
||||||
|
|||||||
+44
-4
@@ -129,7 +129,7 @@ chrome.runtime.onMessage.addListener(function (message, sender, sendResponse)
|
|||||||
SaveCollection();
|
SaveCollection();
|
||||||
break;
|
break;
|
||||||
case "restoreTabs":
|
case "restoreTabs":
|
||||||
RestoreCollection(message.collectionIndex);
|
RestoreCollection(message.collectionIndex, message.removeCollection);
|
||||||
sendResponse();
|
sendResponse();
|
||||||
break;
|
break;
|
||||||
case "deleteTabs":
|
case "deleteTabs":
|
||||||
@@ -179,8 +179,8 @@ function SaveCollection()
|
|||||||
tabsCount: tabs.length,
|
tabsCount: tabs.length,
|
||||||
titles: tabs.map(tab => tab.title ?? ""),
|
titles: tabs.map(tab => tab.title ?? ""),
|
||||||
links: tabs.map(tab => tab.url ?? ""),
|
links: tabs.map(tab => tab.url ?? ""),
|
||||||
icons: tabs.map(tab => tab.favIconUrl ?? "")//,
|
icons: tabs.map(tab => tab.favIconUrl ?? ""),
|
||||||
//tumbnails: tabs.map(tab => chrome.tabs.captureVisibleTab)
|
thumbnails: tabs.map(tab => thumbnails.find(i => i.tabId == tab.id)?.url ?? "")
|
||||||
};
|
};
|
||||||
|
|
||||||
var rawData;
|
var rawData;
|
||||||
@@ -211,7 +211,7 @@ function DeleteCollection(collectionIndex)
|
|||||||
UpdateTheme();
|
UpdateTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
function RestoreCollection(collectionIndex)
|
function RestoreCollection(collectionIndex, removeCollection)
|
||||||
{
|
{
|
||||||
collections[collectionIndex].links.forEach(i =>
|
collections[collectionIndex].links.forEach(i =>
|
||||||
{
|
{
|
||||||
@@ -222,6 +222,9 @@ function RestoreCollection(collectionIndex)
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
if (!removeCollection)
|
||||||
|
return;
|
||||||
|
|
||||||
collections = collections.filter(i => i != collections[collectionIndex]);
|
collections = collections.filter(i => i != collections[collectionIndex]);
|
||||||
localStorage.setItem("sets", JSON.stringify(collections));
|
localStorage.setItem("sets", JSON.stringify(collections));
|
||||||
|
|
||||||
@@ -280,3 +283,40 @@ function RemoveTab(collectionIndex, tabIndex)
|
|||||||
|
|
||||||
UpdateTheme();
|
UpdateTheme();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var thumbnails = [];
|
||||||
|
|
||||||
|
function AppendThumbnail(tabId, cahngeInfo, tab)
|
||||||
|
{
|
||||||
|
if (!tab.active || !tab.url.startsWith("http"))
|
||||||
|
return;
|
||||||
|
|
||||||
|
chrome.tabs.captureVisibleTab(
|
||||||
|
{
|
||||||
|
format: "jpeg",
|
||||||
|
quality: 1
|
||||||
|
},
|
||||||
|
function (dataUrl)
|
||||||
|
{
|
||||||
|
if(!dataUrl)
|
||||||
|
{
|
||||||
|
console.log("Failed to retrieve thumbnail");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
console.log("Thumbnail retrieved");
|
||||||
|
var item = thumbnails.find(i => i.tabId == tabId);
|
||||||
|
if (item)
|
||||||
|
item.url = dataUrl;
|
||||||
|
else
|
||||||
|
thumbnails.unshift(
|
||||||
|
{
|
||||||
|
tabId: tabId,
|
||||||
|
url: dataUrl
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
chrome.tabs.onUpdated.addListener(AppendThumbnail);
|
||||||
+1
-2
@@ -4,12 +4,11 @@
|
|||||||
"manifest_version": 2,
|
"manifest_version": 2,
|
||||||
"description": "Classic Microsoft Edge \"Tabs Aside\" feature for Chromium browsers",
|
"description": "Classic Microsoft Edge \"Tabs Aside\" feature for Chromium browsers",
|
||||||
"author": "Michael \"XFox\" Gordeev",
|
"author": "Michael \"XFox\" Gordeev",
|
||||||
"default_locale": "en",
|
|
||||||
"permissions":
|
"permissions":
|
||||||
[
|
[
|
||||||
"tabs",
|
"tabs",
|
||||||
"unlimitedStorage",
|
"unlimitedStorage",
|
||||||
"activeTab"
|
"<all_urls>"
|
||||||
],
|
],
|
||||||
|
|
||||||
"icons":
|
"icons":
|
||||||
|
|||||||
Reference in New Issue
Block a user