|
225 | 225 | // @description:zu Dlala izimpendulo ze-ChatGPT ngokuzenzakalela |
226 | 226 | // @author Adam Lui |
227 | 227 | // @namespace https://github.com/adamlui |
228 | | -// @version 2025.9.5.4 |
| 228 | +// @version 2025.9.5.5 |
229 | 229 | // @license MIT |
230 | 230 | // @icon data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E |
231 | 231 | // @icon64 data:image/svg+xml,%3Csvg%20xmlns=%22http://www.w3.org/2000/svg%22%20width=%22180%22%20height=%22180%22%20fill=%22none%22%3E%3Cstyle%3E:root%7B--primary-fill:%23000;--secondary-fill:%23fff;%7D@media%20(prefers-color-scheme:dark)%7B:root%7B--primary-fill:%23fff;--secondary-fill:%23000;%7D%7D%3C/style%3E%3Cg%20clip-path=%22url(%23a)%22%3E%3Crect%20width=%22180%22%20height=%22180%22%20fill=%22var(--primary-fill)%22%20rx=%2290%22/%3E%3Cg%20clip-path=%22url(%23b)%22%3E%3Cpath%20fill=%22var(--secondary-fill)%22%20d=%22M75.91%2073.628V62.232c0-.96.36-1.68%201.199-2.16l22.912-13.194c3.119-1.8%206.838-2.639%2010.676-2.639%2014.394%200%2023.511%2011.157%2023.511%2023.032%200%20.839%200%201.799-.12%202.758l-23.752-13.914c-1.439-.84-2.879-.84-4.318%200L75.91%2073.627Zm53.499%2044.383v-27.23c0-1.68-.72-2.88-2.159-3.719L97.142%2069.55l9.836-5.638c.839-.48%201.559-.48%202.399%200l22.912%2013.195c6.598%203.839%2011.035%2011.995%2011.035%2019.912%200%209.116-5.397%2017.513-13.915%2020.992v.001Zm-60.577-23.99-9.836-5.758c-.84-.48-1.2-1.2-1.2-2.16v-26.39c0-12.834%209.837-22.55%2023.152-22.55%205.039%200%209.716%201.679%2013.676%204.678L70.993%2055.516c-1.44.84-2.16%202.039-2.16%203.719v34.787-.002Zm21.173%2012.234L75.91%2098.339V81.546l14.095-7.917%2014.094%207.917v16.793l-14.094%207.916Zm9.056%2036.467c-5.038%200-9.716-1.68-13.675-4.678l23.631-13.676c1.439-.839%202.159-2.038%202.159-3.718V85.863l9.956%205.757c.84.48%201.2%201.2%201.2%202.16v26.389c0%2012.835-9.957%2022.552-23.27%2022.552v.001Zm-28.43-26.75L47.72%20102.778c-6.599-3.84-11.036-11.996-11.036-19.913%200-9.236%205.518-17.513%2014.034-20.992v27.35c0%201.68.72%202.879%202.16%203.718l29.989%2017.393-9.837%205.638c-.84.48-1.56.48-2.399%200Zm-1.318%2019.673c-13.555%200-23.512-10.196-23.512-22.792%200-.959.12-1.919.24-2.879l23.63%2013.675c1.44.84%202.88.84%204.32%200l30.108-17.392v11.395c0%20.96-.361%201.68-1.2%202.16l-22.912%2013.194c-3.119%201.8-6.837%202.639-10.675%202.639Zm29.748%2014.274c14.515%200%2026.63-10.316%2029.39-23.991%2013.434-3.479%2022.071-16.074%2022.071-28.91%200-8.396-3.598-16.553-10.076-22.43.6-2.52.96-5.039.96-7.557%200-17.153-13.915-29.99-29.989-29.99-3.239%200-6.358.48-9.477%201.56-5.398-5.278-12.835-8.637-20.992-8.637-14.515%200-26.63%2010.316-29.39%2023.991-13.434%203.48-22.07%2016.074-22.07%2028.91%200%208.396%203.598%2016.553%2010.075%2022.431-.6%202.519-.96%205.038-.96%207.556%200%2017.154%2013.915%2029.989%2029.99%2029.989%203.238%200%206.357-.479%209.476-1.559%205.397%205.278%2012.835%208.637%2020.992%208.637Z%22/%3E%3C/g%3E%3C/g%3E%3Cdefs%3E%3CclipPath%20id=%22a%22%3E%3Cpath%20d=%22M0%200h180v180H0z%22/%3E%3C/clipPath%3E%3CclipPath%20id=%22b%22%3E%3Cpath%20d=%22M29.487%2029.964h121.035v119.954H29.487z%22/%3E%3C/clipPath%3E%3C/defs%3E%3C/svg%3E |
|
283 | 283 | onload: resp => resolve(JSON.parse(resp.responseText)) |
284 | 284 | })), |
285 | 285 | msgs: await new Promise(resolve => { |
286 | | - const msgHostDir = app.urls.resourceHost + '/greasemonkey/_locales/', |
287 | | - msgLocaleDir = ( env.browser.language ? env.browser.language.replace('-', '_') : 'en' ) + '/' |
288 | | - let msgHref = msgHostDir + msgLocaleDir + 'messages.json', msgXHRtries = 0 |
| 286 | + const msgHostDir = `${app.urls.resourceHost}/greasemonkey/_locales/`, |
| 287 | + msgLocaleDir = `${ env.browser.language ? env.browser.language.replace('-', '_') : 'en' }/` |
| 288 | + let msgHref = `${ msgHostDir + msgLocaleDir }messages.json`, msgXHRtries = 0 |
289 | 289 | function fetchMsgs() { xhr({ method: 'GET', url: msgHref, onload: handleMsgs })} |
290 | 290 | function handleMsgs(resp) { |
291 | 291 | try { // to return localized messages.json |
|
298 | 298 | msgXHRtries++ ; if (msgXHRtries == 3) return resolve({}) // try original/region-stripped/EN only |
299 | 299 | msgHref = env.browser.language.includes('-') && msgXHRtries == 1 ? // if regional lang on 1st try... |
300 | 300 | msgHref.replace(/(_locales\/[^_]+)_[^_]+(\/)/, '$1$2') // ...strip region before retrying |
301 | | - : ( msgHostDir + 'en/messages.json' ) // else use default English messages |
| 301 | + : `${msgHostDir}en/messages.json` // else use default English messages |
302 | 302 | fetchMsgs() |
303 | 303 | } |
304 | 304 | } |
|
469 | 469 | ) |
470 | 470 |
|
471 | 471 | // Format text |
472 | | - aboutModal.querySelector('h2').style.cssText = ( |
473 | | - 'text-align: center ; font-size: 51px ; line-height: 46px ; padding: 15px 0' ) |
474 | | - aboutModal.querySelector('p').style.cssText = ( |
475 | | - 'text-align: center ; overflow-wrap: anywhere ;' |
476 | | - + `margin: ${ env.browser.isPortrait ? '6px 0 -16px' : '3px 0 29px' }` ) |
| 472 | + aboutModal.querySelector('h2').style.cssText = ` |
| 473 | + text-align: center ; font-size: 51px ; line-height: 46px ; padding: 15px 0` |
| 474 | + aboutModal.querySelector('p').style.cssText = ` |
| 475 | + text-align: center ; overflow-wrap: anywhere ; |
| 476 | + margin: ${ env.browser.isPortrait ? '6px 0 -16px' : '3px 0 29px' }` |
477 | 477 |
|
478 | 478 | // Hack buttons |
479 | 479 | aboutModal.querySelectorAll('button').forEach(btn => { |
|
557 | 557 | // Format buttons |
558 | 558 | if (idx == 0) btn.style.display = 'none' // hide Dismiss button |
559 | 559 | else { |
560 | | - btn.style.cssText = 'padding: 8px 6px !important ; margin-top: -14px ;' |
561 | | - + ' width: 107px ; line-height: 14px' |
| 560 | + btn.style.cssText = `padding: 8px 6px !important ; margin-top: -14px ; |
| 561 | + width: 107px ; line-height: 14px` |
562 | 562 | if (idx == btns.length -1) // de-emphasize right-most button |
563 | 563 | btn.classList.remove('primary-modal-btn') |
564 | 564 | } |
|
603 | 603 | stylize() { |
604 | 604 | if (!this.styles) document.head.append(this.styles = dom.create.elem('style')) |
605 | 605 | this.styles.textContent = ( |
606 | | - `.${this.class} {` // modals |
607 | | - + 'user-select: none ; -webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ;' |
608 | | - + 'font-family: -apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto,' |
609 | | - + 'Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif ;' |
610 | | - + 'padding: 20px 25px 24px 25px !important ; font-size: 20px ;' |
611 | | - + `color: ${ env.ui.scheme == 'dark' ? 'white' : 'black' } !important ;` |
612 | | - + `background-image: linear-gradient(180deg, ${ |
613 | | - env.ui.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) }` |
614 | | - + `.${this.class} [class*=modal-close-btn] {` |
615 | | - + 'position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ;' |
616 | | - + 'cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px }' |
617 | | - + `.${this.class} [class*=modal-close-btn] svg { height: 10px }` |
618 | | - + `.${this.class} [class*=modal-close-btn] path {` |
619 | | - + `${ env.ui.scheme == 'dark' ? 'stroke: white ; fill: white' : 'stroke: #9f9f9f ; fill: #9f9f9f' }}` |
620 | | - + ( env.ui.scheme == 'dark' ? // invert dark mode hover paths |
621 | | - `.${this.class} [class*=modal-close-btn]:hover path { stroke: black ; fill: black }` : '' ) |
622 | | - + `.${this.class} [class*=modal-close-btn]:hover { background-color: #f2f2f2 }` // hover underlay |
623 | | - + `.${this.class} [class*=modal-close-btn] svg { margin: 11.5px }` // center SVG for hover underlay |
624 | | - + `.${this.class} a { color: #${ env.ui.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important }` |
625 | | - + `.${this.class} h2 { font-weight: bold }` |
626 | | - + `.${this.class} button {` |
627 | | - + '--btn-transition: transform 0.1s ease-in-out, box-shadow 0.1s ease-in-out ;' |
628 | | - + 'font-size: 14px ; text-transform: uppercase ;' // shrink/uppercase labels |
629 | | - + 'border-radius: 0 !important ;' // square borders |
630 | | - + 'transition: var(--btn-transition) ;' // smoothen hover fx |
631 | | - + '-webkit-transition: var(--btn-transition) ; -moz-transition: var(--btn-transition) ;' |
632 | | - + '-o-transition: var(--btn-transition) ; -ms-transition: var(--btn-transition) ;' |
633 | | - + 'cursor: pointer !important ;' // add finger cursor |
634 | | - + `border: 1px solid ${ env.ui.scheme == 'dark' ? 'white' : 'black' } !important ;` |
635 | | - + 'padding: 8px !important ; min-width: 102px }' // resize |
636 | | - + `.${this.class} button:hover {` // add zoom, re-scheme |
637 | | - + 'transform: scale(1.055) ; color: black !important ;' |
638 | | - + `background-color: #${ env.ui.scheme == 'dark' ? '00cfff' : '9cdaff' } !important }` |
639 | | - + ( !env.browser.isMobile ? `.${this.class} .modal-buttons { margin-left: -13px !important }` : '' ) |
640 | | - + `.about-em { color: ${ env.ui.scheme == 'dark' ? 'white' : 'green' } !important }` |
| 606 | + `.${this.class} { /* modals */ |
| 607 | + user-select: none ; -webkit-user-select: none ; -moz-user-select: none ; -ms-user-select: none ; |
| 608 | + font-family: -apple-system, system-ui, BlinkMacSystemFont, Segoe UI, Roboto, |
| 609 | + Oxygen-Sans, Ubuntu, Cantarell, Helvetica Neue, sans-serif ; |
| 610 | + padding: 20px 25px 24px 25px !important ; font-size: 20px ; |
| 611 | + color: ${ env.ui.scheme == 'dark' ? 'white' : 'black' } !important ; |
| 612 | + background-image: linear-gradient(180deg, ${ |
| 613 | + env.ui.scheme == 'dark' ? '#99a8a6 -200px, black 200px' : '#b6ebff -296px, white 171px' }) } |
| 614 | + .${this.class} [class*=modal-close-btn] { |
| 615 | + position: absolute !important ; float: right ; top: 14px !important ; right: 16px !important ; |
| 616 | + cursor: pointer ; width: 33px ; height: 33px ; border-radius: 20px } |
| 617 | + .${this.class} [class*=modal-close-btn] svg { height: 10px } |
| 618 | + .${this.class} [class*=modal-close-btn] path { |
| 619 | + ${ env.ui.scheme == 'dark' ? 'stroke: white ; fill: white' |
| 620 | + : 'stroke: #9f9f9f ; fill: #9f9f9f' }} |
| 621 | + ${ env.ui.scheme == 'dark' ? // invert dark mode hover paths |
| 622 | + `.${this.class} [class*=modal-close-btn]:hover path { stroke: black ; fill: black }` : '' } |
| 623 | + .${this.class} [class*=modal-close-btn]:hover { background-color: #f2f2f2 } /* hover underlay */ |
| 624 | + .${this.class} [class*=modal-close-btn] svg { margin: 11.5px } /* center SVG for hover underlay */ |
| 625 | + .${this.class} a { color: #${ env.ui.scheme == 'dark' ? '00cfff' : '1e9ebb' } !important } |
| 626 | + .${this.class} h2 { font-weight: bold } |
| 627 | + .${this.class} button { |
| 628 | + --btn-transition: transform 0.1s ease-in-out, box-shadow 0.1s ease-in-out ; |
| 629 | + font-size: 14px ; text-transform: uppercase ; /* shrink/uppercase labels */ |
| 630 | + border-radius: 0 !important ; /* square borders */ |
| 631 | + transition: var(--btn-transition) ; /* smoothen hover fx */ |
| 632 | + -webkit-transition: var(--btn-transition) ; -moz-transition: var(--btn-transition) ; |
| 633 | + -o-transition: var(--btn-transition) ; -ms-transition: var(--btn-transition) ; |
| 634 | + cursor: pointer !important ; /* add finger cursor */ |
| 635 | + border: 1px solid ${ env.ui.scheme == 'dark' ? 'white' : 'black' } !important ; |
| 636 | + padding: 8px !important ; min-width: 102px } /* resize */ |
| 637 | + .${this.class} button:hover { /* add zoom, re-scheme */ |
| 638 | + transform: scale(1.055) ; color: black !important ; |
| 639 | + background-color: #${ env.ui.scheme == 'dark' ? '00cfff' : '9cdaff' } !important } |
| 640 | + ${ env.browser.isMobile ? '' : `.${this.class} .modal-buttons { margin-left: -13px !important }` } |
| 641 | + .about-em { color: ${ env.ui.scheme == 'dark' ? 'white' : 'green' } !important }` |
641 | 642 | ) |
642 | 643 | }, |
643 | 644 |
|
|
0 commit comments