|
199 | 199 | // @description:zh-TW 從無所不知的 ChatGPT 生成無窮無盡的答案 (用任何語言!)
|
200 | 200 | // @author Adam Lui
|
201 | 201 | // @namespace https://github.com/adamlui
|
202 |
| -// @version 2025.3.31 |
| 202 | +// @version 2025.4.1 |
203 | 203 | // @license MIT
|
204 | 204 | // @icon https://cdn.jsdelivr.net/gh/adamlui/chatgpt-infinity@8df6f33/assets/images/icons/infinity-symbol/circled/with-robot/icon48.png
|
205 | 205 | // @icon64 https://cdn.jsdelivr.net/gh/adamlui/chatgpt-infinity@8df6f33/assets/images/icons/infinity-symbol/circled/with-robot/icon64.png
|
|
387 | 387 | // Define MENU functions
|
388 | 388 |
|
389 | 389 | const toolbarMenu = {
|
390 |
| - ids: [], state: { |
| 390 | + state: { |
391 | 391 | symbols: ['❌', '✔️'], separator: env.scriptManager.name == 'Tampermonkey' ? ' — ' : ': ',
|
392 | 392 | words: [app.msgs.state_off.toUpperCase(), app.msgs.state_on.toUpperCase()]
|
393 | 393 | },
|
|
398 | 398 | },
|
399 | 399 |
|
400 | 400 | register() {
|
| 401 | + const re_all = new RegExp(`^(${app.msgs.menuLabel_all}|all|any|every)$`, 'i') |
401 | 402 |
|
402 | 403 | // Show "Disabled (extension active)"
|
403 |
| - if (env.extensionActive) |
| 404 | + this.ids = env.extensionActive ? [ |
404 | 405 | GM_registerMenuCommand(`${this.state.symbols[0]} ${
|
405 | 406 | toTitleCase(app.msgs.state_disabled)} (${app.msgs.menuLabel_extensionActive})`,
|
406 | 407 | () => modals.open('about'), env.scriptManager.supportsTooltips ? { title: ' ' } : undefined )
|
| 408 | + ] |
407 | 409 |
|
408 | 410 | // ...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) + '.' |
456 | 438 | )
|
| 439 | + break |
457 | 440 | }
|
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 |
472 | 469 | }
|
473 | 470 | }
|
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 | + }); |
478 | 475 |
|
479 | 476 | // Add About/Donate entries
|
480 | 477 | ['about', 'donate'].forEach(entryType => {
|
|
0 commit comments