-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbackground.js
More file actions
121 lines (109 loc) · 4.66 KB
/
Copy pathbackground.js
File metadata and controls
121 lines (109 loc) · 4.66 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
// Background script for AI Sidebar
let sidebarState = {
isOpen: false
};
// Handle messages from sidebar
browser.runtime.onMessage.addListener((message, sender, sendResponse) => {
console.log('Background received message:', message);
switch (message.action) {
case 'getSidebarState':
console.log('Returning sidebar state:', sidebarState.isOpen);
sendResponse({ isOpen: sidebarState.isOpen });
break;
case 'sidebarOpened':
console.log('📂 Sidebar opened - updating state from', sidebarState.isOpen, 'to true');
sidebarState.isOpen = true;
sendResponse({ success: true });
break;
case 'sidebarClosed':
console.log('📁 Sidebar closed - updating state from', sidebarState.isOpen, 'to false');
sidebarState.isOpen = false;
sendResponse({ success: true });
break;
case 'setSidebarState':
sidebarState.isOpen = message.isOpen;
sendResponse({ success: true });
break;
}
return true; // Keep message channel open for async response
});
// Handle browser action (extension icon) clicks to toggle sidebar
if (browser.browserAction && browser.browserAction.onClicked) {
browser.browserAction.onClicked.addListener(async (tab) => {
console.log('🖱️ Browser action clicked - toggling sidebar');
try {
// Toggle the sidebar using the sidebarAction API
if (browser.sidebarAction) {
if (sidebarState.isOpen) {
// Close the sidebar
await browser.sidebarAction.close();
sidebarState.isOpen = false;
console.log('✅ Sidebar closed via browser action');
} else {
// Open the sidebar
await browser.sidebarAction.open();
sidebarState.isOpen = true;
console.log('✅ Sidebar opened via browser action');
}
} else {
console.log('❌ sidebarAction API not available');
}
} catch (error) {
console.log('❌ Error toggling sidebar:', error.message);
// Fallback: try to use keyboard shortcut simulation
try {
if (tab && tab.id) {
// Try injecting a keyboard shortcut as fallback
browser.tabs.executeScript(tab.id, {
code: `
// Dispatch F1 key event to toggle sidebar
document.dispatchEvent(new KeyboardEvent('keydown', {
key: 'F1',
code: 'F1',
keyCode: 112,
bubbles: true,
cancelable: true
}));
`
});
console.log('🔄 Fallback: F1 key simulation attempted');
}
} catch (fallbackError) {
console.log('❌ Fallback method also failed:', fallbackError.message);
}
}
});
} else if (chrome.action && chrome.action.onClicked) {
// Chrome/Chromium browsers use chrome.action instead of browserAction
chrome.action.onClicked.addListener(async (tab) => {
console.log('🖱️ Chrome action clicked - toggling sidebar');
try {
if (chrome.sidePanel) {
// Chrome uses sidePanel API
if (sidebarState.isOpen) {
await chrome.sidePanel.setOptions({ enabled: false });
sidebarState.isOpen = false;
console.log('✅ Side panel closed via Chrome action');
} else {
await chrome.sidePanel.setOptions({
enabled: true,
path: 'sidebar/sidebar.html'
});
sidebarState.isOpen = true;
console.log('✅ Side panel opened via Chrome action');
}
}
} catch (error) {
console.log('❌ Error with Chrome side panel:', error.message);
}
});
}
// Check initial sidebar state when extension starts
browser.runtime.onStartup.addListener(() => {
sidebarState.isOpen = false;
console.log('Extension startup, sidebar state reset');
});
browser.runtime.onInstalled.addListener(() => {
sidebarState.isOpen = false;
console.log('Extension installed/updated, sidebar state reset');
});