|
148 | 148 | // @description:zu Yengeza izimpendulo ze-AI ku-Brave Search (inikwa amandla yi-GPT-4o!) |
149 | 149 | // @author KudoAI |
150 | 150 | // @namespace https://kudoai.com |
151 | | -// @version 2025.12.16 |
| 151 | +// @version 2026.1.3 |
152 | 152 | // @license MIT |
153 | 153 | // @icon https://assets.bravegpt.com/images/icons/app/icon48.png?v=e8ca7c2 |
154 | 154 | // @icon64 https://assets.bravegpt.com/images/icons/app/icon64.png?v=e8ca7c2 |
|
1410 | 1410 |
|
1411 | 1411 | // Download code |
1412 | 1412 | const code = codeBlock.textContent.replace(/^>> /, '').trim() + '\n' |
1413 | | - const dlLink = dom.create.anchor(URL.createObjectURL(new Blob([code], { type: 'text/plain' }))) |
1414 | | - const now = new Date(), formattedDate = [ // YYYY-MM-DD |
1415 | | - now.getFullYear(), |
1416 | | - String(now.getMonth() +1).padStart(2, '0'), |
1417 | | - String(now.getDate()).padStart(2, '0') |
1418 | | - ].join('-') |
1419 | | - dlLink.download /* filename */ = `${app.slug}_${blockLang.name.toLowerCase() || 'code'}_${ |
1420 | | - formattedDate}_${Date.now().toString(36)}${ |
1421 | | - blockLang.fileExtension ? '.' + blockLang.fileExtension : '' }` |
1422 | | - document.body.append(dlLink) ; dlLink.click() ; dlLink.remove() // download code |
1423 | | - URL.revokeObjectURL(dlLink.href) // prevent memory leaks |
| 1413 | + const date = new Date().toISOString().split('T')[0] // YYYY-MM-DD |
| 1414 | + const download = `${app.slug}_${blockLang.name.toLowerCase() || 'code'}_${ |
| 1415 | + date}_${Date.now().toString(36)}${blockLang.fileExtension ? '.' + blockLang.fileExtension : ''}` |
| 1416 | + const href = URL.createObjectURL(new Blob([code], { type: 'text/plain' })) |
| 1417 | + const a = dom.create.anchor(href, '', { download, style: 'display: none' }) |
| 1418 | + document.body.append(a) ; a.click() ; a.remove() ; URL.revokeObjectURL(href) |
1424 | 1419 | } |
1425 | 1420 | downloadBtn.onmouseenter = downloadBtn.onmouseleave = tooltip.toggle |
1426 | 1421 |
|
|
2545 | 2540 | xhr({ |
2546 | 2541 | method: 'GET', url: shareURL, |
2547 | 2542 | onload: ({ responseText }) => { |
2548 | | - const dlLink = dom.create.anchor( |
2549 | | - URL.createObjectURL(new Blob([responseText], { type: 'text/html' }))) |
2550 | | - dlLink.download /* filename */ = responseText.match(/<title>([^<]+)<\/title>/i)[1] |
| 2543 | + const download = responseText.match(/<title>([^<]+)<\/title>/i)[1] |
2551 | 2544 | .replace(/\s*[—|/]+\s*/g, ' ') // convert symbols to space for hyphen-casing |
2552 | 2545 | .replace(/\.{2,}/g, '') // strip ellipsis |
2553 | 2546 | .toLowerCase().trim().replace(/\s+/g, '-') // hyphen-case |
2554 | 2547 | + '.html' |
2555 | | - document.body.append(dlLink) ; dlLink.click() ; dlLink.remove() // download HTML |
2556 | | - URL.revokeObjectURL(dlLink.href) // prevent memory leaks |
| 2548 | + const href = URL.createObjectURL(new Blob([responseText], { type: 'text/html' })) |
| 2549 | + const a = dom.create.anchor(href, '', { download, style: 'display: none' }) |
| 2550 | + document.body.append(a) ; a.click() ; a.remove() ; URL.revokeObjectURL(href) |
2557 | 2551 | }, |
2558 | 2552 | onerror: err => log.error('Failed to download chat:', err) |
2559 | 2553 | }) |
|
0 commit comments