| | |
| |
|
| | let lastHeadImg = null; |
| |
|
| | let notificationButton = null; |
| |
|
| | onAfterUiUpdate(function() { |
| | if (notificationButton == null) { |
| | notificationButton = gradioApp().getElementById('request_notifications'); |
| |
|
| | if (notificationButton != null) { |
| | notificationButton.addEventListener('click', () => { |
| | void Notification.requestPermission(); |
| | }, true); |
| | } |
| | } |
| |
|
| | const galleryPreviews = gradioApp().querySelectorAll('div[id^="tab_"][style*="display: block"] div[id$="_results"] .thumbnail-item > img'); |
| |
|
| | if (galleryPreviews == null) return; |
| |
|
| | const headImg = galleryPreviews[0]?.src; |
| |
|
| | if (headImg == null || headImg == lastHeadImg) return; |
| |
|
| | lastHeadImg = headImg; |
| |
|
| | |
| | gradioApp().querySelector('#audio_notification audio')?.play(); |
| |
|
| | if (document.hasFocus()) return; |
| |
|
| | |
| | const imgs = new Set(Array.from(galleryPreviews).map(img => img.src)); |
| |
|
| | const notification = new Notification( |
| | 'Stable Diffusion', |
| | { |
| | body: `Generated ${imgs.size > 1 ? imgs.size - opts.return_grid : 1} image${imgs.size > 1 ? 's' : ''}`, |
| | icon: headImg, |
| | image: headImg, |
| | } |
| | ); |
| |
|
| | notification.onclick = function(_) { |
| | parent.focus(); |
| | this.close(); |
| | }; |
| | }); |
| |
|