From ee577d388c0512d158302c787bbe8baa0c37b267 Mon Sep 17 00:00:00 2001 From: "adamlui@protonmail.com" Date: Sun, 22 Sep 2024 05:08:30 +0000 Subject: [PATCH] =?UTF-8?q?Moved=20`msgs`=20to=20`app.msgs`=20for=20improv?= =?UTF-8?q?ed=20structure=20=E2=86=9E=20[auto-sync=20from=20`adamlui/chatg?= =?UTF-8?q?pt-apps`]?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- greasemonkey/bravegpt.user.js | 266 +++++++++++++++++----------------- 1 file changed, 133 insertions(+), 133 deletions(-) diff --git a/greasemonkey/bravegpt.user.js b/greasemonkey/bravegpt.user.js index c08c5767..9f03af67 100644 --- a/greasemonkey/bravegpt.user.js +++ b/greasemonkey/bravegpt.user.js @@ -148,7 +148,7 @@ // @description:zu Yengeza izimpendulo ze-AI ku-Brave Search (inikwa amandla yi-GPT-4o!) // @author KudoAI // @namespace https://kudoai.com -// @version 2024.9.21.6 +// @version 2024.9.21.7 // @license MIT // @icon https://media.bravegpt.com/images/icons/bravegpt/icon48.png?0a9e287 // @icon64 https://media.bravegpt.com/images/icons/bravegpt/icon64.png?0a9e287 @@ -395,8 +395,8 @@ // Init localized MESSAGES log.debug('Initializing localized messages...') - let msgs = {} - if (!config.userLanguage.startsWith('en')) msgs = await new Promise(resolve => { + app.msgs = {} + if (!config.userLanguage.startsWith('en')) app.msgs = await new Promise(resolve => { const msgHostDir = app.urls.assetHost + '/greasemonkey/_locales/', msgLocaleDir = ( config.userLanguage ? config.userLanguage.replace('-', '_') : 'en' ) + '/' let msgHref = msgHostDir + msgLocaleDir + 'messages.json', msgXHRtries = 0 @@ -417,75 +417,75 @@ } } }) - log.debug(Object.keys(msgs).length > 0 ? `Success! msgs = ${log.prettifyObj(msgs)}` : 'Skipped due to English locale') + log.debug(Object.keys(app.msgs).length > 0 ? `Success! app.msgs = ${log.prettifyObj(app.msgs)}` : 'Skipped due to English locale') // Init SETTINGS props log.debug('Initializing settings properties...') Object.assign(app, { settings: { proxyAPIenabled: { type: 'toggle', icon: 'sunglasses', - label: msgs.menuLabel_proxyAPImode || 'Proxy API Mode', - helptip: msgs.helptip_proxyAPImode || 'Uses a Proxy API for no-login access to AI' }, + label: app.msgs.menuLabel_proxyAPImode || 'Proxy API Mode', + helptip: app.msgs.helptip_proxyAPImode || 'Uses a Proxy API for no-login access to AI' }, streamingDisabled: { type: 'toggle', icon: 'signalStream', - label: msgs.mode_streaming || 'Streaming Mode', - helptip: msgs.helptip_streamingMode || 'Receive replies in a continuous text stream' }, + label: app.msgs.mode_streaming || 'Streaming Mode', + helptip: app.msgs.helptip_streamingMode || 'Receive replies in a continuous text stream' }, autoGetDisabled: { type: 'toggle', icon: 'speechBalloonLasso', - label: msgs.menuLabel_autoGetAnswers || 'Auto-Get Answers', - helptip: msgs.helptip_autoGetAnswers || 'Auto-send queries to BraveGPT when using search engine' }, + label: app.msgs.menuLabel_autoGetAnswers || 'Auto-Get Answers', + helptip: app.msgs.helptip_autoGetAnswers || 'Auto-send queries to BraveGPT when using search engine' }, autoFocusChatbarDisabled: { type: 'toggle', mobile: false, icon: 'caretsInward', - label: msgs.menuLabel_autoFocusChatbar || 'Auto-Focus Chatbar', - helptip: msgs.helptip_autoFocusChatbar || 'Auto-focus chatbar whenever it appears' }, + label: app.msgs.menuLabel_autoFocusChatbar || 'Auto-Focus Chatbar', + helptip: app.msgs.helptip_autoFocusChatbar || 'Auto-focus chatbar whenever it appears' }, autoScroll: { type: 'toggle', mobile: false, icon: 'arrowsDown', - label: `${ msgs.mode_autoScroll || 'Auto-Scroll' } (${ msgs.menuLabel_whenStreaming || 'when streaming' })`, - helptip: msgs.helptip_autoScroll || 'Auto-scroll responses as they generate in Streaming Mode' }, + label: `${ app.msgs.mode_autoScroll || 'Auto-Scroll' } (${ app.msgs.menuLabel_whenStreaming || 'when streaming' })`, + helptip: app.msgs.helptip_autoScroll || 'Auto-scroll responses as they generate in Streaming Mode' }, rqDisabled: { type: 'toggle', icon: 'speechBalloons', - label: `${ msgs.menuLabel_show || 'Show' } ${ msgs.menuLabel_relatedQueries || 'Related Queries' }`, - helptip: msgs.helptip_showRelatedQueries || 'Show related queries below chatbar' }, + label: `${ app.msgs.menuLabel_show || 'Show' } ${ app.msgs.menuLabel_relatedQueries || 'Related Queries' }`, + helptip: app.msgs.helptip_showRelatedQueries || 'Show related queries below chatbar' }, prefixEnabled: { type: 'toggle', icon: 'slash', - label: `${ msgs.menuLabel_require || 'Require' } "/" ${ msgs.menuLabel_beforeQuery || 'before query' }`, - helptip: msgs.helptip_prefixMode || 'Require "/" before queries for answers to show' }, + label: `${ app.msgs.menuLabel_require || 'Require' } "/" ${ app.msgs.menuLabel_beforeQuery || 'before query' }`, + helptip: app.msgs.helptip_prefixMode || 'Require "/" before queries for answers to show' }, suffixEnabled: { type: 'toggle', icon: 'questionMark', - label: `${ msgs.menuLabel_require || 'Require' } "?" ${ msgs.menuLabel_afterQuery || 'after query' }`, - helptip: msgs.helptip_suffixMode || 'Require "?" after queries for answers to show' }, + label: `${ app.msgs.menuLabel_require || 'Require' } "?" ${ app.msgs.menuLabel_afterQuery || 'after query' }`, + helptip: app.msgs.helptip_suffixMode || 'Require "?" after queries for answers to show' }, widerSidebar: { type: 'toggle', mobile: false, icon: 'widescreen', - label: msgs.menuLabel_widerSidebar || 'Wider Sidebar', - helptip: msgs.helptip_widerSidebar || 'Horizontally expand search page sidebar' }, + label: app.msgs.menuLabel_widerSidebar || 'Wider Sidebar', + helptip: app.msgs.helptip_widerSidebar || 'Horizontally expand search page sidebar' }, stickySidebar: { type: 'toggle', mobile: false, icon: 'webCorner', - label: msgs.menuLabel_stickySidebar || 'Sticky Sidebar', - helptip: msgs.helptip_stickySidebar || 'Makes BraveGPT visible in sidebar even as you scroll' }, + label: app.msgs.menuLabel_stickySidebar || 'Sticky Sidebar', + helptip: app.msgs.helptip_stickySidebar || 'Makes BraveGPT visible in sidebar even as you scroll' }, anchored: { type: 'toggle', mobile: false, icon: 'anchor', - label: msgs.mode_anchor || 'Anchor Mode', - helptip: msgs.helptip_anchorMode || 'Anchor BraveGPT to bottom of window' }, + label: app.msgs.mode_anchor || 'Anchor Mode', + helptip: app.msgs.helptip_anchorMode || 'Anchor BraveGPT to bottom of window' }, bgAnimationsDisabled: { type: 'toggle', icon: 'sparkles', - label: `${ msgs.menuLabel_background || 'Background' } ${ msgs.menuLabel_animations || 'Animations' }`, - helptip: msgs.helptip_bgAnimations || 'Show animated backgrounds in UI components' }, + label: `${ app.msgs.menuLabel_background || 'Background' } ${ app.msgs.menuLabel_animations || 'Animations' }`, + helptip: app.msgs.helptip_bgAnimations || 'Show animated backgrounds in UI components' }, fgAnimationsDisabled: { type: 'toggle', icon: 'sparkles', - label: `${ msgs.menuLabel_foreground || 'Foreground' } ${ msgs.menuLabel_animations || 'Animations' }`, - helptip: msgs.helptip_fgAnimations || 'Show foreground animations in UI components' }, + label: `${ app.msgs.menuLabel_foreground || 'Foreground' } ${ app.msgs.menuLabel_animations || 'Animations' }`, + helptip: app.msgs.helptip_fgAnimations || 'Show foreground animations in UI components' }, replyLanguage: { type: 'prompt', icon: 'languageChars', - label: msgs.menuLabel_replyLanguage || 'Reply Language', - helptip: msgs.helptip_replyLanguage || 'Language for BraveGPT to reply in' }, + label: app.msgs.menuLabel_replyLanguage || 'Reply Language', + helptip: app.msgs.helptip_replyLanguage || 'Language for BraveGPT to reply in' }, scheme: { type: 'modal', icon: 'scheme', - label: msgs.menuLabel_colorScheme || 'Color Scheme', - helptip: msgs.helptip_colorScheme || 'Scheme to display BraveGPT UI components in' }, + label: app.msgs.menuLabel_colorScheme || 'Color Scheme', + helptip: app.msgs.helptip_colorScheme || 'Scheme to display BraveGPT UI components in' }, debugMode: { type: 'toggle', icon: 'bug', - label: msgs.mode_debug || 'Debug Mode', - helptip: msgs.helptip_debugMode || 'Show detailed logging in browser console' }, + label: app.msgs.mode_debug || 'Debug Mode', + helptip: app.msgs.helptip_debugMode || 'Show detailed logging in browser console' }, about: { type: 'modal', icon: 'questionMarkCircle', - label: `${ msgs.menuLabel_about || 'About' } ${app.name}...` } + label: `${ app.msgs.menuLabel_about || 'About' } ${app.name}...` } }}) log.debug(`Success! app.settings = ${log.prettifyObj(app.settings)}`) // Init ALERTS Object.assign(app, { alerts: { - waitingResponse: `${ msgs.alert_waitingFor || 'Waiting for' } ${app.name} ${ msgs.alert_response || 'response' }...`, - login: `${ msgs.alert_login || 'Please login' } @ `, - checkCloudflare: `${ msgs.alert_checkCloudflare || 'Please pass Cloudflare security check' } @ `, - tooManyRequests: `${ msgs.alert_tooManyRequests || 'API is flooded with too many requests' }.`, - parseFailed: `${ msgs.alert_parseFailed || 'Failed to parse response JSON' }.`, - proxyNotWorking: `${ msgs.mode_proxy || 'Proxy Mode' } ${ msgs.alert_notWorking || 'is not working' }.`, - openAInotWorking: `OpenAI API ${ msgs.alert_notWorking || 'is not working' }.`, - suggestProxy: `${ msgs.alert_try || 'Try' } ${ msgs.alert_switchingOn || 'switching on' } ${ msgs.mode_proxy || 'Proxy Mode' }`, - suggestOpenAI: `${ msgs.alert_try || 'Try' } ${ msgs.alert_switchingOff || 'switching off' } ${ msgs.mode_proxy || 'Proxy Mode' }` + waitingResponse: `${ app.msgs.alert_waitingFor || 'Waiting for' } ${app.name} ${ app.msgs.alert_response || 'response' }...`, + login: `${ app.msgs.alert_login || 'Please login' } @ `, + checkCloudflare: `${ app.msgs.alert_checkCloudflare || 'Please pass Cloudflare security check' } @ `, + tooManyRequests: `${ app.msgs.alert_tooManyRequests || 'API is flooded with too many requests' }.`, + parseFailed: `${ app.msgs.alert_parseFailed || 'Failed to parse response JSON' }.`, + proxyNotWorking: `${ app.msgs.mode_proxy || 'Proxy Mode' } ${ app.msgs.alert_notWorking || 'is not working' }.`, + openAInotWorking: `OpenAI API ${ app.msgs.alert_notWorking || 'is not working' }.`, + suggestProxy: `${ app.msgs.alert_try || 'Try' } ${ app.msgs.alert_switchingOn || 'switching on' } ${ app.msgs.mode_proxy || 'Proxy Mode' }`, + suggestOpenAI: `${ app.msgs.alert_try || 'Try' } ${ app.msgs.alert_switchingOff || 'switching off' } ${ app.msgs.mode_proxy || 'Proxy Mode' }` }}) // Define MENU functions @@ -493,7 +493,7 @@ const menu = { ids: [], state: { symbol: ['❌', '✔️'], separator: env.scriptManager == 'Tampermonkey' ? ' — ' : ': ', - word: [(msgs.state_off || 'Off').toUpperCase(), (msgs.state_on || 'On').toUpperCase()] + word: [(app.msgs.state_off || 'Off').toUpperCase(), (app.msgs.state_on || 'On').toUpperCase()] }, register() { @@ -509,7 +509,7 @@ menu.ids.push(GM_registerMenuCommand(aboutLabel, modals.about.show)) // Add Settings entry - const settingsLabel = `⚙️ ${ msgs.menuLabel_settings || 'Settings' }` + const settingsLabel = `⚙️ ${ app.msgs.menuLabel_settings || 'Settings' }` menu.ids.push(GM_registerMenuCommand(settingsLabel, modals.settings.show)) }, @@ -547,13 +547,13 @@ // Alert to update log.debug(`Update v${latestVer} found!`) - const updateModalID = siteAlert(`🚀 ${ msgs.alert_updateAvail || 'Update available' }!`, // title - `${ msgs.alert_newerVer || 'An update to' } ${ app.name } ` - + `(v${latestVer}) ${ msgs.alert_isAvail || 'is available' }! ` + const updateModalID = siteAlert(`🚀 ${ app.msgs.alert_updateAvail || 'Update available' }!`, // title + `${ app.msgs.alert_newerVer || 'An update to' } ${ app.name } ` + + `(v${latestVer}) ${ app.msgs.alert_isAvail || 'is available' }! ` + '${ msgs.link_viewChanges || 'View changes' }`, + + `>${ app.msgs.link_viewChanges || 'View changes' }`, function update() { // button modals.safeWinOpen(app.urls.update.replace('meta.js', 'user.js') + '?t=' + Date.now()) }, '', updateAlertWidth @@ -565,8 +565,8 @@ log.debug('Localizing button labels in non-English alert...') const updateAlert = document.querySelector(`[id="${ updateModalID }"]`), updateBtns = updateAlert.querySelectorAll('button') - updateBtns[1].textContent = msgs.btnLabel_update || 'Update' - updateBtns[0].textContent = msgs.btnLabel_dismiss || 'Dismiss' + updateBtns[1].textContent = app.msgs.btnLabel_update || 'Update' + updateBtns[0].textContent = app.msgs.btnLabel_dismiss || 'Dismiss' } modals.init(updateModal) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns @@ -576,8 +576,8 @@ // Alert to no update found, nav back log.debug('No update found.') - const noUpdateModalID = siteAlert(( msgs.alert_upToDate || 'Up-to-date' ) + '!', // title - `${ app.name } (v${ currentVer }) ${ msgs.alert_isUpToDate || 'is up-to-date' }!`, // msg + const noUpdateModalID = siteAlert(( app.msgs.alert_upToDate || 'Up-to-date' ) + '!', // title + `${ app.name } (v${ currentVer }) ${ app.msgs.alert_isUpToDate || 'is up-to-date' }!`, // msg '', '', updateAlertWidth) const noUpdateModal = document.getElementById(noUpdateModalID).firstChild modals.init(noUpdateModal) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns @@ -628,18 +628,18 @@ // Add login link to login msgs if (msg.includes('@')) { msg += 'chatgpt.com,' - + ` ${ msgs.alert_thenRefreshPage || 'then refresh this page' }.` - + ` (${ msgs.alert_ifIssuePersists || 'If issue persists' },` - + ` ${( msgs.alert_try || 'Try' ).toLowerCase() }` - + ` ${ msgs.alert_switchingOn || 'switching on' }` - + ` ${ msgs.mode_proxy || 'Proxy Mode' })` + + ` ${ app.msgs.alert_thenRefreshPage || 'then refresh this page' }.` + + ` (${ app.msgs.alert_ifIssuePersists || 'If issue persists' },` + + ` ${( app.msgs.alert_try || 'Try' ).toLowerCase() }` + + ` ${ app.msgs.alert_switchingOn || 'switching on' }` + + ` ${ app.msgs.mode_proxy || 'Proxy Mode' })` } - // Hyperlink msgs.alert_switching + // Hyperlink app.msgs.alert_switching const foundState = ['On', 'Off'].find(state => - msg.includes(msgs['alert_switching' + state]) || new RegExp(`\\b${state}\\b`, 'i').test(msg)) + msg.includes(app.msgs['alert_switching' + state]) || new RegExp(`\\b${state}\\b`, 'i').test(msg)) if (foundState) { // hyperlink switch phrase for click listener to toggle.proxyMode() - const switchPhrase = msgs['alert_switching' + foundState] || 'switching ' + foundState.toLowerCase() + const switchPhrase = app.msgs['alert_switching' + foundState] || 'switching ' + foundState.toLowerCase() msg = msg.replace(switchPhrase, `${switchPhrase}`) } @@ -794,11 +794,11 @@ // Create/init modal const chatgptJSver = (/chatgpt-([\d.]+)\.min/.exec(GM_info.script.header) || [null, ''])[1] const aboutModalID = chatgpt.alert('', - '🏷️ ' + ( msgs.about_version || 'Version' ) + ': ' + GM_info.script.version + '\n' - + '⚡ ' + ( msgs.about_poweredBy || 'Powered by' ) + ': ' + '🏷️ ' + ( app.msgs.about_version || 'Version' ) + ': ' + GM_info.script.version + '\n' + + '⚡ ' + ( app.msgs.about_poweredBy || 'Powered by' ) + ': ' + `chatgpt.js` + ( chatgptJSver ? ( ' v' + chatgptJSver ) : '' ) + '\n' - + '📜 ' + ( msgs.about_sourceCode || 'Source code' ) + + '📜 ' + ( app.msgs.about_sourceCode || 'Source code' ) + `: ` + app.urls.gitHub + '', [ // buttons @@ -825,13 +825,13 @@ // Emojize/localize label if (/updates/i.test(btn.textContent)) btn.textContent = ( - '🚀 ' + ( msgs.btnLabel_updateCheck || 'Check for Updates' )) + '🚀 ' + ( app.msgs.btnLabel_updateCheck || 'Check for Updates' )) else if (/support/i.test(btn.textContent)) btn.textContent = ( - '🧠 ' + ( msgs.btnLabel_getSupport || 'Get Support' )) + '🧠 ' + ( app.msgs.btnLabel_getSupport || 'Get Support' )) else if (/review/i.test(btn.textContent)) btn.textContent = ( - '⭐ ' + ( msgs.btnLabel_leaveReview || 'Leave Review' )) + '⭐ ' + ( app.msgs.btnLabel_leaveReview || 'Leave Review' )) else if (/apps/i.test(btn.textContent)) btn.textContent = ( - '🤖 ' + ( msgs.btnLabel_moreApps || 'More ChatGPT Apps' )) + '🤖 ' + ( app.msgs.btnLabel_moreApps || 'More ChatGPT Apps' )) else btn.style.display = 'none' // hide Dismiss button }) @@ -857,7 +857,7 @@ // Create/init modal const feedbackModalID = siteAlert(`${ - msgs.alert_choosePlatform || 'Choose a platform' }:`, '', btns, '', 456) + app.msgs.alert_choosePlatform || 'Choose a platform' }:`, '', btns, '', 456) const feedbackModal = document.getElementById(feedbackModalID).firstChild // Center CTA @@ -888,7 +888,7 @@ log.caller = 'modals.replyLang.show()' while (true) { let replyLanguage = prompt( - ( msgs.prompt_updateReplyLang || 'Update reply language' ) + ':', config.replyLanguage) + ( app.msgs.prompt_updateReplyLang || 'Update reply language' ) + ':', config.replyLanguage) if (replyLanguage == null) break // user cancelled so do nothing else if (!/\d/.test(replyLanguage)) { replyLanguage = ( // auto-case for menu/alert aesthetics @@ -897,9 +897,9 @@ log.debug('Saving reply language...') settings.save('replyLanguage', replyLanguage || config.userLanguage) log.debug(`Success! config.replyLanguage = ${config.replyLanguage}`) - const langUpdatedAlertID = siteAlert(( msgs.alert_langUpdated || 'Language updated' ) + '!', // title - `${ app.name } ${ msgs.alert_willReplyIn || 'will reply in' } ` - + ( replyLanguage || msgs.alert_yourSysLang || 'your system language' ) + '.', + const langUpdatedAlertID = siteAlert(( app.msgs.alert_langUpdated || 'Language updated' ) + '!', // title + `${ app.name } ${ app.msgs.alert_willReplyIn || 'will reply in' } ` + + ( replyLanguage || app.msgs.alert_yourSysLang || 'your system language' ) + '.', '', '', 447) // confirmation width const langUpdatedAlert = document.getElementById(langUpdatedAlertID).firstChild modals.init(langUpdatedAlert) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns @@ -916,7 +916,7 @@ // Create/init modal const schemeModalID = siteAlert(`${ - app.name } ${( msgs.menuLabel_colorScheme || 'Color Scheme' ).toLowerCase() }:`, '', + app.name } ${( app.msgs.menuLabel_colorScheme || 'Color Scheme' ).toLowerCase() }:`, '', [ function auto() {}, function light() {}, function dark() {} ], // buttons '', 503) // px width const schemeModal = document.getElementById(schemeModalID).firstChild @@ -939,7 +939,7 @@ // Prepend emoji + localize labels if (Object.prototype.hasOwnProperty.call(schemes, btnScheme)) btn.textContent = `${schemes[btnScheme]} ${ // emoji - msgs['scheme_' + btnScheme] || msgs['menuLabel_' + btnScheme] || btnScheme.toUpperCase() }` + app.msgs['scheme_' + btnScheme] || app.msgs['menuLabel_' + btnScheme] || btnScheme.toUpperCase() }` else btn.style.display = 'none' // hide Dismiss button // Clone button to replace listener to not dismiss modal on click @@ -962,10 +962,10 @@ function schemeNotify(scheme) { // Show notification - notify(` ${ msgs.menuLabel_colorScheme || 'Color Scheme' }: ` - + ( scheme == 'light' ? msgs.scheme_light || 'Light' : - scheme == 'dark' ? msgs.scheme_dark || 'Dark' - : msgs.menuLabel_auto || 'Auto' ).toUpperCase() ) + notify(` ${ app.msgs.menuLabel_colorScheme || 'Color Scheme' }: ` + + ( scheme == 'light' ? app.msgs.scheme_light || 'Light' : + scheme == 'dark' ? app.msgs.scheme_dark || 'Dark' + : app.msgs.menuLabel_auto || 'Auto' ).toUpperCase() ) const notifs = document.querySelectorAll('.chatgpt-notif'), notif = notifs[notifs.length -1] @@ -1000,7 +1000,7 @@ + 'filter: drop-shadow(5px 5px 15px rgba(0, 0, 0, 0.3))' // Init title const settingsTitleDiv = document.createElement('div') ; settingsTitleDiv.id = 'bravegpt-settings-title' - const settingsTitleH4 = document.createElement('h4') ; settingsTitleH4.textContent = msgs.menuLabel_settings || 'Settings' + const settingsTitleH4 = document.createElement('h4') ; settingsTitleH4.textContent = app.msgs.menuLabel_settings || 'Settings' const settingsTitleIcon = icons.sliders.create() settingsTitleIcon.style.cssText = 'width: 21px ; height: 21px ; margin-right: -4px ; position: relative ; top: 2px ; right: 10px' settingsTitleH4.prepend(settingsTitleIcon) ; settingsTitleDiv.append(settingsTitleH4) @@ -1136,8 +1136,8 @@ modals.settings.aboutContent = {} modals.settings.aboutContent.short = `v${ GM_info.script.version}` modals.settings.aboutContent.long = ( - `${ msgs.about_version || 'Version' }: v${ GM_info.script.version + textGap }` - + `${ msgs.about_poweredBy || 'Powered by' } chatgpt.js${textGap}` ) + `${ app.msgs.about_version || 'Version' }: v${ GM_info.script.version + textGap }` + + `${ app.msgs.about_poweredBy || 'Powered by' } chatgpt.js${textGap}` ) for (let i = 0; i < 7; i++) modals.settings.aboutContent.long += modals.settings.aboutContent.long // make it long af innerDiv.innerHTML = modals.settings.aboutContent[config.fgAnimationsDisabled ? 'short' : 'long'] innerDiv.style.float = config.fgAnimationsDisabled ? 'right' : '' @@ -1151,7 +1151,7 @@ log.debug('Creating Close button...') const closeBtn = document.createElement('div') closeBtn.classList.add('bravegpt-modal-close-btn', 'no-mobile-tap-outline') - closeBtn.title = msgs.tooltip_close || 'Close' + closeBtn.title = app.msgs.tooltip_close || 'Close' const closeSVG = icons.x.create() ; closeBtn.append(closeSVG) // Assemble/append elems @@ -1206,9 +1206,9 @@ if (schemeStatusSpan) { while (schemeStatusSpan.firstChild) schemeStatusSpan.firstChild.remove() // clear old status schemeStatusSpan.append(...( // status txt + icon - config.scheme == 'dark' ? [document.createTextNode(msgs.scheme_dark || 'Dark'), icons.moon.create()] - : config.scheme == 'light' ? [document.createTextNode(msgs.scheme_light || 'Light'), icons.sun.create()] - : [document.createTextNode(msgs.menuLabel_auto || 'Auto'), icons.arrowsCycle.create()] )) + config.scheme == 'dark' ? [document.createTextNode(app.msgs.scheme_dark || 'Dark'), icons.moon.create()] + : config.scheme == 'light' ? [document.createTextNode(app.msgs.scheme_light || 'Light'), icons.sun.create()] + : [document.createTextNode(app.msgs.menuLabel_auto || 'Auto'), icons.arrowsCycle.create()] )) schemeStatusSpan.style.cssText += `; margin-top: ${ !config.scheme ? 3 : 0 }px !important` } } @@ -1232,10 +1232,10 @@ prevOffsetTop = appDiv.offsetTop // Switch mode - if ([msgs.menuLabel_top, 'Top'].includes(itemLabel)) toggle.sidebar('sticky') - else if ([msgs.menuLabel_sidebar, 'Sidebar'].includes(itemLabel)) { + if ([app.msgs.menuLabel_top, 'Top'].includes(itemLabel)) toggle.sidebar('sticky') + else if ([app.msgs.menuLabel_sidebar, 'Sidebar'].includes(itemLabel)) { toggle.sidebar('sticky', 'off') ; toggle.anchorMode('off') } - else if ([msgs.menuLabel_bottom, 'Bottom'].includes(itemLabel)) toggle.anchorMode() + else if ([app.msgs.menuLabel_bottom, 'Bottom'].includes(itemLabel)) toggle.anchorMode() // Close/update menu if (appDiv.offsetTop != prevOffsetTop) pinMenu.remove() // since app moved @@ -1256,8 +1256,8 @@ const pinMenuUL = document.querySelector('#pin-menu ul') || document.createElement('ul'), pinMenuItems = [] const pinMenulabels = [ - `${ msgs.tooltip_pinTo || 'Pin to' }...`, msgs.menuLabel_top || 'Top', - msgs.menuLabel_sidebar || 'Sidebar', msgs.menuLabel_bottom || 'Bottom' ] + `${ app.msgs.tooltip_pinTo || 'Pin to' }...`, app.msgs.menuLabel_top || 'Top', + app.msgs.menuLabel_sidebar || 'Sidebar', app.msgs.menuLabel_bottom || 'Bottom' ] const pinMenuIcons = [icons.webCorner.create(), icons.sidebar.create(), icons.anchor.create(), icons.checkmark.create()] // Style icons @@ -2393,7 +2393,7 @@ // No reply, change placeholder + focus chatbar if (chatTextarea.value.trim() == '') { - chatTextarea.placeholder = `${ msgs.placeholder_typeSomething || 'Type something' }...` + chatTextarea.placeholder = `${ app.msgs.placeholder_typeSomething || 'Type something' }...` chatTextarea.focus() // Yes reply, submit it + transform to loading UI @@ -2595,7 +2595,7 @@ } if (prevState != config.anchored) { menus.pin.topPos = menus.pin.rightPos = null - notify(( msgs.mode_anchor || 'Anchor Mode' ) + ' ' + menu.state.word[+config.anchored]) + notify(( app.msgs.mode_anchor || 'Anchor Mode' ) + ' ' + menu.state.word[+config.anchored]) log.debug(`Success! Anchor Mode toggled ${ config.anchored ? 'ON' : 'OFF' }`) } }, @@ -2704,7 +2704,7 @@ proxyMode() { log.caller = 'toggle.proxyMode()' settings.save('proxyAPIenabled', !config.proxyAPIenabled) - notify(( msgs.menuLabel_proxyAPImode || 'Proxy API Mode' ) + ' ' + menu.state.word[+config.proxyAPIenabled]) + notify(( app.msgs.menuLabel_proxyAPImode || 'Proxy API Mode' ) + ' ' + menu.state.word[+config.proxyAPIenabled]) menu.refresh() if (modals.settings.get()) { // update visual states of Settings toggles const proxyToggle = document.querySelector('[id*="proxy"][id*="menu-entry"] input'), @@ -2731,7 +2731,7 @@ get.related(stripQueryAugments(msgChain)[msgChain.length - 1].content).then(queries => show.related(queries)) .catch(err => { log.error(err.message) ; api.tryNew(get.related) }) update.style.tweaks() // toggle
 max-height
