Skip to content

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;

Tool Management Methods

enableTool(toolName, options?)

Enables a specific accessibility tool with optional configuration.

Parameters:

  • toolName (string): Name of the tool to enable
  • options (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
});

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');

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 toggle
  • options (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'
});

updateTool(toolName, settings)

Updates a tool with specific settings without changing its enabled state.

Parameters:

  • toolName (string): Name of the tool to update
  • settings (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
});

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);

resetAllTools()

Resets all tools to their default settings.

Parameters: None

Returns: void

Example:

javascript
// Reset everything
api.resetAllTools();

Widget Control Methods

showWidget()

Makes the widget interface visible.

Parameters: None

Returns: void

Example:

javascript
api.showWidget();

hideWidget()

Hides the widget interface.

Parameters: None

Returns: void

Example:

javascript
api.hideWidget();

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');

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');

getLanguage()

Gets the current widget language.

Parameters: None

Returns: string - Current language code

Example:

javascript
const currentLang = api.getLanguage();
console.log('Current language:', currentLang);

Event Listener Methods

onToolChange(callback)

Registers a callback for tool state changes.

Parameters:

  • callback (function): Function called when any tool changes state
    • toolName (string): Name of the changed tool
    • settings (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();

onVisibilityChange(callback)

Registers a callback for widget visibility changes.

Parameters:

  • callback (function): Function called when widget visibility changes
    • isVisible (boolean): New visibility state

Returns: function - Unsubscribe function

Example:

javascript
const unsubscribe = api.onVisibilityChange((isVisible) => {
  console.log('Widget is now:', isVisible ? 'visible' : 'hidden');
});

onLanguageChange(callback)

Registers a callback for language changes.

Parameters:

  • callback (function): Function called when language changes
    • newLanguage (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);
});

onInit(callback)

Registers a callback for widget initialization.

Parameters:

  • callback (function): Function called when widget initializes
    • isInitialized (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');
  }
});

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();
  });
});

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;
}

BrowseAid Documentation