mirror of
https://github.com/GoogleChrome/chrome-extensions-samples.git
synced 2026-03-27 13:29:34 +07:00
Getting Started Tutorial: Tabs Manager (#705)
This commit is contained in:
BIN
tutorials/tabs-manager/images/icon-128.png
Normal file
BIN
tutorials/tabs-manager/images/icon-128.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 12 KiB |
BIN
tutorials/tabs-manager/images/icon-16.png
Normal file
BIN
tutorials/tabs-manager/images/icon-16.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 5.3 KiB |
BIN
tutorials/tabs-manager/images/icon-32.png
Normal file
BIN
tutorials/tabs-manager/images/icon-32.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 6.7 KiB |
BIN
tutorials/tabs-manager/images/icon-48.png
Normal file
BIN
tutorials/tabs-manager/images/icon-48.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 9.9 KiB |
20
tutorials/tabs-manager/manifest.json
Normal file
20
tutorials/tabs-manager/manifest.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"manifest_version": 3,
|
||||
"name": "Tab Manager for Google Dev Docs",
|
||||
"version": "1.0",
|
||||
"icons": {
|
||||
"16": "images/icon-16.png",
|
||||
"32": "images/icon-32.png",
|
||||
"48": "images/icon-48.png",
|
||||
"128": "images/icon-128.png"
|
||||
},
|
||||
"action": {
|
||||
"default_popup": "popup.html"
|
||||
},
|
||||
"host_permissions": [
|
||||
"https://developer.chrome.com/*"
|
||||
],
|
||||
"permissions": [
|
||||
"tabGroups"
|
||||
]
|
||||
}
|
||||
40
tutorials/tabs-manager/popup.css
Normal file
40
tutorials/tabs-manager/popup.css
Normal file
@@ -0,0 +1,40 @@
|
||||
/*
|
||||
Copyright 2022 Google LLC
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
You may obtain a copy of the License at
|
||||
|
||||
https://www.apache.org/licenses/LICENSE-2.0
|
||||
|
||||
Unless required by applicable law or agreed to in writing, software
|
||||
distributed under the License is distributed on an "AS IS" BASIS,
|
||||
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
See the License for the specific language governing permissions and
|
||||
limitations under the License.
|
||||
*/
|
||||
|
||||
body {
|
||||
width: 20rem;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style-type: none;
|
||||
padding-inline-start: 0;
|
||||
margin: 1rem 0;
|
||||
}
|
||||
|
||||
li {
|
||||
padding: 0.25rem;
|
||||
}
|
||||
li:nth-child(odd) {
|
||||
background: #80808030;
|
||||
}
|
||||
li:nth-child(even) {
|
||||
background: #ffffff;
|
||||
}
|
||||
|
||||
h3,
|
||||
p {
|
||||
margin: 0;
|
||||
}
|
||||
25
tutorials/tabs-manager/popup.html
Normal file
25
tutorials/tabs-manager/popup.html
Normal file
@@ -0,0 +1,25 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<link rel="stylesheet" href="./popup.css" />
|
||||
</head>
|
||||
<body>
|
||||
<template id="li_template">
|
||||
<li>
|
||||
<a>
|
||||
<h3 class="title">Tab Title</h3>
|
||||
<p class="pathname">Tab Pathname</p>
|
||||
</a>
|
||||
</li>
|
||||
</template>
|
||||
|
||||
<h1>Google Dev Docs</h1>
|
||||
<button>Group Tabs</button>
|
||||
<ul></ul>
|
||||
|
||||
<script src="./popup.js" type="module"></script>
|
||||
</body>
|
||||
</html>
|
||||
50
tutorials/tabs-manager/popup.js
Normal file
50
tutorials/tabs-manager/popup.js
Normal file
@@ -0,0 +1,50 @@
|
||||
// Copyright 2022 Google LLC
|
||||
//
|
||||
// Licensed under the Apache License, Version 2.0 (the "License");
|
||||
// you may not use this file except in compliance with the License.
|
||||
// You may obtain a copy of the License at
|
||||
//
|
||||
// https://www.apache.org/licenses/LICENSE-2.0
|
||||
//
|
||||
// Unless required by applicable law or agreed to in writing, software
|
||||
// distributed under the License is distributed on an "AS IS" BASIS,
|
||||
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
// See the License for the specific language governing permissions and
|
||||
// limitations under the License.
|
||||
|
||||
const tabs = await chrome.tabs.query({
|
||||
url: [
|
||||
"https://developer.chrome.com/docs/webstore/*",
|
||||
"https://developer.chrome.com/docs/extensions/*",
|
||||
],
|
||||
});
|
||||
|
||||
// https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Intl/Collator
|
||||
const collator = new Intl.Collator();
|
||||
tabs.sort((a, b) => collator.compare(a.title, b.title));
|
||||
|
||||
const template = document.getElementById("li_template");
|
||||
const elements = new Set();
|
||||
for (const tab of tabs) {
|
||||
const element = template.content.firstElementChild.cloneNode(true);
|
||||
|
||||
const title = tab.title.split("-")[0].trim();
|
||||
const pathname = new URL(tab.url).pathname.slice("/docs".length);
|
||||
|
||||
element.querySelector(".title").textContent = title;
|
||||
element.querySelector(".pathname").textContent = pathname;
|
||||
element.querySelector("a").addEventListener("click", async () => {
|
||||
// need to focus window as well as activate tab
|
||||
await chrome.windows.update(tab.windowId, { focused: true });
|
||||
await chrome.tabs.update(tab.id, { active: true });
|
||||
});
|
||||
|
||||
elements.add(element);
|
||||
}
|
||||
document.querySelector("ul").append(...elements);
|
||||
|
||||
const button = document.querySelector("button");
|
||||
button.addEventListener("click", async () => {
|
||||
const group = await chrome.tabs.group({ tabIds: tabs.map(({ id }) => id) });
|
||||
await chrome.tabGroups.update(group, { title: "DOCS" });
|
||||
});
|
||||
Reference in New Issue
Block a user