| 142 | } |
| 143 | |
| 144 | async function cmdTip() { |
| 145 | initDom(); |
| 146 | const chatModelJson = await invoke('get_chat_model_cmd') || {}; |
| 147 | const data = chatModelJson.data; |
| 148 | if (data.length <= 0) return; |
| 149 | |
| 150 | let modelDom = document.querySelector('.chat-model-cmd-list'); |
| 151 | if (!modelDom) { |
| 152 | const dom = document.createElement('div'); |
| 153 | dom.classList.add('chat-model-cmd-list'); |
| 154 | document.querySelector('form').appendChild(dom); |
| 155 | modelDom = document.querySelector('.chat-model-cmd-list'); |
| 156 | |
| 157 | // fix: tray window |
| 158 | if (__TAURI_METADATA__.__currentWindow.label === 'tray') { |
| 159 | modelDom.style.bottom = '54px'; |
| 160 | } |
| 161 | |
| 162 | const itemDom = (v) => `<div class="cmd-item" title="${v.prompt}" data-cmd="${v.cmd}" data-prompt="${encodeURIComponent(v.prompt)}"><b title="${v.cmd}">/${v.cmd}</b><i>${v.act}</i></div>`; |
| 163 | const renderList = (v) => { |
| 164 | initDom(); |
| 165 | modelDom.innerHTML = `<div>${v.map(itemDom).join('')}</div>`; |
| 166 | window.__CHAT_MODEL_CMD_PROMPT__ = v[0]?.prompt.trim(); |
| 167 | window.__CHAT_MODEL_CMD__ = v[0]?.cmd.trim(); |
| 168 | window.__cmd_list = modelDom.querySelectorAll('.cmd-item'); |
| 169 | window.__cmd_index = 0; |
| 170 | window.__cmd_list[window.__cmd_index].classList.add('selected'); |
| 171 | }; |
| 172 | const setPrompt = (v = '') => { |
| 173 | if (v.trim()) { |
| 174 | window.__CHAT_MODEL_CMD_PROMPT__ = window.__CHAT_MODEL_CMD_PROMPT__?.replace(/\{([^{}]*)\}/, `{${v.trim()}}`); |
| 175 | } |
| 176 | } |
| 177 | const searchInput = document.querySelector('form textarea'); |
| 178 | |
| 179 | // Enter a command starting with `/` and press a space to automatically fill `chatgpt prompt`. |
| 180 | // If more than one command appears in the search results, the first one will be used by default. |
| 181 | function cmdKeydown(event) { |
| 182 | if (!window.__CHAT_MODEL_CMD_PROMPT__) { |
| 183 | if (!event.shiftKey && event.keyCode === 13 && __TAURI_METADATA__.__currentWindow.label === 'tray') { |
| 184 | const btn = document.querySelector('form button'); |
| 185 | if (btn) btn.click(); |
| 186 | event.preventDefault(); |
| 187 | } |
| 188 | return; |
| 189 | } |
| 190 | |
| 191 | // ------------------ Keyboard scrolling (ArrowUp | ArrowDown) -------------------------- |
| 192 | if (event.keyCode === 38 && window.__cmd_index > 0) { // ArrowUp |
| 193 | window.__cmd_list[window.__cmd_index].classList.remove('selected'); |
| 194 | window.__cmd_index = window.__cmd_index - 1; |
| 195 | window.__cmd_list[window.__cmd_index].classList.add('selected'); |
| 196 | window.__CHAT_MODEL_CMD_PROMPT__ = decodeURIComponent(window.__cmd_list[window.__cmd_index].getAttribute('data-prompt')); |
| 197 | searchInput.value = `/${window.__cmd_list[window.__cmd_index].getAttribute('data-cmd')}`; |
| 198 | event.preventDefault(); |
| 199 | } |
| 200 | |
| 201 | if (event.keyCode === 40 && window.__cmd_index < window.__cmd_list.length - 1) { // ArrowDown |