-            notify(( msgs.menuLabel_relatedQueries || 'Related Queries' ) + ' ' + menu.state.word[+!config.rqDisabled])
+            notify(( app.msgs.menuLabel_relatedQueries || 'Related Queries' ) + ' ' + menu.state.word[+!config.rqDisabled])
             log.debug(`Success! config.rqDisabled = ${config.rqDisabled}`)
         },
 
@@ -2753,7 +2753,7 @@
             }
             if (mode == 'sticky' && prevStickyState == config.stickySidebar)
                 return log.debug(`No change to ${log.toTitleCase(mode)} Sidebar`)
-            notify(( msgs[`menuLabel_${ mode }Sidebar`] || mode.charAt(0).toUpperCase() + mode.slice(1) + ' Sidebar' )
+            notify(( app.msgs[`menuLabel_${ mode }Sidebar`] || mode.charAt(0).toUpperCase() + mode.slice(1) + ' Sidebar' )
                 + ' ' + menu.state.word[+config[configKeyName]])
             log.debug(`Success! ${log.toTitleCase(mode)} Sidebar toggled ${ toToggleOn ? 'ON' : 'OFF' }`)
         },
@@ -2766,35 +2766,35 @@
                                                      : 'https://chromewebstore.google.com/detail/scriptcat/ndcooeababalnlpkfedmmbbbgkljhpjf'
             if (!streamingSupported.scriptManager) { // alert userscript manager unsupported, suggest TM/SC
                 log.debug(`Streaming Mode unsupported in ${env.scriptManager}`)
-                const suggestAlertID = siteAlert(`${app.settings.streamingDisabled.label} ${ msgs.alert_unavailable || 'unavailable' }`,
-                    `${app.settings.streamingDisabled.label} ${ msgs.alert_isOnlyAvailFor || 'is only available for' }`
+                const suggestAlertID = siteAlert(`${app.settings.streamingDisabled.label} ${ app.msgs.alert_unavailable || 'unavailable' }`,
+                    `${app.settings.streamingDisabled.label} ${ app.msgs.alert_isOnlyAvailFor || 'is only available for' }`
                         + ( !env.browser.isEdge && !env.browser.isBrave ? // suggest TM for supported browsers
-                            ` Tampermonkey ${ msgs.alert_and || 'and' }`
+                            ` Tampermonkey ${ app.msgs.alert_and || 'and' }`
                                 : '' )
                         + ` ScriptCat.` // suggest SC
-                        + ` (${ msgs.alert_userscriptMgrNoStream || 'Your userscript manager does not support returning stream responses' }.)`
+                        + ` (${ app.msgs.alert_userscriptMgrNoStream || 'Your userscript manager does not support returning stream responses' }.)`
                 )
                 const suggestAlert = document.getElementById(suggestAlertID).firstChild
                 modals.init(suggestAlert) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns
             } else if (!streamingSupported.browser) { // alert TM/browser unsupported, suggest SC
                 log.debug('Streaming Mode unsupported in browser')
-                const suggestAlertID = siteAlert(`${app.settings.streamingDisabled.label} ${ msgs.alert_unavailable || 'unavailable' }`,
-                    `${app.settings.streamingDisabled.label} ${ msgs.alert_isUnsupportedIn || 'is unsupported in' } `
-                        + `${ env.browser.isChrome ? 'Chrome' : env.browser.isEdge ? 'Edge' : 'Brave' } ${ msgs.alert_whenUsing || 'when using' } Tampermonkey. `
-                        + `${ msgs.alert_pleaseUse || 'Please use' } ScriptCat `
-                            + `${ msgs.alert_instead || 'instead' }.`
+                const suggestAlertID = siteAlert(`${app.settings.streamingDisabled.label} ${ app.msgs.alert_unavailable || 'unavailable' }`,
+                    `${app.settings.streamingDisabled.label} ${ app.msgs.alert_isUnsupportedIn || 'is unsupported in' } `
+                        + `${ env.browser.isChrome ? 'Chrome' : env.browser.isEdge ? 'Edge' : 'Brave' } ${ app.msgs.alert_whenUsing || 'when using' } Tampermonkey. `
+                        + `${ app.msgs.alert_pleaseUse || 'Please use' } ScriptCat `
+                            + `${ app.msgs.alert_instead || 'instead' }.`
                 )
                 const suggestAlert = document.getElementById(suggestAlertID).firstChild
                 modals.init(suggestAlert) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns
             } else if (!config.proxyAPIenabled) { // alert OpenAI API unsupported, suggest Proxy Mode
                 log.debug('Streaming Mode unsupported in OpenAI mode')
                 let msg = `${app.settings.streamingDisabled.label} `
-                        + `${ msgs.alert_isCurrentlyOnlyAvailBy || 'is currently only available by' } `
-                        + `${ msgs.alert_switchingOn || 'switching on' } ${ msgs.mode_proxy || 'Proxy Mode' }. `
-                        + `(${ msgs.alert_openAIsupportSoon || 'Support for OpenAI API will be added shortly' }!)`
-                const switchPhrase = msgs.alert_switchingOn || 'switching on'
+                        + `${ app.msgs.alert_isCurrentlyOnlyAvailBy || 'is currently only available by' } `
+                        + `${ app.msgs.alert_switchingOn || 'switching on' } ${ app.msgs.mode_proxy || 'Proxy Mode' }. `
+                        + `(${ app.msgs.alert_openAIsupportSoon || 'Support for OpenAI API will be added shortly' }!)`
+                const switchPhrase = app.msgs.alert_switchingOn || 'switching on'
                 msg = msg.replace(switchPhrase, `${switchPhrase}`)
-                const alertID = siteAlert(`${ msgs.mode_streaming || 'Streaming Mode' } ${ msgs.alert_unavailable || 'unavailable' }`, msg),
+                const alertID = siteAlert(`${ app.msgs.mode_streaming || 'Streaming Mode' } ${ app.msgs.alert_unavailable || 'unavailable' }`, msg),
                       alert = document.getElementById(alertID).firstChild
                 modals.init(alert) // add classes/stars, disable wheel-scrolling, dim bg, glowup btns
                 alert.querySelector('[href="#"]').onclick = () => { alert.querySelector('.modal-close-btn').click() ; toggle.proxyMode() }
@@ -2812,21 +2812,21 @@
 
             // Update text
             tooltipDiv.innerText = (
-                btnType == 'chevron' ? ( config.minimized ? `${ msgs.tooltip_restore || 'Restore' }`
-                                                          : `${ msgs.tooltip_minimize || 'Minimize' }` )
-              : btnType == 'about' ? msgs.menuLabel_about || 'About'
-              : btnType == 'settings' ? msgs.menuLabel_settings || 'Settings'
-              : btnType == 'speak' ? msgs.tooltip_playAnswer || 'Play answer'
-              : btnType == 'font-size' ? msgs.tooltip_fontSize || 'Font size'
-              : btnType == 'wsb' ? (( config.widerSidebar ? `${ msgs.prefix_exit || 'Exit' } ` :  '' )
-                               + ( msgs.menuLabel_widerSidebar || 'Wider Sidebar' ))
-              : btnType == 'arrows' ? ( config.expanded ? `${ msgs.tooltip_shrink || 'Shrink' }`
-                                                        : `${ msgs.tooltip_expand || 'Expand' }` )
-              : btnType == 'copy' ? ( btnElem.firstChild.id == 'copy-icon' ? `${ msgs.tooltip_copy || 'Copy' } ${
-                  ( btnElem.parentNode.tagName == 'PRE' ? msgs.tooltip_reply || 'Reply' : msgs.tooltip_code || 'Code' ).toLowerCase() }`
-                      : `${ msgs.notif_copiedToClipboard || 'Copied to clipboard' }!` )
-              : btnType == 'send' ? msgs.tooltip_sendReply || 'Send reply'
-              : btnType == 'shuffle' ? msgs.tooltip_askRandQuestion || 'Ask random question' : '' )
+                btnType == 'chevron' ? ( config.minimized ? `${ app.msgs.tooltip_restore || 'Restore' }`
+                                                          : `${ app.msgs.tooltip_minimize || 'Minimize' }` )
+              : btnType == 'about' ? app.msgs.menuLabel_about || 'About'
+              : btnType == 'settings' ? app.msgs.menuLabel_settings || 'Settings'
+              : btnType == 'speak' ? app.msgs.tooltip_playAnswer || 'Play answer'
+              : btnType == 'font-size' ? app.msgs.tooltip_fontSize || 'Font size'
+              : btnType == 'wsb' ? (( config.widerSidebar ? `${ app.msgs.prefix_exit || 'Exit' } ` :  '' )
+                               + ( app.msgs.menuLabel_widerSidebar || 'Wider Sidebar' ))
+              : btnType == 'arrows' ? ( config.expanded ? `${ app.msgs.tooltip_shrink || 'Shrink' }`
+                                                        : `${ app.msgs.tooltip_expand || 'Expand' }` )
+              : btnType == 'copy' ? ( btnElem.firstChild.id == 'copy-icon' ? `${ app.msgs.tooltip_copy || 'Copy' } ${
+                  ( btnElem.parentNode.tagName == 'PRE' ? app.msgs.tooltip_reply || 'Reply' : app.msgs.tooltip_code || 'Code' ).toLowerCase() }`
+                      : `${ app.msgs.notif_copiedToClipboard || 'Copied to clipboard' }!` )
+              : btnType == 'send' ? app.msgs.tooltip_sendReply || 'Send reply'
+              : btnType == 'shuffle' ? app.msgs.tooltip_askRandQuestion || 'Ask random question' : '' )
 
             // Update position
             const elems = { appDiv, btnElem, tooltipDiv },
@@ -3431,7 +3431,7 @@
                 if (answer == 'standby') {
                     const standbyBtn = document.createElement('button')
                     standbyBtn.classList.add('standby-btn', 'no-mobile-tap-outline')
-                    standbyBtn.textContent = msgs.btnLabel_sendQueryToApp || `Send search query to ${app.name}`
+                    standbyBtn.textContent = app.msgs.btnLabel_sendQueryToApp || `Send search query to ${app.name}`
                     appDiv.append(standbyBtn)
                     show.reply.standbyBtnClickHandler = function() {
                         appAlert('waitingResponse')
@@ -3467,8 +3467,8 @@
                       chatTextarea = document.createElement('textarea')
                 continueChatDiv.className = 'continue-chat'
                 chatTextarea.id = 'app-chatbar' ; chatTextarea.rows = '1'
-                chatTextarea.placeholder = ( answer == 'standby' ? msgs.placeholder_askSomethingElse || 'Ask something else'
-                                                                 : msgs.tooltip_sendReply || 'Send reply' ) + '...'
+                chatTextarea.placeholder = ( answer == 'standby' ? app.msgs.placeholder_askSomethingElse || 'Ask something else'
+                                                                 : app.msgs.tooltip_sendReply || 'Send reply' ) + '...'
                 continueChatDiv.append(chatTextarea)
                 replyForm.append(continueChatDiv) ; replySection.append(replyForm)
                 appDiv.insertBefore(replySection, appDiv.querySelector('footer'));
@@ -3579,7 +3579,7 @@
                           relatedQuerySVG = icons.arrowDownRight.create()
 
                     // Add attributes
-                    relatedQueryDiv.title = msgs.tooltip_sendRelatedQuery || 'Send related query'
+                    relatedQueryDiv.title = app.msgs.tooltip_sendRelatedQuery || 'Send related query'
                     relatedQueryDiv.classList.add('related-query', 'fade-in', 'no-user-select', 'no-mobile-tap-outline')
                     relatedQueryDiv.setAttribute('tabindex', 0)
                     relatedQueryDiv.textContent = query
@@ -3668,7 +3668,7 @@
     setTimeout(() => appDiv.classList.add('active'), 100) // fade in    
 
     // Init footer CTA to share feedback
-    let footerContent = create.anchor('#', msgs.link_shareFeedback || 'Share feedback', { target: '_self' })
+    let footerContent = create.anchor('#', app.msgs.link_shareFeedback || 'Share feedback', { target: '_self' })
     footerContent.classList.add('feedback', 'svelte-8js1iq') // Brave classes
     footerContent.onclick = () => modals.feedback.show({ sites: 'feedback' })