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.3
// @description 一个知到智慧树的小工具,火狐,谷歌,油猴支持.支持视频倍速秒过,屏蔽题目,测试题库(੧ᐛ੭挂科模式,启动)
// @author CodFrm
// @run-at document-start
// @match *://study.zhihuishu.com/learning/videoList*
// @match *://studyh5.zhihuishu.com/videoStudy.html*
// @match *://examh5.zhihuishu.com/stuExamWeb.html*
// @match *://onlineexamh5new.zhihuishu.com/stuExamWeb.html*
// @grant GM_xmlhttpRequest
// @grant GM_notification
// @grant unsafeWindow
// @license MIT
// ==/UserScript==
let config = {
auto: true, //全自动挂机,无需手动操作,即可自动观看视频等
interval: 1, //时间间隔,当任务点完成后,会等待1分钟然后跳转到下一个任务点
rand_answer: false, //随机答案,没有答案的题目将自动的生成一个答案
video_multiple: 1, //视频播放倍速,视频播放的倍数,建议不要改动,为1即可,这是危险的功能
video_mute: true, //视频静音,视频自动静音播放
super_mode: 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/zhihuishu-pack.ts");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/querystring-es3/decode.js":
/*!************************************************!*\
!*** ./node_modules/querystring-es3/decode.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
// If obj.hasOwnProperty has been overridden, then calling
// obj.hasOwnProperty(prop) will break.
// See: https://github.com/joyent/node/issues/1707
function hasOwnProperty(obj, prop) {
return Object.prototype.hasOwnProperty.call(obj, prop);
}
module.exports = function(qs, sep, eq, options) {
sep = sep || '&';
eq = eq || '=';
var obj = {};
if (typeof qs !== 'string' || qs.length === 0) {
return obj;
}
var regexp = /\+/g;
qs = qs.split(sep);
var maxKeys = 1000;
if (options && typeof options.maxKeys === 'number') {
maxKeys = options.maxKeys;
}
var len = qs.length;
// maxKeys <= 0 means that we should not limit keys count
if (maxKeys > 0 && len > maxKeys) {
len = maxKeys;
}
for (var i = 0; i < len; ++i) {
var x = qs[i].replace(regexp, '%20'),
idx = x.indexOf(eq),
kstr, vstr, k, v;
if (idx >= 0) {
kstr = x.substr(0, idx);
vstr = x.substr(idx + 1);
} else {
kstr = x;
vstr = '';
}
k = decodeURIComponent(kstr);
v = decodeURIComponent(vstr);
if (!hasOwnProperty(obj, k)) {
obj[k] = v;
} else if (isArray(obj[k])) {
obj[k].push(v);
} else {
obj[k] = [obj[k], v];
}
}
return obj;
};
var isArray = Array.isArray || function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]';
};
/***/ }),
/***/ "./node_modules/querystring-es3/encode.js":
/*!************************************************!*\
!*** ./node_modules/querystring-es3/encode.js ***!
\************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
// Copyright Joyent, Inc. and other Node contributors.
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the
// "Software"), to deal in the Software without restriction, including
// without limitation the rights to use, copy, modify, merge, publish,
// distribute, sublicense, and/or sell copies of the Software, and to permit
// persons to whom the Software is furnished to do so, subject to the
// following conditions:
//
// The above copyright notice and this permission notice shall be included
// in all copies or substantial portions of the Software.
//
// THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
// OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
// MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN
// NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,
// DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
// OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
// USE OR OTHER DEALINGS IN THE SOFTWARE.
var stringifyPrimitive = function(v) {
switch (typeof v) {
case 'string':
return v;
case 'boolean':
return v ? 'true' : 'false';
case 'number':
return isFinite(v) ? v : '';
default:
return '';
}
};
module.exports = function(obj, sep, eq, name) {
sep = sep || '&';
eq = eq || '=';
if (obj === null) {
obj = undefined;
}
if (typeof obj === 'object') {
return map(objectKeys(obj), function(k) {
var ks = encodeURIComponent(stringifyPrimitive(k)) + eq;
if (isArray(obj[k])) {
return map(obj[k], function(v) {
return ks + encodeURIComponent(stringifyPrimitive(v));
}).join(sep);
} else {
return ks + encodeURIComponent(stringifyPrimitive(obj[k]));
}
}).join(sep);
}
if (!name) return '';
return encodeURIComponent(stringifyPrimitive(name)) + eq +
encodeURIComponent(stringifyPrimitive(obj));
};
var isArray = Array.isArray || function (xs) {
return Object.prototype.toString.call(xs) === '[object Array]';
};
function map (xs, f) {
if (xs.map) return xs.map(f);
var res = [];
for (var i = 0; i < xs.length; i++) {
res.push(f(xs[i], i));
}
return res;
}
var objectKeys = Object.keys || function (obj) {
var res = [];
for (var key in obj) {
if (Object.prototype.hasOwnProperty.call(obj, key)) res.push(key);
}
return res;
};
/***/ }),
/***/ "./node_modules/querystring-es3/index.js":
/*!***********************************************!*\
!*** ./node_modules/querystring-es3/index.js ***!
\***********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
exports.decode = exports.parse = __webpack_require__(/*! ./decode */ "./node_modules/querystring-es3/decode.js");
exports.encode = exports.stringify = __webpack_require__(/*! ./encode */ "./node_modules/querystring-es3/encode.js");
/***/ }),
/***/ "./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/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/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/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/mooc/zhihuishu/exam.ts":
/*!************************************!*\
!*** ./src/mooc/zhihuishu/exam.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.ZhsExam = void 0;
var utils_1 = __webpack_require__(/*! @App/internal/utils/utils */ "./src/internal/utils/utils.ts");
__webpack_require__(/*! ../../views/common */ "./src/views/common.ts");
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_2 = __webpack_require__(/*! ../chaoxing/utils */ "./src/mooc/chaoxing/utils.ts");
//TODO: 与超星一起整合优化
var ZhsExam = /** @class */ (function () {
function ZhsExam() {
}
ZhsExam.prototype.Init = function () {
var _this = this;
var id = document.URL.match(/(checkHomework|dohomework|doexamination)\/(.*?)\/(.*?)\/(.*?)\/(.*?)\/(.*?)$/);
if (id == null) {
//url改变但不重载页面
window.addEventListener("hashchange", function () {
setTimeout(function () {
_this.Init();
document.oncontextmenu = function () {
};
document.oncopy = function () {
};
document.onpaste = function () {
};
document.onselectstart = function () {
};
if (document.querySelectorAll(".examInfo.infoList.clearfix").length <= 0) {
_this.createBtn();
}
else {
_this.topic.CollectAnswer();
}
}, 1000);
});
return;
}
this.topic = new ExamTopic(document, new question_1.ToolsQuestionBankFacade("zhs", {
refer: document.URL,
id: id[4],
}));
this.topic.SetQueryQuestions(new ExamQueryQuestion());
window.addEventListener("load", function () {
setTimeout(function () {
document.oncontextmenu = function () {
};
document.oncopy = function () {
};
document.onpaste = function () {
};
document.onselectstart = function () {
};
if (document.querySelectorAll(".examInfo.infoList.clearfix").length <= 0) {
_this.createBtn();
}
else {
_this.topic.CollectAnswer();
}
}, 1000);
});
};
ZhsExam.prototype.createBtn = function () {
if (document.querySelectorAll(".zhs-search-answer.green").length > 0) {
return;
}
var el = document.querySelector(".examPaper_partTit.mt20 ul");
var btn = utils_1.createBtn("搜索答案", "点击搜索答案", "zhs-search-answer green");
el.append(btn);
var self = this;
btn.onclick = function () {
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* (功能其实还没完成,后续更新)", "zhs_answer_collect", "我同意");
btn.innerText = "搜索中...";
return [4 /*yield*/, self.topic.QueryAnswer()];
case 1:
ret = _a.sent();
btn.innerText = question_1.QuestionStatusString(ret);
return [2 /*return*/, false];
}
});
});
};
};
return ZhsExam;
}());
exports.ZhsExam = ZhsExam;
var ExamQueryQuestion = /** @class */ (function () {
function ExamQueryQuestion() {
}
ExamQueryQuestion.prototype.QueryQuestions = function () {
var _this = this;
var timu = document.querySelectorAll(".examPaper_subject.mt20,.questionType");
var ret = new Array();
timu.forEach(function (val) {
var el = val.querySelector(".subject_type_annex .subject_type");
if (el == null) {
return;
}
var type = question_1.SwitchTopicType(utils_1.substrex(el.innerHTML, "【", "】"));
var question = _this.createQuestion(type, val);
ret.push(question);
});
return ret;
};
ExamQueryQuestion.prototype.createQuestion = function (type, el) {
switch (type) {
case 1:
case 2: {
return new ZhsSelectQuestion(el, type);
}
case 3: {
return new ZhsJudgeQuestion(el, type);
}
default: {
return new ZhsSelectQuestion(el, -1);
}
}
};
return ExamQueryQuestion;
}());
var ZhsQuestion = /** @class */ (function () {
function ZhsQuestion(el, type) {
this.el = el;
this.type = type;
}
ZhsQuestion.prototype.GetType = function () {
return this.type;
};
ZhsQuestion.prototype.GetTopic = function () {
var el = this.el.querySelector(".subject_type_describe.fl .subject_describe");
return el.innerHTML;
};
ZhsQuestion.prototype.removeNotice = function () {
this.el.querySelectorAll(".prompt-line-answer").forEach(function (v) {
v.remove();
});
};
ZhsQuestion.prototype.addNotice = function (str) {
var el = this.el.querySelector(".subject_node.mt10,.subject_node");
utils_2.CreateNoteLine(str, "answer", el);
};
ZhsQuestion.prototype.SetStatus = function (status) {
this.addNotice(question_1.TopicStatusString(status));
};
ZhsQuestion.prototype.options = function () {
return this.el.querySelectorAll(".subject_node .nodeLab");
};
ZhsQuestion.prototype.getOption = function (el) {
var tmpel = el.querySelector(".mr10,span.mr5");
return tmpel.innerText.substring(0, 1);
};
ZhsQuestion.prototype.click = function (el, content) {
var tmpel = el.querySelector("input");
if (tmpel.nextElementSibling.style.display != "none") {
tmpel.parentElement.click();
}
this.addNotice(this.getOption(el) + ":" + content);
};
ZhsQuestion.prototype.getContent = function (el) {
var tmpel = el.querySelector(".node_detail.examquestions-answer.fl");
return tmpel.innerHTML;
};
ZhsQuestion.prototype.defaultAnswer = function () {
var ret = new question_1.PushAnswer();
ret.topic = this.GetTopic();
ret.type = this.GetType();
ret.correct = new Array();
ret.answers = new Array();
return ret;
};
ZhsQuestion.prototype.isCorrect = function () {
return this.el.querySelector(".key_yes") != null;
};
return ZhsQuestion;
}());
var ZhsSelectQuestion = /** @class */ (function (_super) {
__extends(ZhsSelectQuestion, _super);
function ZhsSelectQuestion() {
return _super !== null && _super.apply(this, arguments) || this;
}
ZhsSelectQuestion.prototype.Random = function () {
var options = this.options();
var pos = utils_1.randNumber(0, options.length - 1);
this.click(options[pos], this.getContent(options[pos]));
return "random";
};
ZhsSelectQuestion.prototype.Fill = function (s) {
var _this = this;
return new Promise(function (resolve) {
var options = _this.options();
var flag = false;
var _loop_1 = function (i) {
var _loop_2 = function (j) {
if (s.Equal(_this.getContent(options[j]), s.correct[i].content)) {
setTimeout(function () {
_this.click(options[j], s.correct[i].content);
}, i * 1000);
flag = true;
}
};
for (var j = 0; j < options.length; j++) {
_loop_2(j);
}
};
for (var i = 0; i < s.correct.length; i++) {
_loop_1(i);
}
if (flag) {
return resolve("ok");
}
return resolve("no_match");
});
};
ZhsSelectQuestion.prototype.Correct = function () {
if (!this.isCorrect()) {
return null;
}
var ret = this.defaultAnswer();
var options = this.options();
for (var i = 0; i < options.length; i++) {
var option = {
option: this.getOption(options[i]),
content: this.getContent(options[i]),
};
ret.answers.push(option);
if (options[i].querySelector("input").checked) {
ret.correct.push(option);
}
}
return ret;
};
return ZhsSelectQuestion;
}(ZhsQuestion));
var ZhsJudgeQuestion = /** @class */ (function (_super) {
__extends(ZhsJudgeQuestion, _super);
function ZhsJudgeQuestion() {
return _super !== null && _super.apply(this, arguments) || this;
}
ZhsJudgeQuestion.prototype.Random = function () {
var options = this.options();
this.click(options[utils_1.randNumber(0, 1)]);
return "random";
};
ZhsJudgeQuestion.prototype.click = function (el) {
el.querySelector("label > input,input").click();
this.addNotice(this.getContent(el));
};
ZhsJudgeQuestion.prototype.Fill = function (answer) {
var _this = this;
return new Promise(function (resolve) {
var options = _this.options();
for (var i = 0; i < options.length; i++) {
if (_this.getContent(options[i]) == (answer.correct[0].content ? "对" : "错")) {
_this.click(options[i]);
break;
}
}
return resolve("ok");
});
};
ZhsJudgeQuestion.prototype.Correct = function () {
if (!this.isCorrect()) {
return null;
}
var ret = this.defaultAnswer();
var answer = this.getContent(this.el.querySelector("input:checked").parentElement.parentElement) == "对";
ret.correct.push({
option: answer,
content: answer,
});
return ret;
};
return ZhsJudgeQuestion;
}(ZhsQuestion));
var ExamTopic = /** @class */ (function (_super) {
__extends(ExamTopic, _super);
function ExamTopic() {
return _super !== null && _super.apply(this, arguments) || this;
}
ExamTopic.prototype.Init = function () {
return null;
};
ExamTopic.prototype.Submit = function () {
return null;
};
return ExamTopic;
}(topic_1.Topic));
/***/ }),
/***/ "./src/mooc/zhihuishu/platform.ts":
/*!****************************************!*\
!*** ./src/mooc/zhihuishu/platform.ts ***!
\****************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZhsPlatform = void 0;
var video_1 = __webpack_require__(/*! ./video */ "./src/mooc/zhihuishu/video.ts");
var exam_1 = __webpack_require__(/*! ./exam */ "./src/mooc/zhihuishu/exam.ts");
var application_1 = __webpack_require__(/*! @App/internal/application */ "./src/internal/application.ts");
var ZhsPlatform = /** @class */ (function () {
function ZhsPlatform() {
}
ZhsPlatform.prototype.CreateMooc = function () {
var mooc = null;
if (document.URL.indexOf("studyh5.zhihuishu.com/videoStudy.html") > 0) {
mooc = new video_1.ZhsVideo();
}
else if (document.URL.indexOf("zhihuishu.com/stuExamWeb.html") > 0) {
mooc = new exam_1.ZhsExam();
}
if (mooc) {
application_1.Application.App.config.SetNamespace("zhs");
}
return mooc;
};
return ZhsPlatform;
}());
exports.ZhsPlatform = ZhsPlatform;
/***/ }),
/***/ "./src/mooc/zhihuishu/utils/css-tool.ts":
/*!**********************************************!*\
!*** ./src/mooc/zhihuishu/utils/css-tool.ts ***!
\**********************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.CssBtn = void 0;
/**
* 美化按钮
* @param btn 按钮
*/
function CssBtn(btn) {
btn.style.position = 'relative';
btn.style.color = '#fff';
btn.style.padding = '0 16px';
btn.style.display = 'inline-block';
btn.style.height = '36px';
btn.style.fontSize = '14px';
btn.style.fontWeight = '500';
btn.style.outline = 'none';
btn.style.border = 'none';
btn.style.borderRadius = '4px';
btn.style.overflow = 'hidden';
btn.style.margin = '0 8px';
btn.addEventListener('mousedown', function (e) {
var x = e.offsetX;
var y = e.offsetY;
var ripples = document.createElement('span');
ripples.style.left = x + 'px';
ripples.style.top = y + 'px';
ripples.className = "btn-ripple";
btn.appendChild(ripples);
setTimeout(function () {
ripples.remove();
}, 1000);
}, false);
return btn;
}
exports.CssBtn = CssBtn;
/***/ }),
/***/ "./src/mooc/zhihuishu/video.ts":
/*!*************************************!*\
!*** ./src/mooc/zhihuishu/video.ts ***!
\*************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ZhsVideo = void 0;
var hook_1 = __webpack_require__(/*! @App/internal/utils/hook */ "./src/internal/utils/hook.ts");
var application_1 = __webpack_require__(/*! @App/internal/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");
var css_tool_1 = __webpack_require__(/*! ./utils/css-tool */ "./src/mooc/zhihuishu/utils/css-tool.ts");
var queryString = __webpack_require__(/*! querystring */ "./node_modules/querystring-es3/index.js");
var ZhsVideo = /** @class */ (function () {
function ZhsVideo() {
}
ZhsVideo.prototype.Init = function () {
var _this = this;
this.hookAjax();
var timer = setInterval(function () {
try {
_this.start();
clearInterval(timer);
}
catch (e) {
}
}, 500);
};
ZhsVideo.prototype.createToolsBar = function () {
var _this = this;
var tools = document.createElement('div');
tools.className = "entrance_div";
tools.id = "cxtools";
var boomBtn = css_tool_1.CssBtn(utils_1.createBtn("秒过视频", "", "zhs-tools-btn"));
boomBtn.onclick = function () {
if (!utils_1.protocolPrompt("秒过视频会产生不良记录,是否继续?", "boom_no_prompt")) {
return;
}
var timeStr = document.querySelector(".nPlayTime .duration").innerText;
var time = 0;
var temp = timeStr.match(/[\d]+/gi);
for (var i = 0; i < 3; i++) {
time += parseInt(temp[i]) * Math.pow(60, 2 - i);
}
time += utils_1.randNumber(20, 200);
var tn = time;
//通过id搜索视频信息
var lessonId = 0, smallLessonId = 0, chapterId = 0;
var subTit = document.querySelector(".current_play .hour").innerText;
//获取x.x.x DOM
var videoTag = subTit.split('.');
if (videoTag.length >= 2) {
lessonId = _this.videoList.videoChapterDtos[Number.parseInt(videoTag[0]) - 1].videoLessons[Number.parseInt(videoTag[1]) - 1].id;
chapterId = _this.videoList.videoChapterDtos[Number.parseInt(videoTag[0]) - 1].videoLessons[Number.parseInt(videoTag[1]) - 1].chapterId;
switch (videoTag.length) {
case 3:
smallLessonId = _this.videoList.videoChapterDtos[Number.parseInt(videoTag[0]) - 1]
.videoLessons[Number.parseInt(videoTag[1]) - 1]
.videoSmallLessons[Number.parseInt(videoTag[2]) - 1].id;
default:
break;
}
}
var tims = parseInt((time / 1.999).toString());
for (var index = 0; index < tims; index++) {
_this.learningTimeRecord();
}
var s = [_this.videoList.recruitId, lessonId, smallLessonId, _this.nowVideoId, chapterId, "0", tn, _this.studyTotalTime, timeStr], l = {
watchPoint: _this.watchPointPost,
ev: n.Z(s),
courseId: _this.videoList.courseId,
learningTokenId: Base64.encode(_this.studiedLessonDtoId.toString()),
uuid: utils_1.substrex(document.cookie, "uuid%22%3A%22", "%22"),
dateFormate: Date.parse(new Date()),
};
var postData = queryString.stringify(l);
utils_1.post("https://studyservice.zhihuishu.com/learning/saveDatabaseIntervalTime", postData, false, function (data) {
var json = JSON.parse(data);
try {
if (json.data.submitSuccess == true) {
alert("秒过成功,刷新后查看效果");
}
else {
alert("秒过失败");
}
}
catch (e) {
alert("秒过失败");
}
});
};
var startBtnText = application_1.Application.App.config.auto ? "暂停挂机" : "开始挂机";
var startBtn = css_tool_1.CssBtn(utils_1.createBtn(startBtnText, "", "zhs-tools-btn zhs-start-btn"));
startBtn.addEventListener('click', function () {
if (startBtn.innerText == "暂停挂机") {
startBtn.innerText = "开始挂机";
application_1.Application.App.config.auto = false;
localStorage["auto"] = false;
}
else {
startBtn.innerText = "暂停挂机";
localStorage["auto"] = true;
application_1.Application.App.config.auto = true;
_this.play();
}
});
tools.appendChild(startBtn);
tools.appendChild(boomBtn);
document.querySelector(".videotop_box.fl").append(tools);
};
ZhsVideo.prototype.learningTimeRecord = function () {
var t = parseInt(((this.studyTotalTime / 5) + 2).toString()), e = null == this.watchPointPost || "" == this.watchPointPost ? "0,1," : this.watchPointPost + ",";
this.watchPointPost = e + t;
this.studyTotalTime += 2;
};
ZhsVideo.prototype.compile = function () {
var interval = application_1.Application.App.config.interval;
application_1.Application.App.log.Info(interval + "分钟后自动切换下一节");
clearTimeout(this.lastTimer);
this.lastTimer = setTimeout(function () {
var $ = application_1.Application.GlobalContext.$;
var next = $(".clearfix.video.current_play").next();
if (next.length == 0) {
next = $(".clearfix.video.current_play")
.parents("ul.list,div")
.next("div,ul.list")
.find("li.video");
}
if (next.length == 0) {
alert("刷课完成");
return;
}
application_1.Application.App.config.auto && $(next[0]).click();
}, interval * 60000);
};
ZhsVideo.prototype.play = function () {
if (this.video) {
this.video.muted = application_1.Application.App.config.video_mute;
this.video.playbackRate = application_1.Application.App.config.video_multiple;
application_1.Application.App.config.auto && this.video.play();
}
};
ZhsVideo.prototype.start = function () {
var hookPlayerStarter = new hook_1.Hook("createPlayer", application_1.Application.GlobalContext.PlayerStarter);
var self = this;
hookPlayerStarter.Middleware(function (next) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
self.createToolsBar();
application_1.Application.App.log.Info("视频开始加载");
var hookPause = args[2].onPause;
var hookReady = args[2].onReady;
self.nowVideoId = args[1].id;
args[2].onReady = function () {
hookReady.apply(this);
self.video = document.querySelector("#vjs_container_html5_api");
application_1.Application.App.config.auto && self.play();
};
args[2].hookPause = function () {
hookPause.apply(this);
application_1.Application.App.config.auto && self.video.play();
};
var innerTimer = setInterval(function () {
if (document.querySelectorAll(".current_play .time_icofinish").length > 0) {
clearInterval(innerTimer);
self.compile();
}
}, 2000);
return next.apply(this, args);
});
var timeSetInterval = new hook_1.Hook("setInterval", application_1.Application.GlobalContext);
timeSetInterval.Middleware(function (next) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
application_1.Application.App.log.Debug("加速器启动");
if (application_1.Application.App.config.super_mode) {
args[1] = args[1] / application_1.Application.App.config.video_multiple;
}
return next.apply(this, args);
});
};
ZhsVideo.prototype.hookAjax = function () {
var hookXMLHttpRequest = new hook_1.Hook("open", application_1.Application.GlobalContext.XMLHttpRequest.prototype);
var self = this;
hookXMLHttpRequest.Middleware(function (next) {
var args = [];
for (var _i = 1; _i < arguments.length; _i++) {
args[_i - 1] = arguments[_i];
}
if (args[1].indexOf("popupAnswer/loadVideoPointerInfo") >= 0) {
Object.defineProperty(this, "responseText", {
get: function () {
var retText = this.response.replace(/"questionPoint":\[.*?\],"knowledgeCardDtos"/gm, '"questionPoint":[],"knowledgeCardDtos"');
return retText;
}
});
}
else if (args[1].indexOf("learning/videolist") >= 0) {
Object.defineProperty(this, "responseText", {
get: function () {
var json = JSON.parse(this.response);
self.videoList = json.data;
return this.response;
}
});
}
else if (args[1].indexOf("learning/prelearningNote") >= 0) {
Object.defineProperty(this, "responseText", {
get: function () {
var json = JSON.parse(this.response);
self.studiedLessonDtoId = json.data.studiedLessonDto.id;
self.studyTotalTime = json.data.studiedLessonDto.studyTotalTime;
return this.response;
}
});
}
var ret = next.apply(this, args);
return ret;
});
};
return ZhsVideo;
}());
exports.ZhsVideo = ZhsVideo;
var n = {
_a: "AgrcepndtslzyohCia0uS@",
_b: "A0ilndhga@usreztoSCpyc",
_c: "d0@yorAtlhzSCeunpcagis",
_d: "zzpttjd",
X: function (t) {
for (var e = "", i = 0; i < t[this._c[8] + this._a[4] + this._c[15] + this._a[1] + this._a[8] + this._b[6]]; i++) {
var n = t[this._a[3] + this._a[14] + this._c[18] + this._a[2] + this._b[18] + this._b[16] + this._c[0] + this._a[4] + this._b[0] + this._b[15]](i) ^ this._d[this._b[21] + this._b[6] + this._a[17] + this._c[5] + this._b[18] + this._c[4] + this._a[7] + this._a[4] + this._a[0] + this._c[7]](i % this._d[this._a[10] + this._b[13] + this._b[4] + this._a[1] + this._c[7] + this._a[14]]);
e += this.Y(n);
}
return e;
},
Y: function (t) {
var e = t[this._c[7] + this._a[13] + this._a[20] + this._b[15] + this._a[2] + this._b[2] + this._c[15] + this._c[19]](16);
return e = e[this._b[3] + this._a[4] + this._b[4] + this._a[1] + this._c[7] + this._c[9]] < 2 ? this._b[1] + e : e,
e[this._a[9] + this._b[3] + this._c[20] + this._c[17] + this._c[13]](-4);
},
Z: function (t) {
for (var e = "", i = 0; i < t.length; i++)
e += t[i] + ";";
return e = e.substring(0, e.length - 1),
this.X(e);
}
};
/***/ }),
/***/ "./src/tampermonkey/zhihuishu-pack.ts":
/*!********************************************!*\
!*** ./src/tampermonkey/zhihuishu-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/zhihuishu/platform */ "./src/mooc/zhihuishu/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.ZhsPlatform()), 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-zhihuishu.js.map