chrome-extension-cli
Version:
The CLI for your next Chrome Extension.
78 lines (67 loc) • 1.87 kB
text/typescript
;
import './sidepanel.css';
(function () {
function initList(tabs: chrome.tabs.Tab[]) {
const list = document.getElementById('tabs-list')!;
const listItem = tabs.map((tab) => {
return `
<li>
<div data-tab-id="${tab.id}" class="tab-container">
${
tab.favIconUrl
? `<img src="${tab.favIconUrl}" alt="" class="tab-image" />`
: '<span class="tab-image tab-image-placeholder">❐</span>'
}
<p class="tab-title" title="${tab.title}">${tab.title}</p>
</div>
</li>
`;
});
list.innerHTML = listItem.join('\n');
list.addEventListener('click', (event) => {
if (
event.target &&
(event.target as HTMLElement).closest('.tab-container')
) {
const tabId = (event.target as HTMLElement)
.closest('.tab-container')!
.getAttribute('data-tab-id');
chrome.tabs.update(Number(tabId), {
active: true,
});
}
});
}
function setupTabList() {
chrome.tabs.query(
{
currentWindow: true,
},
(tabs: chrome.tabs.Tab[]) => {
initList(tabs);
}
);
}
function setupTabListeners() {
chrome.tabs.onCreated.addListener(setupTabList);
chrome.tabs.onMoved.addListener(setupTabList);
chrome.tabs.onRemoved.addListener(setupTabList);
chrome.tabs.onUpdated.addListener(setupTabList);
}
document.addEventListener('DOMContentLoaded', () => {
setupTabList();
setupTabListeners();
});
// Communicate with background file by sending a message
chrome.runtime.sendMessage(
{
type: 'GREETINGS',
payload: {
message: 'Hello, my name is Syd. I am from SidePanel.',
},
},
(response) => {
console.log(response.message);
}
);
})();