eltMATE

Download free resources and materials for CELTA, DELTA, TEFL, TESOL teacher training & professional development courses — all in one place!

Who Are These Resources For?

TEACHER TRAINERS

Download ready-to-use worksheets with answer keys for your input sessions and workshops.

TEACHER STUDENTS

Download self-access readings with key ELT concepts and pedagogy to support your learning.

INSTITUTIONS

Discover tailor-made courses and training sessions for your educational institution.

CUSTOMISED COURSES

Need expert support in designing and delivering a customised teacher training session or course for your institution?
Let’s create something impactful together!

Say Hello!

eltmate-mail

    This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

    QUICK LINKS

    Copyright eltmate.com – Privacy policy

    "; const source = 'data:application/vnd.ms-word;charset=utf-8,' + encodeURIComponent(header + contentHtml + footer); const fileLink = document.createElement("a"); fileLink.href = source; fileLink.download = `${fileName}.doc`; fileLink.click(); }function generatePDF(contentHtml) { const fileName = getDynamicFileName(); const printWindow = window.open('', '_blank'); if (!printWindow) { alert("Please allow pop-ups."); return; } printWindow.document.write(`${fileName}
    Preparing PDF...
    ${contentHtml}`); printWindow.document.close(); setTimeout(() => { printWindow.focus(); printWindow.print(); if (!/Android|iPhone|iPad|iPod/i.test(navigator.userAgent)) { printWindow.onfocus = function() { printWindow.close(); }; } }, 1000); }// --- 3. OBSERVER LOGIC --- const observer = new MutationObserver((mutations) => { const resultsWrapper = document.querySelector('.aipkit-ai-form-results'); const resultsContent = document.querySelector('.aipkit-ai-form-results-content'); // ONLY show buttons if results wrapper is visible AND contains actual text if (resultsWrapper && resultsWrapper.style.display !== 'none' && resultsContent && resultsContent.innerText.trim().length > 50 && !document.getElementById('custom-ai-toolbar')) { const nativeActions = resultsWrapper.querySelector('.aipkit-ai-form-results-top-actions'); if (nativeActions) nativeActions.style.display = 'none';const toolbar = document.createElement('div'); toolbar.id = 'custom-ai-toolbar'; toolbar.style.cssText = 'display:flex; justify-content:center; align-items:center; gap:15px; margin:30px 0; padding:10px; flex-wrap:wrap; width:100%;';const styleTag = document.createElement('style'); styleTag.innerHTML = ` .ai-custom-btn { width: 100px; height: 50px; background-color: #fa4f83; color: white !important; border: none !important; border-radius: 4px; font-family: inherit; font-weight: 500 !important; /* Force font weight */ display: flex; flex-direction: row; /* Horizontal layout */ align-items: center; justify-content: center; cursor: pointer; transition: background 0.3s ease; font-size: 13px; text-align: center; box-sizing: border-box; } .ai-custom-btn i { font-size: 16px; margin-right: 8px; /* Space to the right of icon */ } .ai-custom-btn:hover { background-color: #d4436f; } .ai-custom-btn span { font-weight: 500 !important; } `; document.head.appendChild(styleTag);const copyBtn = document.createElement('button'); copyBtn.className = 'ai-custom-btn'; copyBtn.innerHTML = 'COPY';const wordBtn = document.createElement('button'); wordBtn.className = 'ai-custom-btn'; wordBtn.innerHTML = 'WORD';const pdfBtn = document.createElement('button'); pdfBtn.className = 'ai-custom-btn'; pdfBtn.innerHTML = 'PDF';copyBtn.onclick = async function() { if (await copyFormattedHtml(resultsContent.innerHTML)) { const oldInner = copyBtn.innerHTML; copyBtn.innerHTML = 'DONE'; setTimeout(() => { copyBtn.innerHTML = oldInner; }, 2000); } };wordBtn.onclick = () => generateWord(resultsContent.innerHTML); pdfBtn.onclick = () => generatePDF(resultsContent.innerHTML);toolbar.appendChild(copyBtn); toolbar.appendChild(wordBtn); toolbar.appendChild(pdfBtn); resultsWrapper.parentNode.insertBefore(toolbar, resultsWrapper.nextSibling); } });observer.observe(document.body, { childList: true, subtree: true }); })();