Spaces:
Sleeping
Sleeping
| import { utils } from "./utils.js"; | |
| import { view } from "./view.js"; | |
| function getUrlParams() { | |
| const config = {}; | |
| new URLSearchParams(window.location.search).forEach((value, key) => { | |
| config[key] = value; | |
| }); | |
| return config; | |
| } | |
| let config = { | |
| first_language: 'にほんご,中文', | |
| second_language: 'English' | |
| } | |
| config ={...config,... getUrlParams()}; | |
| console.log('esltool.js config is :',config); | |
| // Create toolbar element | |
| const toolbar = document.createElement("div"); | |
| toolbar.id = "esl-toolbar"; | |
| toolbar.style.position = "fixed"; // Make it stick to the top | |
| toolbar.style.top = "0"; // Position at the very top | |
| toolbar.style.left = "0"; // Position at the leftmost side | |
| toolbar.style.width = "100%"; // Make it span the entire width | |
| toolbar.style.backgroundColor = "lightgray"; // Example background color | |
| toolbar.style.padding = "10px"; // Add some padding | |
| // Create buttons | |
| const askButton = document.createElement("button"); | |
| askButton.id = "ask-btn"; | |
| askButton.textContent = "Ask"; | |
| askButton.classList.add('esltool-btn'); | |
| askButton.addEventListener('pointerdown', e=>{ | |
| e.preventDefault(); | |
| }); | |
| const correctBtn = document.createElement("button"); | |
| correctBtn.id = "correct-btn"; | |
| correctBtn.textContent = "Correct"; | |
| correctBtn.classList.add('esltool-btn'); | |
| const translateBtn = document.createElement("button"); | |
| translateBtn.id = "translate-btn"; | |
| translateBtn.textContent = "Translate"; | |
| translateBtn.classList.add('esltool-btn'); | |
| const explainBtn = document.createElement("button"); | |
| explainBtn.id = "explain-btn"; | |
| explainBtn.textContent = "Explain"; | |
| explainBtn.classList.add('esltool-btn'); | |
| const defineBtn = document.createElement("button"); | |
| defineBtn.id = "define-btn"; | |
| defineBtn.textContent = "Define"; | |
| defineBtn.classList.add('esltool-btn'); | |
| const removeButton = document.createElement("button"); | |
| removeButton.id = "remove-btn"; | |
| removeButton.textContent = "Hide"; | |
| removeButton.classList.add('esltool-btn'); | |
| // Append buttons to toolbar | |
| toolbar.appendChild(askButton); | |
| toolbar.appendChild(correctBtn); | |
| toolbar.appendChild(translateBtn); | |
| toolbar.appendChild(explainBtn); | |
| toolbar.appendChild(defineBtn); | |
| toolbar.appendChild(removeButton); | |
| // Create content area | |
| const contentArea = document.createElement("div"); | |
| contentArea.id = "content"; | |
| contentArea.contentEditable = true; // Allow user to select text | |
| // Append toolbar and content area to the body | |
| document.body.appendChild(toolbar); | |
| document.body.appendChild(contentArea); | |
| // Function to get selected text | |
| function getSelectedText() { | |
| return window.getSelection().toString(); | |
| } | |
| // Implement functionalities for each button (same as before) | |
| function ask(prompt) { | |
| let currentLineString = utils.getCurrentLineString(document.activeElement); | |
| let selectText = window.getSelection().toString(); | |
| prompt=` | |
| ${config.cmd || ' '} | |
| ${prompt} **${selectText.length >= 1 ? selectText : currentLineString}** ` | |
| utils.displayMarkdown(prompt+'...'); | |
| utils.AIComplete(prompt,{ | |
| url: '/openai/v1/chat/completions', | |
| model: config.model || | |
| 'llama-3.1-70b-versatile', | |
| max_tokens: parseInt(config.max_tokens) || 8000, | |
| }); | |
| } | |
| askButton.addEventListener("pointerdown", () => { | |
| ask(' '); | |
| }); | |
| // Correct Button: | |
| correctBtn.addEventListener("pointerdown", () => { | |
| ask('correct mistakes of the text: \n'); | |
| }); | |
| // Translate Button: | |
| translateBtn.addEventListener("pointerdown", () => { | |
| ask(`translate to English, ${config.first_language} French :\n `); | |
| }); | |
| // Explain Button: | |
| explainBtn.addEventListener("pointerdown", () => { | |
| ask(`explain this for ${config.second_language} seconds language learner in simple english first,then analyse step by step:\n `); | |
| }); | |
| // Define Button: | |
| defineBtn.addEventListener("pointerdown", () => { | |
| ask(`define the word in simple ${config.second_language} , tell me all definitions if it has,and part of speech, and give some usage example:\n ` ) | |
| }); | |
| removeButton.addEventListener('pointerdown', () => { | |
| var urlDiv = document.getElementById("url_div"); | |
| urlDiv.style.display = urlDiv.style.display === "none" ? "block" : "none"; | |
| }); | |
| // Style the toolbar | |
| toolbar.style.position = "fixed"; | |
| toolbar.style.top = "0%"; | |
| toolbar.style.left = "0"; | |
| toolbar.style.width = "wrap-content"; | |
| toolbar.style.backgroundColor = "black"; // Light gray background | |
| toolbar.style.padding = "5px"; | |
| toolbar.style.boxShadow = "0 2px 4px rgba(0, 0, 0, 0.1)"; // Add a subtle shadow | |
| // Style the buttons | |
| const buttonStyles = { | |
| backgroundColor: "black", // Green background | |
| border: "none", | |
| color: "white", | |
| padding: "2px", | |
| textAlign: "center", | |
| textDecoration: "none", | |
| display: "inline-block", | |
| fontSize: "small", | |
| margin: "2px", | |
| cursor: "pointer", | |
| borderRadius: "5px", // Rounded corners | |
| }; | |
| // Apply styles to each button | |
| for (const button of [askButton, correctBtn, translateBtn, explainBtn, defineBtn, removeButton]) { | |
| Object.assign(button.style, buttonStyles); | |
| utils.makeButtonFeedback(button); | |
| } | |
| setTimeout(() => { | |
| utils.displayMarkdown(` | |
| hello, this is note app for language learner, press the blue circle then speak now! try ask button or ctrl + enter to send current line or selected text to AI | |
| code will display like this: | |
| \`\`\` | |
| this code \`\${value}\` | |
| \`\`\` | |
| `) | |
| view.createMenu(window.innerWidth*0.9, 300); | |
| let allEslToolBtns=document.querySelectorAll('.esltool-btn'); | |
| for (const btn of allEslToolBtns) { | |
| console.log(btn); | |
| btn.addEventListener('pointerdown', e=>{ | |
| e.preventDefault(); | |
| }); | |
| } | |
| }, 1000); | |