您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Here is a Khan Solver!
当前为
- // ==UserScript==
- // @name Khan Academy Problem Solver
- // @version 1.2
- // @description Here is a Khan Solver!
- // @author Logzilla6
- // @match https://www.khanacademy.org/*
- // @grant none
- // @namespace https://greasyfork.org/users/783447
- // ==/UserScript==
- (function () {
- 'use strict';
- window.loaded = false;
- alert("Solver Will Say Answers For Problem 1 and 2,"+"\n"+ "then after solving problem 1, Solver Will then give answer to 3, then 4 and so on.");
- class Answer {
- constructor(answer, type) {
- this.body = answer;
- this.type = type;
- }
- get isMultiChoice() {
- return this.type == "multiple_choice";
- }
- get isFreeResponse() {
- return this.type == "free_response";
- }
- get isExpression() {
- return this.type == "expression";
- }
- get isDropdown() {
- return this.type == "dropdown";
- }
- log() {
- const answer = this.body;
- const style = "color: coral; -webkit-text-stroke: .5px black; font-size:24px; font-weight:bold;";
- answer.map(ans => {
- if (typeof ans == "string") {
- if (ans.includes("web+graphie")) {
- this.body[this.body.indexOf(ans)] = "";
- this.printImage(ans);
- } else {
- answer[answer.indexOf(ans)] = ans.replaceAll("$", "");
- }
- }
- });
- const text = answer.join("\n");
- if (text) {
- console.log(`${text.trim()}`, style);
- }
- }
- printImage(ans) {
- const url = ans.replace(".replace(")", ".svg");
- const image = new Image();
- image.src = url;
- image.onload = () => {
- const imageStyle = [
- 'font-size: 1px;',
- 'line-height: ', this.height % 2, 'px;',
- 'padding: ', this.height * .5, 'px ', this.width * .5, 'px;',
- 'background-size: ', this.width, 'px ', this.height, 'px;',
- 'background: url(', url, ');'
- ].join(' ');
- console.log('', imageStyle);
- };
- }
- }
- const originalFetch = window.fetch;
- window.fetch = function () {
- return originalFetch.apply(this, arguments).then((res) => {
- if (res.url.includes("/getAssessmentItem")) {
- const clone = res.clone();
- clone.json().then(json => {
- let item, question;
- try {
- item = json.data.assessmentItem.item.itemData;
- question = JSON.parse(item).question;
- } catch {
- let errorIteration = () => { return localStorage.getItem("error_iter") || 0; }
- localStorage.setItem("error_iter", errorIteration() + 1);
- if (errorIteration() < 4) {
- return location.reload();
- } else {
- return alert("%c An error occurred", "color: red; font-weight: bolder; font-size: 20px;");
- }
- }
- if (!question) return;
- Object.keys(question.widgets).map(widgetName => {
- switch (widgetName.split(" ")[0]) {
- case "numeric-input":
- return freeResponseAnswerFrom(question).log();
- case "radio":
- return multipleChoiceAnswerFrom(question).log();
- case "expression":
- return expressionAnswerFrom(question).log();
- case "dropdown":
- return dropdownAnswerFrom(question).log();
- }
- });
- });
- }
- if (!window.loaded) {
- console.clear();
- console.log("%c Color Picker ", "color: mediumvioletred; -webkit-text-stroke: .5px black; font-size:40px; font-weight:bolder; padding: .2rem;");
- console.log("%c Created by Logzilla6", "color: white; -webkit-text-stroke: .5px black; font-size:15px; font-weight:bold;");
- window.loaded = true;
- }
- return res;
- })
- }
- function freeResponseAnswerFrom(question) {
- const answer = Object.values(question.widgets).map((widget) => {
- if (widget.options?.answers) {
- return widget.options.answers.map(answer => {
- if (answer.status == "correct") {
- return alert("Answer: If it is really long, just paste the whole thing in!"+"\n"+answer.value);
- }
- });
- }
- }).flat().filter((val) => { return val !== undefined; });
- return new Answer(answer, "free_response");
- }
- function multipleChoiceAnswerFrom(question) {
- const answer = Object.values(question.widgets).map((widget) => {
- if (widget.options?.choices) {
- return widget.options.choices.map(choice => {
- if (choice.correct) {
- return alert("Answer:"+"\n"+choice.content);
- }
- });
- }
- }).flat().filter((val) => { return val !== undefined; });
- return new Answer(answer, "multiple_choice");
- }
- function expressionAnswerFrom(question) {
- const answer = Object.values(question.widgets).map((widget) => {
- if (widget.options?.answerForms) {
- return widget.options.answerForms.map(answer => {
- if (Object.values(answer).includes("correct")) {
- return alert("Answer:"+"\n"+answer.value);
- }
- });
- }
- }).flat();
- return new Answer(answer, "expression");
- }
- function dropdownAnswerFrom(question) {
- const answer = Object.values(question.widgets).map((widget) => {
- if (widget.options?.choices) {
- return widget.options.choices.map(choice => {
- if (choice.correct) {
- return alert("Answer:"+"\n"+choice.content);
- }
- });
- }
- }).flat();
- return new Answer(answer, "dropdown");
- }
- })();