Appearance
Widget API Reference
The Widget API is the primary interface for programmatically controlling the BrowseAid Widget. It provides methods for tool management, event handling, and configuration.
Accessing the API
The API is available globally after the widget is initialized:
javascript
const api = window.BrowseAidWidget.api;1
Tool Management Methods
enableTool(toolName, options?)
Enables a specific accessibility tool with optional configuration.
Parameters:
toolName(string): Name of the tool to enableoptions(object, optional): Additional settings to apply
Returns: void
Throws: Error if tool is not found
Example:
javascript
// Enable dark mode
api.enableTool('dark-mode');
// Enable blue light filter with specific level
api.enableTool('blue-light-filter', {
level: 'high'
});
// Enable reading mask with custom settings
api.enableTool('reading-mask', {
windowHeight: 200,
maskOpacity: 0.8
});1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
disableTool(toolName)
Disables a specific tool and resets it to default settings.
Parameters:
toolName(string): Name of the tool to disable
Returns: void
Throws: Error if tool is not found
Example:
javascript
// Disable dark mode
api.disableTool('dark-mode');
// Disable contrast tool
api.disableTool('contrast');1
2
3
4
5
2
3
4
5
toggleTool(toolName, options?)
Toggles a tool's enabled state. If disabled, enables it with optional settings. If enabled, disables it.
Parameters:
toolName(string): Name of the tool to toggleoptions(object, optional): Settings to apply when enabling (ignored when disabling)
Returns: boolean - New enabled state
Throws: Error if tool is not found
Example:
javascript
// Simple toggle
const isEnabled = api.toggleTool('dark-mode');
console.log('Dark mode is now:', isEnabled ? 'enabled' : 'disabled');
// Toggle with options when enabling
api.toggleTool('blue-light-filter', {
level: 'medium'
});1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
updateTool(toolName, settings)
Updates a tool with specific settings without changing its enabled state.
Parameters:
toolName(string): Name of the tool to updatesettings(object): Complete settings object to apply
Returns: void
Throws: Error if tool is not found
Example:
javascript
// Update saturation tool
api.updateTool('saturation', {
enabled: true,
level: 150
});
// Update hide images tool
api.updateTool('hide-images', {
enabled: true,
showAltText: true,
skipSmallImages: true
});1
2
3
4
5
6
7
8
9
10
11
12
2
3
4
5
6
7
8
9
10
11
12
getToolState(toolName)
Retrieves the current state and settings of a specific tool.
Parameters:
toolName(string): Name of the tool to query
Returns: object | null - Tool settings object or null if not found
Example:
javascript
// Get dark mode state
const darkModeState = api.getToolState('dark-mode');
console.log('Dark mode enabled:', darkModeState?.enabled);
// Get blue light filter settings
const filterState = api.getToolState('blue-light-filter');
console.log('Filter level:', filterState?.level);1
2
3
4
5
6
7
2
3
4
5
6
7
resetAllTools()
Resets all tools to their default settings.
Parameters: None
Returns: void
Example:
javascript
// Reset everything
api.resetAllTools();1
2
2
Widget Control Methods
showWidget()
Makes the widget interface visible.
Parameters: None
Returns: void
Example:
javascript
api.showWidget();1
hideWidget()
Hides the widget interface.
Parameters: None
Returns: void
Example:
javascript
api.hideWidget();1
toggleWidget()
Toggles the widget's visibility state.
Parameters: None
Returns: boolean - New visibility state
Example:
javascript
const isVisible = api.toggleWidget();
console.log('Widget is now:', isVisible ? 'visible' : 'hidden');1
2
2
Language Methods
setLanguage(language)
Changes the widget's language.
Parameters:
language(string): Language code (e.g., 'en', 'es', 'fr')
Returns: void
Example:
javascript
// Change to Spanish
api.setLanguage('es');
// Change to French
api.setLanguage('fr');1
2
3
4
5
2
3
4
5
getLanguage()
Gets the current widget language.
Parameters: None
Returns: string - Current language code
Example:
javascript
const currentLang = api.getLanguage();
console.log('Current language:', currentLang);1
2
2
Event Listener Methods
onToolChange(callback)
Registers a callback for tool state changes.
Parameters:
callback(function): Function called when any tool changes statetoolName(string): Name of the changed toolsettings(object): New tool settings
Returns: function - Unsubscribe function
Example:
javascript
// Listen for tool changes
const unsubscribe = api.onToolChange((toolName, settings) => {
console.log(`Tool ${toolName} changed:`, settings);
if (toolName === 'dark-mode' && settings.enabled) {
console.log('Dark mode was enabled!');
}
});
// Later, unsubscribe
unsubscribe();1
2
3
4
5
6
7
8
9
10
11
2
3
4
5
6
7
8
9
10
11
onVisibilityChange(callback)
Registers a callback for widget visibility changes.
Parameters:
callback(function): Function called when widget visibility changesisVisible(boolean): New visibility state
Returns: function - Unsubscribe function
Example:
javascript
const unsubscribe = api.onVisibilityChange((isVisible) => {
console.log('Widget is now:', isVisible ? 'visible' : 'hidden');
});1
2
3
2
3
onLanguageChange(callback)
Registers a callback for language changes.
Parameters:
callback(function): Function called when language changesnewLanguage(string): New language code
Returns: function - Unsubscribe function
Example:
javascript
const unsubscribe = api.onLanguageChange((newLanguage) => {
console.log('Language changed to:', newLanguage);
// Update your app's language
myApp.setLanguage(newLanguage);
});1
2
3
4
5
6
2
3
4
5
6
onInit(callback)
Registers a callback for widget initialization.
Parameters:
callback(function): Function called when widget initializesisInitialized(boolean): Initialization state
Returns: function - Unsubscribe function
Example:
javascript
const unsubscribe = api.onInit((isInitialized) => {
if (isInitialized) {
console.log('Widget is ready!');
// Safe to use other API methods now
api.enableTool('dark-mode');
}
});1
2
3
4
5
6
7
8
2
3
4
5
6
7
8
Complete Example
Here's a comprehensive example showing various API usage patterns:
javascript
// Wait for widget to initialize
api.onInit((isInitialized) => {
if (!isInitialized) return;
console.log('BrowseAid Widget initialized!');
// Set up event listeners
const toolChangeUnsubscribe = api.onToolChange((toolName, settings) => {
console.log(`${toolName} updated:`, settings);
// Send analytics event
analytics.track('accessibility_tool_changed', {
tool: toolName,
enabled: settings.enabled
});
});
// Language change listener
const langChangeUnsubscribe = api.onLanguageChange((newLanguage) => {
console.log(`Language changed to: ${newLanguage}`);
document.documentElement.lang = newLanguage;
});
// Enable tools based on user preferences
const userPrefs = getUserPreferences();
if (userPrefs.darkMode) {
api.enableTool('dark-mode');
}
if (userPrefs.highContrast) {
api.enableTool('contrast', { level: 1.4 });
}
if (userPrefs.language !== 'en') {
api.setLanguage(userPrefs.language);
}
// Set up keyboard shortcuts
document.addEventListener('keydown', (event) => {
// Ctrl+Alt+D to toggle dark mode
if (event.ctrlKey && event.altKey && event.key === 'd') {
event.preventDefault();
api.toggleTool('dark-mode');
}
// Ctrl+Alt+W to toggle widget
if (event.ctrlKey && event.altKey && event.key === 'w') {
event.preventDefault();
api.toggleWidget();
}
});
// Clean up on page unload
window.addEventListener('beforeunload', () => {
toolChangeUnsubscribe();
langChangeUnsubscribe();
});
});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
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
Error Handling Best Practices
Always wrap API calls in try-catch blocks for robust error handling:
javascript
function safeEnableTool(toolName, options = {}) {
try {
api.enableTool(toolName, options);
return true;
} catch (error) {
console.error(`Failed to enable ${toolName}:`, error.message);
// Show user-friendly message
showNotification(`Accessibility tool "${toolName}" is not available.`);
return false;
}
}
function safeBatchUpdate(tools) {
const results = {};
for (const [toolName, settings] of Object.entries(tools)) {
try {
api.updateTool(toolName, settings);
results[toolName] = { success: true };
} catch (error) {
results[toolName] = {
success: false,
error: error.message
};
}
}
return results;
}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
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