/** * i-Darts RAG Chatbot Widget - Embed Loader * Lightweight loader script for easy integration * Version: 1.0.0 * * Usage: * */ (function() { 'use strict'; console.log('[IDartsWidget] Embed loader started'); // Get current script element const currentScript = document.currentScript || document.querySelector('script[src*="embed.js"]'); if (!currentScript) { console.error('[IDartsWidget] Could not find embed script element'); return; } // Read configuration from data attributes const config = { apiUrl: currentScript.getAttribute('data-api-url') || 'http://localhost:8000', themeColor: currentScript.getAttribute('data-theme-color') || '#1e3a8a', welcomeMessage: currentScript.getAttribute('data-welcome-message') || 'Hi! How can I help you?', position: currentScript.getAttribute('data-position') || 'bottom-right' }; // Get base URL from script src const scriptSrc = currentScript.src; const baseUrl = scriptSrc.substring(0, scriptSrc.lastIndexOf('/')); console.log('[IDartsWidget] Config:', config); console.log('[IDartsWidget] Base URL:', baseUrl); // Load CSS function loadCSS() { return new Promise((resolve, reject) => { const link = document.createElement('link'); link.rel = 'stylesheet'; link.href = `${baseUrl}/chatbot-widget.css`; link.onload = () => { console.log('[IDartsWidget] CSS loaded'); resolve(); }; link.onerror = () => { console.error('[IDartsWidget] Failed to load CSS'); reject(new Error('Failed to load CSS')); }; document.head.appendChild(link); }); } // Load JavaScript function loadJS() { return new Promise((resolve, reject) => { const script = document.createElement('script'); script.src = `${baseUrl}/chatbot-widget.js`; script.async = true; script.onload = () => { console.log('[IDartsWidget] JavaScript loaded'); resolve(); }; script.onerror = () => { console.error('[IDartsWidget] Failed to load JavaScript'); reject(new Error('Failed to load JavaScript')); }; document.body.appendChild(script); }); } // Initialize widget after DOM is ready function initWidget() { if (typeof window.IDartsChatWidget === 'undefined') { console.error('[IDartsWidget] Widget class not found'); return; } try { window.idartsWidget = new window.IDartsChatWidget(config); console.log('[IDartsWidget] Widget initialized successfully'); } catch (error) { console.error('[IDartsWidget] Failed to initialize widget:', error); } } // Load resources and initialize function load() { Promise.all([loadCSS(), loadJS()]) .then(() => { // Wait for DOM if not ready if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', initWidget); } else { initWidget(); } }) .catch((error) => { console.error('[IDartsWidget] Failed to load widget:', error); }); } // Start loading if (document.readyState === 'loading') { document.addEventListener('DOMContentLoaded', load); } else { load(); } })();