Script Archived
This script has been archived by the author. The script may be no longer functional, and the author no longer maintains it. You cannot provide feedback for this script.
// ==UserScript==
// @name 中国大学慕课小工具
// @namespace https://github.com/CodFrm/cxmooc-tools
// @version 2.5.4
// @description 一个中国大学mooc刷课工具,火狐,谷歌,油猴支持.支持自动观看视频/课件/讨论,屏蔽视频题目和静音倍速,作业/测试题库,考试题库,SCOP课程(੧ᐛ੭挂科模式,启动)
// @author CodFrm
// @run-at document-start
// @match *://www.icourse163.org/learn/*
// @match *://www.icourse163.org/spoc/learn/*
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @grant CAT_click
// @grant unsafeWindow
// @license MIT
// ==/UserScript==
let config = {
answer_ignore: false, //忽略题目,勾选此处将不会答题
auto: true, //全自动挂机,无需手动操作,即可自动观看视频等
rand_answer: false, //随机答案,没有答案的题目将自动的生成一个答案
interval: 1, //时间间隔,当任务点完成后,会等待1分钟然后跳转到下一个任务点
video_multiple: 1, //视频播放倍速,视频播放的倍数,建议不要改动,为1即可,这是危险的功能
video_mute: true, //视频静音,视频自动静音播放
topic_interval: 5,//题目答题间隔,单位为秒
vtoken: "",
};
Object.keys(config).forEach(k => {
localStorage[k] = config[k];
});
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/tampermonkey/course163-pack.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./src/config.ts":
/*!***********************!*\
!*** ./src/config.ts ***!
\***********************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.SystemConfig = void 0;
var SystemConfig = /** @class */ (function () {
function SystemConfig() {
}
SystemConfig.version = 2.5;
SystemConfig.url = "https://cx.icodef.com/";
SystemConfig.hotVersion = "2.5.0";
//TODO:优化规则,可以通过ci自动生成匹配规则到tampermonkey和manifest文件中
SystemConfig.match = {
"cx": [
"*://*/mycourse/studentstudy?*",
"*://*/work/doHomeWorkNew?*",
"*://*/work/selectWorkQuestionYiPiYue?*",
"*://*/exam/test/reVersionTestStartNew?*",
"*://*/ztnodedetailcontroller/visitnodedetail?*",
"*://*/antispiderShowVerify.ac*",
"*://*/html/processVerify.ac?*",
"*://*/exam/test/reVersionPaperMarkContentNew?*",
"*://*/ananas/modules/*/index.html?*",
"*://*/exam/test?*",
"*://*/course/*.html?*"
], "zhs": [
"*://examh5.zhihuishu.com/stuExamWeb.html*",
"*://onlineexamh5new.zhihuishu.com/stuExamWeb.html*",
"*://studyh5.zhihuishu.com/videoStudy.html*",
], "mooc163": [
"*://www.icourse163.org/learn/*",
"*://www.icourse163.org/spoc/learn/*"
]
};
SystemConfig.config = {
cx: {
name: "超星",
items: [{
title: "随机答案",
description: "如果题库没有正确的答案会随机选择",
type: "checkbox",
key: "rand_answer",
value: false,
}, {
title: "自动挂机",
description: "进入一个页面就会自动开始挂机,完成一个任务之后会自动进行下一个",
type: "checkbox",
key: "auto",
value: true,
}, {
title: "视频静音",
description: "播放视频时,自动开启静音",
type: "checkbox",
key: "video_mute",
value: true,
}, {
title: "忽略题目",
description: "自动挂机时,忽略掉题目不做,直接跳过",
type: "checkbox",
key: "answer_ignore",
value: false,
}, {
title: "超级模式",
description: "超星平台下,超级模式会自动将flash播放器换成h5播放器",
type: "checkbox",
key: "super_mode",
value: true,
}, {
title: "播放源",
description: "锁定视频播放源,为空为记录最后一次选中的源(公网1,公网2等)",
type: "text",
key: "video_cdn",
value: "默认"
}, {
title: "播放倍速",
description: "视频播放的倍数,1为正常速度(最高16倍,该功能有一定危险)",
type: "text",
key: "video_multiple",
prompt: "这是一个很危险的功能,建议不要进行调整,如果你想调整播放速度请在下方填写yes(智慧树平台播放速度和视频进度无关,最高只能1.5倍速)",
unit: "倍",
value: "1",
}, {
title: "跳转间隔",
description: "视频(题目,任务点)完成后n分钟再继续下一个任务,可以有小数点,例如:0.5=30秒",
type: "text",
key: "interval",
unit: "分",
value: "1",
}, {
title: "做题间隔",
description: "每一道题之间填写答案的时间间隔",
type: "text",
key: "topic_interval",
unit: "秒",
value: "5",
}],
}, zhs: {
name: "智慧树",
items: [{
title: "随机答案",
description: "如果题库没有正确的答案会随机选择",
type: "checkbox",
key: "rand_answer",
value: false,
}, {
title: "自动挂机",
description: "进入一个页面就会自动开始挂机,完成一个任务之后会自动进行下一个",
type: "checkbox",
key: "auto",
value: true,
}, {
title: "视频静音",
description: "播放视频时,自动开启静音",
type: "checkbox",
key: "video_mute",
value: true,
}, {
title: "超级模式",
description: "智慧树平台下,超级模式会让任务完成的倍速成真",
type: "checkbox",
key: "super_mode",
value: true,
}, {
title: "播放倍速",
description: "视频播放的倍数,1为正常速度(最高16倍,该功能有一定危险)",
type: "text",
key: "video_multiple",
prompt: "这是一个很危险的功能,建议不要进行调整,如果你想调整播放速度请在下方填写yes(智慧树平台播放速度和视频进度无关,最高只能1.5倍速)",
unit: "倍",
value: "1",
}, {
title: "跳转间隔",
description: "视频完成后n分钟再继续播放下一个,可以有小数点,例如:0.5=30秒",
type: "text",
key: "interval",
unit: "分",
value: "1",
}, {
title: "做题间隔",
description: "每一道题之间填写答案的时间间隔",
type: "text",
key: "topic_interval",
unit: "秒",
value: "5",
}],
}, mooc163: {
name: "中国大学MOOC",
items: [{
title: "随机答案",
description: "如果题库没有正确的答案会随机选择",
type: "checkbox",
key: "rand_answer",
value: false,
}, {
title: "自动挂机",
description: "进入一个页面就会自动开始挂机,完成一个任务之后会自动进行下一个",
type: "checkbox",
key: "auto",
value: true,
}, {
title: "视频静音",
description: "播放视频时,自动开启静音",
type: "checkbox",
key: "video_mute",
value: true,
}, {
title: "忽略题目",
description: "自动挂机时,忽略掉题目不做,直接跳过",
type: "checkbox",
key: "answer_ignore",
value: false,
}, {
title: "播放倍速",
description: "视频播放的倍数,1为正常速度(最高16倍,该功能有一定危险)",
type: "text",
key: "video_multiple",
prompt: "这是一个很危险的功能,建议不要进行调整,如果你想调整播放速度请在下方填写yes(智慧树平台播放速度和视频进度无关,最高只能1.5倍速)",
unit: "倍",
value: "1",
}, {
title: "跳转间隔",
description: "视频完成后n分钟再继续播放下一个,可以有小数点,例如:0.5=30秒",
type: "text",
key: "interval",
unit: "分",
value: "1",
}, {
title: "做题间隔",
description: "每一道题之间填写答案的时间间隔",
type: "text",
key: "topic_interval",
unit: "秒",
value: "5",
}],
},
};
return SystemConfig;
}());
exports.SystemConfig = SystemConfig;
/***/ }),
/***/ "./src/internal/app/question.ts":
/*!**************************************!*\
!*** ./src/internal/app/question.ts ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ToolsQuestionBankFacade = exports.ToolsQuestionBank = exports.SwitchTopicType = exports.QuestionStatusString = exports.TopicStatusString = exports.PushAnswer = void 0;
var utils_1 = __webpack_require__(/*! ../utils/utils */ "./src/internal/utils/utils.ts");
var config_1 = __webpack_require__(/*! @App/config */ "./src/config.ts");
var application_1 = __webpack_require__(/*! ../application */ "./src/internal/application.ts");
var PushAnswer = /** @class */ (function () {
function PushAnswer() {
}
PushAnswer.prototype.Equal = function (content1, content2) {
return content1 == content2;
};
return PushAnswer;
}());
exports.PushAnswer = PushAnswer;
var topicStatusMap = new Map();
topicStatusMap.set("ok", "搜索成功").set("random", "随机答案").set("no_support_random", "不支持的随机答案类型").set("no_answer", "题库中没有搜索到答案").set("no_match", "题库中没有符合的答案");
var questionStatusMap = new Map();
questionStatusMap.set("success", "搜索成功").set("network", "题库网络错误").set("incomplete", "题库不全").set("processing", "搜索中...");
function TopicStatusString(status) {
return topicStatusMap.get(status) || "未知错误";
}
exports.TopicStatusString = TopicStatusString;
function QuestionStatusString(status) {
return questionStatusMap.get(status) || "未知错误";
}
exports.QuestionStatusString = QuestionStatusString;
function SwitchTopicType(title) {
switch (title) {
case "单选题": {
return 1;
}
case "多选题": {
return 2;
}
case "判断题": {
return 3;
}
case "填空题": {
return 4;
}
default: {
return null;
}
}
}
exports.SwitchTopicType = SwitchTopicType;
// 小工具题库
var ToolsQuestionBank = /** @class */ (function () {
function ToolsQuestionBank(platform, info) {
this.platform = platform;
this.info = info;
}
ToolsQuestionBank.prototype.SetInfo = function (info) {
this.info = info;
};
ToolsQuestionBank.prototype.GetInfo = function () {
return encodeURIComponent(JSON.stringify(this.info));
};
ToolsQuestionBank.prototype.Answer = function (topic, resolve) {
var _this = this;
application_1.Application.App.log.Debug("答案查询", topic);
var num = 20;
var answer = new Array();
var retStatus = "success";
var next = function (index) {
var body = "info=" + _this.GetInfo() + "&";
var t = index;
for (; t < index + num && t < topic.length; t++) {
var val = topic[t];
body += "topic[" + (t - index) + "]=" + encodeURIComponent((val.topic)) + "&type[" + (t - index) + "]=" + val.type + "&";
}
utils_1.HttpUtils.HttpPost(config_1.SystemConfig.url + "v2/answer?platform=" + _this.platform, body, {
headers: {
"Authorization": application_1.Application.App.config.vtoken,
"X-Version": config_1.SystemConfig.version.toString(),
},
json: true,
success: function (result) { return __awaiter(_this, void 0, void 0, function () {
var status, tmpResult, i, val;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
status = "success";
tmpResult = new Array();
for (i = 0; i < result.length; i++) {
if (result[i].result == undefined || result[i].result.length <= 0) {
tmpResult.push({
index: index + result[i].index,
topic: result[i].topic,
type: -1,
status: "no_answer",
answers: null,
correct: null,
Equal: this.Equal,
});
status = "incomplete";
continue;
}
val = result[i].result[0];
tmpResult.push({
index: index + result[i].index,
topic: val.topic,
type: val.type,
correct: val.correct,
status: "ok",
Equal: this.Equal,
});
}
answer = answer.concat(tmpResult);
if (status != "success") {
retStatus = status;
}
return [4 /*yield*/, resolve({ status: "processing", answer: tmpResult })];
case 1:
_a.sent();
if (t < topic.length) {
next(t);
}
else {
return [2 /*return*/, resolve({ status: retStatus, answer: answer })];
}
return [2 /*return*/];
}
});
}); },
error: function () {
return resolve({ status: "network", answer: answer });
}
});
};
next(0);
};
ToolsQuestionBank.prototype.Push = function (answer) {
var _this = this;
return new Promise(function (resolve) {
application_1.Application.App.log.Debug("采集提交", answer);
utils_1.HttpUtils.HttpPost(config_1.SystemConfig.url + "answer?platform=" + _this.platform, "info=" + _this.GetInfo() + "&data=" + encodeURIComponent(JSON.stringify(answer)), {
headers: {
"Authorization": application_1.Application.App.config.vtoken,
"X-Version": config_1.SystemConfig.version.toString(),
},
json: true,
success: function (result) {
application_1.Application.App.log.Info("答案自动记录成功,成功获得" + result.add_token_num + "个打码数,剩余数量:" + result.token_num);
resolve("success");
},
error: function () {
resolve("network");
}
});
});
};
ToolsQuestionBank.prototype.Equal = function (content1, content2) {
return utils_1.removeHTML(content1) == utils_1.removeHTML(content2);
};
ToolsQuestionBank.prototype.CheckCourse = function (info) {
var _this = this;
return new Promise(function (resolve) {
info = info || [_this.info];
utils_1.HttpUtils.HttpPost(config_1.SystemConfig.url + "v2/check?platform=" + _this.platform, "info=" + encodeURIComponent(JSON.stringify(info)), {
headers: {
"Authorization": application_1.Application.App.config.vtoken,
"X-Version": config_1.SystemConfig.version.toString(),
},
success: function () {
resolve(0);
}, error: function () {
resolve(-1);
}
});
resolve();
});
};
return ToolsQuestionBank;
}());
exports.ToolsQuestionBank = ToolsQuestionBank;
var ToolsQuestionBankFacade = /** @class */ (function () {
function ToolsQuestionBankFacade(platform, info) {
if (typeof platform == "string") {
this.bank = new ToolsQuestionBank(platform, info);
}
else {
this.bank = platform;
}
this.question = new Array();
}
ToolsQuestionBankFacade.prototype.ClearQuestion = function () {
this.question = new Array();
};
ToolsQuestionBankFacade.prototype.AddQuestion = function (q) {
this.question.push(q);
};
ToolsQuestionBankFacade.prototype.Answer = function (callback) {
var _this = this;
var topic = new Array();
this.question.forEach(function (val) {
var type = val.GetType();
if (type == -1) {
return;
}
topic.push({
topic: (val.GetTopic()),
type: type,
});
});
var status = "success";
this.bank.Answer(topic, function (ret) {
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var t, i, answer, question, tmpStatus;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (ret.status != "processing") {
application_1.Application.App.log.Debug("题库返回", ret);
if (ret.status != "success" || status == "success") {
callback(ret.status);
return [2 /*return*/, resolve()];
}
callback(status);
return [2 /*return*/, resolve()];
}
t = application_1.Application.App.config.topic_interval * 1000;
i = 0;
_a.label = 1;
case 1:
if (!(i < ret.answer.length)) return [3 /*break*/, 11];
answer = ret.answer[i];
question = this.question[answer.index];
tmpStatus = answer.status;
if (!(answer.status == "no_answer")) return [3 /*break*/, 3];
status = this.randAnswer(status, tmpStatus, question);
return [4 /*yield*/, utils_1.Sleep(t)];
case 2:
_a.sent();
return [3 /*break*/, 10];
case 3:
if (!(answer.type != question.GetType())) return [3 /*break*/, 4];
tmpStatus = "no_match";
return [3 /*break*/, 6];
case 4: return [4 /*yield*/, question.Fill(answer)];
case 5:
tmpStatus = _a.sent();
_a.label = 6;
case 6:
if (!(tmpStatus == "no_match")) return [3 /*break*/, 8];
status = this.randAnswer(status, tmpStatus, question);
return [4 /*yield*/, utils_1.Sleep(t)];
case 7:
_a.sent();
return [3 /*break*/, 10];
case 8:
question.SetStatus(tmpStatus);
if (!(i < ret.answer.length - 1)) return [3 /*break*/, 10];
return [4 /*yield*/, utils_1.Sleep(t)];
case 9:
_a.sent();
_a.label = 10;
case 10:
i++;
return [3 /*break*/, 1];
case 11: return [2 /*return*/, resolve()];
}
});
}); });
});
};
ToolsQuestionBankFacade.prototype.randAnswer = function (status, tmpStatus, question) {
if (application_1.Application.App.config.rand_answer) {
tmpStatus = question.Random();
}
else {
status = "incomplete";
}
if (tmpStatus == "no_support_random") {
status = "incomplete";
}
question.SetStatus(tmpStatus);
return status;
};
ToolsQuestionBankFacade.prototype.Push = function (callback) {
var answer = new Array();
this.question.forEach(function (val) {
var correct = val.Correct();
if (correct == null || correct.correct == null || correct.type == -1) {
return;
}
answer.push(correct);
});
this.bank.Push(answer).then(function (ret) {
application_1.Application.App.log.Debug("题库返回", ret);
return callback(ret);
});
};
ToolsQuestionBankFacade.prototype.dealOption = function (options) {
for (var i = 0; i < options.length; i++) {
if (typeof options[i].content == "string") {
options[i].content = (options[i].content);
}
}
return options;
};
ToolsQuestionBankFacade.prototype.CheckCourse = function () {
return this.bank.CheckCourse();
};
return ToolsQuestionBankFacade;
}());
exports.ToolsQuestionBankFacade = ToolsQuestionBankFacade;
/***/ }),
/***/ "./src/internal/app/task.ts":
/*!**********************************!*\
!*** ./src/internal/app/task.ts ***!
\**********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.Task = void 0;
var event_1 = __webpack_require__(/*! @App/internal/utils/event */ "./src/internal/utils/event.ts");
var Task = /** @class */ (function (_super) {
__extends(Task, _super);
function Task() {
return _super !== null && _super.apply(this, arguments) || this;
}
// 初始化任务
Task.prototype.Init = function () {
return new Promise(function (resolve) {
return resolve();
});
};
// 提交任务,例如topic的类型,可以在本接口内进行提交操作
Task.prototype.Submit = function () {
return new Promise(function (resolve) {
return resolve();
});
};
// 停止任务
Task.prototype.Stop = function () {
return new Promise(function (resolve) {
return resolve();
});
};
// 任务的上下文(对于某些iframe的可能会用到)
Task.prototype.Context = function () {
return window;
};
return Task;
}(event_1.EventListener));
exports.Task = Task;
/***/ }),
/***/ "./src/internal/app/topic.ts":
/*!***********************************!*\
!*** ./src/internal/app/topic.ts ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Topic = void 0;
var application_1 = __webpack_require__(/*! ../application */ "./src/internal/application.ts");
var config_1 = __webpack_require__(/*! @App/config */ "./src/config.ts");
// 题目任务点
var Topic = /** @class */ (function () {
function Topic(content, answer) {
this.answer = answer;
this.context = content;
}
Topic.prototype.SetQueryQuestions = function (queryQuestions) {
this.queryQuestions = queryQuestions;
};
Topic.prototype.addQuestion = function () {
var _this = this;
var questions = this.queryQuestions.QueryQuestions();
this.answer.ClearQuestion();
questions.forEach(function (val) {
_this.answer.AddQuestion(val);
});
};
Topic.prototype.QueryAnswer = function () {
var _this = this;
return new Promise(function (resolve) {
if (_this.lock) {
return resolve("processing");
}
_this.lock = true;
application_1.Application.App.log.Info("题目搜索中...");
_this.addQuestion();
_this.answer.Answer(function (status) {
_this.lock = false;
resolve(status);
if (status == "network") {
return application_1.Application.App.log.Error("题库无法访问,请查看:" + config_1.SystemConfig.url);
}
else if (status == "incomplete") {
return application_1.Application.App.log.Warn("题库答案不全,请手动填写操作");
}
});
});
};
Topic.prototype.CollectAnswer = function () {
var _this = this;
return new Promise(function (resolve) {
application_1.Application.App.log.Debug("收集题目答案", _this.context);
_this.addQuestion();
_this.answer.Push(function (status) {
application_1.Application.App.log.Debug("采集答案返回", status);
resolve();
});
});
};
return Topic;
}());
exports.Topic = Topic;
/***/ }),
/***/ "./src/internal/application.ts":
/*!*************************************!*\
!*** ./src/internal/application.ts ***!
\*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Application = exports.AppName = exports.Content = exports.Frontend = exports.Backend = void 0;
var message_1 = __webpack_require__(/*! ./utils/message */ "./src/internal/utils/message.ts");
var utils_1 = __webpack_require__(/*! ./utils/utils */ "./src/internal/utils/utils.ts");
var config_1 = __webpack_require__(/*! @App/config */ "./src/config.ts");
exports.Backend = "backend";
exports.Frontend = "frontend";
exports.Content = "content";
exports.AppName = "cxmooc-tools";
var Application = /** @class */ (function () {
function Application(runEnv, launcher, component) {
Application.app = this;
Application.runEnv = runEnv;
this.runEnvSwitch(runEnv);
this.launcher = launcher;
this.component = component;
}
Object.defineProperty(Application, "App", {
get: function () {
return Application.app;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "debug", {
get: function () {
return "development" == "development";
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "prod", {
get: function () {
return "development" == "production";
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "config", {
get: function () {
return this.component.get("config");
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "log", {
get: function () {
return this.component.get("logger");
},
enumerable: false,
configurable: true
});
Application.prototype.run = function () {
this.launcher.start();
};
Object.defineProperty(Application.prototype, "IsFrontend", {
get: function () {
return Application.IsFrontend;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "IsBackend", {
get: function () {
return Application.IsBackend;
},
enumerable: false,
configurable: true
});
Object.defineProperty(Application.prototype, "IsContent", {
get: function () {
return Application.IsContent;
},
enumerable: false,
configurable: true
});
Application.prototype.runEnvSwitch = function (env) {
switch (env) {
case exports.Frontend:
Application.IsFrontend = true;
break;
case exports.Backend:
Application.IsBackend = true;
break;
case exports.Content:
Application.IsContent = true;
break;
}
;
};
Object.defineProperty(Application.prototype, "Client", {
get: function () {
if (Application.IsFrontend) {
return message_1.NewChromeClientMessage(exports.AppName);
}
return message_1.NewExtensionClientMessage(exports.AppName);
},
enumerable: false,
configurable: true
});
Application.CheckUpdate = function (callback) {
if (Application.IsContent) {
chrome.storage.local.get(["version", "enforce", "hotversion", "url"], function (item) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, callback((config_1.SystemConfig.version < item.version), item)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
});
return;
}
utils_1.HttpUtils.HttpGet(config_1.SystemConfig.url + "update?ver=" + config_1.SystemConfig.version, {
json: true,
success: function (json) {
return __awaiter(this, void 0, void 0, function () {
var data;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
data = {
version: json.version,
url: json.url,
enforce: json.enforce,
hotversion: json.hotversion,
injection: json.injection,
};
Application.IsContent && chrome.storage.local.set(data);
return [4 /*yield*/, callback((config_1.SystemConfig.version < data.version), data)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
}, error: function () {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, callback(false, undefined)];
case 1:
_a.sent();
return [2 /*return*/];
}
});
});
}
});
};
return Application;
}());
exports.Application = Application;
/***/ }),
/***/ "./src/internal/utils/config.ts":
/*!**************************************!*\
!*** ./src/internal/utils/config.ts ***!
\**************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.NewFrontendGetConfig = exports.NewBackendConfig = exports.ChromeConfigItems = void 0;
var utils_1 = __webpack_require__(/*! ./utils */ "./src/internal/utils/utils.ts");
var application_1 = __webpack_require__(/*! ../application */ "./src/internal/application.ts");
var config_1 = __webpack_require__(/*! @App/config */ "./src/config.ts");
// 缓存默认值
var configDefaultValue = new Map();
configDefaultValue.set("vtoken", "");
for (var key in config_1.SystemConfig.config) {
for (var i = 0; i < config_1.SystemConfig.config[key].items.length; i++) {
configDefaultValue.set(key + "_" + config_1.SystemConfig.config[key].items[i].key, config_1.SystemConfig.config[key].items[i].value);
}
}
var ChromeConfigItems = /** @class */ (function () {
function ChromeConfigItems(config) {
var _this = this;
this.Namespace = "";
this.config = config;
var list = [];
configDefaultValue.forEach(function (val, key) {
list.push(key);
});
this.config.Watch(list, function (key, val) {
_this.localCache[key] = val;
});
this.localCache = localStorage;
}
// 设置配置的命名空间,储存格式为 namepace_configkey
ChromeConfigItems.prototype.SetNamespace = function (namespace) {
this.Namespace = namespace + "_";
};
ChromeConfigItems.prototype.ConfigList = function () {
return this.config.ConfigList();
};
ChromeConfigItems.prototype.SetNamespaceConfig = function (namespace, key, val) {
return this.config.SetConfig(namespace + "_" + key, val);
};
ChromeConfigItems.prototype.GetNamespaceConfig = function (namespace, key, defaultVal) {
return this.config.GetConfig(namespace + "_" + key, defaultVal);
};
ChromeConfigItems.prototype.GetConfig = function (key, defaultVal) {
var val = this.config.GetConfig(this.Namespace + key);
if (val == undefined) {
return this.config.GetConfig(key, defaultVal);
}
return val || defaultVal;
};
ChromeConfigItems.prototype.Watch = function (key, callback) {
this.config.Watch(key, callback);
};
Object.defineProperty(ChromeConfigItems.prototype, "super_mode", {
get: function () {
return utils_1.toBool(this.GetConfig("super_mode", "true"));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "vtoken", {
get: function () {
return this.GetConfig("vtoken", "");
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "rand_answer", {
get: function () {
return utils_1.toBool(this.GetConfig("rand_answer", "false"));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "auto", {
get: function () {
return utils_1.toBool(this.GetConfig("auto", "true"));
},
set: function (val) {
this.SetConfig("auto", utils_1.boolToString(val));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "video_mute", {
get: function () {
return utils_1.toBool(this.GetConfig("video_mute", "true"));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "answer_ignore", {
get: function () {
return utils_1.toBool(this.GetConfig("answer_ignore", "false"));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "video_cdn", {
get: function () {
var val = this.GetConfig("video_cdn");
if (val == "默认") {
return "";
}
return val;
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "video_multiple", {
get: function () {
return parseFloat(this.GetConfig("video_multiple"));
},
enumerable: false,
configurable: true
});
Object.defineProperty(ChromeConfigItems.prototype, "interval", {
get: function () {
var interval = parseFloat(this.GetConfig("interval", "0.1"));
interval = interval * 100;
return Math.floor(utils_1.randNumber(interval - interval / 2, interval + interval / 2)) / 100;
},
enumerable: false,
configurable: true
});
ChromeConfigItems.prototype.SetConfig = function (key, val) {
return this.config.SetConfig(this.Namespace + key, val);
};
Object.defineProperty(ChromeConfigItems.prototype, "topic_interval", {
get: function () {
return parseInt(this.GetConfig("topic_interval", "5"));
},
set: function (val) {
this.SetConfig("topic_interval", val);
},
enumerable: false,
configurable: true
});
return ChromeConfigItems;
}());
exports.ChromeConfigItems = ChromeConfigItems;
// 后台环境中使用
function NewBackendConfig() {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
ret = new backendConfig();
return [4 /*yield*/, ret.updateCache()];
case 1:
_a.sent();
resolve(ret);
return [2 /*return*/];
}
});
}); });
}
exports.NewBackendConfig = NewBackendConfig;
var configWatch = /** @class */ (function () {
function configWatch() {
this.watchCallback = new Map();
}
configWatch.prototype.WatchEvent = function (key, val) {
var list = this.watchCallback.get(key);
if (list != undefined) {
list.forEach(function (v) {
v(key, val);
});
}
list = this.watchCallback.get("*");
if (list != undefined) {
list.forEach(function (v) {
v(key, val);
});
}
};
configWatch.prototype.Watch = function (key, callback) {
var _this = this;
if (typeof key == "string") {
this.setWatchMap(key, callback);
return;
}
key.forEach(function (val, index) {
_this.setWatchMap(val, callback);
});
};
configWatch.prototype.setWatchMap = function (key, callback) {
var list = this.watchCallback.get(key);
if (list == undefined) {
list = new Array();
}
list.push(callback);
this.watchCallback.set(key, list);
};
return configWatch;
}());
var backendConfig = /** @class */ (function () {
function backendConfig() {
var _this = this;
this.watch = new configWatch();
chrome.runtime.onMessage.addListener(function (request) {
if (request.type && request.type == "cxconfig") {
_this.cache[request.key] = request.value;
_this.watch.WatchEvent(request.key, request.value);
_this.updateConfigStorage();
}
});
}
// 更新配置转为json,存入
backendConfig.prototype.updateConfigStorage = function () {
var txt = JSON.stringify(this.cache);
chrome.storage.sync.set({ "config_storage": txt });
};
// 更新缓存
backendConfig.prototype.updateCache = function () {
var _this = this;
return new Promise(function (resolve) {
chrome.storage.sync.get("config_storage", function (items) {
if (items["config_storage"]) {
_this.cache = JSON.parse(items["config_storage"]);
}
else {
_this.cache = {};
}
configDefaultValue.forEach(function (val, key) {
if (_this.cache[key] === undefined) {
_this.cache[key] = val;
}
});
_this.updateConfigStorage();
resolve(undefined);
});
});
};
backendConfig.prototype.GetConfig = function (key, defaultVal) {
if (this.cache == undefined) {
application_1.Application.App.log.Fatal("缓存失败!!!");
return "";
}
return this.cache[key] || defaultVal;
};
backendConfig.prototype.Watch = function (key, callback) {
return this.watch.Watch(key, callback);
};
backendConfig.prototype.SetConfig = function (key, val) {
var _this = this;
return new Promise(function (resolve) {
var info = {};
info[key] = val;
//通知前端和后端
_this.cache[key] = val;
chrome.tabs.query({ active: true, currentWindow: true }, function (tabs) {
chrome.tabs.sendMessage(tabs[0].id, { type: "cxconfig", key: key, value: val });
});
chrome.runtime.sendMessage({ type: "cxconfig", key: key, value: val });
_this.updateConfigStorage();
resolve(undefined);
});
};
backendConfig.prototype.ConfigList = function () {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.cache) {
return [2 /*return*/, resolve(this.cache)];
}
return [4 /*yield*/, this.updateCache()];
case 1:
_a.sent();
resolve(this.cache);
return [2 /*return*/];
}
});
}); });
};
return backendConfig;
}());
// 前端环境使用
function NewFrontendGetConfig() {
return new frontendGetConfig();
}
exports.NewFrontendGetConfig = NewFrontendGetConfig;
var frontendGetConfig = /** @class */ (function () {
function frontendGetConfig() {
var _this = this;
this.watch = new configWatch();
this.cache = window.configData || localStorage;
window.addEventListener('message', function (event) {
if (event.data.type && event.data.type == "cxconfig") {
application_1.Application.App.log.Info("配置更新:" + event.data.key + "=" + event.data.value);
_this.cache[event.data.key] = event.data.value;
_this.watch.WatchEvent(event.data.key, event.data.value);
}
});
}
frontendGetConfig.prototype.GetConfig = function (key, defaultVal) {
if (window.GM_getValue) {
return window.GM_getValue(key, defaultVal);
}
return this.cache[key] || defaultVal;
};
frontendGetConfig.prototype.Watch = function (key, callback) {
return this.watch.Watch(key, callback);
};
frontendGetConfig.prototype.SetConfig = function (key, val) {
return __awaiter(this, void 0, void 0, function () {
return __generator(this, function (_a) {
this.cache[key] = val;
if (window.GM_setValue) {
return [2 /*return*/, window.GM_setValue(key, val)];
}
return [2 /*return*/, application_1.Application.App.Client.Send({
type: "GM_setValue", details: { key: key, val: val },
})];
});
});
};
frontendGetConfig.prototype.ConfigList = function () {
return this.cache;
};
return frontendGetConfig;
}());
/***/ }),
/***/ "./src/internal/utils/event.ts":
/*!*************************************!*\
!*** ./src/internal/utils/event.ts ***!
\*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.EventListener = void 0;
var EventListener = /** @class */ (function () {
function EventListener() {
this.event = {};
}
EventListener.prototype.addEventListener = function (event, callback) {
if (!this.event[event]) {
this.event[event] = new Array();
}
this.event[event].push({
callback: callback, param: { once: false },
});
};
EventListener.prototype.addEventListenerOnce = function (event, callback) {
if (!this.event[event]) {
this.event[event] = new Array();
}
this.event[event].push({
callback: callback, param: { once: true },
});
};
EventListener.prototype.callEvent = function (event) {
var _this = this;
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (!this.event[event]) {
return;
}
var del = new Array();
this.event[event].forEach(function (v, index) {
v.callback.apply(_this, args);
if (v.param.once) {
del.push(index);
}
});
del.forEach(function (v, index) {
_this.event[event].splice(v - index, 1);
});
};
return EventListener;
}());
exports.EventListener = EventListener;
/***/ }),
/***/ "./src/internal/utils/hook.ts":
/*!************************************!*\
!*** ./src/internal/utils/hook.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Hook = void 0;
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var Hook = /** @class */ (function () {
function Hook(func, context) {
this.context = context || window;
this.func = func;
}
Hook.prototype.Middleware = function (call) {
var name;
if (typeof this.func == "string") {
name = this.func;
}
else {
name = this.func.name;
}
var old = this.context[name];
this.context[name] = function () {
var args = [old];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i + 1] = arguments[_i];
}
return call.apply(this, args);
};
};
Hook.HookAjaxRespond = function (url, call) {
var _this = this;
if (!this.once) {
this.match_list = new Map();
var self_1 = this;
var hookXMLHttpRequest = new Hook("open", application_1.Application.GlobalContext.XMLHttpRequest.prototype);
hookXMLHttpRequest.Middleware(function (next) {
var _this = this;
var args = [];
for (var _a = 1; _a < arguments.length; _a++) {
args[_a - 1] = arguments[_a];
}
self_1.match_list.forEach(function (val, key) {
if (args[1].indexOf(key) != -1) {
Object.defineProperty(_this, "responseText", {
configurable: true,
get: function () {
return val.call(this, args[1], this.response);
}
});
}
});
return next.apply(this, args);
});
this.once = true;
}
if (typeof url == "string") {
this.match_list.set(url, call);
}
else {
url.forEach(function (v) {
_this.match_list.set(v, call);
});
}
};
return Hook;
}());
exports.Hook = Hook;
/***/ }),
/***/ "./src/internal/utils/log.ts":
/*!***********************************!*\
!*** ./src/internal/utils/log.ts ***!
\***********************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __spreadArrays = (this && this.__spreadArrays) || function () {
for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
for (var r = Array(s), k = 0, i = 0; i < il; i++)
for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
r[k] = a[j];
return r;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.EmptyLog = exports.PageLog = exports.ConsoleLog = void 0;
var application_1 = __webpack_require__(/*! ../application */ "./src/internal/application.ts");
__webpack_require__(/*! ../../views/common */ "./src/views/common.ts");
var utils_1 = __webpack_require__(/*! @App/internal/utils/utils */ "./src/internal/utils/utils.ts");
// 开发者工具f12处打印日志
var ConsoleLog = /** @class */ (function () {
function ConsoleLog() {
}
ConsoleLog.prototype.getNowTime = function () {
var time = new Date();
return time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
};
ConsoleLog.prototype.Debug = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
application_1.Application.App.debug && console.info.apply(console, __spreadArrays(["[debug", this.getNowTime(), "]"], args));
return this;
};
ConsoleLog.prototype.Info = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
application_1.Application.App.debug && console.info.apply(console, __spreadArrays(["[info", this.getNowTime(), "]"], args));
return this;
};
ConsoleLog.prototype.Warn = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
console.warn.apply(console, __spreadArrays(["[warn", this.getNowTime(), "]"], args));
return this;
};
ConsoleLog.prototype.Error = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
console.error.apply(console, __spreadArrays(["[error", this.getNowTime(), "]"], args));
return this;
};
ConsoleLog.prototype.Fatal = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
console.error.apply(console, __spreadArrays(["[fatal", this.getNowTime(), "]"], args));
return this;
};
return ConsoleLog;
}());
exports.ConsoleLog = ConsoleLog;
var PageLog = /** @class */ (function () {
function PageLog() {
var _this = this;
this.el = undefined;
window.addEventListener("load", function () {
_this.div = document.createElement("div");
// 主要布局
_this.div.innerHTML = "\n <div class=\"head\" id=\"tools-head\"> \n <span>\u5C0F\u5DE5\u5177\u901A\u77E5\u6761</span> \n <label class=\"switch\" style=\"width:90px\">\n <input class=\"checkbox-input\" id=\"checkbox\" type=\"checkbox\" checked=\"checked\">\n <label class=\"checkbox\" for=\"checkbox\"></label>\n <span>\u684C\u9762\u901A\u77E5</span>\n </label>\n <span class=\"close\" style=\"float:right; cursor:pointer; margin-right:5px;\">x</span>\n </div>\n <div class=\"main\">\n <div class=\"tools-notice-content\"></div>\n </div>\n ";
_this.div.className = "tools-logger-panel";
document.body.appendChild(_this.div);
_this.el = _this.div.querySelector(".tools-notice-content");
_this.div.querySelector(".close").onclick = function () {
_this.el = undefined;
_this.div.remove();
};
var checkbox = _this.div.querySelector("#checkbox");
checkbox.checked = (application_1.Application.App.config.GetConfig("is_notify") || "true") == "true";
_this.is_notify = checkbox.checked;
if (!checkbox.checked) {
checkbox.removeAttribute("checked");
}
var self = _this;
checkbox.addEventListener("change", function () {
self.is_notify = this.checked;
application_1.Application.App.config.SetConfig("is_notify", this.checked.toString());
});
setTimeout(function () {
application_1.Application.CheckUpdate(function (isnew, data) {
if (data == undefined) {
_this.Info("检查更新失败.");
return;
}
var html = "";
if (isnew) {
html += "<span>[有新版本]</span>";
}
html += data.injection;
_this.Info(html);
});
}, 1000);
//支持拖拽移动
function getProperty(ele, prop) {
return parseInt(window.getComputedStyle(ele)[prop]);
}
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
var containerWidth = getProperty(_this.div, "width");
var containerHeight = getProperty(_this.div, "height");
var x = parseInt(application_1.Application.App.config.GetConfig("notify_tools_x", "60px").replace('px', ''));
if (x < 0) {
x = 0;
}
if (x >= windowWidth - containerWidth)
x = windowWidth - containerWidth;
_this.div.style.left = x + "px";
var y = parseInt(application_1.Application.App.config.GetConfig("notify_tools_y", "40px").replace('px', ''));
if (y < 0) {
y = 0;
}
if (y >= windowHeight - containerHeight)
y = windowHeight - containerHeight;
_this.div.style.top = y + "px";
var head = _this.div.querySelector("#tools-head");
head.onmousedown = function (downEvent) {
var relaX = downEvent.clientX - _this.div.offsetLeft;
var relaY = downEvent.clientY - _this.div.offsetTop;
var windowWidth = window.innerWidth;
var windowHeight = window.innerHeight;
var containerWidth = getProperty(_this.div, "width");
var containerHeight = getProperty(_this.div, "height");
document.onmousemove = function (moveEvent) {
var targetX = moveEvent.clientX - relaX;
var targetY = moveEvent.clientY - relaY;
if (targetX <= 0)
targetX = 0;
if (targetY <= 0)
targetY = 0;
if (targetX >= windowWidth - containerWidth)
targetX = windowWidth - containerWidth;
if (targetY >= windowHeight - containerHeight)
targetY = windowHeight - containerHeight;
_this.div.style.left = targetX + "px";
_this.div.style.top = targetY + "px";
};
document.onmouseup = function () {
document.onmouseup = null;
document.onmousemove = null;
application_1.Application.App.config.SetConfig("notify_tools_x", _this.div.style.left);
application_1.Application.App.config.SetConfig("notify_tools_y", _this.div.style.top);
};
};
});
}
PageLog.prototype.getNowTime = function () {
var time = new Date();
return time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
};
PageLog.prototype.first = function (text, color, background) {
var new_log = document.createElement("div");
new_log.innerHTML =
"\n <div class=\"log\" style=\"border-color: " +
background +
"; background-color: " +
background +
";\">\n <p><span style=\"color:" +
color +
";\">" +
text +
"</span></p>\n </div>\n ";
//插入第一个元素前
var first = document
.getElementsByClassName("tools-notice-content")[0]
.getElementsByTagName("div");
document.querySelector(".tools-notice-content").insertBefore(new_log, first[0]);
};
PageLog.prototype.toStr = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var text = "";
for (var i = 0; i < args.length; i++) {
if (typeof args[i] == "object") {
text += args[i].toString() + "\n";
}
else {
text += args[i] + "\n";
}
}
return text.substring(0, text.length - 1);
};
PageLog.prototype.Debug = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
console.info.apply(console, __spreadArrays(["[debug", this.getNowTime(), "]"], args));
return this;
};
PageLog.prototype.Info = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var text = this.toStr.apply(this, args);
if (this.el) {
this.first(text, "#409EFF", "rgba(121, 187, 255, 0.2)");
}
else {
console.info.apply(console, __spreadArrays(["[info", this.getNowTime(), "]"], args));
}
return this;
};
PageLog.prototype.Warn = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var text = this.toStr.apply(this, args);
if (this.el) {
this.first(text, "#5C3C00", "rgba(250, 236, 216, 0.4)");
}
console.warn.apply(console, __spreadArrays(["[warn", this.getNowTime(), "]"], args));
if (document.hidden && localStorage["is_notify"] == "true") {
utils_1.Noifications({
title: "网课小工具",
text: text + "\n3秒后自动关闭",
timeout: 3000,
});
}
return this;
};
PageLog.prototype.Error = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var text = this.toStr.apply(this, args);
if (this.el) {
this.first(text, "#FFF0F0", "rgba(253, 226, 226, 0.5)");
}
console.error.apply(console, __spreadArrays(["[error", this.getNowTime(), "]"], args));
if (localStorage["is_notify"] == "true") {
utils_1.Noifications({
title: "网课小工具",
text: text,
});
}
return this;
};
PageLog.prototype.Fatal = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
var text = this.toStr.apply(this, args);
if (this.el) {
this.first(text, "#ff0000", "rgba(253, 226, 226, 0.5)");
}
console.error.apply(console, __spreadArrays(["[fatal", this.getNowTime(), "]"], args));
utils_1.Noifications({
title: "网课小工具",
text: text,
});
return this;
};
return PageLog;
}());
exports.PageLog = PageLog;
var EmptyLog = /** @class */ (function () {
function EmptyLog() {
}
EmptyLog.prototype.Debug = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return this;
};
EmptyLog.prototype.Info = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return this;
};
EmptyLog.prototype.Warn = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return this;
};
EmptyLog.prototype.Error = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return this;
};
EmptyLog.prototype.Fatal = function () {
var args = [];
for (var _i = 0; _i < arguments.length; _i++) {
args[_i] = arguments[_i];
}
return this;
};
return EmptyLog;
}());
exports.EmptyLog = EmptyLog;
/***/ }),
/***/ "./src/internal/utils/message.ts":
/*!***************************************!*\
!*** ./src/internal/utils/message.ts ***!
\***************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
Object.defineProperty(exports, "__esModule", { value: true });
exports.NewChromeClientMessage = exports.NewChromeServerMessage = exports.NewExtensionClientMessage = exports.NewExtensionServerMessage = void 0;
function NewExtensionServerMessage(port) {
return new extensionServerMessage(port);
}
exports.NewExtensionServerMessage = NewExtensionServerMessage;
var extensionServerMessage = /** @class */ (function () {
function extensionServerMessage(port) {
this.port = port;
this.recv();
}
extensionServerMessage.prototype.recv = function () {
var _this = this;
//监听消息
chrome.runtime.onConnect.addListener(function (port) {
if (port.name != _this.port) {
return;
}
port.onMessage.addListener(function (request) {
_this.acceptCallback(new extensionClientMessage(port), request);
});
});
};
extensionServerMessage.prototype.Accept = function (callback) {
this.acceptCallback = callback;
};
return extensionServerMessage;
}());
var msg = /** @class */ (function () {
function msg(tag) {
this.tag = tag;
}
msg.prototype.Recv = function (callback) {
this.recvCallback = callback;
};
return msg;
}());
// 扩展中使用
function NewExtensionClientMessage(tag) {
return new extensionClientMessage(tag);
}
exports.NewExtensionClientMessage = NewExtensionClientMessage;
var extensionClientMessage = /** @class */ (function (_super) {
__extends(extensionClientMessage, _super);
function extensionClientMessage(param) {
var _this = this;
if (typeof param === 'string') {
_this = _super.call(this, param) || this;
_this.connect();
}
else {
_this.conn = param;
}
_this.recv();
return _this;
}
extensionClientMessage.prototype.connect = function () {
this.conn = chrome.runtime.connect({ name: this.tag });
};
extensionClientMessage.prototype.recv = function () {
var _this = this;
this.conn.onMessage.addListener(function (response) {
_this.recvCallback(response);
});
};
extensionClientMessage.prototype.Send = function (msg) {
this.conn.postMessage(msg);
};
return extensionClientMessage;
}(msg));
// 浏览器中使用
function NewChromeServerMessage(tag) {
return new chromeServerMessage(tag);
}
exports.NewChromeServerMessage = NewChromeServerMessage;
var chromeServerMessage = /** @class */ (function () {
function chromeServerMessage(tag) {
this.tag = tag;
this.recv();
}
chromeServerMessage.prototype.recv = function () {
var _this = this;
window.addEventListener('message', function (event) {
if (event.data.tag == _this.tag && event.data.conn_tag && event.data.source == "client") {
_this.acceptCallback(new chromeClientMessage(_this.tag, event.data.conn_tag), event.data.msg);
}
});
};
chromeServerMessage.prototype.Accept = function (callback) {
this.acceptCallback = callback;
};
return chromeServerMessage;
}());
function NewChromeClientMessage(tag) {
return new chromeClientMessage(tag);
}
exports.NewChromeClientMessage = NewChromeClientMessage;
var chromeClientMessage = /** @class */ (function (_super) {
__extends(chromeClientMessage, _super);
function chromeClientMessage(tag, conn) {
var _this = this;
if (conn !== undefined) {
_this = _super.call(this, tag) || this;
_this.connTag = conn;
_this.source = "server";
}
else {
_this = _super.call(this, tag) || this;
_this.connect();
_this.source = "client";
}
return _this;
}
chromeClientMessage.prototype.connect = function () {
var _this = this;
this.connTag = Math.random();
window.addEventListener('message', function (event) {
if (event.data.tag == _this.tag && event.data.conn_tag == _this.connTag && event.data.source == "server") {
_this.recvCallback && _this.recvCallback(event.data.msg);
}
});
};
chromeClientMessage.prototype.Send = function (msg) {
window.postMessage({ tag: this.tag, conn_tag: this.connTag, msg: msg, source: this.source }, '*');
};
return chromeClientMessage;
}(msg));
/***/ }),
/***/ "./src/internal/utils/utils.ts":
/*!*************************************!*\
!*** ./src/internal/utils/utils.ts ***!
\*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Sleep = exports.UntrustedClick = exports.boolToString = exports.toBool = exports.Noifications = exports.isPhone = exports.getImageBase64 = exports.protocolPrompt = exports.dealHotVersion = exports.substrex = exports.removeHTML = exports.removeHTMLTag = exports.post = exports.get = exports.createBtn = exports.randNumber = exports.RemoveInjected = exports.syncSetChromeStorageLocal = exports.syncGetChromeStorageLocal = exports.InjectedBySrc = exports.Injected = exports.HttpUtils = void 0;
var application_1 = __webpack_require__(/*! ../application */ "./src/internal/application.ts");
var HttpUtils = /** @class */ (function () {
function HttpUtils() {
}
HttpUtils.Request = function (info) {
if (application_1.Application.App.IsBackend) {
fetch(info.url, info).then(function (body) {
if (info.json) {
return body.json();
}
else {
return body.text();
}
}).then(function (body) {
info.success && info.success(body);
}).catch(function () {
info.error && info.error();
});
return;
}
HttpUtils.crossDomainRequest(info);
};
HttpUtils.errorCode = function (ret) {
if (!ret.code) {
return false;
}
switch (ret.code) {
case -1: {
application_1.Application.App.log.Info(ret.msg);
break;
}
case -2: {
application_1.Application.App.log.Warn(ret.msg);
break;
}
case 1: {
application_1.Application.App.log.Info(ret.msg);
return false;
}
default: {
return false;
}
}
return true;
};
HttpUtils.crossDomainRequest = function (info) {
if (window.hasOwnProperty('GM_xmlhttpRequest')) {
//兼容油猴
info.data = info.body;
info.onreadystatechange = function (response) {
if (response.readyState == 4) {
if (response.status == 200) {
if (info.json) {
var ret = JSON.parse(response.responseText);
if (HttpUtils.errorCode(ret)) {
info.error && info.error();
return;
}
info.success && info.success(ret);
}
else {
info.success && info.success(response.responseText);
}
}
else {
info.error && info.error();
}
}
};
window.GM_xmlhttpRequest(info);
}
else {
var client = application_1.Application.App.Client;
client.Recv(function (data) {
if (data.code == 0) {
if (info.json) {
if (HttpUtils.errorCode(data.body)) {
info.error && info.error();
return;
}
}
info.success && info.success(data.body);
}
else {
info.error && info.error();
}
});
client.Send({
type: "GM_xmlhttpRequest", info: {
url: info.url,
method: info.method,
json: info.json,
body: info.body,
headers: info.headers,
}
});
}
};
HttpUtils.HttpGet = function (url, info) {
info.url = url;
this.Request(info);
};
HttpUtils.HttpPost = function (url, body, info) {
info.url = url;
info.body = body;
if (!info.headers) {
info.headers = {};
}
if (!info.headers["Content-Type"]) {
info.headers["Content-Type"] = "application/x-www-form-urlencoded";
}
info.method = "POST";
this.Request(info);
};
HttpUtils.SendRequest = function (client, data) {
if (!data.info) {
return;
}
var info = data.info;
if (application_1.Application.App.IsBackend) {
info.success = function (body) {
client.Send({ body: body, code: 0 });
};
info.error = function () {
client.Send({ code: -1 });
};
HttpUtils.Request(info);
}
else {
// content 做转发
var extClient = application_1.Application.App.Client;
extClient.Send({ type: "GM_xmlhttpRequest", info: info });
extClient.Recv(function (data) {
client.Send(data);
});
}
};
return HttpUtils;
}());
exports.HttpUtils = HttpUtils;
/**
* 通过源码注入js资源
* @param doc
* @param url
* @constructor
*/
function Injected(doc, source) {
var temp = doc.createElement('script');
temp.setAttribute('type', 'text/javascript');
temp.innerHTML = source;
temp.className = "injected-js";
doc.documentElement.appendChild(temp);
return temp;
}
exports.Injected = Injected;
/**
* 通过源码注入js资源
* @param doc
* @param url
* @constructor
*/
function InjectedBySrc(doc, source) {
var temp = doc.createElement('script');
temp.setAttribute('type', 'text/javascript');
temp.src = source;
temp.className = "injected-js";
doc.documentElement.appendChild(temp);
return temp;
}
exports.InjectedBySrc = InjectedBySrc;
function syncGetChromeStorageLocal(key) {
return new Promise(function (resolve) { return (chrome.storage.local.get(key, function (value) {
resolve(value[key]);
})); });
}
exports.syncGetChromeStorageLocal = syncGetChromeStorageLocal;
function syncSetChromeStorageLocal(key, value) {
var tmp = {};
tmp[key] = value;
return new Promise(function (resolve) { return (chrome.storage.local.set(tmp, function () {
resolve();
})); });
}
exports.syncSetChromeStorageLocal = syncSetChromeStorageLocal;
/**
* 移除注入js
* @param doc
*/
function RemoveInjected(doc) {
var resource = doc.getElementsByClassName("injected-js");
for (var i = 0; i < resource.length; i++) {
resource[i].remove();
}
}
exports.RemoveInjected = RemoveInjected;
function randNumber(minNum, maxNum) {
return Math.floor(Math.random() * (maxNum - minNum + 1) + minNum);
}
exports.randNumber = randNumber;
/**
* 创建一个按钮
* @param title
* @param description
* @param id
*/
function createBtn(title, description, className, id) {
if (description === void 0) { description = ""; }
if (className === void 0) { className = ""; }
if (id === void 0) { id = ""; }
var btn = document.createElement('button');
btn.innerText = title;
btn.id = id;
btn.title = description;
btn.className = className;
return btn;
}
exports.createBtn = createBtn;
/**
* get请求
* @param {*} url
*/
function get(url, success) {
var xmlhttp = createRequest();
xmlhttp.open("GET", url, true);
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
success && success(this.responseText, this.resource);
}
else {
xmlhttp.errorCallback && xmlhttp.errorCallback(this);
}
}
};
xmlhttp.send();
return xmlhttp;
}
exports.get = get;
/**
* post请求
* @param {*} url
* @param {*} data
* @param {*} json
*/
function post(url, data, json, success) {
if (json === void 0) { json = true; }
var xmlhttp = createRequest();
xmlhttp.open("POST", url, true);
if (json) {
xmlhttp.setRequestHeader("Content-Type", "application/json");
}
else {
xmlhttp.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
}
xmlhttp.onreadystatechange = function () {
if (this.readyState == 4) {
if (this.status == 200) {
success && success(this.responseText);
}
else {
xmlhttp.errorCallback && xmlhttp.errorCallback(this);
}
}
};
xmlhttp.send(data);
return xmlhttp;
}
exports.post = post;
/**
* 创建http请求
*/
function createRequest() {
var xmlhttp;
if (window.XMLHttpRequest) {
xmlhttp = new XMLHttpRequest();
}
else {
xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
}
xmlhttp.error = function (callback) {
xmlhttp.errorCallback = callback;
return xmlhttp;
};
xmlhttp.withCredentials = true;
return xmlhttp;
}
// 移除html tag
function removeHTMLTag(html) {
var revHtml = /<.*?>/g;
html = html.replace(revHtml, '');
html = html.replace(/(^\s+)|(\s+$)/g, '');
return html;
}
exports.removeHTMLTag = removeHTMLTag;
/**
* 去除html标签和处理中文
* @param {string} html
*/
function removeHTML(html) {
//先处理带src和href属性的标签
var srcReplace = /<img.*?src="(.*?)".*?>/g;
html = html.replace(srcReplace, '$1');
srcReplace = /(<iframe.+?>)\s+?(<\/iframe>)/g;
html = html.replace(srcReplace, '$1$2');
srcReplace = /<(iframe|a).*?(src|href)="(.*?)".*?>(.*?)<\/(iframe|a)>/g;
html = html.replace(srcReplace, '$3$4');
var revHtml = /<.*?>/g;
html = html.replace(revHtml, '');
html = html.replace(/(^\s+)|(\s+$)/g, '');
html = dealSymbol(html);
return html.replace(/ /g, ' ')
.replace(/"/g, "\"").replace(/>/g, ">")
.replace(/</g, "<").replace(/&/g, '&').trim();
}
exports.removeHTML = removeHTML;
/**
* 处理符号
* @param topic
*/
function dealSymbol(topic) {
topic = topic.replace(/,/g, ',');
topic = topic.replace(/(/g, '(');
topic = topic.replace(/)/g, ')');
topic = topic.replace(/?/g, '?');
topic = topic.replace(/:/g, ':');
topic = topic.replace(/。/g, '.');
topic = topic.replace(/[“”]/g, '"');
return topic;
}
/**
* 取中间文本
* @param str
* @param left
* @param right
*/
function substrex(str, left, right) {
var leftPos = str.indexOf(left) + left.length;
var rightPos = str.indexOf(right, leftPos);
return str.substring(leftPos, rightPos);
}
exports.substrex = substrex;
function dealHotVersion(hotversion) {
hotversion = hotversion.substring(0, hotversion.indexOf(".") + 1) + hotversion.substring(hotversion.indexOf(".") + 1).replace(".", "");
return Number(hotversion);
}
exports.dealHotVersion = dealHotVersion;
function protocolPrompt(content, key, keyword) {
keyword = keyword || "yes";
if (localStorage[key] == undefined || localStorage[key] != 1) {
var msg = prompt(content + "\n如果以后不想再弹出本对话框并且同意请在下方填写\"" + keyword + "\"");
if (msg === null)
return false;
if (keyword != msg) {
return false;
}
localStorage[key] = 1;
}
return true;
}
exports.protocolPrompt = protocolPrompt;
function getImageBase64(img, ext) {
var canvas = document.createElement("canvas");
canvas.width = img.width;
canvas.height = img.height;
var ctx = canvas.getContext("2d");
ctx.drawImage(img, 0, 0, img.width, img.height);
var dataURL = canvas.toDataURL("image/" + ext, 0.75); //节省可怜的流量>_<,虽然好像没有啥
canvas = null;
return dataURL;
}
exports.getImageBase64 = getImageBase64;
function isPhone() {
return /Android|iPhone/i.test(navigator.userAgent);
}
exports.isPhone = isPhone;
function Noifications(details) {
if (window.hasOwnProperty("GM_notification")) {
window.GM_notification(details);
}
else {
var client = application_1.Application.App.Client;
client.Send({
type: "GM_notification", details: details,
});
application_1.Application.App.Client.Send(details);
}
}
exports.Noifications = Noifications;
function toBool(val) {
if (typeof val == "boolean") {
return val;
}
return val == "true";
}
exports.toBool = toBool;
function boolToString(val) {
if (val) {
return "true";
}
return "false";
}
exports.boolToString = boolToString;
function UntrustedClick(el) {
if (window.CAT_click != undefined) {
CAT_click(el);
return true;
}
var untrusted = new MouseEvent("click", { "clientX": 10086 });
if (!untrusted.isTrusted) {
application_1.Application.App.log.Warn("扩展执行错误");
return false;
}
return el.dispatchEvent(untrusted);
}
exports.UntrustedClick = UntrustedClick;
function Sleep(timeout) {
return new Promise(function (resolve) {
setTimeout(function () {
resolve(undefined);
}, timeout);
});
}
exports.Sleep = Sleep;
/***/ }),
/***/ "./src/mooc/chaoxing/utils.ts":
/*!************************************!*\
!*** ./src/mooc/chaoxing/utils.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CreateNoteLine = exports.CssBtn = void 0;
/**
* 美化按钮
*/
function CssBtn(btn) {
btn.style.outline = 'none';
btn.style.border = '0';
btn.style.background = '#7d9d35';
btn.style.color = '#fff';
btn.style.borderRadius = '4px';
btn.style.padding = '2px 8px';
btn.style.cursor = 'pointer';
btn.style.fontSize = '12px';
btn.style.marginLeft = '4px';
btn.onmousemove = function () {
btn.style.boxShadow = '1px 1px 1px 1px #ccc';
};
btn.onmouseout = function () {
btn.style.boxShadow = '';
};
return btn;
}
exports.CssBtn = CssBtn;
function CreateNoteLine(text, label, append, after) {
var p = document.createElement("p");
p.style.color = "red";
p.style.fontSize = "14px";
p.className = "prompt-line-" + label;
p.innerHTML = text;
if (append != undefined) {
append.append(p);
}
if (after != undefined) {
after.after(p);
}
return p;
}
exports.CreateNoteLine = CreateNoteLine;
/***/ }),
/***/ "./src/mooc/course163/course163.ts":
/*!*****************************************!*\
!*** ./src/mooc/course163/course163.ts ***!
\*****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Course163 = void 0;
var hook_1 = __webpack_require__(/*! @App/internal/utils/hook */ "./src/internal/utils/hook.ts");
__webpack_require__(/*! ../../views/common */ "./src/views/common.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var task_1 = __webpack_require__(/*! @App/mooc/course163/task */ "./src/mooc/course163/task.ts");
var utils_1 = __webpack_require__(/*! @App/internal/utils/utils */ "./src/internal/utils/utils.ts");
var Course163 = /** @class */ (function () {
function Course163() {
}
Course163.prototype.Init = function () {
this.hookAjax();
};
Course163.prototype.hookAjax = function () {
var _this = this;
hook_1.Hook.HookAjaxRespond(["CourseBean.getLessonUnitLearnVo.dwr", "MocQuizBean.getQuizPaperDto.dwr", "PostBean.getPaginationReplys.dwr"], function (url, resp) {
var task = task_1.TaskFactory.CreateTask(url, resp);
if (task) {
setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
var _a, autonext;
var _this = this;
return __generator(this, function (_b) {
switch (_b.label) {
case 0:
clearInterval(this.delayTimer);
_a = this.lastTask;
if (!_a) return [3 /*break*/, 2];
return [4 /*yield*/, this.lastTask.Stop()];
case 1:
_a = (_b.sent());
_b.label = 2;
case 2:
_a;
this.lastTask = task;
this.lastTask.addEventListener("complete", function () {
_this.delay(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, this.lastTask.Submit()];
case 1:
_a.sent();
this.nextTask();
return [2 /*return*/];
}
});
}); });
});
return [4 /*yield*/, this.lastTask.Init()];
case 3:
_b.sent();
if (!application_1.Application.App.config.auto) return [3 /*break*/, 5];
autonext = document.querySelector(".j-autoNext");
if (autonext && autonext.checked) {
utils_1.UntrustedClick(autonext);
}
return [4 /*yield*/, this.lastTask.Start()];
case 4:
_b.sent();
_b.label = 5;
case 5: return [2 /*return*/];
}
});
}); }, 0);
}
return resp;
});
hook_1.Hook.HookAjaxRespond("MocQuizBean.fetchQuestions", function (url, resp) {
if (resp.indexOf("{questions:s0}") > 0) {
resp = resp.replace("{questions:s0}", "{questions:{}}");
}
return resp;
});
};
Course163.prototype.nextTask = function () {
var _this = this;
var unit = document.querySelectorAll(".j-unitslist.unitslist.f-cb > .f-fl");
var ret = this.next(unit, function (el) {
return el.className.indexOf("current") > 0;
});
if (ret) {
return utils_1.UntrustedClick(ret);
}
//二级
var tmp = function (type) {
var now = document.querySelector(".f-fl.j-" + type + " .up.j-up.f-thide");
var all = document.querySelectorAll(".f-fl.j-" + type + " .f-bg.j-list > .f-thide");
return _this.next(all, function (el) {
//什么魔鬼,空格不同
return el.innerText.replace(/\s/g, "") == now.innerText.replace(/\s/g, "");
});
};
ret = tmp("lesson");
if (ret) {
return utils_1.UntrustedClick(ret);
}
//顶层
ret = tmp("chapter");
if (ret) {
utils_1.UntrustedClick(ret);
var all = document.querySelectorAll(".f-fl.j-lesson .f-bg.j-list > .f-thide");
return utils_1.UntrustedClick(all[0]);
}
application_1.Application.App.log.Warn("任务结束了");
return alert("任务结束了");
};
Course163.prototype.next = function (all, ok) {
var flag = false;
for (var i = 0; i < all.length; i++) {
if (ok(all[i])) {
flag = true;
}
else if (flag) {
return all[i];
}
}
return null;
};
Course163.prototype.delay = function (func) {
var interval = application_1.Application.App.config.interval;
application_1.Application.App.log.Info(interval + "分钟后自动切换下一个任务点");
this.delayTimer = setTimeout(function () {
application_1.Application.App.config.auto && func();
}, interval * 60000);
};
return Course163;
}());
exports.Course163 = Course163;
/***/ }),
/***/ "./src/mooc/course163/platform.ts":
/*!****************************************!*\
!*** ./src/mooc/course163/platform.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.Course163Platform = void 0;
var course163_1 = __webpack_require__(/*! ./course163 */ "./src/mooc/course163/course163.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var Course163Platform = /** @class */ (function () {
function Course163Platform() {
}
Course163Platform.prototype.CreateMooc = function () {
if (document.URL.indexOf("www.icourse163.org") > 0) {
application_1.Application.App.config.SetNamespace("mooc163");
return new course163_1.Course163();
}
return null;
};
return Course163Platform;
}());
exports.Course163Platform = Course163Platform;
/***/ }),
/***/ "./src/mooc/course163/question.ts":
/*!****************************************!*\
!*** ./src/mooc/course163/question.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.CourseTopic = exports.CourseQueryAnswer = void 0;
var topic_1 = __webpack_require__(/*! @App/internal/app/topic */ "./src/internal/app/topic.ts");
var question_1 = __webpack_require__(/*! @App/internal/app/question */ "./src/internal/app/question.ts");
var utils_1 = __webpack_require__(/*! ../chaoxing/utils */ "./src/mooc/chaoxing/utils.ts");
var utils_2 = __webpack_require__(/*! @App/internal/utils/utils */ "./src/internal/utils/utils.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var CourseQueryAnswer = /** @class */ (function () {
function CourseQueryAnswer() {
}
CourseQueryAnswer.prototype.QueryQuestions = function () {
var _this = this;
var ret = new Array();
var timu = document.querySelectorAll(".u-questionItem");
timu.forEach(function (val) {
ret.push(_this.createQuestion(val));
});
return ret;
};
CourseQueryAnswer.prototype.createQuestion = function (el) {
if (el.querySelector(".optionCnt span.u-icon-correct")) {
return new JudgeQuestion(el, 3);
}
else if (el.querySelector("input[type='radio']") != null) {
return new CourseQuestion(el, 1);
}
else if (el.querySelector("input[type='checkbox']") != null) {
return new CourseQuestion(el, 2);
}
else if (el.querySelector("textarea") != null) {
return new FillQuestion(el, 4);
}
return new CourseQuestion(el, -1);
};
return CourseQueryAnswer;
}());
exports.CourseQueryAnswer = CourseQueryAnswer;
//TODO:优化
var CourseQuestion = /** @class */ (function () {
function CourseQuestion(el, type) {
this.el = el;
this.type = type;
this.RemoveNotice();
}
CourseQuestion.prototype.GetType = function () {
return this.type;
};
CourseQuestion.prototype.GetTopic = function () {
return this.dealImgDomain(this.el.querySelector(".f-richEditorText.j-richTxt").innerHTML);
};
CourseQuestion.prototype.RemoveNotice = function () {
this.el.querySelectorAll(".prompt-line-answer").forEach(function (v) {
v.remove();
});
};
CourseQuestion.prototype.AddNotice = function (str) {
utils_1.CreateNoteLine(str, "answer", this.el);
};
CourseQuestion.prototype.SetStatus = function (status) {
this.AddNotice(question_1.TopicStatusString(status));
};
CourseQuestion.prototype.getContent = function (el) {
return el.querySelector(".f-fl.optionCnt").innerHTML;
};
CourseQuestion.prototype.getOption = function (el) {
return el.querySelector(".f-fl.optionPos").innerHTML.substring(0, 1);
};
CourseQuestion.prototype.fill = function (el, content) {
if (!el.parentElement.querySelector("input").checked) {
utils_2.UntrustedClick(el.parentElement.querySelector("input"));
}
content = content.replace(/style=".*?"/, "");
content = content.replace(/(<p>|<\/p>)/, "");
this.AddNotice(this.getOption(el) + ":" + content);
};
CourseQuestion.prototype.Random = function () {
var opts = this.options();
var pos = utils_2.randNumber(0, opts.length - 1);
this.fill(opts[pos], this.getContent(opts[pos - 1]));
return "random";
};
CourseQuestion.prototype.options = function () {
return this.el.querySelectorAll(".u-tbl.f-pr.f-cb");
};
CourseQuestion.prototype.dealImgDomain = function (content) {
//移除域名对比,也不知道还有没有花里胡哨的
content = content.replace(/"http(s|):\/\/edu-image.nosdn.127.net\/(.*?)"/, "\"http://nos.netease.com/edu-image/$2\"");
content = content.replace(/"http(s|):\/\/(.*?)\//g, "\"");
return content;
};
CourseQuestion.prototype.Fill = function (answer) {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var options, flag, i, n;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
options = this.options();
flag = false;
i = 0;
_a.label = 1;
case 1:
if (!(i < answer.correct.length)) return [3 /*break*/, 7];
n = 0;
_a.label = 2;
case 2:
if (!(n < options.length)) return [3 /*break*/, 6];
if (!answer.Equal(this.dealImgDomain(this.getContent(options[n])), this.dealImgDomain(answer.correct[i].content))) return [3 /*break*/, 5];
this.fill(options[n], answer.correct[i].content);
if (!(this.GetType() == 2 && i != answer.correct.length - 1)) return [3 /*break*/, 4];
//多选
return [4 /*yield*/, utils_2.Sleep(application_1.Application.App.config.topic_interval * 1000)];
case 3:
//多选
_a.sent();
_a.label = 4;
case 4:
flag = true;
_a.label = 5;
case 5:
n++;
return [3 /*break*/, 2];
case 6:
i++;
return [3 /*break*/, 1];
case 7:
if (flag) {
return [2 /*return*/, resolve("ok")];
}
return [2 /*return*/, resolve("no_match")];
}
});
}); });
};
CourseQuestion.prototype.Correct = function () {
return null;
};
return CourseQuestion;
}());
var FillQuestion = /** @class */ (function (_super) {
__extends(FillQuestion, _super);
function FillQuestion() {
return _super !== null && _super.apply(this, arguments) || this;
}
FillQuestion.prototype.Random = function () {
return "no_support_random";
};
FillQuestion.prototype.Fill = function (answer) {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var el, match;
return __generator(this, function (_a) {
el = this.el.querySelector("textarea");
el.focus();
if (match = answer.correct[0].content.match(/^[\(\[]([\d\.]+),([\d\.]+)[\)\]]$/)) {
//范围题
el.value = ((parseFloat(match[1]) + parseFloat(match[2])) / 2).toString();
this.AddNotice("填空 取值范围:" + answer.correct[0].content);
}
else {
el.value = answer.correct[0].content.split("##%_YZPRLFH_%##")[0];
this.AddNotice("填空:" + answer.correct[0].content.replace("##%_YZPRLFH_%##", " 或 "));
}
return [2 /*return*/, resolve("ok")];
});
}); });
};
return FillQuestion;
}(CourseQuestion));
var JudgeQuestion = /** @class */ (function (_super) {
__extends(JudgeQuestion, _super);
function JudgeQuestion() {
return _super !== null && _super.apply(this, arguments) || this;
}
JudgeQuestion.prototype.Fill = function (answer) {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var el;
return __generator(this, function (_a) {
if (answer.correct[0].content) {
el = this.el.querySelector(".u-tbl.f-pr.f-cb .u-icon-correct").parentElement.parentElement;
}
else {
el = this.el.querySelector(".u-tbl.f-pr.f-cb .u-icon-wrong").parentElement.parentElement;
}
this.fill(el, this.getContent(el));
return [2 /*return*/, resolve("ok")];
});
}); });
};
return JudgeQuestion;
}(CourseQuestion));
var CourseTopic = /** @class */ (function (_super) {
__extends(CourseTopic, _super);
function CourseTopic() {
return _super !== null && _super.apply(this, arguments) || this;
}
CourseTopic.prototype.Init = function () {
return null;
};
CourseTopic.prototype.Submit = function () {
return null;
};
return CourseTopic;
}(topic_1.Topic));
exports.CourseTopic = CourseTopic;
/***/ }),
/***/ "./src/mooc/course163/task.ts":
/*!************************************!*\
!*** ./src/mooc/course163/task.ts ***!
\************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __extends = (this && this.__extends) || (function () {
var extendStatics = function (d, b) {
extendStatics = Object.setPrototypeOf ||
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
return extendStatics(d, b);
};
return function (d, b) {
extendStatics(d, b);
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
})();
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.DiscussTask = exports.CourseTopicTask = exports.VideoTask = exports.NoSupportTask = exports.TaskFactory = void 0;
var task_1 = __webpack_require__(/*! @App/internal/app/task */ "./src/internal/app/task.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var utils_1 = __webpack_require__(/*! @App/internal/utils/utils */ "./src/internal/utils/utils.ts");
var question_1 = __webpack_require__(/*! @App/mooc/course163/question */ "./src/mooc/course163/question.ts");
var question_2 = __webpack_require__(/*! @App/internal/app/question */ "./src/internal/app/question.ts");
var TaskFactory = /** @class */ (function () {
function TaskFactory() {
}
TaskFactory.CreateTask = function (url, resp) {
if (resp.indexOf("paper:s") > 0) {
CourseTopicTask.collegeAnswer(this.getvalue(resp, resp.match(/,paper:(.*?),/)[1]));
return new CourseTopicTask();
}
else if (resp.indexOf("tname:\"") > 0) {
if (resp.indexOf("answers:s") > 0) {
CourseTopicTask.collegeAnswer(this.getvalue(resp, resp.match(/,objectiveQList:(.*?),/)[1]));
}
return new CourseTopicTask(resp);
}
else if (resp.indexOf("videoVo:s") > 0) {
return new VideoTask();
}
else if (resp.indexOf("list:s") > 0 && url.indexOf("PostBean.getPaginationReplys") > 0) {
return new DiscussTask(this.getvalue(resp, resp.match(/,list:(.*?),/)[1]));
}
else if (resp.indexOf(",post:s") > 0) {
return null;
}
return new NoSupportTask();
};
TaskFactory.getvalue = function (str, ret) {
try {
ret = ret || "s0";
var script = str.match(/^([\s\S]+?)dwr.engine._remoteHandleCallback/)[1];
script = "function a(){" + script + ";return " + ret + ";}a();";
return eval(script);
}
catch (e) {
application_1.Application.App.log.Error("获取题目发生了一个错误", e);
}
return null;
};
return TaskFactory;
}());
exports.TaskFactory = TaskFactory;
var NoSupportTask = /** @class */ (function (_super) {
__extends(NoSupportTask, _super);
function NoSupportTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
NoSupportTask.prototype.Start = function () {
var _this = this;
return new Promise(function (resolve) {
resolve();
application_1.Application.App.log.Info("暂不支持的类型,跳过");
_this.callEvent("complete");
});
};
NoSupportTask.prototype.Done = function () {
return true;
};
NoSupportTask.prototype.Type = function () {
return "other";
};
return NoSupportTask;
}(task_1.Task));
exports.NoSupportTask = NoSupportTask;
var VideoTask = /** @class */ (function (_super) {
__extends(VideoTask, _super);
function VideoTask() {
return _super !== null && _super.apply(this, arguments) || this;
}
VideoTask.prototype.Init = function () {
var _this = this;
return new Promise(function (resolve) {
_this.timer = setInterval(function () {
var video = document.querySelector("video[id]");
if (video) {
clearInterval(_this.timer);
_this.video = video;
_this.video.addEventListener("loadstart", function () {
_this.initVideo();
});
_this.video.addEventListener("ended", function () {
_this.callEvent("complete");
});
_this.callEvent("load");
application_1.Application.App.log.Debug("视频加载完成");
resolve();
}
}, 500);
});
};
VideoTask.prototype.Done = function () {
return false;
};
VideoTask.prototype.Stop = function () {
var _this = this;
return new Promise(function (resolve) {
clearInterval(_this.timer);
_this.callEvent("stop");
resolve();
});
};
VideoTask.prototype.initVideo = function () {
this.video.muted = application_1.Application.App.config.video_mute;
if (application_1.Application.App.config.video_multiple > 1) {
this.video.playbackRate = application_1.Application.App.config.video_multiple;
}
};
VideoTask.prototype.Start = function () {
var _this = this;
return new Promise(function (resolve) {
_this.initVideo();
_this.video.play();
_this.timer = setInterval(function () {
application_1.Application.App.config.auto && _this.video.paused && _this.video.play();
}, 5000);
resolve();
});
};
VideoTask.prototype.Type = function () {
return "video";
};
return VideoTask;
}(task_1.Task));
exports.VideoTask = VideoTask;
var CourseTopicTask = /** @class */ (function (_super) {
__extends(CourseTopicTask, _super);
function CourseTopicTask(resp) {
var _this = _super.call(this) || this;
var info = "";
if (resp) {
info = utils_1.substrex(resp, ",{aid:", ",");
}
var prefix = "";
if (document.URL.indexOf("cid") > 0) {
prefix = "c-";
}
_this.bank = new question_2.ToolsQuestionBankFacade("mooc163", {
refer: document.URL,
id: prefix + CourseTopicTask.getid(),
info: info,
});
if (resp) {
_this.bank.CheckCourse();
}
return _this;
}
CourseTopicTask.getid = function () {
var id = document.URL.match(/(\?id|cid)=(.*?)($|&)/);
if (!id) {
id = document.URL.match(/(&id)=(.*?)$/);
}
if (!id) {
return "";
}
return id[2];
};
CourseTopicTask.collegeAnswer = function (resp) {
var id = this.getid();
if (id == "") {
return;
}
var prefix = "";
if (document.URL.indexOf("cid") > 0) {
prefix = "c-";
}
var bank = new question_2.ToolsQuestionBank("mooc163", {
refer: document.URL,
id: prefix + id,
});
var answer = new Array();
var options;
options = resp.objectiveQList;
if (options == undefined) {
options = resp;
}
if (options == undefined) {
return;
}
//TODO:优化,太难看了
for (var i = 0; i < options.length; i++) {
var topic = options[i];
if (topic.type != 1 && topic.type != 2) {
if (topic.type == 3) {
var tmpAnswer_1 = new question_2.PushAnswer();
tmpAnswer_1.topic = topic.title;
tmpAnswer_1.type = 4;
tmpAnswer_1.correct = new Array();
if (!topic.stdAnswer) {
continue;
}
tmpAnswer_1.correct.push({
option: "一", content: topic.stdAnswer,
});
answer.push(tmpAnswer_1);
}
else if (topic.type == 4) {
var tmpAnswer_2 = new question_2.PushAnswer();
tmpAnswer_2.topic = topic.title;
tmpAnswer_2.type = 3;
tmpAnswer_2.correct = new Array();
if (!topic.optionDtos) {
continue;
}
for (var n = 0; n < topic.optionDtos.length; n++) {
if (topic.optionDtos[n].answer) {
tmpAnswer_2.correct.push({
option: "正确" == topic.optionDtos[n].content,
content: "正确" == topic.optionDtos[n].content,
});
break;
}
}
answer.push(tmpAnswer_2);
}
continue;
}
if (!topic.optionDtos) {
continue;
}
var option = new Array();
var correct = new Array();
var tmpAnswer = new question_2.PushAnswer();
tmpAnswer.topic = topic.title;
tmpAnswer.type = topic.type;
for (var i_1 = 0; i_1 < topic.optionDtos.length; i_1++) {
var opt = { content: topic.optionDtos[i_1].content, option: String.fromCharCode(65 + i_1) };
if (topic.optionDtos[i_1].answer) {
correct.push(opt);
}
option.push(opt);
}
if (correct.length <= 0) {
return;
}
tmpAnswer.correct = correct;
tmpAnswer.answers = option;
answer.push(tmpAnswer);
}
bank.Push(answer);
};
CourseTopicTask.prototype.Init = function () {
var _this = this;
return new Promise(function (resolve) {
setTimeout(function () {
if (document.querySelector("#tools-search")) {
document.querySelector("#tools-search").remove();
}
var search = utils_1.createBtn("搜索答案", "点击搜索答案", "cx-btn mooc163-search", "tools-search");
var divel = document.querySelector(".j-unitct .m-learnunitUI");
if (!divel) {
divel = document.querySelector(".u-learn-moduletitle");
}
_this.topic = new question_1.CourseTopic(document, _this.bank);
_this.topic.SetQueryQuestions(new question_1.CourseQueryAnswer());
search.onclick = function () { return __awaiter(_this, void 0, void 0, function () {
var ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
search.innerText = "搜索中...";
return [4 /*yield*/, this.Start()];
case 1:
ret = _a.sent();
search.innerText = question_2.QuestionStatusString(ret);
return [2 /*return*/];
}
});
}); };
divel.insertBefore(search, divel.firstChild);
resolve();
}, 1000);
});
};
CourseTopicTask.prototype.Done = function () {
return false;
};
CourseTopicTask.prototype.Type = function () {
return "topic";
};
CourseTopicTask.prototype.Start = function () {
var _this = this;
return new Promise(function (resolve) { return __awaiter(_this, void 0, void 0, function () {
var ret;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
utils_1.protocolPrompt("你正准备使用中国慕课的答题功能,相应的我们需要你的正确答案,同意之后扩展将自动检索你的所有答案\n* 本项选择不会影响你的正常使用(协议当前版本有效)\n* 手动点击答题结果页面自动采集页面答案\n", "course_answer_collect_v2", "我同意");
return [4 /*yield*/, this.topic.QueryAnswer()];
case 1:
ret = _a.sent();
this.callEvent("complete");
resolve(ret);
return [2 /*return*/];
}
});
}); });
};
CourseTopicTask.prototype.Submit = function () {
return new Promise(function (resolve) {
var el = document.querySelector(".submit.j-submit");
if (el.style.display == "none") {
resolve();
}
utils_1.UntrustedClick(el);
var t = setInterval(function () {
var el = document.querySelector(".submit.j-replay");
if (el && el.style.display != "none") {
clearInterval(t);
resolve();
}
}, 1000);
});
};
return CourseTopicTask;
}(task_1.Task));
exports.CourseTopicTask = CourseTopicTask;
var DiscussTask = /** @class */ (function (_super) {
__extends(DiscussTask, _super);
function DiscussTask(resp) {
var _this = _super.call(this) || this;
_this.list = resp;
return _this;
}
DiscussTask.prototype.isRepeat = function () {
return document.querySelector("a.unfollowed") == undefined;
};
DiscussTask.prototype.Start = function () {
var _this = this;
if (!this.list && this.list.lenght <= 0) {
application_1.Application.App.log.Info("没有查询到记录,跳过");
this.callEvent("complete");
return;
}
if (this.isRepeat()) {
application_1.Application.App.log.Info("已经关注,跳过");
this.callEvent("complete");
return;
}
application_1.Application.App.log.Info("复读机开启,准备复读(回复当前本讨论)");
return new Promise(function (resolve) {
var num = 0;
var timer = setInterval(function () {
try {
var rand = _this.list[utils_1.randNumber(0, _this.list.length - 1)];
var el = document.querySelector("iframe[id*=ueditor_]");
application_1.Application.GlobalContext.UE.instants["ueditorInstant" + el.id.substr(el.id.indexOf("_") + 1)].setContent(rand.content);
}
catch (e) {
if (num < 5) {
return;
}
application_1.Application.App.log.Error("发生了错误,准备跳过", e);
}
clearInterval(timer);
_this.callEvent("complete");
resolve();
}, 1000);
});
};
DiscussTask.prototype.Done = function () {
return false;
};
DiscussTask.prototype.Type = function () {
return "other";
};
DiscussTask.prototype.Submit = function () {
if (this.isRepeat()) {
return;
}
return new Promise(function (resolve) {
application_1.Application.App.log.Info("准备提交");
var el = document.querySelector(".u-btn-sm.u-btn-primary");
if (!el) {
return resolve();
}
utils_1.UntrustedClick(el);
setTimeout(function () {
resolve();
}, 2000);
});
};
return DiscussTask;
}(task_1.Task));
exports.DiscussTask = DiscussTask;
/***/ }),
/***/ "./src/mooc/mooc.ts":
/*!**************************!*\
!*** ./src/mooc/mooc.ts ***!
\**************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
return new (P || (P = Promise))(function (resolve, reject) {
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
step((generator = generator.apply(thisArg, _arguments || [])).next());
});
};
var __generator = (this && this.__generator) || function (thisArg, body) {
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
function verb(n) { return function (v) { return step([n, v]); }; }
function step(op) {
if (f) throw new TypeError("Generator is already executing.");
while (_) try {
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
if (y = 0, t) op = [op[0] & 2, t.value];
switch (op[0]) {
case 0: case 1: t = op; break;
case 4: _.label++; return { value: op[1], done: false };
case 5: _.label++; y = op[1]; op = [0]; continue;
case 7: op = _.ops.pop(); _.trys.pop(); continue;
default:
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
if (t[2]) _.ops.pop();
_.trys.pop(); continue;
}
op = body.call(thisArg, _);
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
}
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.mooc = void 0;
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var mooc = /** @class */ (function () {
function mooc(moocFactory) {
// 防止taskComplete和reload冲突
this.once = false;
this.moocFactory = moocFactory;
}
mooc.prototype.start = function () {
return __awaiter(this, void 0, void 0, function () {
var state, mooc_1, e_1, isShow_1;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
_a.trys.push([0, 3, , 4]);
state = document.readyState;
application_1.Application.App.log.Debug("Start document state:", state);
mooc_1 = this.moocFactory.CreateMooc();
if (!(mooc_1 != null)) return [3 /*break*/, 2];
return [4 /*yield*/, mooc_1.Init()];
case 1:
_a.sent();
// MoocTaskSet接口判断,接管流程
if (mooc_1.Next != undefined) {
this.runMoocTask(mooc_1);
}
_a.label = 2;
case 2: return [3 /*break*/, 4];
case 3:
e_1 = _a.sent();
application_1.Application.App.log.Fatal("扩展发生了一个致命错误:", e_1);
return [3 /*break*/, 4];
case 4:
//最小化警告
if (top == self) {
isShow_1 = false;
document.addEventListener("visibilitychange", function () {
if (document.hidden) {
if (isShow_1) {
return;
}
application_1.Application.App.log.Warn("请注意!最小化可能导致视频无法正常播放!允许切换窗口.");
isShow_1 = true;
}
});
}
return [2 /*return*/];
}
});
});
};
mooc.prototype.runMoocTask = function (moocTask) {
var _this = this;
moocTask.addEventListener("reload", function () {
if (application_1.Application.App.config.auto) {
_this.runTask(moocTask);
}
clearTimeout(_this.timer);
});
moocTask.addEventListener("complete", function () {
application_1.Application.App.log.Warn("任务完成了");
alert("任务完成了");
});
moocTask.addEventListener("taskComplete", function (index, task) {
moocTask.SetTaskPointer(index + 1);
if (!application_1.Application.App.config.auto) {
return;
}
var interval = application_1.Application.App.config.interval;
application_1.Application.App.log.Info(interval + "分钟后自动切换下一个任务点");
_this.timer = setTimeout(function () { return __awaiter(_this, void 0, void 0, function () {
return __generator(this, function (_a) {
switch (_a.label) {
case 0: return [4 /*yield*/, task.Submit()];
case 1:
_a.sent();
return [4 /*yield*/, this.runTask(moocTask)];
case 2:
_a.sent();
return [2 /*return*/];
}
});
}); }, interval * 60000);
});
moocTask.addEventListener("error", function (msg) {
application_1.Application.App.log.Fatal(msg);
alert(msg);
});
};
mooc.prototype.runTask = function (moocTask) {
return __awaiter(this, void 0, void 0, function () {
var task;
return __generator(this, function (_a) {
switch (_a.label) {
case 0:
if (this.once) {
return [2 /*return*/];
}
this.once = true;
return [4 /*yield*/, moocTask.Next()];
case 1:
task = _a.sent();
_a.label = 2;
case 2:
if (!(task != null)) return [3 /*break*/, 9];
if (!task.Done()) return [3 /*break*/, 4];
return [4 /*yield*/, moocTask.Next()];
case 3:
task = _a.sent();
return [3 /*break*/, 2];
case 4:
if (!(application_1.Application.App.config.answer_ignore && task.Type() == "topic")) return [3 /*break*/, 6];
return [4 /*yield*/, moocTask.Next()];
case 5:
task = _a.sent();
return [3 /*break*/, 2];
case 6:
if (!application_1.Application.App.config.auto) return [3 /*break*/, 8];
return [4 /*yield*/, task.Start()];
case 7:
_a.sent();
_a.label = 8;
case 8:
this.nowTask = task;
return [3 /*break*/, 9];
case 9:
this.once = false;
return [2 /*return*/];
}
});
});
};
return mooc;
}());
exports.mooc = mooc;
/***/ }),
/***/ "./src/tampermonkey/course163-pack.ts":
/*!********************************************!*\
!*** ./src/tampermonkey/course163-pack.ts ***!
\********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var config_1 = __webpack_require__(/*! @App/internal/utils/config */ "./src/internal/utils/config.ts");
var log_1 = __webpack_require__(/*! @App/internal/utils/log */ "./src/internal/utils/log.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var mooc_1 = __webpack_require__(/*! @App/mooc/mooc */ "./src/mooc/mooc.ts");
var platform_1 = __webpack_require__(/*! @App/mooc/course163/platform */ "./src/mooc/course163/platform.ts");
var logger;
if (top == self) {
logger = new log_1.PageLog();
}
else {
logger = new log_1.ConsoleLog();
}
application_1.Application.GlobalContext = window.unsafeWindow;
var component = new Map().
set("config", new config_1.ChromeConfigItems(config_1.NewFrontendGetConfig())).
set("logger", logger);
var app = new application_1.Application(application_1.Frontend, new mooc_1.mooc(new platform_1.Course163Platform()), component);
app.run();
/***/ }),
/***/ "./src/views/common.ts":
/*!*****************************!*\
!*** ./src/views/common.ts ***!
\*****************************/
/*! no static exports found */
/***/ (function(module, exports) {
window.addEventListener("load", function () {
var css = "\n@keyframes aniripple \n{\n 0%{\n width:0px;\n height:0px;\n opacity:0.4;\n }\n 100%{\n width:500px;\n height:500px;\n opacity:0;\n }\n} \n\n#cxtools {\n position: absolute;\n left: 250px;\n top: 2px;\n width: 210px;\n font-size: 0;\n}\n\n.cx-btn {\n outline: none;\n border: 0;\n background: #7d9d35;\n color: #fff;\n border-radius: 4px;\n padding: 2px 8px;\n cursor: pointer;\n font-size: 12px;\n margin-left: 4px;\n}\n\n.cx-btn:hover {\n box-shadow: 1px 1px 1px 1px #ccc;\n}\n\n.zhs-tools-btn {\n color: #fff;\n background: #ff9d34;\n padding: 4px;\n display: inline-block;\n height: 24px;\n font-size: 14px;\n line-height: 24px;\n margin:0;\n cursor:pointer;\n}\n.btn-ripple{\n position:absolute;\n background:#000;\n pointer-events:none;\n transform:translate(-50%,-50%);\n border-radius:50%;\n animation:aniripple 1s linear infinite;\n}\n\n.zhs-start-btn{\n background: #36ac36;\n}\n\n.zhs-start-btn:hover{\n background: #3b8d3b;\n}\n\n#zhs-ytbn {\n color: #fff;\n background: #e777ff;\n}\n\n#zhs-ytbn:hover {\n background: #e7b7f1;\n}\n\n.zhs-search-answer {\n border: 0;\n outline: none;\n padding: 4px;\n}\n\n.zhs-search-answer:hover {\n opacity: .85;\n}\n\n.mooc163-search{\n background-color: #60b900;\n display: block;\n margin: 0 auto;\n}\n\n.tools-logger-panel{\n width: 360px;\n height: auto;\n max-height: 260px;\n color:#000;\n position: fixed;\n margin: 0 auto;\n display: block;\n font-size: 14px;\n border-radius: 4px;\n width: 340px;\n text-align: center;\n overflow: hidden;\n left:60px;\n top: 40px;\n z-index: 100000;\n background: rgba(256, 256, 256, 0.3);\n box-shadow: 0px 0px 5px #bbb;\n}\n\n.head {\n width: 100%;\n height: 30px;\n padding: 4px;\n box-sizing: border-box;\n cursor: move;\n transition-property: opacity, background-color;\n transition: 200ms ease-in-out;\n}\n\n.head span{\n color:#000;\n float:left;\n font-weight: 550;\n}\n\n.status {\n color: #67C23A;\n font-weight: 600;\n}\n\n.tools-notice-content {\n width: 100%;\n height: 220px;\n border-top:0px;\n overflow-y: scroll;\n overflow-x: hidden;\n}\n\n.tools-notice-content .log {\n height: auto;\n width: auto;\n text-align: center;\n border: 1px solid #eee;\n overflow: hidden;\n}\n\n.tools-notice-content .log p {\n margin: 0;\n color: #aaa;\n font-size: 11px;\n font-weight: 500;\n font-family: Arial, Helvetica, sans-serif;\n line-height: 26px;\n}\n\n/* \u6EDA\u52A8\u69FD */\n::-webkit-scrollbar {\n width: 10px;\n height: 10px;\n}\n\n::-webkit-scrollbar-track {\n border-radius: 3px;\n background: rgba(0, 0, 0, 0.06);\n -webkit-box-shadow: inset 0 0 5px rgba(0, 0, 0, 0.08);\n}\n\n/* \u6EDA\u52A8\u6761\u6ED1\u5757 */\n::-webkit-scrollbar-thumb {\n border-radius: 3px;\n background: rgba(0, 0, 0, 0.12);\n -webkit-box-shadow: inset 0 0 10px rgba(0, 0, 0, 0.2);\n}\n\n/* \u590D\u9009\u6846 */\n.switch {\n margin: 2px auto;\n display: inline-flex;\n align-items: center;\n width: auto;\n}\n.checkbox-input {\n display: none\n}\n.checkbox {\n -webkit-transition: background-color 0.3s;\n transition: background-color 0.3s;\n background-color: #fff;\n border: 1px solid #d7d7d7;\n border-radius: 50px;\n width: 16px;\n height: 16px;\n vertical-align:middle;\n margin: 0 5px;\n}\n.checkbox-input:checked+.checkbox {\n background-color: #409EFF;\n}\n.checkbox-input:checked+.checkbox:after {\n // content: \"\u221A\";\n display: inline-block;\n height: 100%;\n width: 100%;\n color: #fff;\n text-align: center;\n line-height: 16px;\n font-size: 12px;\n box-shadow: 0 0 4px #409EFF;\n}\n\n.tools-logger-panel:hover,\n.tools-logger-panel:focus-within {\n background: rgba(256, 256, 256, 0.7);\n}\n\n.tools-logger-panel .head:active {\n background-color: #E5E5E5;\n}\n\n.tools-logger-panel > .close {\n margin: 2px;\n}\n\n";
var style = document.createElement("style");
style.innerHTML = css;
document.body.appendChild(style);
});
/***/ })
/******/ });
//# sourceMappingURL=tampermonkey-course163.js.map