MediaWiki:Common.js: Difference between revisions
Jump to navigation
Jump to search
No edit summary |
No edit summary |
||
| Line 13: | Line 13: | ||
btn.id = 'nanofab-chat-btn'; | btn.id = 'nanofab-chat-btn'; | ||
btn.setAttribute('aria-label', 'Open NanoFab Assistant'); | btn.setAttribute('aria-label', 'Open NanoFab Assistant'); | ||
btn.textContent = ' | btn.textContent = '💬'; | ||
var frameWrap = document.createElement('div'); | var frameWrap = document.createElement('div'); | ||
| Line 44: | Line 44: | ||
function closeChat() { | function closeChat() { | ||
frameWrap.style.display = 'none'; | frameWrap.style.display = 'none'; | ||
btn.textContent = ' | btn.textContent = '💬'; | ||
} | } | ||
Revision as of 16:13, 18 August 2026
/* Any JavaScript here will be loaded for all users on every page load. */
/*Update by Chandan Ramakrishnaiah Aug 18 2026*/
/* NanoFab Chat Assistant — embed iframe widget will appear on every page */
(function () {
if (window.self !== window.top) return;
var action = mw.config.get('wgAction');
if (action && action !== 'view') return;
var CHAT_URL = 'https://nanofab-assistant.tailf13c08.ts.net';
var btn = document.createElement('button');
btn.id = 'nanofab-chat-btn';
btn.setAttribute('aria-label', 'Open NanoFab Assistant');
btn.textContent = '💬';
var frameWrap = document.createElement('div');
frameWrap.id = 'nanofab-chat-wrap';
frameWrap.style.display = 'none';
var iframe = document.createElement('iframe');
iframe.src = CHAT_URL;
iframe.title = 'NanoFab Assistant';
iframe.setAttribute('sandbox', 'allow-scripts allow-same-origin allow-forms');
iframe.setAttribute('loading', 'lazy');
frameWrap.appendChild(iframe);
// Greeting speech bubble — lives entirely on the wiki page (not inside the
// iframe), so this is the only "pop up" text this code can actually control.
var greeting = document.createElement('div');
greeting.id = 'nanofab-chat-greeting';
greeting.innerHTML = "Hi! I'm your NanoFab chatbot \u2014 ask me any question!" +
'<button id="nanofab-chat-greeting-close" aria-label="Dismiss">\u00d7</button>';
document.body.appendChild(frameWrap);
document.body.appendChild(btn);
document.body.appendChild(greeting);
function openChat() {
frameWrap.style.display = 'block';
btn.textContent = 'Close';
greeting.style.display = 'none';
}
function closeChat() {
frameWrap.style.display = 'none';
btn.textContent = '💬';
}
btn.addEventListener('click', function () {
var isOpen = frameWrap.style.display === 'block';
if (isOpen) { closeChat(); } else { openChat(); }
});
greeting.addEventListener('click', function () {
openChat();
});
greeting.querySelector('#nanofab-chat-greeting-close').addEventListener('click', function (e) {
e.stopPropagation();
greeting.style.display = 'none';
});
// Show the greeting bubble ~1.5s after the page loads.
setTimeout(function () {
greeting.style.display = 'block';
}, 1500);
})();