// EngageLive Google Slides Add-on // Sidebar integration to host live sessions during presentations /** * Called when the add-on is opened via Extensions menu */ function onOpen(e) { SlidesApp.getUi() .createAddonMenu() .addItem('🎯 Open EngageLive', 'showSidebar') .addItem('📱 Insert QR Code', 'insertQRCode') .addSeparator() .addItem('❓ Help', 'openHelp') .addToUi(); } /** * Required for editor add-ons */ function onFileScopeGranted(e) { showSidebar(); } /** * Open the EngageLive sidebar */ function showSidebar() { var html = HtmlService.createHtmlOutputFromFile('sidebar') .setTitle('EngageLive') .setWidth(320); SlidesApp.getUi().showSidebar(html); } /** * Insert a QR code image onto the current slide * Called from the sidebar via google.script.run */ function insertQRCode(sessionCode) { var code = sessionCode || promptForCode(); if (!code) return { success: false, error: 'No session code provided' }; try { var presentation = SlidesApp.getActivePresentation(); var slide = presentation.getSelection().getCurrentPage(); if (!slide) slide = presentation.getSlides()[0]; var joinUrl = 'https://postlister.com/engagelive/?join=' + code; var qrUrl = 'https://chart.googleapis.com/chart?cht=qr&chs=300x300&chl=' + encodeURIComponent(joinUrl) + '&choe=UTF-8'; // Insert QR code image var image = slide.insertImage(qrUrl, 50, 80, 200, 200); // Insert session code label below var textBox = slide.insertTextBox( 'Scan to join\nCode: ' + code, 50, 285, 200, 55 ); var style = textBox.getText().getTextStyle(); style.setFontSize(14); style.setBold(true); style.setForegroundColor('#E8400C'); textBox.getText().getParagraphs()[0] .getRange().getTextStyle().setFontSize(12); presentation.saveAndClose(); return { success: true, message: 'QR code inserted on slide!' }; } catch(e) { return { success: false, error: e.toString() }; } } function promptForCode() { var ui = SlidesApp.getUi(); var result = ui.prompt( 'Insert QR Code', 'Enter your EngageLive session code:', ui.ButtonSet.OK_CANCEL ); if (result.getSelectedButton() === ui.Button.OK) { return result.getResponseText().trim().toUpperCase(); } return null; } function openHelp() { var html = HtmlService.createHtmlOutput( '' ); SlidesApp.getUi().showModalDialog(html, 'Opening help...'); } /** * Get current user email (for pre-filling host form) */ function getUserEmail() { try { return Session.getActiveUser().getEmail() || ''; } catch(e) { return ''; } }