Skip to content

Commit a92b997

Browse files
committed
Eliminated toolbarMenu.ids init to condense .register() ↞ [auto-sync from https://github.com/adamlui/ai-web-extensions/tree/main/chatgpt-infinity]
1 parent e7d3093 commit a92b997

File tree

1 file changed

+65
-68
lines changed

1 file changed

+65
-68
lines changed

chatgpt/chatgpt-infinity/chatgpt-infinity.user.js

Lines changed: 65 additions & 68 deletions
Original file line numberDiff line numberDiff line change
@@ -199,7 +199,7 @@
199199
// @description:zh-TW 從無所不知的 ChatGPT 生成無窮無盡的答案 (用任何語言!)
200200
// @author Adam Lui
201201
// @namespace https://github.com/adamlui
202-
// @version 2025.3.31
202+
// @version 2025.4.1
203203
// @license MIT
204204
// @icon https://cdn.jsdelivr.net/gh/adamlui/chatgpt-infinity@8df6f33/assets/images/icons/infinity-symbol/circled/with-robot/icon48.png
205205
// @icon64 https://cdn.jsdelivr.net/gh/adamlui/chatgpt-infinity@8df6f33/assets/images/icons/infinity-symbol/circled/with-robot/icon64.png
@@ -387,7 +387,7 @@
387387
// Define MENU functions
388388

389389
const toolbarMenu = {
390-
ids: [], state: {
390+
state: {
391391
symbols: ['❌', '✔️'], separator: env.scriptManager.name == 'Tampermonkey' ? ' — ' : ': ',
392392
words: [app.msgs.state_off.toUpperCase(), app.msgs.state_on.toUpperCase()]
393393
},
@@ -398,83 +398,80 @@
398398
},
399399

400400
register() {
401+
const re_all = new RegExp(`^(${app.msgs.menuLabel_all}|all|any|every)$`, 'i')
401402

402403
// Show "Disabled (extension active)"
403-
if (env.extensionActive)
404+
this.ids = env.extensionActive ? [
404405
GM_registerMenuCommand(`${this.state.symbols[0]} ${
405406
toTitleCase(app.msgs.state_disabled)} (${app.msgs.menuLabel_extensionActive})`,
406407
() => modals.open('about'), env.scriptManager.supportsTooltips ? { title: ' ' } : undefined )
408+
]
407409

408410
// ...or add settings entries
409-
else {
410-
const re_all = new RegExp(`^(${app.msgs.menuLabel_all}|all|any|every)$`, 'i')
411-
412-
// Add setting entries
413-
Object.keys(settings.controls).forEach(key => {
414-
const ctrlType = settings.controls[key].type
415-
const menuLabel = `${ settings.controls[key].symbol
416-
|| this.state.symbols[+settings.isEnabled(key)] } `
417-
+ settings.controls[key].label
418-
+ ( ctrlType == 'toggle' ? this.state.separator
419-
+ this.state.words[+settings.isEnabled(key)]
420-
: `— ${settings.controls[key].status}` )
421-
this.ids.push(GM_registerMenuCommand(menuLabel, () => {
422-
if (ctrlType == 'toggle') {
423-
settings.save(key, !config[key])
424-
notify(`${settings.controls[key].label}: ${
425-
this.state.words[+(/disabled/i.test(key) ^ config[key])]}`)
426-
} else if (key == 'replyLanguage') {
427-
while (true) {
428-
let replyLang = prompt(
429-
`${app.msgs.prompt_updateReplyLang}:`, config.replyLanguage)
430-
if (replyLang == null) break // user cancelled so do nothing
431-
else if (!/\d/.test(replyLang)) { // valid reply language set
432-
replyLang = ( // auto-case for menu/alert aesthetics
433-
replyLang.length < 4 || replyLang.includes('-') ? replyLang.toUpperCase()
434-
: toTitleCase(replyLang) )
435-
settings.save('replyLanguage', replyLang || env.browser.language)
436-
modals.alert(( app.msgs.alert_replyLangUpdated ) + '!', // title
437-
( app.msgs.appName ) + ' ' // msg
438-
+ ( app.msgs.alert_willReplyIn ) + ' '
439-
+ ( replyLang || app.msgs.alert_yourSysLang) + '.'
440-
)
441-
break
442-
}
443-
}
444-
} else if (key == 'replyTopic') {
445-
let replyTopic = prompt(( app.msgs.prompt_updateReplyTopic )
446-
+ ' (' + ( app.msgs.prompt_orEnter ) + ' \'ALL\'):', config.replyTopic)
447-
if (replyTopic != null) { // user didn't cancel
448-
replyTopic = toTitleCase(replyTopic.toString()) // for menu/alert aesthetics
449-
settings.save('replyTopic',
450-
!replyTopic || re_all.test(replyTopic) ? app.msgs.menuLabel_all : replyTopic)
451-
modals.alert(`${app.msgs.alert_replyTopicUpdated}!`,
452-
`${app.msgs.appName} ${app.msgs.alert_willAnswer} `
453-
+ ( !replyTopic || re_all.test(replyTopic) ? app.msgs.alert_onAllTopics
454-
: `${app.msgs.alert_onTopicOf} ${replyTopic}` )
455-
+ '!'
411+
: Object.keys(settings.controls).map(key => {
412+
const ctrlType = settings.controls[key].type
413+
const menuLabel = `${ settings.controls[key].symbol
414+
|| this.state.symbols[+settings.isEnabled(key)] } `
415+
+ settings.controls[key].label
416+
+ ( ctrlType == 'toggle' ? this.state.separator
417+
+ this.state.words[+settings.isEnabled(key)]
418+
: `— ${settings.controls[key].status}` )
419+
return GM_registerMenuCommand(menuLabel, () => {
420+
if (ctrlType == 'toggle') {
421+
settings.save(key, !config[key])
422+
notify(`${settings.controls[key].label}: ${
423+
this.state.words[+(/disabled/i.test(key) ^ config[key])]}`)
424+
} else if (key == 'replyLanguage') {
425+
while (true) {
426+
let replyLang = prompt(
427+
`${app.msgs.prompt_updateReplyLang}:`, config.replyLanguage)
428+
if (replyLang == null) break // user cancelled so do nothing
429+
else if (!/\d/.test(replyLang)) { // valid reply language set
430+
replyLang = ( // auto-case for menu/alert aesthetics
431+
replyLang.length < 4 || replyLang.includes('-') ? replyLang.toUpperCase()
432+
: toTitleCase(replyLang) )
433+
settings.save('replyLanguage', replyLang || env.browser.language)
434+
modals.alert(( app.msgs.alert_replyLangUpdated ) + '!', // title
435+
( app.msgs.appName ) + ' ' // msg
436+
+ ( app.msgs.alert_willReplyIn ) + ' '
437+
+ ( replyLang || app.msgs.alert_yourSysLang) + '.'
456438
)
439+
break
457440
}
458-
} else if (key == 'replyInterval') {
459-
while (true) {
460-
const replyInterval = prompt(
461-
`${app.msgs.prompt_updateReplyInt}:`, config.replyInterval)
462-
if (replyInterval == null) break // user cancelled so do nothing
463-
else if (!isNaN(parseInt(replyInterval, 10)) && parseInt(replyInterval, 10) > 4) {
464-
settings.save('replyInterval', parseInt(replyInterval, 10))
465-
modals.alert(( app.msgs.alert_replyIntUpdated ) + '!', // title
466-
( app.msgs.appName ) + ' ' // msg
467-
+ ( app.msgs.alert_willReplyEvery ) + ' '
468-
+ replyInterval + ' ' + ( app.msgs.unit_seconds ) + '.'
469-
)
470-
break
471-
}
441+
}
442+
} else if (key == 'replyTopic') {
443+
let replyTopic = prompt(( app.msgs.prompt_updateReplyTopic )
444+
+ ' (' + ( app.msgs.prompt_orEnter ) + ' \'ALL\'):', config.replyTopic)
445+
if (replyTopic != null) { // user didn't cancel
446+
replyTopic = toTitleCase(replyTopic.toString()) // for menu/alert aesthetics
447+
settings.save('replyTopic',
448+
!replyTopic || re_all.test(replyTopic) ? app.msgs.menuLabel_all : replyTopic)
449+
modals.alert(`${app.msgs.alert_replyTopicUpdated}!`,
450+
`${app.msgs.appName} ${app.msgs.alert_willAnswer} `
451+
+ ( !replyTopic || re_all.test(replyTopic) ? app.msgs.alert_onAllTopics
452+
: `${app.msgs.alert_onTopicOf} ${replyTopic}` )
453+
+ '!'
454+
)
455+
}
456+
} else if (key == 'replyInterval') {
457+
while (true) {
458+
const replyInterval = prompt(
459+
`${app.msgs.prompt_updateReplyInt}:`, config.replyInterval)
460+
if (replyInterval == null) break // user cancelled so do nothing
461+
else if (!isNaN(parseInt(replyInterval, 10)) && parseInt(replyInterval, 10) > 4) {
462+
settings.save('replyInterval', parseInt(replyInterval, 10))
463+
modals.alert(( app.msgs.alert_replyIntUpdated ) + '!', // title
464+
( app.msgs.appName ) + ' ' // msg
465+
+ ( app.msgs.alert_willReplyEvery ) + ' '
466+
+ replyInterval + ' ' + ( app.msgs.unit_seconds ) + '.'
467+
)
468+
break
472469
}
473470
}
474-
syncConfigToUI({ updatedKey: key })
475-
}, env.scriptManager.supportsTooltips ? { title: settings.controls[key].helptip || ' ' } : undefined))
476-
})
477-
}
471+
}
472+
syncConfigToUI({ updatedKey: key })
473+
}, env.scriptManager.supportsTooltips ? { title: settings.controls[key].helptip || ' ' } : undefined)
474+
});
478475

479476
// Add About/Donate entries
480477
['about', 'donate'].forEach(entryType => {

0 commit comments

Comments
 (0)