Skip to content

Commit dcb74b6

Browse files
committed
➕ added getQuestion & bug fixed ✅
1 parent 8ec3088 commit dcb74b6

File tree

5 files changed

+118
-34
lines changed

5 files changed

+118
-34
lines changed

content.js

Lines changed: 15 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -3,15 +3,22 @@ console.log('👨‍💻 Author: Saurav Hathi \n🌟 GitHub: https://github.com/
33
let inter = null;
44

55
chrome.runtime.onMessage.addListener(function (request, sender, sendResponse) {
6-
if (request.message === "start") {
7-
if (Object.keys(request.answer_key).length === 0) {
8-
toast("Please enter the answer key", "error");
9-
return;
10-
}
116

12-
attempt(request.answer_key, request.time);
13-
} else if (request.message === "stop") {
14-
stopAttempt();
7+
if (window.location.href.includes("hitbullseye_test.php")) {
8+
if (request.message === "start") {
9+
if (Object.keys(request.answer_key).length === 0) {
10+
toast("Please enter the answer key", "error");
11+
return;
12+
}
13+
14+
15+
attempt(request.answer_key, request.time);
16+
} else if (request.message === "stop") {
17+
stopAttempt();
18+
}
19+
}
20+
else {
21+
toast("Please open the test page", "error");
1522
}
1623
});
1724

@@ -42,28 +49,4 @@ function stopAttempt() {
4249
clearInterval(inter);
4350
toast("Stopped attempting the test");
4451
}
45-
}
46-
47-
function toast(message, type = "success") {
48-
const div = document.createElement("div");
49-
div.id = "toast";
50-
const text = document.createTextNode(message);
51-
div.appendChild(text);
52-
const styleList = [
53-
'background-color: ' + (type === 'success' ? '#350054' : '#ff0000'),
54-
'color: ' + (type === 'success' ? '#fff' : '#fff'),
55-
];
56-
div.style.cssText = styleList.join(";");
57-
document.body.appendChild(div);
58-
setTimeout(() => {
59-
div.style.opacity = "1";
60-
div.style.transform = "translateY(0)";
61-
}, 1);
62-
setTimeout(() => {
63-
div.style.opacity = "0";
64-
div.style.transform = "translateY(-100%)";
65-
setTimeout(() => {
66-
document.body.removeChild(div);
67-
}, 500);
68-
}, 2000);
6952
}

getQuestions.js

Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
const copyToClipboard = async (text) => {
2+
try {
3+
await navigator.clipboard.writeText(text);
4+
} catch (err) {
5+
console.error('Failed to copy to clipboard', err);
6+
throw err;
7+
}
8+
};
9+
10+
const waitForPageLoad = () => {
11+
return new Promise((resolve, reject) => {
12+
const checkReadyState = () => {
13+
if (document.readyState === 'complete') {
14+
resolve();
15+
} else {
16+
setTimeout(checkReadyState, 1000);
17+
}
18+
};
19+
20+
checkReadyState();
21+
});
22+
};
23+
24+
waitForPageLoad().then(() => {
25+
if (window.location.href.includes("online_review/mock_clerk.php")) {
26+
const questions = document.querySelectorAll('table.quest');
27+
toast('Questions is loaded');
28+
29+
const processQuestions = async () => {
30+
let output = '';
31+
for (let index = 0; index < questions.length; index++) {
32+
const question = questions[index];
33+
const questionTextElement = question.querySelector('div.singlequesimg');
34+
let questionText = questionTextElement ? questionTextElement.innerText.replace(/\s\s+/g, '\n').trim() : '';
35+
36+
const questionImg = questionTextElement.querySelector('img');
37+
if (questionImg) {
38+
const questionImgSrc = questionImg.getAttribute('src');
39+
questionText += `\n<img src="${questionImgSrc}" alt="sauravhathi" />`;
40+
}
41+
42+
const shortQuestionTextElement = question.querySelector('tr td.text_1 div div span');
43+
if (shortQuestionTextElement) {
44+
questionText += `\n\n${shortQuestionTextElement.innerText}`;
45+
}
46+
47+
const optionsElements = question.querySelectorAll('table');
48+
const options = [...optionsElements].map(optionElement => {
49+
const optionTextElement = optionElement.querySelector('label');
50+
return optionTextElement ? optionTextElement.textContent.trim() : '';
51+
});
52+
53+
const explanationElement = question.querySelector('.explanation_div');
54+
let explanationContent = '';
55+
56+
if (explanationElement) {
57+
explanationContent = explanationElement.innerText.replace(/\s\s+/g, '\n').replace('Explanation', '<b>Explanation:</b>').trim();
58+
59+
const imgElement = explanationElement.querySelector('img');
60+
if (imgElement) {
61+
const imgSrc = imgElement.getAttribute('src');
62+
explanationContent += `\n<img src="${imgSrc}" alt="sauravhathi" />`;
63+
}
64+
}
65+
66+
const correctAnswerElement = question.querySelector('.corect_ans p span');
67+
const correctAnswer = correctAnswerElement ? correctAnswerElement.textContent.trim() : '';
68+
69+
output += `<b>Question ${index + 1}:</b>\n${questionText}\n\n<b>Options:</b>\n${options.map((option, optionIndex) => `${String.fromCharCode(65 + optionIndex)}. ${option}`).join('\n')}\n\n${explanationContent}\n\n<b>Correct Answer:</b> ${correctAnswer}\n\n`;
70+
}
71+
console.log(output);
72+
await copyToClipboard(output);
73+
toast('Copied all questions to clipboard');
74+
};
75+
processQuestions();
76+
}
77+
});

manifest.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
{
2323
"matches": ["https://*.hitbullseye.com/*"],
2424
"css": ["./popup/popup.css"],
25-
"js": ["content.js"]
25+
"js": ["content.js", "getQuestions.js", "toast.js"]
2626
}
2727
]
2828
}

popup/popup.html

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,8 @@
1818
<main>
1919
<div class="input_group">
2020
<label class="ex-label" for="test_answer_key">Test Answer Key</label>
21-
<input type="text" id="test_answer_key" placeholder="enter test answer key" value="CADADBCBCCBBCBBAACADBABACAADDCDCACBCCABBDBBDBDABCBCDAADDAADBDBBABDCDCCBBDAA" />
21+
<input type="text" id="test_answer_key" placeholder="enter test answer key"
22+
value="CADADBCBCCBBCBBAACADBABACAADDCDCACBCCABBDBBDBDABCBCDAADDAADBDBBABDCDCCBBDAA" />
2223
</div>
2324
<div class="input_group">
2425
<label class="ex-label" for="time">Time</label>

toast.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function toast(message, type = "success") {
2+
const div = document.createElement("div");
3+
div.id = "toast";
4+
const text = document.createTextNode(message);
5+
div.appendChild(text);
6+
const styleList = [
7+
'background-color: ' + (type === 'success' ? '#350054' : '#ff0000'),
8+
'color: ' + (type === 'success' ? '#fff' : '#fff'),
9+
];
10+
div.style.cssText = styleList.join(";");
11+
document.body.appendChild(div);
12+
setTimeout(() => {
13+
div.style.opacity = "1";
14+
div.style.transform = "translateY(0)";
15+
}, 1);
16+
setTimeout(() => {
17+
div.style.opacity = "0";
18+
div.style.transform = "translateY(-100%)";
19+
setTimeout(() => {
20+
document.body.removeChild(div);
21+
}, 500);
22+
}, 2000);
23+
}

0 commit comments

Comments
 (0)