Skip to content

Commit

Permalink
fix: 🐛 LeetCodeV2 detection mechanism
Browse files Browse the repository at this point in the history
Update LeetCodeV2 detection mechanism; Rehandle submit by keyboard
shortcuts; Use MutationObserver to determine when the submit button
elements are loaded

BREAKING CHANGE: 🧨 Detecting LeetCodeV2 by the presence of submit button

✅ Closes: QasimWani#51
  • Loading branch information
csbt committed Nov 17, 2023
1 parent bb47ce3 commit 156a65d
Showing 1 changed file with 35 additions and 21 deletions.
56 changes: 35 additions & 21 deletions scripts/leetcode.js
Original file line number Diff line number Diff line change
Expand Up @@ -924,15 +924,7 @@ chrome.storage.local.get('isSync', data => {
}
});

let leetCode;
const isLeetCodeV2 = document.getElementById('chakra-script') != null;
if (!isLeetCodeV2) {
leetCode = new LeetCodeV1();
} else {
leetCode = new LeetCodeV2();
}

const loader = () => {
const loader = (leetCode) => {
let iterations = 0;
const intervalId = setInterval(async () => {
try {
Expand Down Expand Up @@ -1026,21 +1018,43 @@ const loader = () => {
}, 1000);
};

function handleCtrlEnter(event) {
if (event.key === 'Enter' && event.ctrlKey) {
loader()
const isMacOS = window.navigator.userAgent.includes('Mac');

// Submit by Keyboard Shortcuts only support on LeetCode v2
function submitByShortcuts(event, leetCodeV2) {
const isEnterKey = event.key === 'Enter';

// Adapt to MacOS operating system
if (isEnterKey && ((isMacOS && event.metaKey) || (!isMacOS && event.ctrlKey))) {
loader(leetCodeV2);
}
}

// TODO: have event listeners to be added once the button elements are loaded using Mutation Observer
// maybe this will help https://stackoverflow.com/questions/68329405/javascript-wait-until-element-loaded-on-website-using-chrome-extension
// Wait for the submit button to load
setTimeout(() => {
// Use MutationObserver to determine when the submit button elements are loaded
const observer = new MutationObserver(function (_mutations, observer) {
const v1SubmitBtn = document.querySelector('[data-cy="submit-code-btn"]');
const v2SubmitBtn = document.querySelector('[data-e2e-locator="console-submit-button"]');
const submitBtn = !isLeetCodeV2 ? v1SubmitBtn : v2SubmitBtn;
submitBtn.addEventListener('click', loader);
const textareaList = document.getElementsByTagName('textarea');
const textarea = textareaList.length === 4 ? textareaList[2] : textareaList[1];

if(v1SubmitBtn) {
observer.disconnect();

const leetCode = new LeetCodeV1();
v1SubmitBtn.addEventListener('click', () => loader(leetCode));
return;
}

if(v2SubmitBtn && textarea) {
observer.disconnect();

const leetCode = new LeetCodeV2();
v2SubmitBtn.addEventListener('click', () => loader(leetCode));
textarea.addEventListener('keydown', e => submitByShortcuts(e, leetCode));
}
});

const textarea = document.getElementsByTagName('textarea')[0]
textarea.addEventListener('keydown', handleCtrlEnter)
}, 2000);
observer.observe(document.body, {
childList: true,
subtree: true,
});

0 comments on commit 156a65d

Please sign in to comment.