您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Print function for ExamTopics
- // ==UserScript==
- // @name ExamTopic Print
- // @namespace http://tampermonkey.net/
- // @version 2024-09-19
- // @description Print function for ExamTopics
- // @author You
- // @icon https://cdn-icons-png.flaticon.com/512/839/839184.png
- // @match https://www.examtopics.com/*
- // @license MIT
- // @grant none
- // ==/UserScript==
- function getVoteSummary(element) {
- var voteBars = element.getElementsByClassName("vote-bar");
- var summary = {};
- var totalVotes = 0;
- for (var i = 0; i < voteBars.length; i++) {
- var voteBar = voteBars[i];
- var tooltipText = voteBar.getAttribute("data-original-title");
- var votes;
- if (tooltipText.includes("%")) {
- var percentage = parseFloat(tooltipText);
- votes = Math.round((percentage / 100) * totalVotes);
- } else {
- votes = parseInt(tooltipText);
- }
- if (!isNaN(votes)) {
- var option = voteBar.textContent.trim();
- summary[option] = votes;
- totalVotes += votes;
- }
- }
- return {
- total: totalVotes,
- votes: summary,
- };
- }
- function extractQuestionNumber(str) {
- const match = str.match(/question (\d+)/);
- if (match) {
- return "question_" + match[1];
- } else {
- return "something_wrong_in_parse_title";
- }
- }
- function createWindow(clonedElement) {
- var mywindow = window.open("", "PRINT", "height=1754,width=1240");
- var commonStyles = `
- <style type="text/css">
- .discussion-header-container {
- font-family: Arial !important;
- }
- .comments-container .comment-content{
- font-family: Arial !important;
- }
- @media print {
- @page {
- margin-left: 1.25in;
- margin-right: 1.25in;
- }
- }
- </style>`;
- mywindow.document.write(`
- <html>
- <head>
- <title>${extractQuestionNumber(document.title)}</title>
- ${commonStyles}`);
- Array.prototype.forEach.call(document.styleSheets, function (sheet) {
- mywindow.document.write(
- `<link rel="stylesheet" href="${sheet.href}" type="text/css" />`
- );
- });
- mywindow.document.write(`
- </head>
- <body>
- ${clonedElement.innerHTML}
- </body>
- </html>`);
- return mywindow;
- }
- function printFunction() {
- var selectedElement = document.querySelectorAll(".col-12")[1];
- var clonedElement = selectedElement.cloneNode(true);
- // calculate vote
- const voteSummary = getVoteSummary(clonedElement);
- console.log(voteSummary);
- let voteSummaryDiv = document.createElement("div");
- // Create HTML content
- let voteSummaryHTML = `<b>Total: ${voteSummary.total}</b><ul>`;
- for (let voteType in voteSummary.votes) {
- voteSummaryHTML += `<li>${voteType}: ${voteSummary.votes[voteType]}</li>`;
- }
- voteSummaryHTML += "</ul>";
- // Set the HTML content to the new div
- voteSummaryDiv.innerHTML = voteSummaryHTML;
- // Append the new div to the last element with class 'question-answer'
- let questionAnswerElements =
- clonedElement.getElementsByClassName("question-answer");
- let lastQuestionAnswerElement =
- questionAnswerElements[questionAnswerElements.length - 1];
- lastQuestionAnswerElement.appendChild(voteSummaryDiv);
- var listItemElements = clonedElement.querySelectorAll("li");
- listItemElements.forEach(function (listItem) {
- listItem.className = "multi-choice-item";
- });
- var garbege = [
- ".all-questions-link",
- ".correct-answer-box",
- ".disclaimer-box",
- "span.badge.badge-success.most-voted-answer-badge",
- ".correct-answer",
- ".vote-answer-button",
- ".voting-summary",
- ];
- garbege.forEach(function (selector) {
- var elements = clonedElement.querySelectorAll(selector);
- elements.forEach(function (element) {
- element.parentNode.removeChild(element);
- });
- });
- var mywindow = createWindow(clonedElement);
- mywindow.print();
- }
- function createButton() {
- var printButton = document.createElement("button");
- printButton.innerHTML = "Print";
- printButton.style.marginLeft = "10px";
- printButton.onclick = printFunction;
- var correctAnswerBox = document.querySelector(".correct-answer-box br");
- correctAnswerBox.parentNode.insertBefore(printButton, correctAnswerBox);
- }
- (function () {
- "use strict";
- window.addEventListener("load", createButton, false);
- })();