Greasy Fork is available in English.

baidu_translate_hot_key_tool

v0.1.0 百度翻译快捷键插件;支持聚焦/搜索内容发音/翻译结果发音

// ==UserScript==
// @name         baidu_translate_hot_key_tool
// @namespace    http://tampermonkey.net/
// @version      1.2.0
// @description  v0.1.0 百度翻译快捷键插件;支持聚焦/搜索内容发音/翻译结果发音
// @description  v1.0.0 整理代码, 移除兼容部分代码
// @description  v1.1.0 为了方便纯键盘操作(使用 vimium 插件), 在发音时使输入框失去焦点
// @description  v1.2.0 支持自定义 group keys, 包含 ctrl, alt, shift, meta; 详情见 log
// @icon         http://fanyi.bdstatic.com/static/translation/img/favicon/favicon_d87cd2a.ico
// @author       sven
// @include      https://fanyi.baidu.com/*
// @match        <$URL$>
// ==/UserScript==

; (function () {
    if (location.href.indexOf('https://fanyi.baidu.com/#') !== 0) return false
    const input = document.getElementById('baidu_translate_input')
    const Handler = {
        _originBtn: null,
        _resultBtn: null,
        _defaultTriggerKeys: ['ctrl', 'meta'],
        get triggerKeys() {
            const cache = localStorage.getItem('triggerKeys')
            return JSON.parse(cache) || this._defaultTriggerKeys
        },
        get originBtn() {
            return this._originBtn || (this._originBtn = document.querySelector('.input-operate .operate-btn.op-sound'))
        },
        get resultBtn() {
            return this._resultBtn || (this._resultBtn = document.querySelector('.output-operate .operate-btn.op-sound'))
        },
        init() {
            Handler.listenKeyup()
            Handler.addTips()
            console.log('%c[baidu_translate_hot_key_tool] %c可以使用例如 `%clocalStorage.setItem("triggerKeys", \'["ctrl", "alt"]\')%c` 方式修改默认快捷键(user settings), 只支持 ctrl, alt, meta, shift', 'color: teal', 'color: auto', 'color: #FFF', 'color: auto')
            const userTriggerKeys = localStorage.getItem('triggerKeys');
            if (Array.isArray(JSON.parse(userTriggerKeys))) {
                console.log('%c[baidu_translate_hot_key_tool] %c已使用自定义快捷键: ' + userTriggerKeys, 'color: teal', 'color: #FFF')
            }
        },
        /**
         * 监听键盘事件
         * ctrl+meta+up(focus) 聚焦并选中
         * ctrl+meta+left(say) 发音[输入内容]
         * ctrl+meta+right(say) 发音[翻译结果]
         * Mac 下 meta 键换为 alt 键
         */
        listenKeyup() {
            document.addEventListener('keyup', evt => {
                const {
                    altKey, ctrlKey, shiftKey, keyCode, metaKey
                } = evt
                const trigger = this.triggerKeys.every(t => evt[t + 'Key'])
                if (!trigger) return false
                const originBtn = document.querySelector('.input-operate .operate-btn.op-sound')
                const resultBtn = document.querySelector('.output-operate .operate-btn.op-sound')
                switch (keyCode) {
                    case 38: // up
                        if (evt.target.tagName === 'TEXTAREA') return false;
                        input.focus()
                        input.select()
                        break
                    case 37: // left
                        originBtn && originBtn.click()
                        input.blur()
                        break
                    case 39: // right
                        resultBtn && resultBtn.click()
                        input.blur()
                        break
                }
            })
        },
        addTips() {
            // window.addEventListener('load', evt => {
            //    if (this.originBtn) this.originBtn.innerHTML += '<div>ctrl+meta+left</div>'
            //    if (this.resultBtn) this.resultBtn.innerHTML += '<div>ctrl+meta+right</div>'
            // })
        }
    }
    Handler.init()
})();