1
0
mirror of https://github.com/lencx/ChatGPT.git synced 2024-10-01 01:06:13 -04:00
Unofficial_ChatGPT_Client/scripts/popup.core.js
2023-05-25 09:52:33 +08:00

84 lines
2.3 KiB
JavaScript
Vendored

/**
* @name popup.core.js
* @version 0.1.0
* @url https://github.com/lencx/ChatGPT/tree/main/scripts/popup.core.js
*/
async function popupCoreInit() {
const chatConf = (await invoke('get_app_conf')) || {};
if (!chatConf.popup_search) return;
if (!window.FloatingUIDOM) return;
const styleDom = document.createElement('style');
styleDom.innerHTML = `
#chagpt-selection-menu {
display: none;
width: max-content;
position: absolute;
top: 0;
left: 0;
background: #4a4a4a;
color: white;
font-weight: bold;
padding: 3px 5px;
border-radius: 2px;
font-size: 10px;
cursor: pointer;
}
`;
document.head.append(styleDom);
const selectionMenu = document.createElement('div');
selectionMenu.id = 'chagpt-selection-menu';
selectionMenu.innerHTML = 'DALL·E 2';
document.body.appendChild(selectionMenu);
const { computePosition, flip, offset, shift } = window.FloatingUIDOM;
document.body.addEventListener('mousedown', async (e) => {
selectionMenu.style.display = 'none';
if (e.target.id === 'chagpt-selection-menu') {
await invoke('dalle2_search_window', {
query: encodeURIComponent(window.__DALLE2_CONTENT__),
});
} else {
delete window.__DALLE2_CONTENT__;
}
});
document.body.addEventListener('mouseup', async (e) => {
selectionMenu.style.display = 'none';
const selection = window.getSelection();
window.__DALLE2_CONTENT__ = selection.toString().trim();
if (!window.__DALLE2_CONTENT__) return;
if (selection.rangeCount > 0) {
const range = selection.getRangeAt(0);
const rect = range.getClientRects()[0];
const rootEl = document.createElement('div');
rootEl.style.top = `${rect.top}px`;
rootEl.style.position = 'fixed';
rootEl.style.left = `${rect.left}px`;
document.body.appendChild(rootEl);
selectionMenu.style.display = 'block';
computePosition(rootEl, selectionMenu, {
placement: 'top',
middleware: [flip(), offset(5), shift({ padding: 5 })],
}).then(({ x, y }) => {
Object.assign(selectionMenu.style, {
left: `${x}px`,
top: `${y}px`,
});
});
}
});
}
if (document.readyState === 'complete' || document.readyState === 'interactive') {
popupCoreInit();
} else {
document.addEventListener('DOMContentLoaded', popupCoreInit);
}