-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathoptions.js
More file actions
126 lines (106 loc) · 3.7 KB
/
options.js
File metadata and controls
126 lines (106 loc) · 3.7 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
122
123
124
125
126
// Default settings
const DEFAULT_SETTINGS = {
wcagLevel: 'WCAG-aa-large',
pixelRadius: '3',
useWebGL: true,
captureMode: 'hardware'
};
// Keep track of the current settings in memory
let currentSettings = {};
// Save settings to chrome.storage.sync
function saveSettings() {
const settings = {
wcagLevel: document.querySelector('input[name="wcagLevel"]:checked').value,
pixelRadius: document.getElementById('pixelRadius').value,
useWebGL: document.getElementById('useWebGL').checked,
captureMode: document.querySelector('input[name="captureMode"]:checked').value
};
chrome.storage.sync.set(settings, () => {
// Show success message
const status = document.getElementById('status');
status.classList.add('show');
// Hide message after 2 seconds
setTimeout(() => {
status.classList.remove('show');
}, 2000);
// Update current settings after successful save
currentSettings = { ...settings };
});
}
// Load settings from chrome.storage.sync
function loadSettings() {
chrome.storage.sync.get(DEFAULT_SETTINGS, (settings) => {
// Store the loaded settings
currentSettings = { ...settings };
// Set WCAG level
const wcagRadio = document.querySelector(`input[value="${settings.wcagLevel}"]`);
if (wcagRadio) {
wcagRadio.checked = true;
}
// Set pixel radius
const pixelRadius = document.getElementById('pixelRadius');
if (pixelRadius) {
pixelRadius.value = settings.pixelRadius;
}
// Set WebGL preference
const useWebGL = document.getElementById('useWebGL');
if (useWebGL) {
useWebGL.checked = settings.useWebGL;
}
// Set capture mode
const captureModeRadio = document.querySelector(`input[name="captureMode"][value="${settings.captureMode}"]`);
if (captureModeRadio) {
captureModeRadio.checked = true;
}
// Check WebGL availability and update status
checkWebGLAvailability();
});
}
// Restore the last saved settings
function restoreSettings() {
const wcagRadio = document.querySelector(`input[value="${currentSettings.wcagLevel}"]`);
if (wcagRadio) {
wcagRadio.checked = true;
}
const pixelRadius = document.getElementById('pixelRadius');
if (pixelRadius) {
pixelRadius.value = currentSettings.pixelRadius;
}
const useWebGL = document.getElementById('useWebGL');
if (useWebGL) {
useWebGL.checked = currentSettings.useWebGL;
}
const captureModeRadio = document.querySelector(`input[name="captureMode"][value="${currentSettings.captureMode}"]`);
if (captureModeRadio) {
captureModeRadio.checked = true;
}
}
// Check WebGL availability and update UI
function checkWebGLAvailability() {
const canvas = document.createElement('canvas');
const gl = canvas.getContext('webgl2') || canvas.getContext('webgl');
const webglStatus = document.getElementById('webglStatus');
const useWebGLCheckbox = document.getElementById('useWebGL');
if (gl) {
webglStatus.textContent = '✓ WebGL2/WebGL available - GPU acceleration supported';
webglStatus.className = 'webgl-status available';
useWebGLCheckbox.disabled = false;
} else {
webglStatus.textContent = '✗ WebGL not available - CPU processing only';
webglStatus.className = 'webgl-status unavailable';
useWebGLCheckbox.disabled = true;
useWebGLCheckbox.checked = false;
}
}
// Event listeners
document.addEventListener('DOMContentLoaded', loadSettings);
// Save button click handler
document.getElementById('save').addEventListener('click', () => {
saveSettings();
});
// Close button click handler
document.getElementById('close').addEventListener('click', () => {
// Restore the last saved settings before closing
restoreSettings();
window.close();
});