Our programs
At Amplify, we support teachers in delivering inspiring, impactful lessons that celebrate and develop the thinking of all their students. See how we build high-quality programs.
as a hotfix. Idempotent — safe if injected twice. */ ( function () { if ( window.__aiSearchHotfixApplied ) { return; } window.__aiSearchHotfixApplied = true; var SALESPEAK_WIDGET_SELECTOR = '#salespeak-widget'; var SALESPEAK_LAUNCHER_SELECTOR = '#salespeak-widget .launcher-container'; var SALESPEAK_LAUNCHER_LOADING_CLASS = 'launcher-container--loading'; var SALESPEAK_OPEN_CLASS = 'iframe-visible'; var SALESPEAK_WAIT_TIMEOUT = 8000; function isWidgetOpen() { var widget = document.querySelector( SALESPEAK_WIDGET_SELECTOR ); return !! widget && widget.classList.contains( SALESPEAK_OPEN_CLASS ); } function getReadyLauncher() { var launcher = document.querySelector( SALESPEAK_LAUNCHER_SELECTOR ); if ( launcher && ! launcher.classList.contains( SALESPEAK_LAUNCHER_LOADING_CLASS ) ) { return launcher; } return null; } function waitForLauncher( timeout ) { var existing = getReadyLauncher(); if ( existing ) { return Promise.resolve( existing ); } return new Promise( function ( resolve, reject ) { var timer = setTimeout( function () { observer.disconnect(); reject( new Error( 'Salespeak launcher did not become ready in time.' ) ); }, timeout ); var observer = new MutationObserver( function () { var launcher = getReadyLauncher(); if ( launcher ) { observer.disconnect(); clearTimeout( timer ); resolve( launcher ); } } ); observer.observe( document.body, { childList: true, subtree: true, attributes: true, attributeFilter: [ 'class' ], } ); } ); } function openAiSearch() { if ( isWidgetOpen() ) { return; } waitForLauncher( SALESPEAK_WAIT_TIMEOUT ) .then( function ( launcher ) { launcher.click(); } ) .catch( function () { // eslint-disable-next-line no-console console.warn( 'Salespeak launcher not found; AI search chat could not be opened.' ); } ); } // Capture phase + stopImmediatePropagation blocks the original // document-level bubble-phase listener from index.js before it runs. document.addEventListener( 'click', function ( event ) { var trigger = event.target.closest( '[data-ai-search]' ); if ( ! trigger ) { return; } event.preventDefault(); event.stopImmediatePropagation(); openAiSearch(); }, true ); } )();
At Amplify, we support teachers in delivering inspiring, impactful lessons that celebrate and develop the thinking of all their students. See how we build high-quality programs.