script-of-lmh
// ==UserScript==
// @name script-of-lmh
// @version 1.0.0
// @description script
// @author unkonw
// @license MIT
// @connect enncy.cn
// @connect icodef.com
// @connect ocsjs.com
// @connect localhost
// @connect 116.255.233.11
// @match *://*.chaoxing.com/*
// @match *://*.edu.cn/*
// @match *://*.org.cn/*
// @match *://*.zhihuishu.com/*
// @match *://*.icve.com.cn/*
// @grant unsafeWindow
// @grant GM_xmlhttpRequest
// @grant GM_setValue
// @grant GM_getValue
// @grant GM_addValueChangeListener
// @grant GM_removeValueChangeListener
// @run-at document-start
// ==/UserScript==
/*!
* ocsjs ( https://github.com/ocsjs/ocsjs#readme )
* ocs - online course script 在线网络课程辅助工具
* copyright enncy
* license MIT
*/
var __defProp = Object.defineProperty;
var __defProps = Object.defineProperties;
var __getOwnPropDescs = Object.getOwnPropertyDescriptors;
var __getOwnPropSymbols = Object.getOwnPropertySymbols;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __propIsEnum = Object.prototype.propertyIsEnumerable;
var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
var __spreadValues = (a, b) => {
for (var prop in b || (b = {}))
if (__hasOwnProp.call(b, prop))
__defNormalProp(a, prop, b[prop]);
if (__getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(b)) {
if (__propIsEnum.call(b, prop))
__defNormalProp(a, prop, b[prop]);
}
return a;
};
var __spreadProps = (a, b) => __defProps(a, __getOwnPropDescs(b));
var __objRest = (source, exclude) => {
var target = {};
for (var prop in source)
if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
target[prop] = source[prop];
if (source != null && __getOwnPropSymbols)
for (var prop of __getOwnPropSymbols(source)) {
if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
target[prop] = source[prop];
}
return target;
};
(function(global2, factory) {
typeof exports === "object" && typeof module !== "undefined" ? factory(exports) : typeof define === "function" && define.amd ? define(["exports"], factory) : (global2 = typeof globalThis !== "undefined" ? globalThis : global2 || self, factory(global2.OCS = {}));
})(this, function(exports2) {
"use strict";
var commonjsGlobal = typeof globalThis !== "undefined" ? globalThis : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : typeof self !== "undefined" ? self : {};
function commonjsRequire(path) {
throw new Error('Could not dynamically require "' + path + '". Please configure the dynamicRequireTargets or/and ignoreDynamicRequires option of @rollup/plugin-commonjs appropriately for this require call to work.');
}
function apply$2(func, thisArg, args) {
switch (args.length) {
case 0:
return func.call(thisArg);
case 1:
return func.call(thisArg, args[0]);
case 2:
return func.call(thisArg, args[0], args[1]);
case 3:
return func.call(thisArg, args[0], args[1], args[2]);
}
return func.apply(thisArg, args);
}
var _apply = apply$2;
function identity$2(value) {
return value;
}
var identity_1 = identity$2;
var apply$1 = _apply;
var nativeMax$1 = Math.max;
function overRest$1(func, start2, transform) {
start2 = nativeMax$1(start2 === void 0 ? func.length - 1 : start2, 0);
return function() {
var args = arguments, index2 = -1, length = nativeMax$1(args.length - start2, 0), array = Array(length);
while (++index2 < length) {
array[index2] = args[start2 + index2];
}
index2 = -1;
var otherArgs = Array(start2 + 1);
while (++index2 < start2) {
otherArgs[index2] = args[index2];
}
otherArgs[start2] = transform(array);
return apply$1(func, this, otherArgs);
};
}
var _overRest = overRest$1;
function constant$1(value) {
return function() {
return value;
};
}
var constant_1 = constant$1;
var freeGlobal$1 = typeof commonjsGlobal == "object" && commonjsGlobal && commonjsGlobal.Object === Object && commonjsGlobal;
var _freeGlobal = freeGlobal$1;
var freeGlobal = _freeGlobal;
var freeSelf = typeof self == "object" && self && self.Object === Object && self;
var root$9 = freeGlobal || freeSelf || Function("return this")();
var _root = root$9;
var root$8 = _root;
var Symbol$4 = root$8.Symbol;
var _Symbol = Symbol$4;
var Symbol$3 = _Symbol;
var objectProto$d = Object.prototype;
var hasOwnProperty$b = objectProto$d.hasOwnProperty;
var nativeObjectToString$1 = objectProto$d.toString;
var symToStringTag$1 = Symbol$3 ? Symbol$3.toStringTag : void 0;
function getRawTag$1(value) {
var isOwn = hasOwnProperty$b.call(value, symToStringTag$1), tag = value[symToStringTag$1];
try {
value[symToStringTag$1] = void 0;
var unmasked = true;
} catch (e) {
}
var result = nativeObjectToString$1.call(value);
if (unmasked) {
if (isOwn) {
value[symToStringTag$1] = tag;
} else {
delete value[symToStringTag$1];
}
}
return result;
}
var _getRawTag = getRawTag$1;
var objectProto$c = Object.prototype;
var nativeObjectToString = objectProto$c.toString;
function objectToString$2(value) {
return nativeObjectToString.call(value);
}
var _objectToString = objectToString$2;
var Symbol$2 = _Symbol, getRawTag = _getRawTag, objectToString$1 = _objectToString;
var nullTag = "[object Null]", undefinedTag = "[object Undefined]";
var symToStringTag = Symbol$2 ? Symbol$2.toStringTag : void 0;
function baseGetTag$6(value) {
if (value == null) {
return value === void 0 ? undefinedTag : nullTag;
}
return symToStringTag && symToStringTag in Object(value) ? getRawTag(value) : objectToString$1(value);
}
var _baseGetTag = baseGetTag$6;
function isObject$c(value) {
var type = typeof value;
return value != null && (type == "object" || type == "function");
}
var isObject_1 = isObject$c;
var baseGetTag$5 = _baseGetTag, isObject$b = isObject_1;
var asyncTag = "[object AsyncFunction]", funcTag$2 = "[object Function]", genTag$1 = "[object GeneratorFunction]", proxyTag = "[object Proxy]";
function isFunction$4(value) {
if (!isObject$b(value)) {
return false;
}
var tag = baseGetTag$5(value);
return tag == funcTag$2 || tag == genTag$1 || tag == asyncTag || tag == proxyTag;
}
var isFunction_1 = isFunction$4;
var root$7 = _root;
var coreJsData$1 = root$7["__core-js_shared__"];
var _coreJsData = coreJsData$1;
var coreJsData = _coreJsData;
var maskSrcKey = function() {
var uid2 = /[^.]+$/.exec(coreJsData && coreJsData.keys && coreJsData.keys.IE_PROTO || "");
return uid2 ? "Symbol(src)_1." + uid2 : "";
}();
function isMasked$1(func) {
return !!maskSrcKey && maskSrcKey in func;
}
var _isMasked = isMasked$1;
var funcProto$2 = Function.prototype;
var funcToString$2 = funcProto$2.toString;
function toSource$2(func) {
if (func != null) {
try {
return funcToString$2.call(func);
} catch (e) {
}
try {
return func + "";
} catch (e) {
}
}
return "";
}
var _toSource = toSource$2;
var isFunction$3 = isFunction_1, isMasked = _isMasked, isObject$a = isObject_1, toSource$1 = _toSource;
var reRegExpChar = /[\\^$.*+?()[\]{}|]/g;
var reIsHostCtor = /^\[object .+?Constructor\]$/;
var funcProto$1 = Function.prototype, objectProto$b = Object.prototype;
var funcToString$1 = funcProto$1.toString;
var hasOwnProperty$a = objectProto$b.hasOwnProperty;
var reIsNative = RegExp("^" + funcToString$1.call(hasOwnProperty$a).replace(reRegExpChar, "\\{{SCRIPT_SLOT}}").replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, "$1.*?") + "$");
function baseIsNative$1(value) {
if (!isObject$a(value) || isMasked(value)) {
return false;
}
var pattern = isFunction$3(value) ? reIsNative : reIsHostCtor;
return pattern.test(toSource$1(value));
}
var _baseIsNative = baseIsNative$1;
function getValue$1(object, key) {
return object == null ? void 0 : object[key];
}
var _getValue = getValue$1;
var baseIsNative = _baseIsNative, getValue = _getValue;
function getNative$7(object, key) {
var value = getValue(object, key);
return baseIsNative(value) ? value : void 0;
}
var _getNative = getNative$7;
var getNative$6 = _getNative;
var defineProperty$2 = function() {
try {
var func = getNative$6(Object, "defineProperty");
func({}, "", {});
return func;
} catch (e) {
}
}();
var _defineProperty = defineProperty$2;
var constant = constant_1, defineProperty$1 = _defineProperty, identity$1 = identity_1;
var baseSetToString$1 = !defineProperty$1 ? identity$1 : function(func, string) {
return defineProperty$1(func, "toString", {
"configurable": true,
"enumerable": false,
"value": constant(string),
"writable": true
});
};
var _baseSetToString = baseSetToString$1;
var HOT_COUNT = 800, HOT_SPAN = 16;
var nativeNow = Date.now;
function shortOut$1(func) {
var count = 0, lastCalled = 0;
return function() {
var stamp = nativeNow(), remaining = HOT_SPAN - (stamp - lastCalled);
lastCalled = stamp;
if (remaining > 0) {
if (++count >= HOT_COUNT) {
return arguments[0];
}
} else {
count = 0;
}
return func.apply(void 0, arguments);
};
}
var _shortOut = shortOut$1;
var baseSetToString = _baseSetToString, shortOut = _shortOut;
var setToString$1 = shortOut(baseSetToString);
var _setToString = setToString$1;
var identity = identity_1, overRest = _overRest, setToString = _setToString;
function baseRest$2(func, start2) {
return setToString(overRest(func, start2, identity), func + "");
}
var _baseRest = baseRest$2;
function listCacheClear$1() {
this.__data__ = [];
this.size = 0;
}
var _listCacheClear = listCacheClear$1;
function eq$4(value, other) {
return value === other || value !== value && other !== other;
}
var eq_1 = eq$4;
var eq$3 = eq_1;
function assocIndexOf$4(array, key) {
var length = array.length;
while (length--) {
if (eq$3(array[length][0], key)) {
return length;
}
}
return -1;
}
var _assocIndexOf = assocIndexOf$4;
var assocIndexOf$3 = _assocIndexOf;
var arrayProto = Array.prototype;
var splice = arrayProto.splice;
function listCacheDelete$1(key) {
var data = this.__data__, index2 = assocIndexOf$3(data, key);
if (index2 < 0) {
return false;
}
var lastIndex = data.length - 1;
if (index2 == lastIndex) {
data.pop();
} else {
splice.call(data, index2, 1);
}
--this.size;
return true;
}
var _listCacheDelete = listCacheDelete$1;
var assocIndexOf$2 = _assocIndexOf;
function listCacheGet$1(key) {
var data = this.__data__, index2 = assocIndexOf$2(data, key);
return index2 < 0 ? void 0 : data[index2][1];
}
var _listCacheGet = listCacheGet$1;
var assocIndexOf$1 = _assocIndexOf;
function listCacheHas$1(key) {
return assocIndexOf$1(this.__data__, key) > -1;
}
var _listCacheHas = listCacheHas$1;
var assocIndexOf = _assocIndexOf;
function listCacheSet$1(key, value) {
var data = this.__data__, index2 = assocIndexOf(data, key);
if (index2 < 0) {
++this.size;
data.push([key, value]);
} else {
data[index2][1] = value;
}
return this;
}
var _listCacheSet = listCacheSet$1;
var listCacheClear = _listCacheClear, listCacheDelete = _listCacheDelete, listCacheGet = _listCacheGet, listCacheHas = _listCacheHas, listCacheSet = _listCacheSet;
function ListCache$4(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry = entries[index2];
this.set(entry[0], entry[1]);
}
}
ListCache$4.prototype.clear = listCacheClear;
ListCache$4.prototype["delete"] = listCacheDelete;
ListCache$4.prototype.get = listCacheGet;
ListCache$4.prototype.has = listCacheHas;
ListCache$4.prototype.set = listCacheSet;
var _ListCache = ListCache$4;
var ListCache$3 = _ListCache;
function stackClear$1() {
this.__data__ = new ListCache$3();
this.size = 0;
}
var _stackClear = stackClear$1;
function stackDelete$1(key) {
var data = this.__data__, result = data["delete"](key);
this.size = data.size;
return result;
}
var _stackDelete = stackDelete$1;
function stackGet$1(key) {
return this.__data__.get(key);
}
var _stackGet = stackGet$1;
function stackHas$1(key) {
return this.__data__.has(key);
}
var _stackHas = stackHas$1;
var getNative$5 = _getNative, root$6 = _root;
var Map$4 = getNative$5(root$6, "Map");
var _Map = Map$4;
var getNative$4 = _getNative;
var nativeCreate$4 = getNative$4(Object, "create");
var _nativeCreate = nativeCreate$4;
var nativeCreate$3 = _nativeCreate;
function hashClear$1() {
this.__data__ = nativeCreate$3 ? nativeCreate$3(null) : {};
this.size = 0;
}
var _hashClear = hashClear$1;
function hashDelete$1(key) {
var result = this.has(key) && delete this.__data__[key];
this.size -= result ? 1 : 0;
return result;
}
var _hashDelete = hashDelete$1;
var nativeCreate$2 = _nativeCreate;
var HASH_UNDEFINED$1 = "__lodash_hash_undefined__";
var objectProto$a = Object.prototype;
var hasOwnProperty$9 = objectProto$a.hasOwnProperty;
function hashGet$1(key) {
var data = this.__data__;
if (nativeCreate$2) {
var result = data[key];
return result === HASH_UNDEFINED$1 ? void 0 : result;
}
return hasOwnProperty$9.call(data, key) ? data[key] : void 0;
}
var _hashGet = hashGet$1;
var nativeCreate$1 = _nativeCreate;
var objectProto$9 = Object.prototype;
var hasOwnProperty$8 = objectProto$9.hasOwnProperty;
function hashHas$1(key) {
var data = this.__data__;
return nativeCreate$1 ? data[key] !== void 0 : hasOwnProperty$8.call(data, key);
}
var _hashHas = hashHas$1;
var nativeCreate = _nativeCreate;
var HASH_UNDEFINED = "__lodash_hash_undefined__";
function hashSet$1(key, value) {
var data = this.__data__;
this.size += this.has(key) ? 0 : 1;
data[key] = nativeCreate && value === void 0 ? HASH_UNDEFINED : value;
return this;
}
var _hashSet = hashSet$1;
var hashClear = _hashClear, hashDelete = _hashDelete, hashGet = _hashGet, hashHas = _hashHas, hashSet = _hashSet;
function Hash$1(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry = entries[index2];
this.set(entry[0], entry[1]);
}
}
Hash$1.prototype.clear = hashClear;
Hash$1.prototype["delete"] = hashDelete;
Hash$1.prototype.get = hashGet;
Hash$1.prototype.has = hashHas;
Hash$1.prototype.set = hashSet;
var _Hash = Hash$1;
var Hash = _Hash, ListCache$2 = _ListCache, Map$3 = _Map;
function mapCacheClear$1() {
this.size = 0;
this.__data__ = {
"hash": new Hash(),
"map": new (Map$3 || ListCache$2)(),
"string": new Hash()
};
}
var _mapCacheClear = mapCacheClear$1;
function isKeyable$1(value) {
var type = typeof value;
return type == "string" || type == "number" || type == "symbol" || type == "boolean" ? value !== "__proto__" : value === null;
}
var _isKeyable = isKeyable$1;
var isKeyable = _isKeyable;
function getMapData$4(map, key) {
var data = map.__data__;
return isKeyable(key) ? data[typeof key == "string" ? "string" : "hash"] : data.map;
}
var _getMapData = getMapData$4;
var getMapData$3 = _getMapData;
function mapCacheDelete$1(key) {
var result = getMapData$3(this, key)["delete"](key);
this.size -= result ? 1 : 0;
return result;
}
var _mapCacheDelete = mapCacheDelete$1;
var getMapData$2 = _getMapData;
function mapCacheGet$1(key) {
return getMapData$2(this, key).get(key);
}
var _mapCacheGet = mapCacheGet$1;
var getMapData$1 = _getMapData;
function mapCacheHas$1(key) {
return getMapData$1(this, key).has(key);
}
var _mapCacheHas = mapCacheHas$1;
var getMapData = _getMapData;
function mapCacheSet$1(key, value) {
var data = getMapData(this, key), size2 = data.size;
data.set(key, value);
this.size += data.size == size2 ? 0 : 1;
return this;
}
var _mapCacheSet = mapCacheSet$1;
var mapCacheClear = _mapCacheClear, mapCacheDelete = _mapCacheDelete, mapCacheGet = _mapCacheGet, mapCacheHas = _mapCacheHas, mapCacheSet = _mapCacheSet;
function MapCache$1(entries) {
var index2 = -1, length = entries == null ? 0 : entries.length;
this.clear();
while (++index2 < length) {
var entry = entries[index2];
this.set(entry[0], entry[1]);
}
}
MapCache$1.prototype.clear = mapCacheClear;
MapCache$1.prototype["delete"] = mapCacheDelete;
MapCache$1.prototype.get = mapCacheGet;
MapCache$1.prototype.has = mapCacheHas;
MapCache$1.prototype.set = mapCacheSet;
var _MapCache = MapCache$1;
var ListCache$1 = _ListCache, Map$2 = _Map, MapCache = _MapCache;
var LARGE_ARRAY_SIZE = 200;
function stackSet$1(key, value) {
var data = this.__data__;
if (data instanceof ListCache$1) {
var pairs = data.__data__;
if (!Map$2 || pairs.length < LARGE_ARRAY_SIZE - 1) {
pairs.push([key, value]);
this.size = ++data.size;
return this;
}
data = this.__data__ = new MapCache(pairs);
}
data.set(key, value);
this.size = data.size;
return this;
}
var _stackSet = stackSet$1;
var ListCache = _ListCache, stackClear = _stackClear, stackDelete = _stackDelete, stackGet = _stackGet, stackHas = _stackHas, stackSet = _stackSet;
function Stack$2(entries) {
var data = this.__data__ = new ListCache(entries);
this.size = data.size;
}
Stack$2.prototype.clear = stackClear;
Stack$2.prototype["delete"] = stackDelete;
Stack$2.prototype.get = stackGet;
Stack$2.prototype.has = stackHas;
Stack$2.prototype.set = stackSet;
var _Stack = Stack$2;
var defineProperty = _defineProperty;
function baseAssignValue$3(object, key, value) {
if (key == "__proto__" && defineProperty) {
defineProperty(object, key, {
"configurable": true,
"enumerable": true,
"value": value,
"writable": true
});
} else {
object[key] = value;
}
}
var _baseAssignValue = baseAssignValue$3;
var baseAssignValue$2 = _baseAssignValue, eq$2 = eq_1;
function assignMergeValue$2(object, key, value) {
if (value !== void 0 && !eq$2(object[key], value) || value === void 0 && !(key in object)) {
baseAssignValue$2(object, key, value);
}
}
var _assignMergeValue = assignMergeValue$2;
function createBaseFor$1(fromRight) {
return function(object, iteratee, keysFunc) {
var index2 = -1, iterable = Object(object), props = keysFunc(object), length = props.length;
while (length--) {
var key = props[fromRight ? length : ++index2];
if (iteratee(iterable[key], key, iterable) === false) {
break;
}
}
return object;
};
}
var _createBaseFor = createBaseFor$1;
var createBaseFor = _createBaseFor;
var baseFor$1 = createBaseFor();
var _baseFor = baseFor$1;
var _cloneBuffer = { exports: {} };
(function(module2, exports3) {
var root2 = _root;
var freeExports = exports3 && !exports3.nodeType && exports3;
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
var moduleExports = freeModule && freeModule.exports === freeExports;
var Buffer2 = moduleExports ? root2.Buffer : void 0, allocUnsafe = Buffer2 ? Buffer2.allocUnsafe : void 0;
function cloneBuffer2(buffer, isDeep) {
if (isDeep) {
return buffer.slice();
}
var length = buffer.length, result = allocUnsafe ? allocUnsafe(length) : new buffer.constructor(length);
buffer.copy(result);
return result;
}
module2.exports = cloneBuffer2;
})(_cloneBuffer, _cloneBuffer.exports);
var root$5 = _root;
var Uint8Array$2 = root$5.Uint8Array;
var _Uint8Array = Uint8Array$2;
var Uint8Array$1 = _Uint8Array;
function cloneArrayBuffer$3(arrayBuffer) {
var result = new arrayBuffer.constructor(arrayBuffer.byteLength);
new Uint8Array$1(result).set(new Uint8Array$1(arrayBuffer));
return result;
}
var _cloneArrayBuffer = cloneArrayBuffer$3;
var cloneArrayBuffer$2 = _cloneArrayBuffer;
function cloneTypedArray$2(typedArray, isDeep) {
var buffer = isDeep ? cloneArrayBuffer$2(typedArray.buffer) : typedArray.buffer;
return new typedArray.constructor(buffer, typedArray.byteOffset, typedArray.length);
}
var _cloneTypedArray = cloneTypedArray$2;
function copyArray$2(source, array) {
var index2 = -1, length = source.length;
array || (array = Array(length));
while (++index2 < length) {
array[index2] = source[index2];
}
return array;
}
var _copyArray = copyArray$2;
var isObject$9 = isObject_1;
var objectCreate = Object.create;
var baseCreate$1 = function() {
function object() {
}
return function(proto) {
if (!isObject$9(proto)) {
return {};
}
if (objectCreate) {
return objectCreate(proto);
}
object.prototype = proto;
var result = new object();
object.prototype = void 0;
return result;
};
}();
var _baseCreate = baseCreate$1;
function overArg$2(func, transform) {
return function(arg) {
return func(transform(arg));
};
}
var _overArg = overArg$2;
var overArg$1 = _overArg;
var getPrototype$3 = overArg$1(Object.getPrototypeOf, Object);
var _getPrototype = getPrototype$3;
var objectProto$8 = Object.prototype;
function isPrototype$3(value) {
var Ctor = value && value.constructor, proto = typeof Ctor == "function" && Ctor.prototype || objectProto$8;
return value === proto;
}
var _isPrototype = isPrototype$3;
var baseCreate = _baseCreate, getPrototype$2 = _getPrototype, isPrototype$2 = _isPrototype;
function initCloneObject$2(object) {
return typeof object.constructor == "function" && !isPrototype$2(object) ? baseCreate(getPrototype$2(object)) : {};
}
var _initCloneObject = initCloneObject$2;
function isObjectLike$8(value) {
return value != null && typeof value == "object";
}
var isObjectLike_1 = isObjectLike$8;
var baseGetTag$4 = _baseGetTag, isObjectLike$7 = isObjectLike_1;
var argsTag$2 = "[object Arguments]";
function baseIsArguments$1(value) {
return isObjectLike$7(value) && baseGetTag$4(value) == argsTag$2;
}
var _baseIsArguments = baseIsArguments$1;
var baseIsArguments = _baseIsArguments, isObjectLike$6 = isObjectLike_1;
var objectProto$7 = Object.prototype;
var hasOwnProperty$7 = objectProto$7.hasOwnProperty;
var propertyIsEnumerable$1 = objectProto$7.propertyIsEnumerable;
var isArguments$2 = baseIsArguments(function() {
return arguments;
}()) ? baseIsArguments : function(value) {
return isObjectLike$6(value) && hasOwnProperty$7.call(value, "callee") && !propertyIsEnumerable$1.call(value, "callee");
};
var isArguments_1 = isArguments$2;
var isArray$5 = Array.isArray;
var isArray_1 = isArray$5;
var MAX_SAFE_INTEGER$1 = 9007199254740991;
function isLength$2(value) {
return typeof value == "number" && value > -1 && value % 1 == 0 && value <= MAX_SAFE_INTEGER$1;
}
var isLength_1 = isLength$2;
var isFunction$2 = isFunction_1, isLength$1 = isLength_1;
function isArrayLike$4(value) {
return value != null && isLength$1(value.length) && !isFunction$2(value);
}
var isArrayLike_1 = isArrayLike$4;
var isArrayLike$3 = isArrayLike_1, isObjectLike$5 = isObjectLike_1;
function isArrayLikeObject$1(value) {
return isObjectLike$5(value) && isArrayLike$3(value);
}
var isArrayLikeObject_1 = isArrayLikeObject$1;
var isBuffer$4 = { exports: {} };
function stubFalse() {
return false;
}
var stubFalse_1 = stubFalse;
(function(module2, exports3) {
var root2 = _root, stubFalse2 = stubFalse_1;
var freeExports = exports3 && !exports3.nodeType && exports3;
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
var moduleExports = freeModule && freeModule.exports === freeExports;
var Buffer2 = moduleExports ? root2.Buffer : void 0;
var nativeIsBuffer = Buffer2 ? Buffer2.isBuffer : void 0;
var isBuffer2 = nativeIsBuffer || stubFalse2;
module2.exports = isBuffer2;
})(isBuffer$4, isBuffer$4.exports);
var baseGetTag$3 = _baseGetTag, getPrototype$1 = _getPrototype, isObjectLike$4 = isObjectLike_1;
var objectTag$3 = "[object Object]";
var funcProto = Function.prototype, objectProto$6 = Object.prototype;
var funcToString = funcProto.toString;
var hasOwnProperty$6 = objectProto$6.hasOwnProperty;
var objectCtorString = funcToString.call(Object);
function isPlainObject$2(value) {
if (!isObjectLike$4(value) || baseGetTag$3(value) != objectTag$3) {
return false;
}
var proto = getPrototype$1(value);
if (proto === null) {
return true;
}
var Ctor = hasOwnProperty$6.call(proto, "constructor") && proto.constructor;
return typeof Ctor == "function" && Ctor instanceof Ctor && funcToString.call(Ctor) == objectCtorString;
}
var isPlainObject_1 = isPlainObject$2;
var baseGetTag$2 = _baseGetTag, isLength = isLength_1, isObjectLike$3 = isObjectLike_1;
var argsTag$1 = "[object Arguments]", arrayTag$1 = "[object Array]", boolTag$2 = "[object Boolean]", dateTag$2 = "[object Date]", errorTag$1 = "[object Error]", funcTag$1 = "[object Function]", mapTag$4 = "[object Map]", numberTag$2 = "[object Number]", objectTag$2 = "[object Object]", regexpTag$2 = "[object RegExp]", setTag$4 = "[object Set]", stringTag$2 = "[object String]", weakMapTag$2 = "[object WeakMap]";
var arrayBufferTag$2 = "[object ArrayBuffer]", dataViewTag$3 = "[object DataView]", float32Tag$2 = "[object Float32Array]", float64Tag$2 = "[object Float64Array]", int8Tag$2 = "[object Int8Array]", int16Tag$2 = "[object Int16Array]", int32Tag$2 = "[object Int32Array]", uint8Tag$2 = "[object Uint8Array]", uint8ClampedTag$2 = "[object Uint8ClampedArray]", uint16Tag$2 = "[object Uint16Array]", uint32Tag$2 = "[object Uint32Array]";
var typedArrayTags = {};
typedArrayTags[float32Tag$2] = typedArrayTags[float64Tag$2] = typedArrayTags[int8Tag$2] = typedArrayTags[int16Tag$2] = typedArrayTags[int32Tag$2] = typedArrayTags[uint8Tag$2] = typedArrayTags[uint8ClampedTag$2] = typedArrayTags[uint16Tag$2] = typedArrayTags[uint32Tag$2] = true;
typedArrayTags[argsTag$1] = typedArrayTags[arrayTag$1] = typedArrayTags[arrayBufferTag$2] = typedArrayTags[boolTag$2] = typedArrayTags[dataViewTag$3] = typedArrayTags[dateTag$2] = typedArrayTags[errorTag$1] = typedArrayTags[funcTag$1] = typedArrayTags[mapTag$4] = typedArrayTags[numberTag$2] = typedArrayTags[objectTag$2] = typedArrayTags[regexpTag$2] = typedArrayTags[setTag$4] = typedArrayTags[stringTag$2] = typedArrayTags[weakMapTag$2] = false;
function baseIsTypedArray$1(value) {
return isObjectLike$3(value) && isLength(value.length) && !!typedArrayTags[baseGetTag$2(value)];
}
var _baseIsTypedArray = baseIsTypedArray$1;
function baseUnary$3(func) {
return function(value) {
return func(value);
};
}
var _baseUnary = baseUnary$3;
var _nodeUtil = { exports: {} };
(function(module2, exports3) {
var freeGlobal2 = _freeGlobal;
var freeExports = exports3 && !exports3.nodeType && exports3;
var freeModule = freeExports && true && module2 && !module2.nodeType && module2;
var moduleExports = freeModule && freeModule.exports === freeExports;
var freeProcess = moduleExports && freeGlobal2.process;
var nodeUtil2 = function() {
try {
var types2 = freeModule && freeModule.require && freeModule.require("util").types;
if (types2) {
return types2;
}
return freeProcess && freeProcess.binding && freeProcess.binding("util");
} catch (e) {
}
}();
module2.exports = nodeUtil2;
})(_nodeUtil, _nodeUtil.exports);
var baseIsTypedArray = _baseIsTypedArray, baseUnary$2 = _baseUnary, nodeUtil$2 = _nodeUtil.exports;
var nodeIsTypedArray = nodeUtil$2 && nodeUtil$2.isTypedArray;
var isTypedArray$2 = nodeIsTypedArray ? baseUnary$2(nodeIsTypedArray) : baseIsTypedArray;
var isTypedArray_1 = isTypedArray$2;
function safeGet$2(object, key) {
if (key === "constructor" && typeof object[key] === "function") {
return;
}
if (key == "__proto__") {
return;
}
return object[key];
}
var _safeGet = safeGet$2;
var baseAssignValue$1 = _baseAssignValue, eq$1 = eq_1;
var objectProto$5 = Object.prototype;
var hasOwnProperty$5 = objectProto$5.hasOwnProperty;
function assignValue$2(object, key, value) {
var objValue = object[key];
if (!(hasOwnProperty$5.call(object, key) && eq$1(objValue, value)) || value === void 0 && !(key in object)) {
baseAssignValue$1(object, key, value);
}
}
var _assignValue = assignValue$2;
var assignValue$1 = _assignValue, baseAssignValue = _baseAssignValue;
function copyObject$5(source, props, object, customizer) {
var isNew = !object;
object || (object = {});
var index2 = -1, length = props.length;
while (++index2 < length) {
var key = props[index2];
var newValue = customizer ? customizer(object[key], source[key], key, object, source) : void 0;
if (newValue === void 0) {
newValue = source[key];
}
if (isNew) {
baseAssignValue(object, key, newValue);
} else {
assignValue$1(object, key, newValue);
}
}
return object;
}
var _copyObject = copyObject$5;
function baseTimes$1(n, iteratee) {
var index2 = -1, result = Array(n);
while (++index2 < n) {
result[index2] = iteratee(index2);
}
return result;
}
var _baseTimes = baseTimes$1;
var MAX_SAFE_INTEGER = 9007199254740991;
var reIsUint = /^(?:0|[1-9]\d*)$/;
function isIndex$2(value, length) {
var type = typeof value;
length = length == null ? MAX_SAFE_INTEGER : length;
return !!length && (type == "number" || type != "symbol" && reIsUint.test(value)) && (value > -1 && value % 1 == 0 && value < length);
}
var _isIndex = isIndex$2;
var baseTimes = _baseTimes, isArguments$1 = isArguments_1, isArray$4 = isArray_1, isBuffer$3 = isBuffer$4.exports, isIndex$1 = _isIndex, isTypedArray$1 = isTypedArray_1;
var objectProto$4 = Object.prototype;
var hasOwnProperty$4 = objectProto$4.hasOwnProperty;
function arrayLikeKeys$2(value, inherited) {
var isArr = isArray$4(value), isArg = !isArr && isArguments$1(value), isBuff = !isArr && !isArg && isBuffer$3(value), isType = !isArr && !isArg && !isBuff && isTypedArray$1(value), skipIndexes = isArr || isArg || isBuff || isType, result = skipIndexes ? baseTimes(value.length, String) : [], length = result.length;
for (var key in value) {
if ((inherited || hasOwnProperty$4.call(value, key)) && !(skipIndexes && (key == "length" || isBuff && (key == "offset" || key == "parent") || isType && (key == "buffer" || key == "byteLength" || key == "byteOffset") || isIndex$1(key, length)))) {
result.push(key);
}
}
return result;
}
var _arrayLikeKeys = arrayLikeKeys$2;
function nativeKeysIn$1(object) {
var result = [];
if (object != null) {
for (var key in Object(object)) {
result.push(key);
}
}
return result;
}
var _nativeKeysIn = nativeKeysIn$1;
var isObject$8 = isObject_1, isPrototype$1 = _isPrototype, nativeKeysIn = _nativeKeysIn;
var objectProto$3 = Object.prototype;
var hasOwnProperty$3 = objectProto$3.hasOwnProperty;
function baseKeysIn$1(object) {
if (!isObject$8(object)) {
return nativeKeysIn(object);
}
var isProto = isPrototype$1(object), result = [];
for (var key in object) {
if (!(key == "constructor" && (isProto || !hasOwnProperty$3.call(object, key)))) {
result.push(key);
}
}
return result;
}
var _baseKeysIn = baseKeysIn$1;
var arrayLikeKeys$1 = _arrayLikeKeys, baseKeysIn = _baseKeysIn, isArrayLike$2 = isArrayLike_1;
function keysIn$5(object) {
return isArrayLike$2(object) ? arrayLikeKeys$1(object, true) : baseKeysIn(object);
}
var keysIn_1 = keysIn$5;
var copyObject$4 = _copyObject, keysIn$4 = keysIn_1;
function toPlainObject$1(value) {
return copyObject$4(value, keysIn$4(value));
}
var toPlainObject_1 = toPlainObject$1;
var assignMergeValue$1 = _assignMergeValue, cloneBuffer$1 = _cloneBuffer.exports, cloneTypedArray$1 = _cloneTypedArray, copyArray$1 = _copyArray, initCloneObject$1 = _initCloneObject, isArguments = isArguments_1, isArray$3 = isArray_1, isArrayLikeObject = isArrayLikeObject_1, isBuffer$2 = isBuffer$4.exports, isFunction$1 = isFunction_1, isObject$7 = isObject_1, isPlainObject$1 = isPlainObject_1, isTypedArray = isTypedArray_1, safeGet$1 = _safeGet, toPlainObject = toPlainObject_1;
function baseMergeDeep$1(object, source, key, srcIndex, mergeFunc, customizer, stack) {
var objValue = safeGet$1(object, key), srcValue = safeGet$1(source, key), stacked = stack.get(srcValue);
if (stacked) {
assignMergeValue$1(object, key, stacked);
return;
}
var newValue = customizer ? customizer(objValue, srcValue, key + "", object, source, stack) : void 0;
var isCommon = newValue === void 0;
if (isCommon) {
var isArr = isArray$3(srcValue), isBuff = !isArr && isBuffer$2(srcValue), isTyped = !isArr && !isBuff && isTypedArray(srcValue);
newValue = srcValue;
if (isArr || isBuff || isTyped) {
if (isArray$3(objValue)) {
newValue = objValue;
} else if (isArrayLikeObject(objValue)) {
newValue = copyArray$1(objValue);
} else if (isBuff) {
isCommon = false;
newValue = cloneBuffer$1(srcValue, true);
} else if (isTyped) {
isCommon = false;
newValue = cloneTypedArray$1(srcValue, true);
} else {
newValue = [];
}
} else if (isPlainObject$1(srcValue) || isArguments(srcValue)) {
newValue = objValue;
if (isArguments(objValue)) {
newValue = toPlainObject(objValue);
} else if (!isObject$7(objValue) || isFunction$1(objValue)) {
newValue = initCloneObject$1(srcValue);
}
} else {
isCommon = false;
}
}
if (isCommon) {
stack.set(srcValue, newValue);
mergeFunc(newValue, srcValue, srcIndex, customizer, stack);
stack["delete"](srcValue);
}
assignMergeValue$1(object, key, newValue);
}
var _baseMergeDeep = baseMergeDeep$1;
var Stack$1 = _Stack, assignMergeValue = _assignMergeValue, baseFor = _baseFor, baseMergeDeep = _baseMergeDeep, isObject$6 = isObject_1, keysIn$3 = keysIn_1, safeGet = _safeGet;
function baseMerge$2(object, source, srcIndex, customizer, stack) {
if (object === source) {
return;
}
baseFor(source, function(srcValue, key) {
stack || (stack = new Stack$1());
if (isObject$6(srcValue)) {
baseMergeDeep(object, source, key, srcIndex, baseMerge$2, customizer, stack);
} else {
var newValue = customizer ? customizer(safeGet(object, key), srcValue, key + "", object, source, stack) : void 0;
if (newValue === void 0) {
newValue = srcValue;
}
assignMergeValue(object, key, newValue);
}
}, keysIn$3);
}
var _baseMerge = baseMerge$2;
var baseMerge$1 = _baseMerge, isObject$5 = isObject_1;
function customDefaultsMerge$1(objValue, srcValue, key, object, source, stack) {
if (isObject$5(objValue) && isObject$5(srcValue)) {
stack.set(srcValue, objValue);
baseMerge$1(objValue, srcValue, void 0, customDefaultsMerge$1, stack);
stack["delete"](srcValue);
}
return objValue;
}
var _customDefaultsMerge = customDefaultsMerge$1;
var eq = eq_1, isArrayLike$1 = isArrayLike_1, isIndex = _isIndex, isObject$4 = isObject_1;
function isIterateeCall$1(value, index2, object) {
if (!isObject$4(object)) {
return false;
}
var type = typeof index2;
if (type == "number" ? isArrayLike$1(object) && isIndex(index2, object.length) : type == "string" && index2 in object) {
return eq(object[index2], value);
}
return false;
}
var _isIterateeCall = isIterateeCall$1;
var baseRest$1 = _baseRest, isIterateeCall = _isIterateeCall;
function createAssigner$1(assigner) {
return baseRest$1(function(object, sources) {
var index2 = -1, length = sources.length, customizer = length > 1 ? sources[length - 1] : void 0, guard = length > 2 ? sources[2] : void 0;
customizer = assigner.length > 3 && typeof customizer == "function" ? (length--, customizer) : void 0;
if (guard && isIterateeCall(sources[0], sources[1], guard)) {
customizer = length < 3 ? void 0 : customizer;
length = 1;
}
object = Object(object);
while (++index2 < length) {
var source = sources[index2];
if (source) {
assigner(object, source, index2, customizer);
}
}
return object;
});
}
var _createAssigner = createAssigner$1;
var baseMerge = _baseMerge, createAssigner = _createAssigner;
var mergeWith$1 = createAssigner(function(object, source, srcIndex, customizer) {
baseMerge(object, source, srcIndex, customizer);
});
var mergeWith_1 = mergeWith$1;
var apply = _apply, baseRest = _baseRest, customDefaultsMerge = _customDefaultsMerge, mergeWith = mergeWith_1;
var defaultsDeep = baseRest(function(args) {
args.push(void 0, customDefaultsMerge);
return apply(mergeWith, void 0, args);
});
var defaultsDeep_1 = defaultsDeep;
function makeMap(str, expectsLowerCase) {
const map = /* @__PURE__ */ Object.create(null);
const list = str.split(",");
for (let i = 0; i < list.length; i++) {
map[list[i]] = true;
}
return expectsLowerCase ? (val) => !!map[val.toLowerCase()] : (val) => !!map[val];
}
const specialBooleanAttrs = `itemscope,allowfullscreen,formnovalidate,ismap,nomodule,novalidate,readonly`;
const isSpecialBooleanAttr = /* @__PURE__ */ makeMap(specialBooleanAttrs);
function includeBooleanAttr(value) {
return !!value || value === "";
}
function normalizeStyle(value) {
if (isArray$2(value)) {
const res = {};
for (let i = 0; i < value.length; i++) {
const item = value[i];
const normalized = isString(item) ? parseStringStyle(item) : normalizeStyle(item);
if (normalized) {
for (const key in normalized) {
res[key] = normalized[key];
}
}
}
return res;
} else if (isString(value)) {
return value;
} else if (isObject$3(value)) {
return value;
}
}
const listDelimiterRE = /;(?![^(]*\))/g;
const propertyDelimiterRE = /:(.+)/;
function parseStringStyle(cssText) {
const ret = {};
cssText.split(listDelimiterRE).forEach((item) => {
if (item) {
const tmp = item.split(propertyDelimiterRE);
tmp.length > 1 && (ret[tmp[0].trim()] = tmp[1].trim());
}
});
return ret;
}
function normalizeClass(value) {
let res = "";
if (isString(value)) {
res = value;
} else if (isArray$2(value)) {
for (let i = 0; i < value.length; i++) {
const normalized = normalizeClass(value[i]);
if (normalized) {
res += normalized + " ";
}
}
} else if (isObject$3(value)) {
for (const name2 in value) {
if (value[name2]) {
res += name2 + " ";
}
}
}
return res.trim();
}
const toDisplayString = (val) => {
return isString(val) ? val : val == null ? "" : isArray$2(val) || isObject$3(val) && (val.toString === objectToString || !isFunction(val.toString)) ? JSON.stringify(val, replacer, 2) : String(val);
};
const replacer = (_key, val) => {
if (val && val.__v_isRef) {
return replacer(_key, val.value);
} else if (isMap$2(val)) {
return {
[`Map(${val.size})`]: [...val.entries()].reduce((entries, [key, val2]) => {
entries[`${key} =>`] = val2;
return entries;
}, {})
};
} else if (isSet$2(val)) {
return {
[`Set(${val.size})`]: [...val.values()]
};
} else if (isObject$3(val) && !isArray$2(val) && !isPlainObject(val)) {
return String(val);
}
return val;
};
const EMPTY_OBJ = {};
const EMPTY_ARR = [];
const NOOP = () => {
};
const NO = () => false;
const onRE = /^on[^a-z]/;
const isOn = (key) => onRE.test(key);
const isModelListener = (key) => key.startsWith("onUpdate:");
const extend = Object.assign;
const remove = (arr, el) => {
const i = arr.indexOf(el);
if (i > -1) {
arr.splice(i, 1);
}
};
const hasOwnProperty$2 = Object.prototype.hasOwnProperty;
const hasOwn = (val, key) => hasOwnProperty$2.call(val, key);
const isArray$2 = Array.isArray;
const isMap$2 = (val) => toTypeString(val) === "[object Map]";
const isSet$2 = (val) => toTypeString(val) === "[object Set]";
const isFunction = (val) => typeof val === "function";
const isString = (val) => typeof val === "string";
const isSymbol$2 = (val) => typeof val === "symbol";
const isObject$3 = (val) => val !== null && typeof val === "object";
const isPromise = (val) => {
return isObject$3(val) && isFunction(val.then) && isFunction(val.catch);
};
const objectToString = Object.prototype.toString;
const toTypeString = (value) => objectToString.call(value);
const toRawType = (value) => {
return toTypeString(value).slice(8, -1);
};
const isPlainObject = (val) => toTypeString(val) === "[object Object]";
const isIntegerKey = (key) => isString(key) && key !== "NaN" && key[0] !== "-" && "" + parseInt(key, 10) === key;
const isReservedProp = /* @__PURE__ */ makeMap(",key,ref,ref_for,ref_key,onVnodeBeforeMount,onVnodeMounted,onVnodeBeforeUpdate,onVnodeUpdated,onVnodeBeforeUnmount,onVnodeUnmounted");
const cacheStringFunction = (fn) => {
const cache = /* @__PURE__ */ Object.create(null);
return (str) => {
const hit = cache[str];
return hit || (cache[str] = fn(str));
};
};
const camelizeRE = /-(\w)/g;
const camelize = cacheStringFunction((str) => {
return str.replace(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
});
const hyphenateRE = /\B([A-Z])/g;
const hyphenate = cacheStringFunction((str) => str.replace(hyphenateRE, "-$1").toLowerCase());
const capitalize = cacheStringFunction((str) => str.charAt(0).toUpperCase() + str.slice(1));
const toHandlerKey = cacheStringFunction((str) => str ? `on${capitalize(str)}` : ``);
const hasChanged = (value, oldValue) => !Object.is(value, oldValue);
const invokeArrayFns = (fns, arg) => {
for (let i = 0; i < fns.length; i++) {
fns[i](arg);
}
};
const def = (obj, key, value) => {
Object.defineProperty(obj, key, {
configurable: true,
enumerable: false,
value
});
};
const toNumber$2 = (val) => {
const n = parseFloat(val);
return isNaN(n) ? val : n;
};
let _globalThis;
const getGlobalThis = () => {
return _globalThis || (_globalThis = typeof globalThis !== "undefined" ? globalThis : typeof self !== "undefined" ? self : typeof window !== "undefined" ? window : typeof global !== "undefined" ? global : {});
};
let activeEffectScope;
class EffectScope {
constructor(detached = false) {
this.active = true;
this.effects = [];
this.cleanups = [];
if (!detached && activeEffectScope) {
this.parent = activeEffectScope;
this.index = (activeEffectScope.scopes || (activeEffectScope.scopes = [])).push(this) - 1;
}
}
run(fn) {
if (this.active) {
try {
activeEffectScope = this;
return fn();
} finally {
activeEffectScope = this.parent;
}
}
}
on() {
activeEffectScope = this;
}
off() {
activeEffectScope = this.parent;
}
stop(fromParent) {
if (this.active) {
let i, l;
for (i = 0, l = this.effects.length; i < l; i++) {
this.effects[i].stop();
}
for (i = 0, l = this.cleanups.length; i < l; i++) {
this.cleanups[i]();
}
if (this.scopes) {
for (i = 0, l = this.scopes.length; i < l; i++) {
this.scopes[i].stop(true);
}
}
if (this.parent && !fromParent) {
const last = this.parent.scopes.pop();
if (last && last !== this) {
this.parent.scopes[this.index] = last;
last.index = this.index;
}
}
this.active = false;
}
}
}
function recordEffectScope(effect, scope = activeEffectScope) {
if (scope && scope.active) {
scope.effects.push(effect);
}
}
const createDep = (effects) => {
const dep = new Set(effects);
dep.w = 0;
dep.n = 0;
return dep;
};
const wasTracked = (dep) => (dep.w & trackOpBit) > 0;
const newTracked = (dep) => (dep.n & trackOpBit) > 0;
const initDepMarkers = ({ deps }) => {
if (deps.length) {
for (let i = 0; i < deps.length; i++) {
deps[i].w |= trackOpBit;
}
}
};
const finalizeDepMarkers = (effect) => {
const { deps } = effect;
if (deps.length) {
let ptr = 0;
for (let i = 0; i < deps.length; i++) {
const dep = deps[i];
if (wasTracked(dep) && !newTracked(dep)) {
dep.delete(effect);
} else {
deps[ptr++] = dep;
}
dep.w &= ~trackOpBit;
dep.n &= ~trackOpBit;
}
deps.length = ptr;
}
};
const targetMap = /* @__PURE__ */ new WeakMap();
let effectTrackDepth = 0;
let trackOpBit = 1;
const maxMarkerBits = 30;
let activeEffect;
const ITERATE_KEY = Symbol("");
const MAP_KEY_ITERATE_KEY = Symbol("");
class ReactiveEffect {
constructor(fn, scheduler = null, scope) {
this.fn = fn;
this.scheduler = scheduler;
this.active = true;
this.deps = [];
this.parent = void 0;
recordEffectScope(this, scope);
}
run() {
if (!this.active) {
return this.fn();
}
let parent = activeEffect;
let lastShouldTrack = shouldTrack;
while (parent) {
if (parent === this) {
return;
}
parent = parent.parent;
}
try {
this.parent = activeEffect;
activeEffect = this;
shouldTrack = true;
trackOpBit = 1 << ++effectTrackDepth;
if (effectTrackDepth <= maxMarkerBits) {
initDepMarkers(this);
} else {
cleanupEffect(this);
}
return this.fn();
} finally {
if (effectTrackDepth <= maxMarkerBits) {
finalizeDepMarkers(this);
}
trackOpBit = 1 << --effectTrackDepth;
activeEffect = this.parent;
shouldTrack = lastShouldTrack;
this.parent = void 0;
}
}
stop() {
if (this.active) {
cleanupEffect(this);
if (this.onStop) {
this.onStop();
}
this.active = false;
}
}
}
function cleanupEffect(effect) {
const { deps } = effect;
if (deps.length) {
for (let i = 0; i < deps.length; i++) {
deps[i].delete(effect);
}
deps.length = 0;
}
}
let shouldTrack = true;
const trackStack = [];
function pauseTracking() {
trackStack.push(shouldTrack);
shouldTrack = false;
}
function resetTracking() {
const last = trackStack.pop();
shouldTrack = last === void 0 ? true : last;
}
function track(target, type, key) {
if (shouldTrack && activeEffect) {
let depsMap = targetMap.get(target);
if (!depsMap) {
targetMap.set(target, depsMap = /* @__PURE__ */ new Map());
}
let dep = depsMap.get(key);
if (!dep) {
depsMap.set(key, dep = createDep());
}
trackEffects(dep);
}
}
function trackEffects(dep, debuggerEventExtraInfo) {
let shouldTrack2 = false;
if (effectTrackDepth <= maxMarkerBits) {
if (!newTracked(dep)) {
dep.n |= trackOpBit;
shouldTrack2 = !wasTracked(dep);
}
} else {
shouldTrack2 = !dep.has(activeEffect);
}
if (shouldTrack2) {
dep.add(activeEffect);
activeEffect.deps.push(dep);
}
}
function trigger(target, type, key, newValue, oldValue, oldTarget) {
const depsMap = targetMap.get(target);
if (!depsMap) {
return;
}
let deps = [];
if (type === "clear") {
deps = [...depsMap.values()];
} else if (key === "length" && isArray$2(target)) {
depsMap.forEach((dep, key2) => {
if (key2 === "length" || key2 >= newValue) {
deps.push(dep);
}
});
} else {
if (key !== void 0) {
deps.push(depsMap.get(key));
}
switch (type) {
case "add":
if (!isArray$2(target)) {
deps.push(depsMap.get(ITERATE_KEY));
if (isMap$2(target)) {
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
}
} else if (isIntegerKey(key)) {
deps.push(depsMap.get("length"));
}
break;
case "delete":
if (!isArray$2(target)) {
deps.push(depsMap.get(ITERATE_KEY));
if (isMap$2(target)) {
deps.push(depsMap.get(MAP_KEY_ITERATE_KEY));
}
}
break;
case "set":
if (isMap$2(target)) {
deps.push(depsMap.get(ITERATE_KEY));
}
break;
}
}
if (deps.length === 1) {
if (deps[0]) {
{
triggerEffects(deps[0]);
}
}
} else {
const effects = [];
for (const dep of deps) {
if (dep) {
effects.push(...dep);
}
}
{
triggerEffects(createDep(effects));
}
}
}
function triggerEffects(dep, debuggerEventExtraInfo) {
for (const effect of isArray$2(dep) ? dep : [...dep]) {
if (effect !== activeEffect || effect.allowRecurse) {
if (effect.scheduler) {
effect.scheduler();
} else {
effect.run();
}
}
}
}
const isNonTrackableKeys = /* @__PURE__ */ makeMap(`__proto__,__v_isRef,__isVue`);
const builtInSymbols = new Set(Object.getOwnPropertyNames(Symbol).map((key) => Symbol[key]).filter(isSymbol$2));
const get = /* @__PURE__ */ createGetter();
const shallowGet = /* @__PURE__ */ createGetter(false, true);
const readonlyGet = /* @__PURE__ */ createGetter(true);
const arrayInstrumentations = /* @__PURE__ */ createArrayInstrumentations();
function createArrayInstrumentations() {
const instrumentations = {};
["includes", "indexOf", "lastIndexOf"].forEach((key) => {
instrumentations[key] = function(...args) {
const arr = toRaw(this);
for (let i = 0, l = this.length; i < l; i++) {
track(arr, "get", i + "");
}
const res = arr[key](...args);
if (res === -1 || res === false) {
return arr[key](...args.map(toRaw));
} else {
return res;
}
};
});
["push", "pop", "shift", "unshift", "splice"].forEach((key) => {
instrumentations[key] = function(...args) {
pauseTracking();
const res = toRaw(this)[key].apply(this, args);
resetTracking();
return res;
};
});
return instrumentations;
}
function createGetter(isReadonly2 = false, shallow = false) {
return function get2(target, key, receiver) {
if (key === "__v_isReactive") {
return !isReadonly2;
} else if (key === "__v_isReadonly") {
return isReadonly2;
} else if (key === "__v_isShallow") {
return shallow;
} else if (key === "__v_raw" && receiver === (isReadonly2 ? shallow ? shallowReadonlyMap : readonlyMap : shallow ? shallowReactiveMap : reactiveMap).get(target)) {
return target;
}
const targetIsArray = isArray$2(target);
if (!isReadonly2 && targetIsArray && hasOwn(arrayInstrumentations, key)) {
return Reflect.get(arrayInstrumentations, key, receiver);
}
const res = Reflect.get(target, key, receiver);
if (isSymbol$2(key) ? builtInSymbols.has(key) : isNonTrackableKeys(key)) {
return res;
}
if (!isReadonly2) {
track(target, "get", key);
}
if (shallow) {
return res;
}
if (isRef(res)) {
const shouldUnwrap = !targetIsArray || !isIntegerKey(key);
return shouldUnwrap ? res.value : res;
}
if (isObject$3(res)) {
return isReadonly2 ? readonly(res) : reactive(res);
}
return res;
};
}
const set = /* @__PURE__ */ createSetter();
const shallowSet = /* @__PURE__ */ createSetter(true);
function createSetter(shallow = false) {
return function set2(target, key, value, receiver) {
let oldValue = target[key];
if (isReadonly(oldValue) && isRef(oldValue) && !isRef(value)) {
return false;
}
if (!shallow && !isReadonly(value)) {
if (!isShallow(value)) {
value = toRaw(value);
oldValue = toRaw(oldValue);
}
if (!isArray$2(target) && isRef(oldValue) && !isRef(value)) {
oldValue.value = value;
return true;
}
}
const hadKey = isArray$2(target) && isIntegerKey(key) ? Number(key) < target.length : hasOwn(target, key);
const result = Reflect.set(target, key, value, receiver);
if (target === toRaw(receiver)) {
if (!hadKey) {
trigger(target, "add", key, value);
} else if (hasChanged(value, oldValue)) {
trigger(target, "set", key, value);
}
}
return result;
};
}
function deleteProperty(target, key) {
const hadKey = hasOwn(target, key);
target[key];
const result = Reflect.deleteProperty(target, key);
if (result && hadKey) {
trigger(target, "delete", key, void 0);
}
return result;
}
function has(target, key) {
const result = Reflect.has(target, key);
if (!isSymbol$2(key) || !builtInSymbols.has(key)) {
track(target, "has", key);
}
return result;
}
function ownKeys(target) {
track(target, "iterate", isArray$2(target) ? "length" : ITERATE_KEY);
return Reflect.ownKeys(target);
}
const mutableHandlers = {
get,
set,
deleteProperty,
has,
ownKeys
};
const readonlyHandlers = {
get: readonlyGet,
set(target, key) {
return true;
},
deleteProperty(target, key) {
return true;
}
};
const shallowReactiveHandlers = /* @__PURE__ */ extend({}, mutableHandlers, {
get: shallowGet,
set: shallowSet
});
const toShallow = (value) => value;
const getProto = (v) => Reflect.getPrototypeOf(v);
function get$1(target, key, isReadonly2 = false, isShallow2 = false) {
target = target["__v_raw"];
const rawTarget = toRaw(target);
const rawKey = toRaw(key);
if (key !== rawKey) {
!isReadonly2 && track(rawTarget, "get", key);
}
!isReadonly2 && track(rawTarget, "get", rawKey);
const { has: has2 } = getProto(rawTarget);
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
if (has2.call(rawTarget, key)) {
return wrap(target.get(key));
} else if (has2.call(rawTarget, rawKey)) {
return wrap(target.get(rawKey));
} else if (target !== rawTarget) {
target.get(key);
}
}
function has$1(key, isReadonly2 = false) {
const target = this["__v_raw"];
const rawTarget = toRaw(target);
const rawKey = toRaw(key);
if (key !== rawKey) {
!isReadonly2 && track(rawTarget, "has", key);
}
!isReadonly2 && track(rawTarget, "has", rawKey);
return key === rawKey ? target.has(key) : target.has(key) || target.has(rawKey);
}
function size(target, isReadonly2 = false) {
target = target["__v_raw"];
!isReadonly2 && track(toRaw(target), "iterate", ITERATE_KEY);
return Reflect.get(target, "size", target);
}
function add(value) {
value = toRaw(value);
const target = toRaw(this);
const proto = getProto(target);
const hadKey = proto.has.call(target, value);
if (!hadKey) {
target.add(value);
trigger(target, "add", value, value);
}
return this;
}
function set$1(key, value) {
value = toRaw(value);
const target = toRaw(this);
const { has: has2, get: get2 } = getProto(target);
let hadKey = has2.call(target, key);
if (!hadKey) {
key = toRaw(key);
hadKey = has2.call(target, key);
}
const oldValue = get2.call(target, key);
target.set(key, value);
if (!hadKey) {
trigger(target, "add", key, value);
} else if (hasChanged(value, oldValue)) {
trigger(target, "set", key, value);
}
return this;
}
function deleteEntry(key) {
const target = toRaw(this);
const { has: has2, get: get2 } = getProto(target);
let hadKey = has2.call(target, key);
if (!hadKey) {
key = toRaw(key);
hadKey = has2.call(target, key);
}
get2 ? get2.call(target, key) : void 0;
const result = target.delete(key);
if (hadKey) {
trigger(target, "delete", key, void 0);
}
return result;
}
function clear() {
const target = toRaw(this);
const hadItems = target.size !== 0;
const result = target.clear();
if (hadItems) {
trigger(target, "clear", void 0, void 0);
}
return result;
}
function createForEach(isReadonly2, isShallow2) {
return function forEach(callback, thisArg) {
const observed = this;
const target = observed["__v_raw"];
const rawTarget = toRaw(target);
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
!isReadonly2 && track(rawTarget, "iterate", ITERATE_KEY);
return target.forEach((value, key) => {
return callback.call(thisArg, wrap(value), wrap(key), observed);
});
};
}
function createIterableMethod(method, isReadonly2, isShallow2) {
return function(...args) {
const target = this["__v_raw"];
const rawTarget = toRaw(target);
const targetIsMap = isMap$2(rawTarget);
const isPair = method === "entries" || method === Symbol.iterator && targetIsMap;
const isKeyOnly = method === "keys" && targetIsMap;
const innerIterator = target[method](...args);
const wrap = isShallow2 ? toShallow : isReadonly2 ? toReadonly : toReactive;
!isReadonly2 && track(rawTarget, "iterate", isKeyOnly ? MAP_KEY_ITERATE_KEY : ITERATE_KEY);
return {
next() {
const { value, done } = innerIterator.next();
return done ? { value, done } : {
value: isPair ? [wrap(value[0]), wrap(value[1])] : wrap(value),
done
};
},
[Symbol.iterator]() {
return this;
}
};
};
}
function createReadonlyMethod(type) {
return function(...args) {
return type === "delete" ? false : this;
};
}
function createInstrumentations() {
const mutableInstrumentations2 = {
get(key) {
return get$1(this, key);
},
get size() {
return size(this);
},
has: has$1,
add,
set: set$1,
delete: deleteEntry,
clear,
forEach: createForEach(false, false)
};
const shallowInstrumentations2 = {
get(key) {
return get$1(this, key, false, true);
},
get size() {
return size(this);
},
has: has$1,
add,
set: set$1,
delete: deleteEntry,
clear,
forEach: createForEach(false, true)
};
const readonlyInstrumentations2 = {
get(key) {
return get$1(this, key, true);
},
get size() {
return size(this, true);
},
has(key) {
return has$1.call(this, key, true);
},
add: createReadonlyMethod("add"),
set: createReadonlyMethod("set"),
delete: createReadonlyMethod("delete"),
clear: createReadonlyMethod("clear"),
forEach: createForEach(true, false)
};
const shallowReadonlyInstrumentations2 = {
get(key) {
return get$1(this, key, true, true);
},
get size() {
return size(this, true);
},
has(key) {
return has$1.call(this, key, true);
},
add: createReadonlyMethod("add"),
set: createReadonlyMethod("set"),
delete: createReadonlyMethod("delete"),
clear: createReadonlyMethod("clear"),
forEach: createForEach(true, true)
};
const iteratorMethods = ["keys", "values", "entries", Symbol.iterator];
iteratorMethods.forEach((method) => {
mutableInstrumentations2[method] = createIterableMethod(method, false, false);
readonlyInstrumentations2[method] = createIterableMethod(method, true, false);
shallowInstrumentations2[method] = createIterableMethod(method, false, true);
shallowReadonlyInstrumentations2[method] = createIterableMethod(method, true, true);
});
return [
mutableInstrumentations2,
readonlyInstrumentations2,
shallowInstrumentations2,
shallowReadonlyInstrumentations2
];
}
const [mutableInstrumentations, readonlyInstrumentations, shallowInstrumentations, shallowReadonlyInstrumentations] = /* @__PURE__ */ createInstrumentations();
function createInstrumentationGetter(isReadonly2, shallow) {
const instrumentations = shallow ? isReadonly2 ? shallowReadonlyInstrumentations : shallowInstrumentations : isReadonly2 ? readonlyInstrumentations : mutableInstrumentations;
return (target, key, receiver) => {
if (key === "__v_isReactive") {
return !isReadonly2;
} else if (key === "__v_isReadonly") {
return isReadonly2;
} else if (key === "__v_raw") {
return target;
}
return Reflect.get(hasOwn(instrumentations, key) && key in target ? instrumentations : target, key, receiver);
};
}
const mutableCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(false, false)
};
const shallowCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(false, true)
};
const readonlyCollectionHandlers = {
get: /* @__PURE__ */ createInstrumentationGetter(true, false)
};
const reactiveMap = /* @__PURE__ */ new WeakMap();
const shallowReactiveMap = /* @__PURE__ */ new WeakMap();
const readonlyMap = /* @__PURE__ */ new WeakMap();
const shallowReadonlyMap = /* @__PURE__ */ new WeakMap();
function targetTypeMap(rawType) {
switch (rawType) {
case "Object":
case "Array":
return 1;
case "Map":
case "Set":
case "WeakMap":
case "WeakSet":
return 2;
default:
return 0;
}
}
function getTargetType(value) {
return value["__v_skip"] || !Object.isExtensible(value) ? 0 : targetTypeMap(toRawType(value));
}
function reactive(target) {
if (isReadonly(target)) {
return target;
}
return createReactiveObject(target, false, mutableHandlers, mutableCollectionHandlers, reactiveMap);
}
function shallowReactive(target) {
return createReactiveObject(target, false, shallowReactiveHandlers, shallowCollectionHandlers, shallowReactiveMap);
}
function readonly(target) {
return createReactiveObject(target, true, readonlyHandlers, readonlyCollectionHandlers, readonlyMap);
}
function createReactiveObject(target, isReadonly2, baseHandlers, collectionHandlers, proxyMap) {
if (!isObject$3(target)) {
return target;
}
if (target["__v_raw"] && !(isReadonly2 && target["__v_isReactive"])) {
return target;
}
const existingProxy = proxyMap.get(target);
if (existingProxy) {
return existingProxy;
}
const targetType = getTargetType(target);
if (targetType === 0) {
return target;
}
const proxy = new Proxy(target, targetType === 2 ? collectionHandlers : baseHandlers);
proxyMap.set(target, proxy);
return proxy;
}
function isReactive(value) {
if (isReadonly(value)) {
return isReactive(value["__v_raw"]);
}
return !!(value && value["__v_isReactive"]);
}
function isReadonly(value) {
return !!(value && value["__v_isReadonly"]);
}
function isShallow(value) {
return !!(value && value["__v_isShallow"]);
}
function isProxy(value) {
return isReactive(value) || isReadonly(value);
}
function toRaw(observed) {
const raw = observed && observed["__v_raw"];
return raw ? toRaw(raw) : observed;
}
function markRaw(value) {
def(value, "__v_skip", true);
return value;
}
const toReactive = (value) => isObject$3(value) ? reactive(value) : value;
const toReadonly = (value) => isObject$3(value) ? readonly(value) : value;
function trackRefValue(ref2) {
if (shouldTrack && activeEffect) {
ref2 = toRaw(ref2);
{
trackEffects(ref2.dep || (ref2.dep = createDep()));
}
}
}
function triggerRefValue(ref2, newVal) {
ref2 = toRaw(ref2);
if (ref2.dep) {
{
triggerEffects(ref2.dep);
}
}
}
function isRef(r) {
return !!(r && r.__v_isRef === true);
}
function ref(value) {
return createRef(value, false);
}
function createRef(rawValue, shallow) {
if (isRef(rawValue)) {
return rawValue;
}
return new RefImpl(rawValue, shallow);
}
class RefImpl {
constructor(value, __v_isShallow) {
this.__v_isShallow = __v_isShallow;
this.dep = void 0;
this.__v_isRef = true;
this._rawValue = __v_isShallow ? value : toRaw(value);
this._value = __v_isShallow ? value : toReactive(value);
}
get value() {
trackRefValue(this);
return this._value;
}
set value(newVal) {
newVal = this.__v_isShallow ? newVal : toRaw(newVal);
if (hasChanged(newVal, this._rawValue)) {
this._rawValue = newVal;
this._value = this.__v_isShallow ? newVal : toReactive(newVal);
triggerRefValue(this);
}
}
}
function unref(ref2) {
return isRef(ref2) ? ref2.value : ref2;
}
const shallowUnwrapHandlers = {
get: (target, key, receiver) => unref(Reflect.get(target, key, receiver)),
set: (target, key, value, receiver) => {
const oldValue = target[key];
if (isRef(oldValue) && !isRef(value)) {
oldValue.value = value;
return true;
} else {
return Reflect.set(target, key, value, receiver);
}
}
};
function proxyRefs(objectWithRefs) {
return isReactive(objectWithRefs) ? objectWithRefs : new Proxy(objectWithRefs, shallowUnwrapHandlers);
}
function toRefs(object) {
const ret = isArray$2(object) ? new Array(object.length) : {};
for (const key in object) {
ret[key] = toRef(object, key);
}
return ret;
}
class ObjectRefImpl {
constructor(_object, _key, _defaultValue) {
this._object = _object;
this._key = _key;
this._defaultValue = _defaultValue;
this.__v_isRef = true;
}
get value() {
const val = this._object[this._key];
return val === void 0 ? this._defaultValue : val;
}
set value(newVal) {
this._object[this._key] = newVal;
}
}
function toRef(object, key, defaultValue) {
const val = object[key];
return isRef(val) ? val : new ObjectRefImpl(object, key, defaultValue);
}
class ComputedRefImpl {
constructor(getter, _setter, isReadonly2, isSSR) {
this._setter = _setter;
this.dep = void 0;
this.__v_isRef = true;
this._dirty = true;
this.effect = new ReactiveEffect(getter, () => {
if (!this._dirty) {
this._dirty = true;
triggerRefValue(this);
}
});
this.effect.computed = this;
this.effect.active = this._cacheable = !isSSR;
this["__v_isReadonly"] = isReadonly2;
}
get value() {
const self2 = toRaw(this);
trackRefValue(self2);
if (self2._dirty || !self2._cacheable) {
self2._dirty = false;
self2._value = self2.effect.run();
}
return self2._value;
}
set value(newValue) {
this._setter(newValue);
}
}
function computed$1(getterOrOptions, debugOptions, isSSR = false) {
let getter;
let setter;
const onlyGetter = isFunction(getterOrOptions);
if (onlyGetter) {
getter = getterOrOptions;
setter = NOOP;
} else {
getter = getterOrOptions.get;
setter = getterOrOptions.set;
}
const cRef = new ComputedRefImpl(getter, setter, onlyGetter || !setter, isSSR);
return cRef;
}
Promise.resolve();
function callWithErrorHandling(fn, instance, type, args) {
let res;
try {
res = args ? fn(...args) : fn();
} catch (err) {
handleError(err, instance, type);
}
return res;
}
function callWithAsyncErrorHandling(fn, instance, type, args) {
if (isFunction(fn)) {
const res = callWithErrorHandling(fn, instance, type, args);
if (res && isPromise(res)) {
res.catch((err) => {
handleError(err, instance, type);
});
}
return res;
}
const values = [];
for (let i = 0; i < fn.length; i++) {
values.push(callWithAsyncErrorHandling(fn[i], instance, type, args));
}
return values;
}
function handleError(err, instance, type, throwInDev = true) {
const contextVNode = instance ? instance.vnode : null;
if (instance) {
let cur = instance.parent;
const exposedInstance = instance.proxy;
const errorInfo = type;
while (cur) {
const errorCapturedHooks = cur.ec;
if (errorCapturedHooks) {
for (let i = 0; i < errorCapturedHooks.length; i++) {
if (errorCapturedHooks[i](err, exposedInstance, errorInfo) === false) {
return;
}
}
}
cur = cur.parent;
}
const appErrorHandler = instance.appContext.config.errorHandler;
if (appErrorHandler) {
callWithErrorHandling(appErrorHandler, null, 10, [err, exposedInstance, errorInfo]);
return;
}
}
logError(err, type, contextVNode, throwInDev);
}
function logError(err, type, contextVNode, throwInDev = true) {
{
console.error(err);
}
}
let isFlushing = false;
let isFlushPending = false;
const queue = [];
let flushIndex = 0;
const pendingPreFlushCbs = [];
let activePreFlushCbs = null;
let preFlushIndex = 0;
const pendingPostFlushCbs = [];
let activePostFlushCbs = null;
let postFlushIndex = 0;
const resolvedPromise = Promise.resolve();
let currentFlushPromise = null;
let currentPreFlushParentJob = null;
function nextTick(fn) {
const p2 = currentFlushPromise || resolvedPromise;
return fn ? p2.then(this ? fn.bind(this) : fn) : p2;
}
function findInsertionIndex(id) {
let start2 = flushIndex + 1;
let end = queue.length;
while (start2 < end) {
const middle = start2 + end >>> 1;
const middleJobId = getId$4(queue[middle]);
middleJobId < id ? start2 = middle + 1 : end = middle;
}
return start2;
}
function queueJob(job) {
if ((!queue.length || !queue.includes(job, isFlushing && job.allowRecurse ? flushIndex + 1 : flushIndex)) && job !== currentPreFlushParentJob) {
if (job.id == null) {
queue.push(job);
} else {
queue.splice(findInsertionIndex(job.id), 0, job);
}
queueFlush();
}
}
function queueFlush() {
if (!isFlushing && !isFlushPending) {
isFlushPending = true;
currentFlushPromise = resolvedPromise.then(flushJobs);
}
}
function invalidateJob(job) {
const i = queue.indexOf(job);
if (i > flushIndex) {
queue.splice(i, 1);
}
}
function queueCb(cb, activeQueue, pendingQueue, index2) {
if (!isArray$2(cb)) {
if (!activeQueue || !activeQueue.includes(cb, cb.allowRecurse ? index2 + 1 : index2)) {
pendingQueue.push(cb);
}
} else {
pendingQueue.push(...cb);
}
queueFlush();
}
function queuePreFlushCb(cb) {
queueCb(cb, activePreFlushCbs, pendingPreFlushCbs, preFlushIndex);
}
function queuePostFlushCb(cb) {
queueCb(cb, activePostFlushCbs, pendingPostFlushCbs, postFlushIndex);
}
function flushPreFlushCbs(seen, parentJob = null) {
if (pendingPreFlushCbs.length) {
currentPreFlushParentJob = parentJob;
activePreFlushCbs = [...new Set(pendingPreFlushCbs)];
pendingPreFlushCbs.length = 0;
for (preFlushIndex = 0; preFlushIndex < activePreFlushCbs.length; preFlushIndex++) {
activePreFlushCbs[preFlushIndex]();
}
activePreFlushCbs = null;
preFlushIndex = 0;
currentPreFlushParentJob = null;
flushPreFlushCbs(seen, parentJob);
}
}
function flushPostFlushCbs(seen) {
if (pendingPostFlushCbs.length) {
const deduped = [...new Set(pendingPostFlushCbs)];
pendingPostFlushCbs.length = 0;
if (activePostFlushCbs) {
activePostFlushCbs.push(...deduped);
return;
}
activePostFlushCbs = deduped;
activePostFlushCbs.sort((a, b) => getId$4(a) - getId$4(b));
for (postFlushIndex = 0; postFlushIndex < activePostFlushCbs.length; postFlushIndex++) {
activePostFlushCbs[postFlushIndex]();
}
activePostFlushCbs = null;
postFlushIndex = 0;
}
}
const getId$4 = (job) => job.id == null ? Infinity : job.id;
function flushJobs(seen) {
isFlushPending = false;
isFlushing = true;
flushPreFlushCbs(seen);
queue.sort((a, b) => getId$4(a) - getId$4(b));
const check = NOOP;
try {
for (flushIndex = 0; flushIndex < queue.length; flushIndex++) {
const job = queue[flushIndex];
if (job && job.active !== false) {
if (false)
;
callWithErrorHandling(job, null, 14);
}
}
} finally {
flushIndex = 0;
queue.length = 0;
flushPostFlushCbs();
isFlushing = false;
currentFlushPromise = null;
if (queue.length || pendingPreFlushCbs.length || pendingPostFlushCbs.length) {
flushJobs(seen);
}
}
}
function emit$1(instance, event, ...rawArgs) {
const props = instance.vnode.props || EMPTY_OBJ;
let args = rawArgs;
const isModelListener2 = event.startsWith("update:");
const modelArg = isModelListener2 && event.slice(7);
if (modelArg && modelArg in props) {
const modifiersKey = `${modelArg === "modelValue" ? "model" : modelArg}Modifiers`;
const { number, trim } = props[modifiersKey] || EMPTY_OBJ;
if (trim) {
args = rawArgs.map((a) => a.trim());
} else if (number) {
args = rawArgs.map(toNumber$2);
}
}
let handlerName;
let handler = props[handlerName = toHandlerKey(event)] || props[handlerName = toHandlerKey(camelize(event))];
if (!handler && isModelListener2) {
handler = props[handlerName = toHandlerKey(hyphenate(event))];
}
if (handler) {
callWithAsyncErrorHandling(handler, instance, 6, args);
}
const onceHandler = props[handlerName + `Once`];
if (onceHandler) {
if (!instance.emitted) {
instance.emitted = {};
} else if (instance.emitted[handlerName]) {
return;
}
instance.emitted[handlerName] = true;
callWithAsyncErrorHandling(onceHandler, instance, 6, args);
}
}
function normalizeEmitsOptions(comp, appContext, asMixin = false) {
const cache = appContext.emitsCache;
const cached = cache.get(comp);
if (cached !== void 0) {
return cached;
}
const raw = comp.emits;
let normalized = {};
let hasExtends = false;
if (!isFunction(comp)) {
const extendEmits = (raw2) => {
const normalizedFromExtend = normalizeEmitsOptions(raw2, appContext, true);
if (normalizedFromExtend) {
hasExtends = true;
extend(normalized, normalizedFromExtend);
}
};
if (!asMixin && appContext.mixins.length) {
appContext.mixins.forEach(extendEmits);
}
if (comp.extends) {
extendEmits(comp.extends);
}
if (comp.mixins) {
comp.mixins.forEach(extendEmits);
}
}
if (!raw && !hasExtends) {
cache.set(comp, null);
return null;
}
if (isArray$2(raw)) {
raw.forEach((key) => normalized[key] = null);
} else {
extend(normalized, raw);
}
cache.set(comp, normalized);
return normalized;
}
function isEmitListener(options, key) {
if (!options || !isOn(key)) {
return false;
}
key = key.slice(2).replace(/Once$/, "");
return hasOwn(options, key[0].toLowerCase() + key.slice(1)) || hasOwn(options, hyphenate(key)) || hasOwn(options, key);
}
let currentRenderingInstance = null;
let currentScopeId = null;
function setCurrentRenderingInstance(instance) {
const prev = currentRenderingInstance;
currentRenderingInstance = instance;
currentScopeId = instance && instance.type.__scopeId || null;
return prev;
}
function withCtx(fn, ctx = currentRenderingInstance, isNonScopedSlot) {
if (!ctx)
return fn;
if (fn._n) {
return fn;
}
const renderFnWithContext = (...args) => {
if (renderFnWithContext._d) {
setBlockTracking(-1);
}
const prevInstance = setCurrentRenderingInstance(ctx);
const res = fn(...args);
setCurrentRenderingInstance(prevInstance);
if (renderFnWithContext._d) {
setBlockTracking(1);
}
return res;
};
renderFnWithContext._n = true;
renderFnWithContext._c = true;
renderFnWithContext._d = true;
return renderFnWithContext;
}
function markAttrsAccessed() {
}
function renderComponentRoot(instance) {
const { type: Component, vnode, proxy, withProxy, props, propsOptions: [propsOptions], slots, attrs, emit, render, renderCache, data, setupState, ctx, inheritAttrs } = instance;
let result;
let fallthroughAttrs;
const prev = setCurrentRenderingInstance(instance);
try {
if (vnode.shapeFlag & 4) {
const proxyToUse = withProxy || proxy;
result = normalizeVNode(render.call(proxyToUse, proxyToUse, renderCache, props, setupState, data, ctx));
fallthroughAttrs = attrs;
} else {
const render2 = Component;
if (false)
;
result = normalizeVNode(render2.length > 1 ? render2(props, false ? {
get attrs() {
markAttrsAccessed();
return attrs;
},
slots,
emit
} : { attrs, slots, emit }) : render2(props, null));
fallthroughAttrs = Component.props ? attrs : getFunctionalFallthrough(attrs);
}
} catch (err) {
blockStack.length = 0;
handleError(err, instance, 1);
result = createVNode(Comment);
}
let root2 = result;
if (fallthroughAttrs && inheritAttrs !== false) {
const keys2 = Object.keys(fallthroughAttrs);
const { shapeFlag } = root2;
if (keys2.length) {
if (shapeFlag & (1 | 6)) {
if (propsOptions && keys2.some(isModelListener)) {
fallthroughAttrs = filterModelListeners(fallthroughAttrs, propsOptions);
}
root2 = cloneVNode(root2, fallthroughAttrs);
}
}
}
if (vnode.dirs) {
root2.dirs = root2.dirs ? root2.dirs.concat(vnode.dirs) : vnode.dirs;
}
if (vnode.transition) {
root2.transition = vnode.transition;
}
{
result = root2;
}
setCurrentRenderingInstance(prev);
return result;
}
const getFunctionalFallthrough = (attrs) => {
let res;
for (const key in attrs) {
if (key === "class" || key === "style" || isOn(key)) {
(res || (res = {}))[key] = attrs[key];
}
}
return res;
};
const filterModelListeners = (attrs, props) => {
const res = {};
for (const key in attrs) {
if (!isModelListener(key) || !(key.slice(9) in props)) {
res[key] = attrs[key];
}
}
return res;
};
function shouldUpdateComponent(prevVNode, nextVNode, optimized) {
const { props: prevProps, children: prevChildren, component } = prevVNode;
const { props: nextProps, children: nextChildren, patchFlag } = nextVNode;
const emits = component.emitsOptions;
if (nextVNode.dirs || nextVNode.transition) {
return true;
}
if (optimized && patchFlag >= 0) {
if (patchFlag & 1024) {
return true;
}
if (patchFlag & 16) {
if (!prevProps) {
return !!nextProps;
}
return hasPropsChanged(prevProps, nextProps, emits);
} else if (patchFlag & 8) {
const dynamicProps = nextVNode.dynamicProps;
for (let i = 0; i < dynamicProps.length; i++) {
const key = dynamicProps[i];
if (nextProps[key] !== prevProps[key] && !isEmitListener(emits, key)) {
return true;
}
}
}
} else {
if (prevChildren || nextChildren) {
if (!nextChildren || !nextChildren.$stable) {
return true;
}
}
if (prevProps === nextProps) {
return false;
}
if (!prevProps) {
return !!nextProps;
}
if (!nextProps) {
return true;
}
return hasPropsChanged(prevProps, nextProps, emits);
}
return false;
}
function hasPropsChanged(prevProps, nextProps, emitsOptions) {
const nextKeys = Object.keys(nextProps);
if (nextKeys.length !== Object.keys(prevProps).length) {
return true;
}
for (let i = 0; i < nextKeys.length; i++) {
const key = nextKeys[i];
if (nextProps[key] !== prevProps[key] && !isEmitListener(emitsOptions, key)) {
return true;
}
}
return false;
}
function updateHOCHostEl({ vnode, parent }, el) {
while (parent && parent.subTree === vnode) {
(vnode = parent.vnode).el = el;
parent = parent.parent;
}
}
const isSuspense = (type) => type.__isSuspense;
function queueEffectWithSuspense(fn, suspense) {
if (suspense && suspense.pendingBranch) {
if (isArray$2(fn)) {
suspense.effects.push(...fn);
} else {
suspense.effects.push(fn);
}
} else {
queuePostFlushCb(fn);
}
}
function provide(key, value) {
if (!currentInstance)
;
else {
let provides = currentInstance.provides;
const parentProvides = currentInstance.parent && currentInstance.parent.provides;
if (parentProvides === provides) {
provides = currentInstance.provides = Object.create(parentProvides);
}
provides[key] = value;
}
}
function inject(key, defaultValue, treatDefaultAsFactory = false) {
const instance = currentInstance || currentRenderingInstance;
if (instance) {
const provides = instance.parent == null ? instance.vnode.appContext && instance.vnode.appContext.provides : instance.parent.provides;
if (provides && key in provides) {
return provides[key];
} else if (arguments.length > 1) {
return treatDefaultAsFactory && isFunction(defaultValue) ? defaultValue.call(instance.proxy) : defaultValue;
} else
;
}
}
const INITIAL_WATCHER_VALUE = {};
function watch$1(source, cb, options) {
return doWatch(source, cb, options);
}
function doWatch(source, cb, { immediate, deep, flush, onTrack, onTrigger } = EMPTY_OBJ) {
const instance = currentInstance;
let getter;
let forceTrigger = false;
let isMultiSource = false;
if (isRef(source)) {
getter = () => source.value;
forceTrigger = isShallow(source);
} else if (isReactive(source)) {
getter = () => source;
deep = true;
} else if (isArray$2(source)) {
isMultiSource = true;
forceTrigger = source.some(isReactive);
getter = () => source.map((s) => {
if (isRef(s)) {
return s.value;
} else if (isReactive(s)) {
return traverse(s);
} else if (isFunction(s)) {
return callWithErrorHandling(s, instance, 2);
} else
;
});
} else if (isFunction(source)) {
if (cb) {
getter = () => callWithErrorHandling(source, instance, 2);
} else {
getter = () => {
if (instance && instance.isUnmounted) {
return;
}
if (cleanup) {
cleanup();
}
return callWithAsyncErrorHandling(source, instance, 3, [onCleanup]);
};
}
} else {
getter = NOOP;
}
if (cb && deep) {
const baseGetter = getter;
getter = () => traverse(baseGetter());
}
let cleanup;
let onCleanup = (fn) => {
cleanup = effect.onStop = () => {
callWithErrorHandling(fn, instance, 4);
};
};
if (isInSSRComponentSetup) {
onCleanup = NOOP;
if (!cb) {
getter();
} else if (immediate) {
callWithAsyncErrorHandling(cb, instance, 3, [
getter(),
isMultiSource ? [] : void 0,
onCleanup
]);
}
return NOOP;
}
let oldValue = isMultiSource ? [] : INITIAL_WATCHER_VALUE;
const job = () => {
if (!effect.active) {
return;
}
if (cb) {
const newValue = effect.run();
if (deep || forceTrigger || (isMultiSource ? newValue.some((v, i) => hasChanged(v, oldValue[i])) : hasChanged(newValue, oldValue)) || false) {
if (cleanup) {
cleanup();
}
callWithAsyncErrorHandling(cb, instance, 3, [
newValue,
oldValue === INITIAL_WATCHER_VALUE ? void 0 : oldValue,
onCleanup
]);
oldValue = newValue;
}
} else {
effect.run();
}
};
job.allowRecurse = !!cb;
let scheduler;
if (flush === "sync") {
scheduler = job;
} else if (flush === "post") {
scheduler = () => queuePostRenderEffect(job, instance && instance.suspense);
} else {
scheduler = () => {
if (!instance || instance.isMounted) {
queuePreFlushCb(job);
} else {
job();
}
};
}
const effect = new ReactiveEffect(getter, scheduler);
if (cb) {
if (immediate) {
job();
} else {
oldValue = effect.run();
}
} else if (flush === "post") {
queuePostRenderEffect(effect.run.bind(effect), instance && instance.suspense);
} else {
effect.run();
}
return () => {
effect.stop();
if (instance && instance.scope) {
remove(instance.scope.effects, effect);
}
};
}
function instanceWatch(source, value, options) {
const publicThis = this.proxy;
const getter = isString(source) ? source.includes(".") ? createPathGetter(publicThis, source) : () => publicThis[source] : source.bind(publicThis, publicThis);
let cb;
if (isFunction(value)) {
cb = value;
} else {
cb = value.handler;
options = value;
}
const cur = currentInstance;
setCurrentInstance(this);
const res = doWatch(getter, cb.bind(publicThis), options);
if (cur) {
setCurrentInstance(cur);
} else {
unsetCurrentInstance();
}
return res;
}
function createPathGetter(ctx, path) {
const segments = path.split(".");
return () => {
let cur = ctx;
for (let i = 0; i < segments.length && cur; i++) {
cur = cur[segments[i]];
}
return cur;
};
}
function traverse(value, seen) {
if (!isObject$3(value) || value["__v_skip"]) {
return value;
}
seen = seen || /* @__PURE__ */ new Set();
if (seen.has(value)) {
return value;
}
seen.add(value);
if (isRef(value)) {
traverse(value.value, seen);
} else if (isArray$2(value)) {
for (let i = 0; i < value.length; i++) {
traverse(value[i], seen);
}
} else if (isSet$2(value) || isMap$2(value)) {
value.forEach((v) => {
traverse(v, seen);
});
} else if (isPlainObject(value)) {
for (const key in value) {
traverse(value[key], seen);
}
}
return value;
}
function defineComponent(options) {
return isFunction(options) ? { setup: options, name: options.name } : options;
}
const isAsyncWrapper = (i) => !!i.type.__asyncLoader;
const isKeepAlive = (vnode) => vnode.type.__isKeepAlive;
function onActivated(hook, target) {
registerKeepAliveHook(hook, "a", target);
}
function onDeactivated(hook, target) {
registerKeepAliveHook(hook, "da", target);
}
function registerKeepAliveHook(hook, type, target = currentInstance) {
const wrappedHook = hook.__wdc || (hook.__wdc = () => {
let current = target;
while (current) {
if (current.isDeactivated) {
return;
}
current = current.parent;
}
return hook();
});
injectHook(type, wrappedHook, target);
if (target) {
let current = target.parent;
while (current && current.parent) {
if (isKeepAlive(current.parent.vnode)) {
injectToKeepAliveRoot(wrappedHook, type, target, current);
}
current = current.parent;
}
}
}
function injectToKeepAliveRoot(hook, type, target, keepAliveRoot) {
const injected = injectHook(type, hook, keepAliveRoot, true);
onUnmounted(() => {
remove(keepAliveRoot[type], injected);
}, target);
}
function injectHook(type, hook, target = currentInstance, prepend = false) {
if (target) {
const hooks = target[type] || (target[type] = []);
const wrappedHook = hook.__weh || (hook.__weh = (...args) => {
if (target.isUnmounted) {
return;
}
pauseTracking();
setCurrentInstance(target);
const res = callWithAsyncErrorHandling(hook, target, type, args);
unsetCurrentInstance();
resetTracking();
return res;
});
if (prepend) {
hooks.unshift(wrappedHook);
} else {
hooks.push(wrappedHook);
}
return wrappedHook;
}
}
const createHook = (lifecycle) => (hook, target = currentInstance) => (!isInSSRComponentSetup || lifecycle === "sp") && injectHook(lifecycle, hook, target);
const onBeforeMount = createHook("bm");
const onMounted = createHook("m");
const onBeforeUpdate = createHook("bu");
const onUpdated = createHook("u");
const onBeforeUnmount = createHook("bum");
const onUnmounted = createHook("um");
const onServerPrefetch = createHook("sp");
const onRenderTriggered = createHook("rtg");
const onRenderTracked = createHook("rtc");
function onErrorCaptured(hook, target = currentInstance) {
injectHook("ec", hook, target);
}
let shouldCacheAccess = true;
function applyOptions(instance) {
const options = resolveMergedOptions(instance);
const publicThis = instance.proxy;
const ctx = instance.ctx;
shouldCacheAccess = false;
if (options.beforeCreate) {
callHook(options.beforeCreate, instance, "bc");
}
const {
data: dataOptions,
computed: computedOptions,
methods,
watch: watchOptions,
provide: provideOptions,
inject: injectOptions,
created,
beforeMount,
mounted,
beforeUpdate,
updated,
activated,
deactivated,
beforeDestroy,
beforeUnmount,
destroyed,
unmounted,
render,
renderTracked,
renderTriggered,
errorCaptured,
serverPrefetch,
expose,
inheritAttrs,
components,
directives,
filters
} = options;
const checkDuplicateProperties = null;
if (injectOptions) {
resolveInjections(injectOptions, ctx, checkDuplicateProperties, instance.appContext.config.unwrapInjectedRef);
}
if (methods) {
for (const key in methods) {
const methodHandler = methods[key];
if (isFunction(methodHandler)) {
{
ctx[key] = methodHandler.bind(publicThis);
}
}
}
}
if (dataOptions) {
const data = dataOptions.call(publicThis, publicThis);
if (!isObject$3(data))
;
else {
instance.data = reactive(data);
}
}
shouldCacheAccess = true;
if (computedOptions) {
for (const key in computedOptions) {
const opt = computedOptions[key];
const get2 = isFunction(opt) ? opt.bind(publicThis, publicThis) : isFunction(opt.get) ? opt.get.bind(publicThis, publicThis) : NOOP;
const set2 = !isFunction(opt) && isFunction(opt.set) ? opt.set.bind(publicThis) : NOOP;
const c = computed({
get: get2,
set: set2
});
Object.defineProperty(ctx, key, {
enumerable: true,
configurable: true,
get: () => c.value,
set: (v) => c.value = v
});
}
}
if (watchOptions) {
for (const key in watchOptions) {
createWatcher$1(watchOptions[key], ctx, publicThis, key);
}
}
if (provideOptions) {
const provides = isFunction(provideOptions) ? provideOptions.call(publicThis) : provideOptions;
Reflect.ownKeys(provides).forEach((key) => {
provide(key, provides[key]);
});
}
if (created) {
callHook(created, instance, "c");
}
function registerLifecycleHook(register, hook) {
if (isArray$2(hook)) {
hook.forEach((_hook) => register(_hook.bind(publicThis)));
} else if (hook) {
register(hook.bind(publicThis));
}
}
registerLifecycleHook(onBeforeMount, beforeMount);
registerLifecycleHook(onMounted, mounted);
registerLifecycleHook(onBeforeUpdate, beforeUpdate);
registerLifecycleHook(onUpdated, updated);
registerLifecycleHook(onActivated, activated);
registerLifecycleHook(onDeactivated, deactivated);
registerLifecycleHook(onErrorCaptured, errorCaptured);
registerLifecycleHook(onRenderTracked, renderTracked);
registerLifecycleHook(onRenderTriggered, renderTriggered);
registerLifecycleHook(onBeforeUnmount, beforeUnmount);
registerLifecycleHook(onUnmounted, unmounted);
registerLifecycleHook(onServerPrefetch, serverPrefetch);
if (isArray$2(expose)) {
if (expose.length) {
const exposed = instance.exposed || (instance.exposed = {});
expose.forEach((key) => {
Object.defineProperty(exposed, key, {
get: () => publicThis[key],
set: (val) => publicThis[key] = val
});
});
} else if (!instance.exposed) {
instance.exposed = {};
}
}
if (render && instance.render === NOOP) {
instance.render = render;
}
if (inheritAttrs != null) {
instance.inheritAttrs = inheritAttrs;
}
if (components)
instance.components = components;
if (directives)
instance.directives = directives;
}
function resolveInjections(injectOptions, ctx, checkDuplicateProperties = NOOP, unwrapRef = false) {
if (isArray$2(injectOptions)) {
injectOptions = normalizeInject(injectOptions);
}
for (const key in injectOptions) {
const opt = injectOptions[key];
let injected;
if (isObject$3(opt)) {
if ("default" in opt) {
injected = inject(opt.from || key, opt.default, true);
} else {
injected = inject(opt.from || key);
}
} else {
injected = inject(opt);
}
if (isRef(injected)) {
if (unwrapRef) {
Object.defineProperty(ctx, key, {
enumerable: true,
configurable: true,
get: () => injected.value,
set: (v) => injected.value = v
});
} else {
ctx[key] = injected;
}
} else {
ctx[key] = injected;
}
}
}
function callHook(hook, instance, type) {
callWithAsyncErrorHandling(isArray$2(hook) ? hook.map((h) => h.bind(instance.proxy)) : hook.bind(instance.proxy), instance, type);
}
function createWatcher$1(raw, ctx, publicThis, key) {
const getter = key.includes(".") ? createPathGetter(publicThis, key) : () => publicThis[key];
if (isString(raw)) {
const handler = ctx[raw];
if (isFunction(handler)) {
watch$1(getter, handler);
}
} else if (isFunction(raw)) {
watch$1(getter, raw.bind(publicThis));
} else if (isObject$3(raw)) {
if (isArray$2(raw)) {
raw.forEach((r) => createWatcher$1(r, ctx, publicThis, key));
} else {
const handler = isFunction(raw.handler) ? raw.handler.bind(publicThis) : ctx[raw.handler];
if (isFunction(handler)) {
watch$1(getter, handler, raw);
}
}
} else
;
}
function resolveMergedOptions(instance) {
const base = instance.type;
const { mixins, extends: extendsOptions } = base;
const { mixins: globalMixins, optionsCache: cache, config: { optionMergeStrategies } } = instance.appContext;
const cached = cache.get(base);
let resolved;
if (cached) {
resolved = cached;
} else if (!globalMixins.length && !mixins && !extendsOptions) {
{
resolved = base;
}
} else {
resolved = {};
if (globalMixins.length) {
globalMixins.forEach((m) => mergeOptions(resolved, m, optionMergeStrategies, true));
}
mergeOptions(resolved, base, optionMergeStrategies);
}
cache.set(base, resolved);
return resolved;
}
function mergeOptions(to, from, strats, asMixin = false) {
const { mixins, extends: extendsOptions } = from;
if (extendsOptions) {
mergeOptions(to, extendsOptions, strats, true);
}
if (mixins) {
mixins.forEach((m) => mergeOptions(to, m, strats, true));
}
for (const key in from) {
if (asMixin && key === "expose")
;
else {
const strat = internalOptionMergeStrats[key] || strats && strats[key];
to[key] = strat ? strat(to[key], from[key]) : from[key];
}
}
return to;
}
const internalOptionMergeStrats = {
data: mergeDataFn,
props: mergeObjectOptions,
emits: mergeObjectOptions,
methods: mergeObjectOptions,
computed: mergeObjectOptions,
beforeCreate: mergeAsArray,
created: mergeAsArray,
beforeMount: mergeAsArray,
mounted: mergeAsArray,
beforeUpdate: mergeAsArray,
updated: mergeAsArray,
beforeDestroy: mergeAsArray,
beforeUnmount: mergeAsArray,
destroyed: mergeAsArray,
unmounted: mergeAsArray,
activated: mergeAsArray,
deactivated: mergeAsArray,
errorCaptured: mergeAsArray,
serverPrefetch: mergeAsArray,
components: mergeObjectOptions,
directives: mergeObjectOptions,
watch: mergeWatchOptions,
provide: mergeDataFn,
inject: mergeInject
};
function mergeDataFn(to, from) {
if (!from) {
return to;
}
if (!to) {
return from;
}
return function mergedDataFn() {
return extend(isFunction(to) ? to.call(this, this) : to, isFunction(from) ? from.call(this, this) : from);
};
}
function mergeInject(to, from) {
return mergeObjectOptions(normalizeInject(to), normalizeInject(from));
}
function normalizeInject(raw) {
if (isArray$2(raw)) {
const res = {};
for (let i = 0; i < raw.length; i++) {
res[raw[i]] = raw[i];
}
return res;
}
return raw;
}
function mergeAsArray(to, from) {
return to ? [...new Set([].concat(to, from))] : from;
}
function mergeObjectOptions(to, from) {
return to ? extend(extend(/* @__PURE__ */ Object.create(null), to), from) : from;
}
function mergeWatchOptions(to, from) {
if (!to)
return from;
if (!from)
return to;
const merged = extend(/* @__PURE__ */ Object.create(null), to);
for (const key in from) {
merged[key] = mergeAsArray(to[key], from[key]);
}
return merged;
}
function initProps(instance, rawProps, isStateful, isSSR = false) {
const props = {};
const attrs = {};
def(attrs, InternalObjectKey, 1);
instance.propsDefaults = /* @__PURE__ */ Object.create(null);
setFullProps(instance, rawProps, props, attrs);
for (const key in instance.propsOptions[0]) {
if (!(key in props)) {
props[key] = void 0;
}
}
if (isStateful) {
instance.props = isSSR ? props : shallowReactive(props);
} else {
if (!instance.type.props) {
instance.props = attrs;
} else {
instance.props = props;
}
}
instance.attrs = attrs;
}
function updateProps(instance, rawProps, rawPrevProps, optimized) {
const { props, attrs, vnode: { patchFlag } } = instance;
const rawCurrentProps = toRaw(props);
const [options] = instance.propsOptions;
let hasAttrsChanged = false;
if ((optimized || patchFlag > 0) && !(patchFlag & 16)) {
if (patchFlag & 8) {
const propsToUpdate = instance.vnode.dynamicProps;
for (let i = 0; i < propsToUpdate.length; i++) {
let key = propsToUpdate[i];
const value = rawProps[key];
if (options) {
if (hasOwn(attrs, key)) {
if (value !== attrs[key]) {
attrs[key] = value;
hasAttrsChanged = true;
}
} else {
const camelizedKey = camelize(key);
props[camelizedKey] = resolvePropValue(options, rawCurrentProps, camelizedKey, value, instance, false);
}
} else {
if (value !== attrs[key]) {
attrs[key] = value;
hasAttrsChanged = true;
}
}
}
}
} else {
if (setFullProps(instance, rawProps, props, attrs)) {
hasAttrsChanged = true;
}
let kebabKey;
for (const key in rawCurrentProps) {
if (!rawProps || !hasOwn(rawProps, key) && ((kebabKey = hyphenate(key)) === key || !hasOwn(rawProps, kebabKey))) {
if (options) {
if (rawPrevProps && (rawPrevProps[key] !== void 0 || rawPrevProps[kebabKey] !== void 0)) {
props[key] = resolvePropValue(options, rawCurrentProps, key, void 0, instance, true);
}
} else {
delete props[key];
}
}
}
if (attrs !== rawCurrentProps) {
for (const key in attrs) {
if (!rawProps || !hasOwn(rawProps, key) && true) {
delete attrs[key];
hasAttrsChanged = true;
}
}
}
}
if (hasAttrsChanged) {
trigger(instance, "set", "$attrs");
}
}
function setFullProps(instance, rawProps, props, attrs) {
const [options, needCastKeys] = instance.propsOptions;
let hasAttrsChanged = false;
let rawCastValues;
if (rawProps) {
for (let key in rawProps) {
if (isReservedProp(key)) {
continue;
}
const value = rawProps[key];
let camelKey;
if (options && hasOwn(options, camelKey = camelize(key))) {
if (!needCastKeys || !needCastKeys.includes(camelKey)) {
props[camelKey] = value;
} else {
(rawCastValues || (rawCastValues = {}))[camelKey] = value;
}
} else if (!isEmitListener(instance.emitsOptions, key)) {
if (!(key in attrs) || value !== attrs[key]) {
attrs[key] = value;
hasAttrsChanged = true;
}
}
}
}
if (needCastKeys) {
const rawCurrentProps = toRaw(props);
const castValues = rawCastValues || EMPTY_OBJ;
for (let i = 0; i < needCastKeys.length; i++) {
const key = needCastKeys[i];
props[key] = resolvePropValue(options, rawCurrentProps, key, castValues[key], instance, !hasOwn(castValues, key));
}
}
return hasAttrsChanged;
}
function resolvePropValue(options, props, key, value, instance, isAbsent) {
const opt = options[key];
if (opt != null) {
const hasDefault = hasOwn(opt, "default");
if (hasDefault && value === void 0) {
const defaultValue = opt.default;
if (opt.type !== Function && isFunction(defaultValue)) {
const { propsDefaults } = instance;
if (key in propsDefaults) {
value = propsDefaults[key];
} else {
setCurrentInstance(instance);
value = propsDefaults[key] = defaultValue.call(null, props);
unsetCurrentInstance();
}
} else {
value = defaultValue;
}
}
if (opt[0]) {
if (isAbsent && !hasDefault) {
value = false;
} else if (opt[1] && (value === "" || value === hyphenate(key))) {
value = true;
}
}
}
return value;
}
function normalizePropsOptions(comp, appContext, asMixin = false) {
const cache = appContext.propsCache;
const cached = cache.get(comp);
if (cached) {
return cached;
}
const raw = comp.props;
const normalized = {};
const needCastKeys = [];
let hasExtends = false;
if (!isFunction(comp)) {
const extendProps = (raw2) => {
hasExtends = true;
const [props, keys2] = normalizePropsOptions(raw2, appContext, true);
extend(normalized, props);
if (keys2)
needCastKeys.push(...keys2);
};
if (!asMixin && appContext.mixins.length) {
appContext.mixins.forEach(extendProps);
}
if (comp.extends) {
extendProps(comp.extends);
}
if (comp.mixins) {
comp.mixins.forEach(extendProps);
}
}
if (!raw && !hasExtends) {
cache.set(comp, EMPTY_ARR);
return EMPTY_ARR;
}
if (isArray$2(raw)) {
for (let i = 0; i < raw.length; i++) {
const normalizedKey = camelize(raw[i]);
if (validatePropName(normalizedKey)) {
normalized[normalizedKey] = EMPTY_OBJ;
}
}
} else if (raw) {
for (const key in raw) {
const normalizedKey = camelize(key);
if (validatePropName(normalizedKey)) {
const opt = raw[key];
const prop = normalized[normalizedKey] = isArray$2(opt) || isFunction(opt) ? { type: opt } : opt;
if (prop) {
const booleanIndex = getTypeIndex(Boolean, prop.type);
const stringIndex = getTypeIndex(String, prop.type);
prop[0] = booleanIndex > -1;
prop[1] = stringIndex < 0 || booleanIndex < stringIndex;
if (booleanIndex > -1 || hasOwn(prop, "default")) {
needCastKeys.push(normalizedKey);
}
}
}
}
}
const res = [normalized, needCastKeys];
cache.set(comp, res);
return res;
}
function validatePropName(key) {
if (key[0] !== "$") {
return true;
}
return false;
}
function getType(ctor) {
const match = ctor && ctor.toString().match(/^\s*function (\w+)/);
return match ? match[1] : ctor === null ? "null" : "";
}
function isSameType(a, b) {
return getType(a) === getType(b);
}
function getTypeIndex(type, expectedTypes) {
if (isArray$2(expectedTypes)) {
return expectedTypes.findIndex((t) => isSameType(t, type));
} else if (isFunction(expectedTypes)) {
return isSameType(expectedTypes, type) ? 0 : -1;
}
return -1;
}
const isInternalKey = (key) => key[0] === "_" || key === "$stable";
const normalizeSlotValue = (value) => isArray$2(value) ? value.map(normalizeVNode) : [normalizeVNode(value)];
const normalizeSlot = (key, rawSlot, ctx) => {
const normalized = withCtx((...args) => {
return normalizeSlotValue(rawSlot(...args));
}, ctx);
normalized._c = false;
return normalized;
};
const normalizeObjectSlots = (rawSlots, slots, instance) => {
const ctx = rawSlots._ctx;
for (const key in rawSlots) {
if (isInternalKey(key))
continue;
const value = rawSlots[key];
if (isFunction(value)) {
slots[key] = normalizeSlot(key, value, ctx);
} else if (value != null) {
const normalized = normalizeSlotValue(value);
slots[key] = () => normalized;
}
}
};
const normalizeVNodeSlots = (instance, children) => {
const normalized = normalizeSlotValue(children);
instance.slots.default = () => normalized;
};
const initSlots = (instance, children) => {
if (instance.vnode.shapeFlag & 32) {
const type = children._;
if (type) {
instance.slots = toRaw(children);
def(children, "_", type);
} else {
normalizeObjectSlots(children, instance.slots = {});
}
} else {
instance.slots = {};
if (children) {
normalizeVNodeSlots(instance, children);
}
}
def(instance.slots, InternalObjectKey, 1);
};
const updateSlots = (instance, children, optimized) => {
const { vnode, slots } = instance;
let needDeletionCheck = true;
let deletionComparisonTarget = EMPTY_OBJ;
if (vnode.shapeFlag & 32) {
const type = children._;
if (type) {
if (optimized && type === 1) {
needDeletionCheck = false;
} else {
extend(slots, children);
if (!optimized && type === 1) {
delete slots._;
}
}
} else {
needDeletionCheck = !children.$stable;
normalizeObjectSlots(children, slots);
}
deletionComparisonTarget = children;
} else if (children) {
normalizeVNodeSlots(instance, children);
deletionComparisonTarget = { default: 1 };
}
if (needDeletionCheck) {
for (const key in slots) {
if (!isInternalKey(key) && !(key in deletionComparisonTarget)) {
delete slots[key];
}
}
}
};
function withDirectives(vnode, directives) {
const internalInstance = currentRenderingInstance;
if (internalInstance === null) {
return vnode;
}
const instance = internalInstance.proxy;
const bindings = vnode.dirs || (vnode.dirs = []);
for (let i = 0; i < directives.length; i++) {
let [dir, value, arg, modifiers = EMPTY_OBJ] = directives[i];
if (isFunction(dir)) {
dir = {
mounted: dir,
updated: dir
};
}
if (dir.deep) {
traverse(value);
}
bindings.push({
dir,
instance,
value,
oldValue: void 0,
arg,
modifiers
});
}
return vnode;
}
function invokeDirectiveHook(vnode, prevVNode, instance, name2) {
const bindings = vnode.dirs;
const oldBindings = prevVNode && prevVNode.dirs;
for (let i = 0; i < bindings.length; i++) {
const binding = bindings[i];
if (oldBindings) {
binding.oldValue = oldBindings[i].value;
}
let hook = binding.dir[name2];
if (hook) {
pauseTracking();
callWithAsyncErrorHandling(hook, instance, 8, [
vnode.el,
binding,
vnode,
prevVNode
]);
resetTracking();
}
}
}
function createAppContext() {
return {
app: null,
config: {
isNativeTag: NO,
performance: false,
globalProperties: {},
optionMergeStrategies: {},
errorHandler: void 0,
warnHandler: void 0,
compilerOptions: {}
},
mixins: [],
components: {},
directives: {},
provides: /* @__PURE__ */ Object.create(null),
optionsCache: /* @__PURE__ */ new WeakMap(),
propsCache: /* @__PURE__ */ new WeakMap(),
emitsCache: /* @__PURE__ */ new WeakMap()
};
}
let uid = 0;
function createAppAPI(render, hydrate) {
return function createApp2(rootComponent, rootProps = null) {
if (rootProps != null && !isObject$3(rootProps)) {
rootProps = null;
}
const context = createAppContext();
const installedPlugins = /* @__PURE__ */ new Set();
let isMounted = false;
const app = context.app = {
_uid: uid++,
_component: rootComponent,
_props: rootProps,
_container: null,
_context: context,
_instance: null,
version: version$2,
get config() {
return context.config;
},
set config(v) {
},
use(plugin, ...options) {
if (installedPlugins.has(plugin))
;
else if (plugin && isFunction(plugin.install)) {
installedPlugins.add(plugin);
plugin.install(app, ...options);
} else if (isFunction(plugin)) {
installedPlugins.add(plugin);
plugin(app, ...options);
} else
;
return app;
},
mixin(mixin) {
{
if (!context.mixins.includes(mixin)) {
context.mixins.push(mixin);
}
}
return app;
},
component(name2, component) {
if (!component) {
return context.components[name2];
}
context.components[name2] = component;
return app;
},
directive(name2, directive) {
if (!directive) {
return context.directives[name2];
}
context.directives[name2] = directive;
return app;
},
mount(rootContainer, isHydrate, isSVG) {
if (!isMounted) {
const vnode = createVNode(rootComponent, rootProps);
vnode.appContext = context;
if (isHydrate && hydrate) {
hydrate(vnode, rootContainer);
} else {
render(vnode, rootContainer, isSVG);
}
isMounted = true;
app._container = rootContainer;
rootContainer.__vue_app__ = app;
return getExposeProxy(vnode.component) || vnode.component.proxy;
}
},
unmount() {
if (isMounted) {
render(null, app._container);
delete app._container.__vue_app__;
}
},
provide(key, value) {
context.provides[key] = value;
return app;
}
};
return app;
};
}
function setRef(rawRef, oldRawRef, parentSuspense, vnode, isUnmount = false) {
if (isArray$2(rawRef)) {
rawRef.forEach((r, i) => setRef(r, oldRawRef && (isArray$2(oldRawRef) ? oldRawRef[i] : oldRawRef), parentSuspense, vnode, isUnmount));
return;
}
if (isAsyncWrapper(vnode) && !isUnmount) {
return;
}
const refValue = vnode.shapeFlag & 4 ? getExposeProxy(vnode.component) || vnode.component.proxy : vnode.el;
const value = isUnmount ? null : refValue;
const { i: owner, r: ref2 } = rawRef;
const oldRef = oldRawRef && oldRawRef.r;
const refs = owner.refs === EMPTY_OBJ ? owner.refs = {} : owner.refs;
const setupState = owner.setupState;
if (oldRef != null && oldRef !== ref2) {
if (isString(oldRef)) {
refs[oldRef] = null;
if (hasOwn(setupState, oldRef)) {
setupState[oldRef] = null;
}
} else if (isRef(oldRef)) {
oldRef.value = null;
}
}
if (isFunction(ref2)) {
callWithErrorHandling(ref2, owner, 12, [value, refs]);
} else {
const _isString = isString(ref2);
const _isRef = isRef(ref2);
if (_isString || _isRef) {
const doSet = () => {
if (rawRef.f) {
const existing = _isString ? refs[ref2] : ref2.value;
if (isUnmount) {
isArray$2(existing) && remove(existing, refValue);
} else {
if (!isArray$2(existing)) {
if (_isString) {
refs[ref2] = [refValue];
} else {
ref2.value = [refValue];
if (rawRef.k)
refs[rawRef.k] = ref2.value;
}
} else if (!existing.includes(refValue)) {
existing.push(refValue);
}
}
} else if (_isString) {
refs[ref2] = value;
if (hasOwn(setupState, ref2)) {
setupState[ref2] = value;
}
} else if (isRef(ref2)) {
ref2.value = value;
if (rawRef.k)
refs[rawRef.k] = value;
} else
;
};
if (value) {
doSet.id = -1;
queuePostRenderEffect(doSet, parentSuspense);
} else {
doSet();
}
}
}
}
const queuePostRenderEffect = queueEffectWithSuspense;
function createRenderer(options) {
return baseCreateRenderer(options);
}
function baseCreateRenderer(options, createHydrationFns) {
const target = getGlobalThis();
target.__VUE__ = true;
const { insert: hostInsert, remove: hostRemove, patchProp: hostPatchProp, createElement: hostCreateElement, createText: hostCreateText, createComment: hostCreateComment, setText: hostSetText, setElementText: hostSetElementText, parentNode: hostParentNode, nextSibling: hostNextSibling, setScopeId: hostSetScopeId = NOOP, cloneNode: hostCloneNode, insertStaticContent: hostInsertStaticContent } = options;
const patch = (n1, n2, container, anchor = null, parentComponent = null, parentSuspense = null, isSVG = false, slotScopeIds = null, optimized = !!n2.dynamicChildren) => {
if (n1 === n2) {
return;
}
if (n1 && !isSameVNodeType(n1, n2)) {
anchor = getNextHostNode(n1);
unmount(n1, parentComponent, parentSuspense, true);
n1 = null;
}
if (n2.patchFlag === -2) {
optimized = false;
n2.dynamicChildren = null;
}
const { type, ref: ref2, shapeFlag } = n2;
switch (type) {
case Text:
processText(n1, n2, container, anchor);
break;
case Comment:
processCommentNode(n1, n2, container, anchor);
break;
case Static:
if (n1 == null) {
mountStaticNode(n2, container, anchor, isSVG);
}
break;
case Fragment:
processFragment(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
break;
default:
if (shapeFlag & 1) {
processElement(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else if (shapeFlag & 6) {
processComponent(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else if (shapeFlag & 64) {
type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);
} else if (shapeFlag & 128) {
type.process(n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, internals);
} else
;
}
if (ref2 != null && parentComponent) {
setRef(ref2, n1 && n1.ref, parentSuspense, n2 || n1, !n2);
}
};
const processText = (n1, n2, container, anchor) => {
if (n1 == null) {
hostInsert(n2.el = hostCreateText(n2.children), container, anchor);
} else {
const el = n2.el = n1.el;
if (n2.children !== n1.children) {
hostSetText(el, n2.children);
}
}
};
const processCommentNode = (n1, n2, container, anchor) => {
if (n1 == null) {
hostInsert(n2.el = hostCreateComment(n2.children || ""), container, anchor);
} else {
n2.el = n1.el;
}
};
const mountStaticNode = (n2, container, anchor, isSVG) => {
[n2.el, n2.anchor] = hostInsertStaticContent(n2.children, container, anchor, isSVG, n2.el, n2.anchor);
};
const moveStaticNode = ({ el, anchor }, container, nextSibling) => {
let next;
while (el && el !== anchor) {
next = hostNextSibling(el);
hostInsert(el, container, nextSibling);
el = next;
}
hostInsert(anchor, container, nextSibling);
};
const removeStaticNode = ({ el, anchor }) => {
let next;
while (el && el !== anchor) {
next = hostNextSibling(el);
hostRemove(el);
el = next;
}
hostRemove(anchor);
};
const processElement = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
isSVG = isSVG || n2.type === "svg";
if (n1 == null) {
mountElement(n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else {
patchElement(n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
}
};
const mountElement = (vnode, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
let el;
let vnodeHook;
const { type, props, shapeFlag, transition, patchFlag, dirs } = vnode;
if (vnode.el && hostCloneNode !== void 0 && patchFlag === -1) {
el = vnode.el = hostCloneNode(vnode.el);
} else {
el = vnode.el = hostCreateElement(vnode.type, isSVG, props && props.is, props);
if (shapeFlag & 8) {
hostSetElementText(el, vnode.children);
} else if (shapeFlag & 16) {
mountChildren(vnode.children, el, null, parentComponent, parentSuspense, isSVG && type !== "foreignObject", slotScopeIds, optimized);
}
if (dirs) {
invokeDirectiveHook(vnode, null, parentComponent, "created");
}
if (props) {
for (const key in props) {
if (key !== "value" && !isReservedProp(key)) {
hostPatchProp(el, key, null, props[key], isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);
}
}
if ("value" in props) {
hostPatchProp(el, "value", null, props.value);
}
if (vnodeHook = props.onVnodeBeforeMount) {
invokeVNodeHook(vnodeHook, parentComponent, vnode);
}
}
setScopeId(el, vnode, vnode.scopeId, slotScopeIds, parentComponent);
}
if (dirs) {
invokeDirectiveHook(vnode, null, parentComponent, "beforeMount");
}
const needCallTransitionHooks = (!parentSuspense || parentSuspense && !parentSuspense.pendingBranch) && transition && !transition.persisted;
if (needCallTransitionHooks) {
transition.beforeEnter(el);
}
hostInsert(el, container, anchor);
if ((vnodeHook = props && props.onVnodeMounted) || needCallTransitionHooks || dirs) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
needCallTransitionHooks && transition.enter(el);
dirs && invokeDirectiveHook(vnode, null, parentComponent, "mounted");
}, parentSuspense);
}
};
const setScopeId = (el, vnode, scopeId, slotScopeIds, parentComponent) => {
if (scopeId) {
hostSetScopeId(el, scopeId);
}
if (slotScopeIds) {
for (let i = 0; i < slotScopeIds.length; i++) {
hostSetScopeId(el, slotScopeIds[i]);
}
}
if (parentComponent) {
let subTree = parentComponent.subTree;
if (vnode === subTree) {
const parentVNode = parentComponent.vnode;
setScopeId(el, parentVNode, parentVNode.scopeId, parentVNode.slotScopeIds, parentComponent.parent);
}
}
};
const mountChildren = (children, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, start2 = 0) => {
for (let i = start2; i < children.length; i++) {
const child = children[i] = optimized ? cloneIfMounted(children[i]) : normalizeVNode(children[i]);
patch(null, child, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
}
};
const patchElement = (n1, n2, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
const el = n2.el = n1.el;
let { patchFlag, dynamicChildren, dirs } = n2;
patchFlag |= n1.patchFlag & 16;
const oldProps = n1.props || EMPTY_OBJ;
const newProps = n2.props || EMPTY_OBJ;
let vnodeHook;
parentComponent && toggleRecurse(parentComponent, false);
if (vnodeHook = newProps.onVnodeBeforeUpdate) {
invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
}
if (dirs) {
invokeDirectiveHook(n2, n1, parentComponent, "beforeUpdate");
}
parentComponent && toggleRecurse(parentComponent, true);
const areChildrenSVG = isSVG && n2.type !== "foreignObject";
if (dynamicChildren) {
patchBlockChildren(n1.dynamicChildren, dynamicChildren, el, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds);
} else if (!optimized) {
patchChildren(n1, n2, el, null, parentComponent, parentSuspense, areChildrenSVG, slotScopeIds, false);
}
if (patchFlag > 0) {
if (patchFlag & 16) {
patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);
} else {
if (patchFlag & 2) {
if (oldProps.class !== newProps.class) {
hostPatchProp(el, "class", null, newProps.class, isSVG);
}
}
if (patchFlag & 4) {
hostPatchProp(el, "style", oldProps.style, newProps.style, isSVG);
}
if (patchFlag & 8) {
const propsToUpdate = n2.dynamicProps;
for (let i = 0; i < propsToUpdate.length; i++) {
const key = propsToUpdate[i];
const prev = oldProps[key];
const next = newProps[key];
if (next !== prev || key === "value") {
hostPatchProp(el, key, prev, next, isSVG, n1.children, parentComponent, parentSuspense, unmountChildren);
}
}
}
}
if (patchFlag & 1) {
if (n1.children !== n2.children) {
hostSetElementText(el, n2.children);
}
}
} else if (!optimized && dynamicChildren == null) {
patchProps(el, n2, oldProps, newProps, parentComponent, parentSuspense, isSVG);
}
if ((vnodeHook = newProps.onVnodeUpdated) || dirs) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, n2, n1);
dirs && invokeDirectiveHook(n2, n1, parentComponent, "updated");
}, parentSuspense);
}
};
const patchBlockChildren = (oldChildren, newChildren, fallbackContainer, parentComponent, parentSuspense, isSVG, slotScopeIds) => {
for (let i = 0; i < newChildren.length; i++) {
const oldVNode = oldChildren[i];
const newVNode = newChildren[i];
const container = oldVNode.el && (oldVNode.type === Fragment || !isSameVNodeType(oldVNode, newVNode) || oldVNode.shapeFlag & (6 | 64)) ? hostParentNode(oldVNode.el) : fallbackContainer;
patch(oldVNode, newVNode, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, true);
}
};
const patchProps = (el, vnode, oldProps, newProps, parentComponent, parentSuspense, isSVG) => {
if (oldProps !== newProps) {
for (const key in newProps) {
if (isReservedProp(key))
continue;
const next = newProps[key];
const prev = oldProps[key];
if (next !== prev && key !== "value") {
hostPatchProp(el, key, prev, next, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);
}
}
if (oldProps !== EMPTY_OBJ) {
for (const key in oldProps) {
if (!isReservedProp(key) && !(key in newProps)) {
hostPatchProp(el, key, oldProps[key], null, isSVG, vnode.children, parentComponent, parentSuspense, unmountChildren);
}
}
}
if ("value" in newProps) {
hostPatchProp(el, "value", oldProps.value, newProps.value);
}
}
};
const processFragment = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
const fragmentStartAnchor = n2.el = n1 ? n1.el : hostCreateText("");
const fragmentEndAnchor = n2.anchor = n1 ? n1.anchor : hostCreateText("");
let { patchFlag, dynamicChildren, slotScopeIds: fragmentSlotScopeIds } = n2;
if (fragmentSlotScopeIds) {
slotScopeIds = slotScopeIds ? slotScopeIds.concat(fragmentSlotScopeIds) : fragmentSlotScopeIds;
}
if (n1 == null) {
hostInsert(fragmentStartAnchor, container, anchor);
hostInsert(fragmentEndAnchor, container, anchor);
mountChildren(n2.children, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else {
if (patchFlag > 0 && patchFlag & 64 && dynamicChildren && n1.dynamicChildren) {
patchBlockChildren(n1.dynamicChildren, dynamicChildren, container, parentComponent, parentSuspense, isSVG, slotScopeIds);
if (n2.key != null || parentComponent && n2 === parentComponent.subTree) {
traverseStaticChildren(n1, n2, true);
}
} else {
patchChildren(n1, n2, container, fragmentEndAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
}
}
};
const processComponent = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
n2.slotScopeIds = slotScopeIds;
if (n1 == null) {
if (n2.shapeFlag & 512) {
parentComponent.ctx.activate(n2, container, anchor, isSVG, optimized);
} else {
mountComponent(n2, container, anchor, parentComponent, parentSuspense, isSVG, optimized);
}
} else {
updateComponent(n1, n2, optimized);
}
};
const mountComponent = (initialVNode, container, anchor, parentComponent, parentSuspense, isSVG, optimized) => {
const instance = initialVNode.component = createComponentInstance(initialVNode, parentComponent, parentSuspense);
if (isKeepAlive(initialVNode)) {
instance.ctx.renderer = internals;
}
{
setupComponent(instance);
}
if (instance.asyncDep) {
parentSuspense && parentSuspense.registerDep(instance, setupRenderEffect);
if (!initialVNode.el) {
const placeholder = instance.subTree = createVNode(Comment);
processCommentNode(null, placeholder, container, anchor);
}
return;
}
setupRenderEffect(instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized);
};
const updateComponent = (n1, n2, optimized) => {
const instance = n2.component = n1.component;
if (shouldUpdateComponent(n1, n2, optimized)) {
if (instance.asyncDep && !instance.asyncResolved) {
updateComponentPreRender(instance, n2, optimized);
return;
} else {
instance.next = n2;
invalidateJob(instance.update);
instance.update();
}
} else {
n2.component = n1.component;
n2.el = n1.el;
instance.vnode = n2;
}
};
const setupRenderEffect = (instance, initialVNode, container, anchor, parentSuspense, isSVG, optimized) => {
const componentUpdateFn = () => {
if (!instance.isMounted) {
let vnodeHook;
const { el, props } = initialVNode;
const { bm, m, parent } = instance;
const isAsyncWrapperVNode = isAsyncWrapper(initialVNode);
toggleRecurse(instance, false);
if (bm) {
invokeArrayFns(bm);
}
if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeBeforeMount)) {
invokeVNodeHook(vnodeHook, parent, initialVNode);
}
toggleRecurse(instance, true);
if (el && hydrateNode) {
const hydrateSubTree = () => {
instance.subTree = renderComponentRoot(instance);
hydrateNode(el, instance.subTree, instance, parentSuspense, null);
};
if (isAsyncWrapperVNode) {
initialVNode.type.__asyncLoader().then(() => !instance.isUnmounted && hydrateSubTree());
} else {
hydrateSubTree();
}
} else {
const subTree = instance.subTree = renderComponentRoot(instance);
patch(null, subTree, container, anchor, instance, parentSuspense, isSVG);
initialVNode.el = subTree.el;
}
if (m) {
queuePostRenderEffect(m, parentSuspense);
}
if (!isAsyncWrapperVNode && (vnodeHook = props && props.onVnodeMounted)) {
const scopedInitialVNode = initialVNode;
queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, scopedInitialVNode), parentSuspense);
}
if (initialVNode.shapeFlag & 256) {
instance.a && queuePostRenderEffect(instance.a, parentSuspense);
}
instance.isMounted = true;
initialVNode = container = anchor = null;
} else {
let { next, bu, u, parent, vnode } = instance;
let originNext = next;
let vnodeHook;
toggleRecurse(instance, false);
if (next) {
next.el = vnode.el;
updateComponentPreRender(instance, next, optimized);
} else {
next = vnode;
}
if (bu) {
invokeArrayFns(bu);
}
if (vnodeHook = next.props && next.props.onVnodeBeforeUpdate) {
invokeVNodeHook(vnodeHook, parent, next, vnode);
}
toggleRecurse(instance, true);
const nextTree = renderComponentRoot(instance);
const prevTree = instance.subTree;
instance.subTree = nextTree;
patch(prevTree, nextTree, hostParentNode(prevTree.el), getNextHostNode(prevTree), instance, parentSuspense, isSVG);
next.el = nextTree.el;
if (originNext === null) {
updateHOCHostEl(instance, nextTree.el);
}
if (u) {
queuePostRenderEffect(u, parentSuspense);
}
if (vnodeHook = next.props && next.props.onVnodeUpdated) {
queuePostRenderEffect(() => invokeVNodeHook(vnodeHook, parent, next, vnode), parentSuspense);
}
}
};
const effect = instance.effect = new ReactiveEffect(componentUpdateFn, () => queueJob(instance.update), instance.scope);
const update = instance.update = effect.run.bind(effect);
update.id = instance.uid;
toggleRecurse(instance, true);
update();
};
const updateComponentPreRender = (instance, nextVNode, optimized) => {
nextVNode.component = instance;
const prevProps = instance.vnode.props;
instance.vnode = nextVNode;
instance.next = null;
updateProps(instance, nextVNode.props, prevProps, optimized);
updateSlots(instance, nextVNode.children, optimized);
pauseTracking();
flushPreFlushCbs(void 0, instance.update);
resetTracking();
};
const patchChildren = (n1, n2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized = false) => {
const c1 = n1 && n1.children;
const prevShapeFlag = n1 ? n1.shapeFlag : 0;
const c2 = n2.children;
const { patchFlag, shapeFlag } = n2;
if (patchFlag > 0) {
if (patchFlag & 128) {
patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
return;
} else if (patchFlag & 256) {
patchUnkeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
return;
}
}
if (shapeFlag & 8) {
if (prevShapeFlag & 16) {
unmountChildren(c1, parentComponent, parentSuspense);
}
if (c2 !== c1) {
hostSetElementText(container, c2);
}
} else {
if (prevShapeFlag & 16) {
if (shapeFlag & 16) {
patchKeyedChildren(c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else {
unmountChildren(c1, parentComponent, parentSuspense, true);
}
} else {
if (prevShapeFlag & 8) {
hostSetElementText(container, "");
}
if (shapeFlag & 16) {
mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
}
}
}
};
const patchUnkeyedChildren = (c1, c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
c1 = c1 || EMPTY_ARR;
c2 = c2 || EMPTY_ARR;
const oldLength = c1.length;
const newLength = c2.length;
const commonLength = Math.min(oldLength, newLength);
let i;
for (i = 0; i < commonLength; i++) {
const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
patch(c1[i], nextChild, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
}
if (oldLength > newLength) {
unmountChildren(c1, parentComponent, parentSuspense, true, false, commonLength);
} else {
mountChildren(c2, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized, commonLength);
}
};
const patchKeyedChildren = (c1, c2, container, parentAnchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized) => {
let i = 0;
const l2 = c2.length;
let e1 = c1.length - 1;
let e2 = l2 - 1;
while (i <= e1 && i <= e2) {
const n1 = c1[i];
const n2 = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
if (isSameVNodeType(n1, n2)) {
patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else {
break;
}
i++;
}
while (i <= e1 && i <= e2) {
const n1 = c1[e1];
const n2 = c2[e2] = optimized ? cloneIfMounted(c2[e2]) : normalizeVNode(c2[e2]);
if (isSameVNodeType(n1, n2)) {
patch(n1, n2, container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else {
break;
}
e1--;
e2--;
}
if (i > e1) {
if (i <= e2) {
const nextPos = e2 + 1;
const anchor = nextPos < l2 ? c2[nextPos].el : parentAnchor;
while (i <= e2) {
patch(null, c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]), container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
i++;
}
}
} else if (i > e2) {
while (i <= e1) {
unmount(c1[i], parentComponent, parentSuspense, true);
i++;
}
} else {
const s1 = i;
const s2 = i;
const keyToNewIndexMap = /* @__PURE__ */ new Map();
for (i = s2; i <= e2; i++) {
const nextChild = c2[i] = optimized ? cloneIfMounted(c2[i]) : normalizeVNode(c2[i]);
if (nextChild.key != null) {
keyToNewIndexMap.set(nextChild.key, i);
}
}
let j;
let patched = 0;
const toBePatched = e2 - s2 + 1;
let moved = false;
let maxNewIndexSoFar = 0;
const newIndexToOldIndexMap = new Array(toBePatched);
for (i = 0; i < toBePatched; i++)
newIndexToOldIndexMap[i] = 0;
for (i = s1; i <= e1; i++) {
const prevChild = c1[i];
if (patched >= toBePatched) {
unmount(prevChild, parentComponent, parentSuspense, true);
continue;
}
let newIndex;
if (prevChild.key != null) {
newIndex = keyToNewIndexMap.get(prevChild.key);
} else {
for (j = s2; j <= e2; j++) {
if (newIndexToOldIndexMap[j - s2] === 0 && isSameVNodeType(prevChild, c2[j])) {
newIndex = j;
break;
}
}
}
if (newIndex === void 0) {
unmount(prevChild, parentComponent, parentSuspense, true);
} else {
newIndexToOldIndexMap[newIndex - s2] = i + 1;
if (newIndex >= maxNewIndexSoFar) {
maxNewIndexSoFar = newIndex;
} else {
moved = true;
}
patch(prevChild, c2[newIndex], container, null, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
patched++;
}
}
const increasingNewIndexSequence = moved ? getSequence(newIndexToOldIndexMap) : EMPTY_ARR;
j = increasingNewIndexSequence.length - 1;
for (i = toBePatched - 1; i >= 0; i--) {
const nextIndex = s2 + i;
const nextChild = c2[nextIndex];
const anchor = nextIndex + 1 < l2 ? c2[nextIndex + 1].el : parentAnchor;
if (newIndexToOldIndexMap[i] === 0) {
patch(null, nextChild, container, anchor, parentComponent, parentSuspense, isSVG, slotScopeIds, optimized);
} else if (moved) {
if (j < 0 || i !== increasingNewIndexSequence[j]) {
move(nextChild, container, anchor, 2);
} else {
j--;
}
}
}
}
};
const move = (vnode, container, anchor, moveType, parentSuspense = null) => {
const { el, type, transition, children, shapeFlag } = vnode;
if (shapeFlag & 6) {
move(vnode.component.subTree, container, anchor, moveType);
return;
}
if (shapeFlag & 128) {
vnode.suspense.move(container, anchor, moveType);
return;
}
if (shapeFlag & 64) {
type.move(vnode, container, anchor, internals);
return;
}
if (type === Fragment) {
hostInsert(el, container, anchor);
for (let i = 0; i < children.length; i++) {
move(children[i], container, anchor, moveType);
}
hostInsert(vnode.anchor, container, anchor);
return;
}
if (type === Static) {
moveStaticNode(vnode, container, anchor);
return;
}
const needTransition = moveType !== 2 && shapeFlag & 1 && transition;
if (needTransition) {
if (moveType === 0) {
transition.beforeEnter(el);
hostInsert(el, container, anchor);
queuePostRenderEffect(() => transition.enter(el), parentSuspense);
} else {
const { leave, delayLeave, afterLeave } = transition;
const remove3 = () => hostInsert(el, container, anchor);
const performLeave = () => {
leave(el, () => {
remove3();
afterLeave && afterLeave();
});
};
if (delayLeave) {
delayLeave(el, remove3, performLeave);
} else {
performLeave();
}
}
} else {
hostInsert(el, container, anchor);
}
};
const unmount = (vnode, parentComponent, parentSuspense, doRemove = false, optimized = false) => {
const { type, props, ref: ref2, children, dynamicChildren, shapeFlag, patchFlag, dirs } = vnode;
if (ref2 != null) {
setRef(ref2, null, parentSuspense, vnode, true);
}
if (shapeFlag & 256) {
parentComponent.ctx.deactivate(vnode);
return;
}
const shouldInvokeDirs = shapeFlag & 1 && dirs;
const shouldInvokeVnodeHook = !isAsyncWrapper(vnode);
let vnodeHook;
if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeBeforeUnmount)) {
invokeVNodeHook(vnodeHook, parentComponent, vnode);
}
if (shapeFlag & 6) {
unmountComponent(vnode.component, parentSuspense, doRemove);
} else {
if (shapeFlag & 128) {
vnode.suspense.unmount(parentSuspense, doRemove);
return;
}
if (shouldInvokeDirs) {
invokeDirectiveHook(vnode, null, parentComponent, "beforeUnmount");
}
if (shapeFlag & 64) {
vnode.type.remove(vnode, parentComponent, parentSuspense, optimized, internals, doRemove);
} else if (dynamicChildren && (type !== Fragment || patchFlag > 0 && patchFlag & 64)) {
unmountChildren(dynamicChildren, parentComponent, parentSuspense, false, true);
} else if (type === Fragment && patchFlag & (128 | 256) || !optimized && shapeFlag & 16) {
unmountChildren(children, parentComponent, parentSuspense);
}
if (doRemove) {
remove2(vnode);
}
}
if (shouldInvokeVnodeHook && (vnodeHook = props && props.onVnodeUnmounted) || shouldInvokeDirs) {
queuePostRenderEffect(() => {
vnodeHook && invokeVNodeHook(vnodeHook, parentComponent, vnode);
shouldInvokeDirs && invokeDirectiveHook(vnode, null, parentComponent, "unmounted");
}, parentSuspense);
}
};
const remove2 = (vnode) => {
const { type, el, anchor, transition } = vnode;
if (type === Fragment) {
removeFragment(el, anchor);
return;
}
if (type === Static) {
removeStaticNode(vnode);
return;
}
const performRemove = () => {
hostRemove(el);
if (transition && !transition.persisted && transition.afterLeave) {
transition.afterLeave();
}
};
if (vnode.shapeFlag & 1 && transition && !transition.persisted) {
const { leave, delayLeave } = transition;
const performLeave = () => leave(el, performRemove);
if (delayLeave) {
delayLeave(vnode.el, performRemove, performLeave);
} else {
performLeave();
}
} else {
performRemove();
}
};
const removeFragment = (cur, end) => {
let next;
while (cur !== end) {
next = hostNextSibling(cur);
hostRemove(cur);
cur = next;
}
hostRemove(end);
};
const unmountComponent = (instance, parentSuspense, doRemove) => {
const { bum, scope, update, subTree, um } = instance;
if (bum) {
invokeArrayFns(bum);
}
scope.stop();
if (update) {
update.active = false;
unmount(subTree, instance, parentSuspense, doRemove);
}
if (um) {
queuePostRenderEffect(um, parentSuspense);
}
queuePostRenderEffect(() => {
instance.isUnmounted = true;
}, parentSuspense);
if (parentSuspense && parentSuspense.pendingBranch && !parentSuspense.isUnmounted && instance.asyncDep && !instance.asyncResolved && instance.suspenseId === parentSuspense.pendingId) {
parentSuspense.deps--;
if (parentSuspense.deps === 0) {
parentSuspense.resolve();
}
}
};
const unmountChildren = (children, parentComponent, parentSuspense, doRemove = false, optimized = false, start2 = 0) => {
for (let i = start2; i < children.length; i++) {
unmount(children[i], parentComponent, parentSuspense, doRemove, optimized);
}
};
const getNextHostNode = (vnode) => {
if (vnode.shapeFlag & 6) {
return getNextHostNode(vnode.component.subTree);
}
if (vnode.shapeFlag & 128) {
return vnode.suspense.next();
}
return hostNextSibling(vnode.anchor || vnode.el);
};
const render = (vnode, container, isSVG) => {
if (vnode == null) {
if (container._vnode) {
unmount(container._vnode, null, null, true);
}
} else {
patch(container._vnode || null, vnode, container, null, null, null, isSVG);
}
flushPostFlushCbs();
container._vnode = vnode;
};
const internals = {
p: patch,
um: unmount,
m: move,
r: remove2,
mt: mountComponent,
mc: mountChildren,
pc: patchChildren,
pbc: patchBlockChildren,
n: getNextHostNode,
o: options
};
let hydrate;
let hydrateNode;
if (createHydrationFns) {
[hydrate, hydrateNode] = createHydrationFns(internals);
}
return {
render,
hydrate,
createApp: createAppAPI(render, hydrate)
};
}
function toggleRecurse({ effect, update }, allowed) {
effect.allowRecurse = update.allowRecurse = allowed;
}
function traverseStaticChildren(n1, n2, shallow = false) {
const ch1 = n1.children;
const ch2 = n2.children;
if (isArray$2(ch1) && isArray$2(ch2)) {
for (let i = 0; i < ch1.length; i++) {
const c1 = ch1[i];
let c2 = ch2[i];
if (c2.shapeFlag & 1 && !c2.dynamicChildren) {
if (c2.patchFlag <= 0 || c2.patchFlag === 32) {
c2 = ch2[i] = cloneIfMounted(ch2[i]);
c2.el = c1.el;
}
if (!shallow)
traverseStaticChildren(c1, c2);
}
}
}
}
function getSequence(arr) {
const p2 = arr.slice();
const result = [0];
let i, j, u, v, c;
const len = arr.length;
for (i = 0; i < len; i++) {
const arrI = arr[i];
if (arrI !== 0) {
j = result[result.length - 1];
if (arr[j] < arrI) {
p2[i] = j;
result.push(i);
continue;
}
u = 0;
v = result.length - 1;
while (u < v) {
c = u + v >> 1;
if (arr[result[c]] < arrI) {
u = c + 1;
} else {
v = c;
}
}
if (arrI < arr[result[u]]) {
if (u > 0) {
p2[i] = result[u - 1];
}
result[u] = i;
}
}
}
u = result.length;
v = result[u - 1];
while (u-- > 0) {
result[u] = v;
v = p2[v];
}
return result;
}
const isTeleport = (type) => type.__isTeleport;
const COMPONENTS = "components";
function resolveComponent(name2, maybeSelfReference) {
return resolveAsset(COMPONENTS, name2, true, maybeSelfReference) || name2;
}
const NULL_DYNAMIC_COMPONENT = Symbol();
function resolveDynamicComponent(component) {
if (isString(component)) {
return resolveAsset(COMPONENTS, component, false) || component;
} else {
return component || NULL_DYNAMIC_COMPONENT;
}
}
function resolveAsset(type, name2, warnMissing = true, maybeSelfReference = false) {
const instance = currentRenderingInstance || currentInstance;
if (instance) {
const Component = instance.type;
if (type === COMPONENTS) {
const selfName = getComponentName(Component);
if (selfName && (selfName === name2 || selfName === camelize(name2) || selfName === capitalize(camelize(name2)))) {
return Component;
}
}
const res = resolve(instance[type] || Component[type], name2) || resolve(instance.appContext[type], name2);
if (!res && maybeSelfReference) {
return Component;
}
return res;
}
}
function resolve(registry, name2) {
return registry && (registry[name2] || registry[camelize(name2)] || registry[capitalize(camelize(name2))]);
}
const Fragment = Symbol(void 0);
const Text = Symbol(void 0);
const Comment = Symbol(void 0);
const Static = Symbol(void 0);
const blockStack = [];
let currentBlock = null;
function openBlock(disableTracking = false) {
blockStack.push(currentBlock = disableTracking ? null : []);
}
function closeBlock() {
blockStack.pop();
currentBlock = blockStack[blockStack.length - 1] || null;
}
let isBlockTreeEnabled = 1;
function setBlockTracking(value) {
isBlockTreeEnabled += value;
}
function setupBlock(vnode) {
vnode.dynamicChildren = isBlockTreeEnabled > 0 ? currentBlock || EMPTY_ARR : null;
closeBlock();
if (isBlockTreeEnabled > 0 && currentBlock) {
currentBlock.push(vnode);
}
return vnode;
}
function createElementBlock(type, props, children, patchFlag, dynamicProps, shapeFlag) {
return setupBlock(createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, true));
}
function createBlock(type, props, children, patchFlag, dynamicProps) {
return setupBlock(createVNode(type, props, children, patchFlag, dynamicProps, true));
}
function isVNode(value) {
return value ? value.__v_isVNode === true : false;
}
function isSameVNodeType(n1, n2) {
return n1.type === n2.type && n1.key === n2.key;
}
const InternalObjectKey = `__vInternal`;
const normalizeKey = ({ key }) => key != null ? key : null;
const normalizeRef = ({ ref: ref2, ref_key, ref_for }) => {
return ref2 != null ? isString(ref2) || isRef(ref2) || isFunction(ref2) ? { i: currentRenderingInstance, r: ref2, k: ref_key, f: !!ref_for } : ref2 : null;
};
function createBaseVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, shapeFlag = type === Fragment ? 0 : 1, isBlockNode = false, needFullChildrenNormalization = false) {
const vnode = {
__v_isVNode: true,
__v_skip: true,
type,
props,
key: props && normalizeKey(props),
ref: props && normalizeRef(props),
scopeId: currentScopeId,
slotScopeIds: null,
children,
component: null,
suspense: null,
ssContent: null,
ssFallback: null,
dirs: null,
transition: null,
el: null,
anchor: null,
target: null,
targetAnchor: null,
staticCount: 0,
shapeFlag,
patchFlag,
dynamicProps,
dynamicChildren: null,
appContext: null
};
if (needFullChildrenNormalization) {
normalizeChildren(vnode, children);
if (shapeFlag & 128) {
type.normalize(vnode);
}
} else if (children) {
vnode.shapeFlag |= isString(children) ? 8 : 16;
}
if (isBlockTreeEnabled > 0 && !isBlockNode && currentBlock && (vnode.patchFlag > 0 || shapeFlag & 6) && vnode.patchFlag !== 32) {
currentBlock.push(vnode);
}
return vnode;
}
const createVNode = _createVNode;
function _createVNode(type, props = null, children = null, patchFlag = 0, dynamicProps = null, isBlockNode = false) {
if (!type || type === NULL_DYNAMIC_COMPONENT) {
type = Comment;
}
if (isVNode(type)) {
const cloned = cloneVNode(type, props, true);
if (children) {
normalizeChildren(cloned, children);
}
return cloned;
}
if (isClassComponent(type)) {
type = type.__vccOpts;
}
if (props) {
props = guardReactiveProps(props);
let { class: klass, style } = props;
if (klass && !isString(klass)) {
props.class = normalizeClass(klass);
}
if (isObject$3(style)) {
if (isProxy(style) && !isArray$2(style)) {
style = extend({}, style);
}
props.style = normalizeStyle(style);
}
}
const shapeFlag = isString(type) ? 1 : isSuspense(type) ? 128 : isTeleport(type) ? 64 : isObject$3(type) ? 4 : isFunction(type) ? 2 : 0;
return createBaseVNode(type, props, children, patchFlag, dynamicProps, shapeFlag, isBlockNode, true);
}
function guardReactiveProps(props) {
if (!props)
return null;
return isProxy(props) || InternalObjectKey in props ? extend({}, props) : props;
}
function cloneVNode(vnode, extraProps, mergeRef = false) {
const { props, ref: ref2, patchFlag, children } = vnode;
const mergedProps = extraProps ? mergeProps(props || {}, extraProps) : props;
const cloned = {
__v_isVNode: true,
__v_skip: true,
type: vnode.type,
props: mergedProps,
key: mergedProps && normalizeKey(mergedProps),
ref: extraProps && extraProps.ref ? mergeRef && ref2 ? isArray$2(ref2) ? ref2.concat(normalizeRef(extraProps)) : [ref2, normalizeRef(extraProps)] : normalizeRef(extraProps) : ref2,
scopeId: vnode.scopeId,
slotScopeIds: vnode.slotScopeIds,
children,
target: vnode.target,
targetAnchor: vnode.targetAnchor,
staticCount: vnode.staticCount,
shapeFlag: vnode.shapeFlag,
patchFlag: extraProps && vnode.type !== Fragment ? patchFlag === -1 ? 16 : patchFlag | 16 : patchFlag,
dynamicProps: vnode.dynamicProps,
dynamicChildren: vnode.dynamicChildren,
appContext: vnode.appContext,
dirs: vnode.dirs,
transition: vnode.transition,
component: vnode.component,
suspense: vnode.suspense,
ssContent: vnode.ssContent && cloneVNode(vnode.ssContent),
ssFallback: vnode.ssFallback && cloneVNode(vnode.ssFallback),
el: vnode.el,
anchor: vnode.anchor
};
return cloned;
}
function createTextVNode(text = " ", flag = 0) {
return createVNode(Text, null, text, flag);
}
function normalizeVNode(child) {
if (child == null || typeof child === "boolean") {
return createVNode(Comment);
} else if (isArray$2(child)) {
return createVNode(Fragment, null, child.slice());
} else if (typeof child === "object") {
return cloneIfMounted(child);
} else {
return createVNode(Text, null, String(child));
}
}
function cloneIfMounted(child) {
return child.el === null || child.memo ? child : cloneVNode(child);
}
function normalizeChildren(vnode, children) {
let type = 0;
const { shapeFlag } = vnode;
if (children == null) {
children = null;
} else if (isArray$2(children)) {
type = 16;
} else if (typeof children === "object") {
if (shapeFlag & (1 | 64)) {
const slot = children.default;
if (slot) {
slot._c && (slot._d = false);
normalizeChildren(vnode, slot());
slot._c && (slot._d = true);
}
return;
} else {
type = 32;
const slotFlag = children._;
if (!slotFlag && !(InternalObjectKey in children)) {
children._ctx = currentRenderingInstance;
} else if (slotFlag === 3 && currentRenderingInstance) {
if (currentRenderingInstance.slots._ === 1) {
children._ = 1;
} else {
children._ = 2;
vnode.patchFlag |= 1024;
}
}
}
} else if (isFunction(children)) {
children = { default: children, _ctx: currentRenderingInstance };
type = 32;
} else {
children = String(children);
if (shapeFlag & 64) {
type = 16;
children = [createTextVNode(children)];
} else {
type = 8;
}
}
vnode.children = children;
vnode.shapeFlag |= type;
}
function mergeProps(...args) {
const ret = {};
for (let i = 0; i < args.length; i++) {
const toMerge = args[i];
for (const key in toMerge) {
if (key === "class") {
if (ret.class !== toMerge.class) {
ret.class = normalizeClass([ret.class, toMerge.class]);
}
} else if (key === "style") {
ret.style = normalizeStyle([ret.style, toMerge.style]);
} else if (isOn(key)) {
const existing = ret[key];
const incoming = toMerge[key];
if (incoming && existing !== incoming && !(isArray$2(existing) && existing.includes(incoming))) {
ret[key] = existing ? [].concat(existing, incoming) : incoming;
}
} else if (key !== "") {
ret[key] = toMerge[key];
}
}
}
return ret;
}
function invokeVNodeHook(hook, instance, vnode, prevVNode = null) {
callWithAsyncErrorHandling(hook, instance, 7, [
vnode,
prevVNode
]);
}
function renderList(source, renderItem, cache, index2) {
let ret;
const cached = cache && cache[index2];
if (isArray$2(source) || isString(source)) {
ret = new Array(source.length);
for (let i = 0, l = source.length; i < l; i++) {
ret[i] = renderItem(source[i], i, void 0, cached && cached[i]);
}
} else if (typeof source === "number") {
ret = new Array(source);
for (let i = 0; i < source; i++) {
ret[i] = renderItem(i + 1, i, void 0, cached && cached[i]);
}
} else if (isObject$3(source)) {
if (source[Symbol.iterator]) {
ret = Array.from(source, (item, i) => renderItem(item, i, void 0, cached && cached[i]));
} else {
const keys2 = Object.keys(source);
ret = new Array(keys2.length);
for (let i = 0, l = keys2.length; i < l; i++) {
const key = keys2[i];
ret[i] = renderItem(source[key], key, i, cached && cached[i]);
}
}
} else {
ret = [];
}
if (cache) {
cache[index2] = ret;
}
return ret;
}
const getPublicInstance = (i) => {
if (!i)
return null;
if (isStatefulComponent(i))
return getExposeProxy(i) || i.proxy;
return getPublicInstance(i.parent);
};
const publicPropertiesMap = extend(/* @__PURE__ */ Object.create(null), {
$: (i) => i,
$el: (i) => i.vnode.el,
$data: (i) => i.data,
$props: (i) => i.props,
$attrs: (i) => i.attrs,
$slots: (i) => i.slots,
$refs: (i) => i.refs,
$parent: (i) => getPublicInstance(i.parent),
$root: (i) => getPublicInstance(i.root),
$emit: (i) => i.emit,
$options: (i) => resolveMergedOptions(i),
$forceUpdate: (i) => () => queueJob(i.update),
$nextTick: (i) => nextTick.bind(i.proxy),
$watch: (i) => instanceWatch.bind(i)
});
const PublicInstanceProxyHandlers = {
get({ _: instance }, key) {
const { ctx, setupState, data, props, accessCache, type, appContext } = instance;
let normalizedProps;
if (key[0] !== "$") {
const n = accessCache[key];
if (n !== void 0) {
switch (n) {
case 1:
return setupState[key];
case 2:
return data[key];
case 4:
return ctx[key];
case 3:
return props[key];
}
} else if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
accessCache[key] = 1;
return setupState[key];
} else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
accessCache[key] = 2;
return data[key];
} else if ((normalizedProps = instance.propsOptions[0]) && hasOwn(normalizedProps, key)) {
accessCache[key] = 3;
return props[key];
} else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
accessCache[key] = 4;
return ctx[key];
} else if (shouldCacheAccess) {
accessCache[key] = 0;
}
}
const publicGetter = publicPropertiesMap[key];
let cssModule, globalProperties;
if (publicGetter) {
if (key === "$attrs") {
track(instance, "get", key);
}
return publicGetter(instance);
} else if ((cssModule = type.__cssModules) && (cssModule = cssModule[key])) {
return cssModule;
} else if (ctx !== EMPTY_OBJ && hasOwn(ctx, key)) {
accessCache[key] = 4;
return ctx[key];
} else if (globalProperties = appContext.config.globalProperties, hasOwn(globalProperties, key)) {
{
return globalProperties[key];
}
} else
;
},
set({ _: instance }, key, value) {
const { data, setupState, ctx } = instance;
if (setupState !== EMPTY_OBJ && hasOwn(setupState, key)) {
setupState[key] = value;
return true;
} else if (data !== EMPTY_OBJ && hasOwn(data, key)) {
data[key] = value;
return true;
} else if (hasOwn(instance.props, key)) {
return false;
}
if (key[0] === "$" && key.slice(1) in instance) {
return false;
} else {
{
ctx[key] = value;
}
}
return true;
},
has({ _: { data, setupState, accessCache, ctx, appContext, propsOptions } }, key) {
let normalizedProps;
return !!accessCache[key] || data !== EMPTY_OBJ && hasOwn(data, key) || setupState !== EMPTY_OBJ && hasOwn(setupState, key) || (normalizedProps = propsOptions[0]) && hasOwn(normalizedProps, key) || hasOwn(ctx, key) || hasOwn(publicPropertiesMap, key) || hasOwn(appContext.config.globalProperties, key);
},
defineProperty(target, key, descriptor) {
if (descriptor.get != null) {
this.set(target, key, descriptor.get(), null);
} else if (descriptor.value != null) {
this.set(target, key, descriptor.value, null);
}
return Reflect.defineProperty(target, key, descriptor);
}
};
const emptyAppContext = createAppContext();
let uid$1 = 0;
function createComponentInstance(vnode, parent, suspense) {
const type = vnode.type;
const appContext = (parent ? parent.appContext : vnode.appContext) || emptyAppContext;
const instance = {
uid: uid$1++,
vnode,
type,
parent,
appContext,
root: null,
next: null,
subTree: null,
effect: null,
update: null,
scope: new EffectScope(true),
render: null,
proxy: null,
exposed: null,
exposeProxy: null,
withProxy: null,
provides: parent ? parent.provides : Object.create(appContext.provides),
accessCache: null,
renderCache: [],
components: null,
directives: null,
propsOptions: normalizePropsOptions(type, appContext),
emitsOptions: normalizeEmitsOptions(type, appContext),
emit: null,
emitted: null,
propsDefaults: EMPTY_OBJ,
inheritAttrs: type.inheritAttrs,
ctx: EMPTY_OBJ,
data: EMPTY_OBJ,
props: EMPTY_OBJ,
attrs: EMPTY_OBJ,
slots: EMPTY_OBJ,
refs: EMPTY_OBJ,
setupState: EMPTY_OBJ,
setupContext: null,
suspense,
suspenseId: suspense ? suspense.pendingId : 0,
asyncDep: null,
asyncResolved: false,
isMounted: false,
isUnmounted: false,
isDeactivated: false,
bc: null,
c: null,
bm: null,
m: null,
bu: null,
u: null,
um: null,
bum: null,
da: null,
a: null,
rtg: null,
rtc: null,
ec: null,
sp: null
};
{
instance.ctx = { _: instance };
}
instance.root = parent ? parent.root : instance;
instance.emit = emit$1.bind(null, instance);
if (vnode.ce) {
vnode.ce(instance);
}
return instance;
}
let currentInstance = null;
const setCurrentInstance = (instance) => {
currentInstance = instance;
instance.scope.on();
};
const unsetCurrentInstance = () => {
currentInstance && currentInstance.scope.off();
currentInstance = null;
};
function isStatefulComponent(instance) {
return instance.vnode.shapeFlag & 4;
}
let isInSSRComponentSetup = false;
function setupComponent(instance, isSSR = false) {
isInSSRComponentSetup = isSSR;
const { props, children } = instance.vnode;
const isStateful = isStatefulComponent(instance);
initProps(instance, props, isStateful, isSSR);
initSlots(instance, children);
const setupResult = isStateful ? setupStatefulComponent(instance, isSSR) : void 0;
isInSSRComponentSetup = false;
return setupResult;
}
function setupStatefulComponent(instance, isSSR) {
const Component = instance.type;
instance.accessCache = /* @__PURE__ */ Object.create(null);
instance.proxy = markRaw(new Proxy(instance.ctx, PublicInstanceProxyHandlers));
const { setup } = Component;
if (setup) {
const setupContext = instance.setupContext = setup.length > 1 ? createSetupContext(instance) : null;
setCurrentInstance(instance);
pauseTracking();
const setupResult = callWithErrorHandling(setup, instance, 0, [instance.props, setupContext]);
resetTracking();
unsetCurrentInstance();
if (isPromise(setupResult)) {
setupResult.then(unsetCurrentInstance, unsetCurrentInstance);
if (isSSR) {
return setupResult.then((resolvedResult) => {
handleSetupResult(instance, resolvedResult, isSSR);
}).catch((e) => {
handleError(e, instance, 0);
});
} else {
instance.asyncDep = setupResult;
}
} else {
handleSetupResult(instance, setupResult, isSSR);
}
} else {
finishComponentSetup(instance, isSSR);
}
}
function handleSetupResult(instance, setupResult, isSSR) {
if (isFunction(setupResult)) {
if (instance.type.__ssrInlineRender) {
instance.ssrRender = setupResult;
} else {
instance.render = setupResult;
}
} else if (isObject$3(setupResult)) {
instance.setupState = proxyRefs(setupResult);
} else
;
finishComponentSetup(instance, isSSR);
}
let compile;
function finishComponentSetup(instance, isSSR, skipOptions) {
const Component = instance.type;
if (!instance.render) {
if (!isSSR && compile && !Component.render) {
const template = Component.template;
if (template) {
const { isCustomElement, compilerOptions } = instance.appContext.config;
const { delimiters, compilerOptions: componentCompilerOptions } = Component;
const finalCompilerOptions = extend(extend({
isCustomElement,
delimiters
}, compilerOptions), componentCompilerOptions);
Component.render = compile(template, finalCompilerOptions);
}
}
instance.render = Component.render || NOOP;
}
{
setCurrentInstance(instance);
pauseTracking();
applyOptions(instance);
resetTracking();
unsetCurrentInstance();
}
}
function createAttrsProxy(instance) {
return new Proxy(instance.attrs, {
get(target, key) {
track(instance, "get", "$attrs");
return target[key];
}
});
}
function createSetupContext(instance) {
const expose = (exposed) => {
instance.exposed = exposed || {};
};
let attrs;
{
return {
get attrs() {
return attrs || (attrs = createAttrsProxy(instance));
},
slots: instance.slots,
emit: instance.emit,
expose
};
}
}
function getExposeProxy(instance) {
if (instance.exposed) {
return instance.exposeProxy || (instance.exposeProxy = new Proxy(proxyRefs(markRaw(instance.exposed)), {
get(target, key) {
if (key in target) {
return target[key];
} else if (key in publicPropertiesMap) {
return publicPropertiesMap[key](instance);
}
}
}));
}
}
function getComponentName(Component) {
return isFunction(Component) ? Component.displayName || Component.name : Component.name;
}
function isClassComponent(value) {
return isFunction(value) && "__vccOpts" in value;
}
const computed = (getterOrOptions, debugOptions) => {
return computed$1(getterOrOptions, debugOptions, isInSSRComponentSetup);
};
const version$2 = "3.2.31";
const svgNS = "http://www.w3.org/2000/svg";
const doc = typeof document !== "undefined" ? document : null;
const templateContainer = doc && doc.createElement("template");
const nodeOps = {
insert: (child, parent, anchor) => {
parent.insertBefore(child, anchor || null);
},
remove: (child) => {
const parent = child.parentNode;
if (parent) {
parent.removeChild(child);
}
},
createElement: (tag, isSVG, is, props) => {
const el = isSVG ? doc.createElementNS(svgNS, tag) : doc.createElement(tag, is ? { is } : void 0);
if (tag === "select" && props && props.multiple != null) {
el.setAttribute("multiple", props.multiple);
}
return el;
},
createText: (text) => doc.createTextNode(text),
createComment: (text) => doc.createComment(text),
setText: (node, text) => {
node.nodeValue = text;
},
setElementText: (el, text) => {
el.textContent = text;
},
parentNode: (node) => node.parentNode,
nextSibling: (node) => node.nextSibling,
querySelector: (selector) => doc.querySelector(selector),
setScopeId(el, id) {
el.setAttribute(id, "");
},
cloneNode(el) {
const cloned = el.cloneNode(true);
if (`_value` in el) {
cloned._value = el._value;
}
return cloned;
},
insertStaticContent(content, parent, anchor, isSVG, start2, end) {
const before = anchor ? anchor.previousSibling : parent.lastChild;
if (start2 && (start2 === end || start2.nextSibling)) {
while (true) {
parent.insertBefore(start2.cloneNode(true), anchor);
if (start2 === end || !(start2 = start2.nextSibling))
break;
}
} else {
templateContainer.innerHTML = isSVG ? `<svg>${content}</svg>` : content;
const template = templateContainer.content;
if (isSVG) {
const wrapper = template.firstChild;
while (wrapper.firstChild) {
template.appendChild(wrapper.firstChild);
}
template.removeChild(wrapper);
}
parent.insertBefore(template, anchor);
}
return [
before ? before.nextSibling : parent.firstChild,
anchor ? anchor.previousSibling : parent.lastChild
];
}
};
function patchClass(el, value, isSVG) {
const transitionClasses = el._vtc;
if (transitionClasses) {
value = (value ? [value, ...transitionClasses] : [...transitionClasses]).join(" ");
}
if (value == null) {
el.removeAttribute("class");
} else if (isSVG) {
el.setAttribute("class", value);
} else {
el.className = value;
}
}
function patchStyle(el, prev, next) {
const style = el.style;
const isCssString = isString(next);
if (next && !isCssString) {
for (const key in next) {
setStyle(style, key, next[key]);
}
if (prev && !isString(prev)) {
for (const key in prev) {
if (next[key] == null) {
setStyle(style, key, "");
}
}
}
} else {
const currentDisplay = style.display;
if (isCssString) {
if (prev !== next) {
style.cssText = next;
}
} else if (prev) {
el.removeAttribute("style");
}
if ("_vod" in el) {
style.display = currentDisplay;
}
}
}
const importantRE = /\s*!important$/;
function setStyle(style, name2, val) {
if (isArray$2(val)) {
val.forEach((v) => setStyle(style, name2, v));
} else {
if (name2.startsWith("--")) {
style.setProperty(name2, val);
} else {
const prefixed = autoPrefix(style, name2);
if (importantRE.test(val)) {
style.setProperty(hyphenate(prefixed), val.replace(importantRE, ""), "important");
} else {
style[prefixed] = val;
}
}
}
}
const prefixes = ["Webkit", "Moz", "ms"];
const prefixCache = {};
function autoPrefix(style, rawName) {
const cached = prefixCache[rawName];
if (cached) {
return cached;
}
let name2 = camelize(rawName);
if (name2 !== "filter" && name2 in style) {
return prefixCache[rawName] = name2;
}
name2 = capitalize(name2);
for (let i = 0; i < prefixes.length; i++) {
const prefixed = prefixes[i] + name2;
if (prefixed in style) {
return prefixCache[rawName] = prefixed;
}
}
return rawName;
}
const xlinkNS = "http://www.w3.org/1999/xlink";
function patchAttr(el, key, value, isSVG, instance) {
if (isSVG && key.startsWith("xlink:")) {
if (value == null) {
el.removeAttributeNS(xlinkNS, key.slice(6, key.length));
} else {
el.setAttributeNS(xlinkNS, key, value);
}
} else {
const isBoolean = isSpecialBooleanAttr(key);
if (value == null || isBoolean && !includeBooleanAttr(value)) {
el.removeAttribute(key);
} else {
el.setAttribute(key, isBoolean ? "" : value);
}
}
}
function patchDOMProp(el, key, value, prevChildren, parentComponent, parentSuspense, unmountChildren) {
if (key === "innerHTML" || key === "textContent") {
if (prevChildren) {
unmountChildren(prevChildren, parentComponent, parentSuspense);
}
el[key] = value == null ? "" : value;
return;
}
if (key === "value" && el.tagName !== "PROGRESS" && !el.tagName.includes("-")) {
el._value = value;
const newValue = value == null ? "" : value;
if (el.value !== newValue || el.tagName === "OPTION") {
el.value = newValue;
}
if (value == null) {
el.removeAttribute(key);
}
return;
}
if (value === "" || value == null) {
const type = typeof el[key];
if (type === "boolean") {
el[key] = includeBooleanAttr(value);
return;
} else if (value == null && type === "string") {
el[key] = "";
el.removeAttribute(key);
return;
} else if (type === "number") {
try {
el[key] = 0;
} catch (_a) {
}
el.removeAttribute(key);
return;
}
}
try {
el[key] = value;
} catch (e) {
}
}
let _getNow = Date.now;
let skipTimestampCheck = false;
if (typeof window !== "undefined") {
if (_getNow() > document.createEvent("Event").timeStamp) {
_getNow = () => performance.now();
}
const ffMatch = navigator.userAgent.match(/firefox\/(\d+)/i);
skipTimestampCheck = !!(ffMatch && Number(ffMatch[1]) <= 53);
}
let cachedNow = 0;
const p = Promise.resolve();
const reset = () => {
cachedNow = 0;
};
const getNow = () => cachedNow || (p.then(reset), cachedNow = _getNow());
function addEventListener(el, event, handler, options) {
el.addEventListener(event, handler, options);
}
function removeEventListener(el, event, handler, options) {
el.removeEventListener(event, handler, options);
}
function patchEvent(el, rawName, prevValue, nextValue, instance = null) {
const invokers = el._vei || (el._vei = {});
const existingInvoker = invokers[rawName];
if (nextValue && existingInvoker) {
existingInvoker.value = nextValue;
} else {
const [name2, options] = parseName(rawName);
if (nextValue) {
const invoker = invokers[rawName] = createInvoker(nextValue, instance);
addEventListener(el, name2, invoker, options);
} else if (existingInvoker) {
removeEventListener(el, name2, existingInvoker, options);
invokers[rawName] = void 0;
}
}
}
const optionsModifierRE = /(?:Once|Passive|Capture)$/;
function parseName(name2) {
let options;
if (optionsModifierRE.test(name2)) {
options = {};
let m;
while (m = name2.match(optionsModifierRE)) {
name2 = name2.slice(0, name2.length - m[0].length);
options[m[0].toLowerCase()] = true;
}
}
return [hyphenate(name2.slice(2)), options];
}
function createInvoker(initialValue, instance) {
const invoker = (e) => {
const timeStamp = e.timeStamp || _getNow();
if (skipTimestampCheck || timeStamp >= invoker.attached - 1) {
callWithAsyncErrorHandling(patchStopImmediatePropagation(e, invoker.value), instance, 5, [e]);
}
};
invoker.value = initialValue;
invoker.attached = getNow();
return invoker;
}
function patchStopImmediatePropagation(e, value) {
if (isArray$2(value)) {
const originalStop = e.stopImmediatePropagation;
e.stopImmediatePropagation = () => {
originalStop.call(e);
e._stopped = true;
};
return value.map((fn) => (e2) => !e2._stopped && fn && fn(e2));
} else {
return value;
}
}
const nativeOnRE = /^on[a-z]/;
const patchProp = (el, key, prevValue, nextValue, isSVG = false, prevChildren, parentComponent, parentSuspense, unmountChildren) => {
if (key === "class") {
patchClass(el, nextValue, isSVG);
} else if (key === "style") {
patchStyle(el, prevValue, nextValue);
} else if (isOn(key)) {
if (!isModelListener(key)) {
patchEvent(el, key, prevValue, nextValue, parentComponent);
}
} else if (key[0] === "." ? (key = key.slice(1), true) : key[0] === "^" ? (key = key.slice(1), false) : shouldSetAsProp(el, key, nextValue, isSVG)) {
patchDOMProp(el, key, nextValue, prevChildren, parentComponent, parentSuspense, unmountChildren);
} else {
if (key === "true-value") {
el._trueValue = nextValue;
} else if (key === "false-value") {
el._falseValue = nextValue;
}
patchAttr(el, key, nextValue, isSVG);
}
};
function shouldSetAsProp(el, key, value, isSVG) {
if (isSVG) {
if (key === "innerHTML" || key === "textContent") {
return true;
}
if (key in el && nativeOnRE.test(key) && isFunction(value)) {
return true;
}
return false;
}
if (key === "spellcheck" || key === "draggable") {
return false;
}
if (key === "form") {
return false;
}
if (key === "list" && el.tagName === "INPUT") {
return false;
}
if (key === "type" && el.tagName === "TEXTAREA") {
return false;
}
if (nativeOnRE.test(key) && isString(value)) {
return false;
}
return key in el;
}
const vShow = {
beforeMount(el, { value }, { transition }) {
el._vod = el.style.display === "none" ? "" : el.style.display;
if (transition && value) {
transition.beforeEnter(el);
} else {
setDisplay(el, value);
}
},
mounted(el, { value }, { transition }) {
if (transition && value) {
transition.enter(el);
}
},
updated(el, { value, oldValue }, { transition }) {
if (!value === !oldValue)
return;
if (transition) {
if (value) {
transition.beforeEnter(el);
setDisplay(el, true);
transition.enter(el);
} else {
transition.leave(el, () => {
setDisplay(el, false);
});
}
} else {
setDisplay(el, value);
}
},
beforeUnmount(el, { value }) {
setDisplay(el, value);
}
};
function setDisplay(el, value) {
el.style.display = value ? el._vod : "none";
}
const rendererOptions = extend({ patchProp }, nodeOps);
let renderer;
function ensureRenderer() {
return renderer || (renderer = createRenderer(rendererOptions));
}
const createApp = (...args) => {
const app = ensureRenderer().createApp(...args);
const { mount } = app;
app.mount = (containerOrSelector) => {
const container = normalizeContainer(containerOrSelector);
if (!container)
return;
const component = app._component;
if (!isFunction(component) && !component.render && !component.template) {
component.template = container.innerHTML;
}
container.innerHTML = "";
const proxy = mount(container, false, container instanceof SVGElement);
if (container instanceof Element) {
container.removeAttribute("v-cloak");
container.setAttribute("data-v-app", "");
}
return proxy;
};
return app;
};
function normalizeContainer(container) {
if (isString(container)) {
const res = document.querySelector(container);
return res;
}
return container;
}
var root$4 = _root;
var now$1 = function() {
return root$4.Date.now();
};
var now_1 = now$1;
var reWhitespace = /\s/;
function trimmedEndIndex$1(string) {
var index2 = string.length;
while (index2-- && reWhitespace.test(string.charAt(index2))) {
}
return index2;
}
var _trimmedEndIndex = trimmedEndIndex$1;
var trimmedEndIndex = _trimmedEndIndex;
var reTrimStart = /^\s+/;
function baseTrim$1(string) {
return string ? string.slice(0, trimmedEndIndex(string) + 1).replace(reTrimStart, "") : string;
}
var _baseTrim = baseTrim$1;
var baseGetTag$1 = _baseGetTag, isObjectLike$2 = isObjectLike_1;
var symbolTag$2 = "[object Symbol]";
function isSymbol$1(value) {
return typeof value == "symbol" || isObjectLike$2(value) && baseGetTag$1(value) == symbolTag$2;
}
var isSymbol_1 = isSymbol$1;
var baseTrim = _baseTrim, isObject$2 = isObject_1, isSymbol = isSymbol_1;
var NAN = 0 / 0;
var reIsBadHex = /^[-+]0x[0-9a-f]+$/i;
var reIsBinary = /^0b[01]+$/i;
var reIsOctal = /^0o[0-7]+$/i;
var freeParseInt = parseInt;
function toNumber$1(value) {
if (typeof value == "number") {
return value;
}
if (isSymbol(value)) {
return NAN;
}
if (isObject$2(value)) {
var other = typeof value.valueOf == "function" ? value.valueOf() : value;
value = isObject$2(other) ? other + "" : other;
}
if (typeof value != "string") {
return value === 0 ? value : +value;
}
value = baseTrim(value);
var isBinary = reIsBinary.test(value);
return isBinary || reIsOctal.test(value) ? freeParseInt(value.slice(2), isBinary ? 2 : 8) : reIsBadHex.test(value) ? NAN : +value;
}
var toNumber_1 = toNumber$1;
var isObject$1 = isObject_1, now = now_1, toNumber = toNumber_1;
var FUNC_ERROR_TEXT = "Expected a function";
var nativeMax = Math.max, nativeMin = Math.min;
function debounce(func, wait, options) {
var lastArgs, lastThis, maxWait, result, timerId, lastCallTime, lastInvokeTime = 0, leading = false, maxing = false, trailing = true;
if (typeof func != "function") {
throw new TypeError(FUNC_ERROR_TEXT);
}
wait = toNumber(wait) || 0;
if (isObject$1(options)) {
leading = !!options.leading;
maxing = "maxWait" in options;
maxWait = maxing ? nativeMax(toNumber(options.maxWait) || 0, wait) : maxWait;
trailing = "trailing" in options ? !!options.trailing : trailing;
}
function invokeFunc(time) {
var args = lastArgs, thisArg = lastThis;
lastArgs = lastThis = void 0;
lastInvokeTime = time;
result = func.apply(thisArg, args);
return result;
}
function leadingEdge(time) {
lastInvokeTime = time;
timerId = setTimeout(timerExpired, wait);
return leading ? invokeFunc(time) : result;
}
function remainingWait(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime, timeWaiting = wait - timeSinceLastCall;
return maxing ? nativeMin(timeWaiting, maxWait - timeSinceLastInvoke) : timeWaiting;
}
function shouldInvoke(time) {
var timeSinceLastCall = time - lastCallTime, timeSinceLastInvoke = time - lastInvokeTime;
return lastCallTime === void 0 || timeSinceLastCall >= wait || timeSinceLastCall < 0 || maxing && timeSinceLastInvoke >= maxWait;
}
function timerExpired() {
var time = now();
if (shouldInvoke(time)) {
return trailingEdge(time);
}
timerId = setTimeout(timerExpired, remainingWait(time));
}
function trailingEdge(time) {
timerId = void 0;
if (trailing && lastArgs) {
return invokeFunc(time);
}
lastArgs = lastThis = void 0;
return result;
}
function cancel() {
if (timerId !== void 0) {
clearTimeout(timerId);
}
lastInvokeTime = 0;
lastArgs = lastCallTime = lastThis = timerId = void 0;
}
function flush() {
return timerId === void 0 ? result : trailingEdge(now());
}
function debounced() {
var time = now(), isInvoking = shouldInvoke(time);
lastArgs = arguments;
lastThis = this;
lastCallTime = time;
if (isInvoking) {
if (timerId === void 0) {
return leadingEdge(lastCallTime);
}
if (maxing) {
clearTimeout(timerId);
timerId = setTimeout(timerExpired, wait);
return invokeFunc(lastCallTime);
}
}
if (timerId === void 0) {
timerId = setTimeout(timerExpired, wait);
}
return result;
}
debounced.cancel = cancel;
debounced.flush = flush;
return debounced;
}
var debounce_1 = debounce;
function arrayEach$1(array, iteratee) {
var index2 = -1, length = array == null ? 0 : array.length;
while (++index2 < length) {
if (iteratee(array[index2], index2, array) === false) {
break;
}
}
return array;
}
var _arrayEach = arrayEach$1;
var overArg = _overArg;
var nativeKeys$1 = overArg(Object.keys, Object);
var _nativeKeys = nativeKeys$1;
var isPrototype = _isPrototype, nativeKeys = _nativeKeys;
var objectProto$2 = Object.prototype;
var hasOwnProperty$1 = objectProto$2.hasOwnProperty;
function baseKeys$1(object) {
if (!isPrototype(object)) {
return nativeKeys(object);
}
var result = [];
for (var key in Object(object)) {
if (hasOwnProperty$1.call(object, key) && key != "constructor") {
result.push(key);
}
}
return result;
}
var _baseKeys = baseKeys$1;
var arrayLikeKeys = _arrayLikeKeys, baseKeys = _baseKeys, isArrayLike = isArrayLike_1;
function keys$3(object) {
return isArrayLike(object) ? arrayLikeKeys(object) : baseKeys(object);
}
var keys_1 = keys$3;
var copyObject$3 = _copyObject, keys$2 = keys_1;
function baseAssign$1(object, source) {
return object && copyObject$3(source, keys$2(source), object);
}
var _baseAssign = baseAssign$1;
var copyObject$2 = _copyObject, keysIn$2 = keysIn_1;
function baseAssignIn$1(object, source) {
return object && copyObject$2(source, keysIn$2(source), object);
}
var _baseAssignIn = baseAssignIn$1;
function arrayFilter$1(array, predicate) {
var index2 = -1, length = array == null ? 0 : array.length, resIndex = 0, result = [];
while (++index2 < length) {
var value = array[index2];
if (predicate(value, index2, array)) {
result[resIndex++] = value;
}
}
return result;
}
var _arrayFilter = arrayFilter$1;
function stubArray$2() {
return [];
}
var stubArray_1 = stubArray$2;
var arrayFilter = _arrayFilter, stubArray$1 = stubArray_1;
var objectProto$1 = Object.prototype;
var propertyIsEnumerable = objectProto$1.propertyIsEnumerable;
var nativeGetSymbols$1 = Object.getOwnPropertySymbols;
var getSymbols$3 = !nativeGetSymbols$1 ? stubArray$1 : function(object) {
if (object == null) {
return [];
}
object = Object(object);
return arrayFilter(nativeGetSymbols$1(object), function(symbol) {
return propertyIsEnumerable.call(object, symbol);
});
};
var _getSymbols = getSymbols$3;
var copyObject$1 = _copyObject, getSymbols$2 = _getSymbols;
function copySymbols$1(source, object) {
return copyObject$1(source, getSymbols$2(source), object);
}
var _copySymbols = copySymbols$1;
function arrayPush$2(array, values) {
var index2 = -1, length = values.length, offset = array.length;
while (++index2 < length) {
array[offset + index2] = values[index2];
}
return array;
}
var _arrayPush = arrayPush$2;
var arrayPush$1 = _arrayPush, getPrototype = _getPrototype, getSymbols$1 = _getSymbols, stubArray = stubArray_1;
var nativeGetSymbols = Object.getOwnPropertySymbols;
var getSymbolsIn$2 = !nativeGetSymbols ? stubArray : function(object) {
var result = [];
while (object) {
arrayPush$1(result, getSymbols$1(object));
object = getPrototype(object);
}
return result;
};
var _getSymbolsIn = getSymbolsIn$2;
var copyObject = _copyObject, getSymbolsIn$1 = _getSymbolsIn;
function copySymbolsIn$1(source, object) {
return copyObject(source, getSymbolsIn$1(source), object);
}
var _copySymbolsIn = copySymbolsIn$1;
var arrayPush = _arrayPush, isArray$1 = isArray_1;
function baseGetAllKeys$2(object, keysFunc, symbolsFunc) {
var result = keysFunc(object);
return isArray$1(object) ? result : arrayPush(result, symbolsFunc(object));
}
var _baseGetAllKeys = baseGetAllKeys$2;
var baseGetAllKeys$1 = _baseGetAllKeys, getSymbols = _getSymbols, keys$1 = keys_1;
function getAllKeys$1(object) {
return baseGetAllKeys$1(object, keys$1, getSymbols);
}
var _getAllKeys = getAllKeys$1;
var baseGetAllKeys = _baseGetAllKeys, getSymbolsIn = _getSymbolsIn, keysIn$1 = keysIn_1;
function getAllKeysIn$1(object) {
return baseGetAllKeys(object, keysIn$1, getSymbolsIn);
}
var _getAllKeysIn = getAllKeysIn$1;
var getNative$3 = _getNative, root$3 = _root;
var DataView$2 = getNative$3(root$3, "DataView");
var _DataView = DataView$2;
var getNative$2 = _getNative, root$2 = _root;
var Promise$2 = getNative$2(root$2, "Promise");
var _Promise = Promise$2;
var getNative$1 = _getNative, root$1 = _root;
var Set$2 = getNative$1(root$1, "Set");
var _Set = Set$2;
var getNative = _getNative, root = _root;
var WeakMap$2 = getNative(root, "WeakMap");
var _WeakMap = WeakMap$2;
var DataView$1 = _DataView, Map$1 = _Map, Promise$1 = _Promise, Set$1 = _Set, WeakMap$1 = _WeakMap, baseGetTag = _baseGetTag, toSource = _toSource;
var mapTag$3 = "[object Map]", objectTag$1 = "[object Object]", promiseTag = "[object Promise]", setTag$3 = "[object Set]", weakMapTag$1 = "[object WeakMap]";
var dataViewTag$2 = "[object DataView]";
var dataViewCtorString = toSource(DataView$1), mapCtorString = toSource(Map$1), promiseCtorString = toSource(Promise$1), setCtorString = toSource(Set$1), weakMapCtorString = toSource(WeakMap$1);
var getTag$3 = baseGetTag;
if (DataView$1 && getTag$3(new DataView$1(new ArrayBuffer(1))) != dataViewTag$2 || Map$1 && getTag$3(new Map$1()) != mapTag$3 || Promise$1 && getTag$3(Promise$1.resolve()) != promiseTag || Set$1 && getTag$3(new Set$1()) != setTag$3 || WeakMap$1 && getTag$3(new WeakMap$1()) != weakMapTag$1) {
getTag$3 = function(value) {
var result = baseGetTag(value), Ctor = result == objectTag$1 ? value.constructor : void 0, ctorString = Ctor ? toSource(Ctor) : "";
if (ctorString) {
switch (ctorString) {
case dataViewCtorString:
return dataViewTag$2;
case mapCtorString:
return mapTag$3;
case promiseCtorString:
return promiseTag;
case setCtorString:
return setTag$3;
case weakMapCtorString:
return weakMapTag$1;
}
}
return result;
};
}
var _getTag = getTag$3;
var objectProto = Object.prototype;
var hasOwnProperty = objectProto.hasOwnProperty;
function initCloneArray$1(array) {
var length = array.length, result = new array.constructor(length);
if (length && typeof array[0] == "string" && hasOwnProperty.call(array, "index")) {
result.index = array.index;
result.input = array.input;
}
return result;
}
var _initCloneArray = initCloneArray$1;
var cloneArrayBuffer$1 = _cloneArrayBuffer;
function cloneDataView$1(dataView, isDeep) {
var buffer = isDeep ? cloneArrayBuffer$1(dataView.buffer) : dataView.buffer;
return new dataView.constructor(buffer, dataView.byteOffset, dataView.byteLength);
}
var _cloneDataView = cloneDataView$1;
var reFlags = /\w*$/;
function cloneRegExp$1(regexp) {
var result = new regexp.constructor(regexp.source, reFlags.exec(regexp));
result.lastIndex = regexp.lastIndex;
return result;
}
var _cloneRegExp = cloneRegExp$1;
var Symbol$1 = _Symbol;
var symbolProto = Symbol$1 ? Symbol$1.prototype : void 0, symbolValueOf = symbolProto ? symbolProto.valueOf : void 0;
function cloneSymbol$1(symbol) {
return symbolValueOf ? Object(symbolValueOf.call(symbol)) : {};
}
var _cloneSymbol = cloneSymbol$1;
var cloneArrayBuffer = _cloneArrayBuffer, cloneDataView = _cloneDataView, cloneRegExp = _cloneRegExp, cloneSymbol = _cloneSymbol, cloneTypedArray = _cloneTypedArray;
var boolTag$1 = "[object Boolean]", dateTag$1 = "[object Date]", mapTag$2 = "[object Map]", numberTag$1 = "[object Number]", regexpTag$1 = "[object RegExp]", setTag$2 = "[object Set]", stringTag$1 = "[object String]", symbolTag$1 = "[object Symbol]";
var arrayBufferTag$1 = "[object ArrayBuffer]", dataViewTag$1 = "[object DataView]", float32Tag$1 = "[object Float32Array]", float64Tag$1 = "[object Float64Array]", int8Tag$1 = "[object Int8Array]", int16Tag$1 = "[object Int16Array]", int32Tag$1 = "[object Int32Array]", uint8Tag$1 = "[object Uint8Array]", uint8ClampedTag$1 = "[object Uint8ClampedArray]", uint16Tag$1 = "[object Uint16Array]", uint32Tag$1 = "[object Uint32Array]";
function initCloneByTag$1(object, tag, isDeep) {
var Ctor = object.constructor;
switch (tag) {
case arrayBufferTag$1:
return cloneArrayBuffer(object);
case boolTag$1:
case dateTag$1:
return new Ctor(+object);
case dataViewTag$1:
return cloneDataView(object, isDeep);
case float32Tag$1:
case float64Tag$1:
case int8Tag$1:
case int16Tag$1:
case int32Tag$1:
case uint8Tag$1:
case uint8ClampedTag$1:
case uint16Tag$1:
case uint32Tag$1:
return cloneTypedArray(object, isDeep);
case mapTag$2:
return new Ctor();
case numberTag$1:
case stringTag$1:
return new Ctor(object);
case regexpTag$1:
return cloneRegExp(object);
case setTag$2:
return new Ctor();
case symbolTag$1:
return cloneSymbol(object);
}
}
var _initCloneByTag = initCloneByTag$1;
var getTag$2 = _getTag, isObjectLike$1 = isObjectLike_1;
var mapTag$1 = "[object Map]";
function baseIsMap$1(value) {
return isObjectLike$1(value) && getTag$2(value) == mapTag$1;
}
var _baseIsMap = baseIsMap$1;
var baseIsMap = _baseIsMap, baseUnary$1 = _baseUnary, nodeUtil$1 = _nodeUtil.exports;
var nodeIsMap = nodeUtil$1 && nodeUtil$1.isMap;
var isMap$1 = nodeIsMap ? baseUnary$1(nodeIsMap) : baseIsMap;
var isMap_1 = isMap$1;
var getTag$1 = _getTag, isObjectLike = isObjectLike_1;
var setTag$1 = "[object Set]";
function baseIsSet$1(value) {
return isObjectLike(value) && getTag$1(value) == setTag$1;
}
var _baseIsSet = baseIsSet$1;
var baseIsSet = _baseIsSet, baseUnary = _baseUnary, nodeUtil = _nodeUtil.exports;
var nodeIsSet = nodeUtil && nodeUtil.isSet;
var isSet$1 = nodeIsSet ? baseUnary(nodeIsSet) : baseIsSet;
var isSet_1 = isSet$1;
var Stack = _Stack, arrayEach = _arrayEach, assignValue = _assignValue, baseAssign = _baseAssign, baseAssignIn = _baseAssignIn, cloneBuffer = _cloneBuffer.exports, copyArray = _copyArray, copySymbols = _copySymbols, copySymbolsIn = _copySymbolsIn, getAllKeys = _getAllKeys, getAllKeysIn = _getAllKeysIn, getTag = _getTag, initCloneArray = _initCloneArray, initCloneByTag = _initCloneByTag, initCloneObject = _initCloneObject, isArray = isArray_1, isBuffer$1 = isBuffer$4.exports, isMap = isMap_1, isObject = isObject_1, isSet = isSet_1, keys = keys_1, keysIn = keysIn_1;
var CLONE_DEEP_FLAG$1 = 1, CLONE_FLAT_FLAG = 2, CLONE_SYMBOLS_FLAG$1 = 4;
var argsTag = "[object Arguments]", arrayTag = "[object Array]", boolTag = "[object Boolean]", dateTag = "[object Date]", errorTag = "[object Error]", funcTag = "[object Function]", genTag = "[object GeneratorFunction]", mapTag = "[object Map]", numberTag = "[object Number]", objectTag = "[object Object]", regexpTag = "[object RegExp]", setTag = "[object Set]", stringTag = "[object String]", symbolTag = "[object Symbol]", weakMapTag = "[object WeakMap]";
var arrayBufferTag = "[object ArrayBuffer]", dataViewTag = "[object DataView]", float32Tag = "[object Float32Array]", float64Tag = "[object Float64Array]", int8Tag = "[object Int8Array]", int16Tag = "[object Int16Array]", int32Tag = "[object Int32Array]", uint8Tag = "[object Uint8Array]", uint8ClampedTag = "[object Uint8ClampedArray]", uint16Tag = "[object Uint16Array]", uint32Tag = "[object Uint32Array]";
var cloneableTags = {};
cloneableTags[argsTag] = cloneableTags[arrayTag] = cloneableTags[arrayBufferTag] = cloneableTags[dataViewTag] = cloneableTags[boolTag] = cloneableTags[dateTag] = cloneableTags[float32Tag] = cloneableTags[float64Tag] = cloneableTags[int8Tag] = cloneableTags[int16Tag] = cloneableTags[int32Tag] = cloneableTags[mapTag] = cloneableTags[numberTag] = cloneableTags[objectTag] = cloneableTags[regexpTag] = cloneableTags[setTag] = cloneableTags[stringTag] = cloneableTags[symbolTag] = cloneableTags[uint8Tag] = cloneableTags[uint8ClampedTag] = cloneableTags[uint16Tag] = cloneableTags[uint32Tag] = true;
cloneableTags[errorTag] = cloneableTags[funcTag] = cloneableTags[weakMapTag] = false;
function baseClone$1(value, bitmask, customizer, key, object, stack) {
var result, isDeep = bitmask & CLONE_DEEP_FLAG$1, isFlat = bitmask & CLONE_FLAT_FLAG, isFull = bitmask & CLONE_SYMBOLS_FLAG$1;
if (customizer) {
result = object ? customizer(value, key, object, stack) : customizer(value);
}
if (result !== void 0) {
return result;
}
if (!isObject(value)) {
return value;
}
var isArr = isArray(value);
if (isArr) {
result = initCloneArray(value);
if (!isDeep) {
return copyArray(value, result);
}
} else {
var tag = getTag(value), isFunc = tag == funcTag || tag == genTag;
if (isBuffer$1(value)) {
return cloneBuffer(value, isDeep);
}
if (tag == objectTag || tag == argsTag || isFunc && !object) {
result = isFlat || isFunc ? {} : initCloneObject(value);
if (!isDeep) {
return isFlat ? copySymbolsIn(value, baseAssignIn(result, value)) : copySymbols(value, baseAssign(result, value));
}
} else {
if (!cloneableTags[tag]) {
return object ? value : {};
}
result = initCloneByTag(value, tag, isDeep);
}
}
stack || (stack = new Stack());
var stacked = stack.get(value);
if (stacked) {
return stacked;
}
stack.set(value, result);
if (isSet(value)) {
value.forEach(function(subValue) {
result.add(baseClone$1(subValue, bitmask, customizer, subValue, value, stack));
});
} else if (isMap(value)) {
value.forEach(function(subValue, key2) {
result.set(key2, baseClone$1(subValue, bitmask, customizer, key2, value, stack));
});
}
var keysFunc = isFull ? isFlat ? getAllKeysIn : getAllKeys : isFlat ? keysIn : keys;
var props = isArr ? void 0 : keysFunc(value);
arrayEach(props || value, function(subValue, key2) {
if (props) {
key2 = subValue;
subValue = value[key2];
}
assignValue(result, key2, baseClone$1(subValue, bitmask, customizer, key2, value, stack));
});
return result;
}
var _baseClone = baseClone$1;
var baseClone = _baseClone;
var CLONE_DEEP_FLAG = 1, CLONE_SYMBOLS_FLAG = 4;
function cloneDeep(value) {
return baseClone(value, CLONE_DEEP_FLAG | CLONE_SYMBOLS_FLAG);
}
var cloneDeep_1 = cloneDeep;
function createReactive(key, target, updateListener) {
if (typeof GM_setValue === "function" && typeof GM_getValue === "function" && typeof GM_addValueChangeListener === "function" && typeof GM_removeValueChangeListener === "function") {
let watcher = createWatcher(key, target);
GM_addValueChangeListener(key, (name2, oldValue, newValue, remote) => {
if (remote === true) {
watcher == null ? void 0 : watcher();
deepChange(target, newValue);
updateListener == null ? void 0 : updateListener(oldValue, target);
watcher = createWatcher(key, target);
}
});
} else {
throw new Error("\u5F53\u524D\u73AF\u5883\u4E0D\u652F\u6301\u6CB9\u7334\u8DE8\u57DF\u901A\u4FE1");
}
}
function createWatcher(key, target) {
const cache = [];
return watch$1(() => cloneDeep_1(target), debounce_1((_new) => {
GM_setValue(key, JSON.parse(JSON.stringify(_new, function(key2, value) {
if (typeof value === "object" && value !== null) {
if (cache.indexOf(value) !== -1) {
return;
}
cache.push(value);
}
return value;
})));
}, 100), { deep: true });
}
function deepChange(origin, target) {
if (target) {
for (const key in origin) {
if (Object.prototype.hasOwnProperty.call(origin, key)) {
if (typeof origin[key] === "object" && !Array.isArray(origin[key])) {
deepChange(origin[key], target[key]);
} else {
origin[key] = target[key];
}
}
}
}
}
function domSearch(wrapper, root2 = window.document) {
const obj = /* @__PURE__ */ Object.create({});
Reflect.ownKeys(wrapper).forEach((key) => {
Reflect.set(obj, key, root2.querySelector(wrapper[key.toString()]));
});
return obj;
}
function domSearchAll(wrapper, root2 = window.document) {
const obj = /* @__PURE__ */ Object.create({});
Reflect.ownKeys(wrapper).forEach((key) => {
Reflect.set(obj, key, Array.from(root2.querySelectorAll(wrapper[key.toString()])));
});
return obj;
}
function dragElement(draggable, container, onMove) {
let pos1 = 0;
let pos2 = 0;
let pos3 = 0;
let pos4 = 0;
const draggableEl = draggable;
const containerEl = container;
if (draggableEl) {
draggableEl.onmousedown = dragMouseDown;
} else {
containerEl.onmousedown = dragMouseDown;
}
function dragMouseDown(e) {
e = e || window.event;
e.preventDefault();
pos3 = e.clientX;
pos4 = e.clientY;
document.onmouseup = closeDragElement;
document.onmousemove = elementDrag;
}
function elementDrag(e) {
e = e || window.event;
e.preventDefault();
pos1 = pos3 - e.clientX;
pos2 = pos4 - e.clientY;
pos3 = e.clientX;
pos4 = e.clientY;
containerEl.style.top = containerEl.offsetTop - pos2 + "px";
containerEl.style.left = containerEl.offsetLeft - pos1 + "px";
onMove(containerEl.offsetLeft - pos1, containerEl.offsetTop - pos2);
containerEl.style.bottom = "unset";
}
function closeDragElement() {
document.onmouseup = null;
document.onmousemove = null;
}
}
function searchIFrame(root2) {
var _a, _b;
let list = Array.from(root2.querySelectorAll("iframe"));
const result = [];
while (list.length) {
const frame = list.shift();
try {
if (frame && ((_a = frame == null ? void 0 : frame.contentWindow) == null ? void 0 : _a.document)) {
result.push(frame);
const frames = (_b = frame == null ? void 0 : frame.contentWindow) == null ? void 0 : _b.document.querySelectorAll("iframe");
list = list.concat(Array.from(frames || []));
}
} catch (e) {
console.log(e.message);
console.log({ frame });
}
}
return result;
}
function onComplete(callback, root2 = document) {
function checkReady() {
if (root2.readyState === "complete") {
callback();
root2.removeEventListener("readystatechange", checkReady);
}
}
checkReady();
root2.addEventListener("readystatechange", checkReady);
}
function onInteractive(callback, root2 = document) {
function checkLoaded() {
if (root2.readyState === "interactive") {
root2.removeEventListener("readystatechange", checkLoaded);
callback();
}
}
checkLoaded();
root2.addEventListener("readystatechange", checkLoaded);
}
var src$1 = {
compareTwoStrings,
findBestMatch
};
function compareTwoStrings(first, second) {
first = first.replace(/\s+/g, "");
second = second.replace(/\s+/g, "");
if (first === second)
return 1;
if (first.length < 2 || second.length < 2)
return 0;
let firstBigrams = /* @__PURE__ */ new Map();
for (let i = 0; i < first.length - 1; i++) {
const bigram = first.substring(i, i + 2);
const count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) + 1 : 1;
firstBigrams.set(bigram, count);
}
let intersectionSize = 0;
for (let i = 0; i < second.length - 1; i++) {
const bigram = second.substring(i, i + 2);
const count = firstBigrams.has(bigram) ? firstBigrams.get(bigram) : 0;
if (count > 0) {
firstBigrams.set(bigram, count - 1);
intersectionSize++;
}
}
return 2 * intersectionSize / (first.length + second.length - 2);
}
function findBestMatch(mainString, targetStrings) {
if (!areArgsValid(mainString, targetStrings))
throw new Error("Bad arguments: First argument should be a string, second should be an array of strings");
const ratings = [];
let bestMatchIndex = 0;
for (let i = 0; i < targetStrings.length; i++) {
const currentTargetString = targetStrings[i];
const currentRating = compareTwoStrings(mainString, currentTargetString);
ratings.push({ target: currentTargetString, rating: currentRating });
if (currentRating > ratings[bestMatchIndex].rating) {
bestMatchIndex = i;
}
}
const bestMatch = ratings[bestMatchIndex];
return { ratings, bestMatch, bestMatchIndex };
}
function areArgsValid(mainString, targetStrings) {
if (typeof mainString !== "string")
return false;
if (!Array.isArray(targetStrings))
return false;
if (!targetStrings.length)
return false;
if (targetStrings.find(function(s) {
return typeof s !== "string";
}))
return false;
return true;
}
function clearString(str, ...exclude) {
return str.trim().toLocaleLowerCase().replace(RegExp(`[^\\u4e00-\\u9fa5A-Za-z0-9${exclude.join("")}]*`, "g"), "");
}
function answerSimilar(answers, options) {
answers = answers.map(removeRedundant);
options = options.map(removeRedundant);
const similar = answers.length !== 0 ? options.map((option) => src$1.findBestMatch(option, answers).bestMatch) : options.map((opt) => ({ rating: 0, target: "" }));
return similar;
}
function removeRedundant(str) {
return (str == null ? void 0 : str.trim().replace(/[A-Z]{1}[^A-Za-z0-9\u4e00-\u9fa5]+([A-Za-z0-9\u4e00-\u9fa5]+)/, "$1")) || "";
}
function request(url, opts) {
return new Promise((resolve2, reject) => {
try {
const { contentType = "json", method = "get", type = "fetch", data = {}, headers = {} } = opts || {};
const env = isInBrowser() ? "browser" : "node";
if (type === "GM_xmlhttpRequest" && env === "browser") {
if (typeof GM_xmlhttpRequest !== "undefined") {
GM_xmlhttpRequest({
url,
method: method === "get" ? "GET" : "POST",
data: new URLSearchParams(data).toString(),
headers,
responseType: "json",
onload: (response) => {
if (response.status === 200) {
if (contentType === "json") {
try {
resolve2(JSON.parse(response.responseText));
} catch (error) {
reject(error);
}
} else {
resolve2(response.responseText);
}
} else {
reject(response.responseText);
}
},
onerror: reject
});
} else {
reject(new Error("GM_xmlhttpRequest is not defined"));
}
} else {
const fet = env === "node" ? require("node-fetch").default : fetch;
fet(url, { contentType, body: method === "post" ? data : void 0, method, headers }).then((response) => {
if (contentType === "json") {
response.json().then(resolve2).catch(reject);
} else {
response.text().then(resolve2).catch(reject);
}
}).catch((error) => {
reject(new Error(error));
});
}
} catch (error) {
reject(error);
}
});
}
async function sleep(period) {
return new Promise((resolve2) => {
setTimeout(resolve2, period);
});
}
function urlGlob(pattern, input = window.location.href) {
const re = new RegExp(pattern.replace(/([.?+^$[\]\\(){}|/-])/g, "\\$1").replace(/\*/g, ".*"));
return re.test(input);
}
function urlMatch(target, input = window.location.href) {
const targetURL = Array.isArray(target) ? target : [target];
return targetURL.some((target2) => typeof target2 === "string" ? urlGlob(target2) : target2.test(input));
}
function getCurrentRoutes(scripts2) {
const routes = [];
for (const script of scripts2) {
for (const route of script.routes || []) {
if (urlMatch(route.url)) {
routes.push(route);
}
}
}
return routes;
}
function getCurrentPanels(scripts2) {
let panels = [];
for (const script of scripts2) {
for (const panel of script.panels || []) {
if (urlMatch(panel.url)) {
panels.push(panel);
if (panel.children) {
panels = panels.concat(panel.children);
}
}
}
}
return panels;
}
function addFunctionEventListener(obj, type) {
const origin = obj[type];
return function(...args) {
const res = origin.apply(this, args);
const e = new Event(type.toString());
e.arguments = args;
window.dispatchEvent(e);
return res;
};
}
function getNumber(...nums) {
return nums.map((num) => typeof num === "number" ? num : void 0).find((num) => num !== void 0);
}
function isInBrowser() {
return typeof window !== "undefined" && typeof window.document !== "undefined";
}
function waitForRecognize(type) {
return new Promise((resolve2) => {
const timer = setInterval(() => {
const isRecognizing = type === "cx" ? useContext().cx.isRecognizing : useContext().zhs.isRecognizing;
if (isRecognizing === false) {
clearInterval(timer);
resolve2();
}
}, 100);
});
}
function useUnsafeWindow() {
return typeof unsafeWindow !== "undefined" ? unsafeWindow : void 0;
}
async function getRemoteSetting(port) {
for (let count = 3; count > 0; count--) {
try {
return await request(`http://localhost:${port}/setting`, {
type: "GM_xmlhttpRequest",
method: "get",
contentType: "json"
});
} catch (err) {
console.log("\u83B7\u53D6\u672C\u5730\u9898\u5E93\u914D\u7F6E\u5931\u8D25\uFF0C\u7B49\u5F85\u4E0B\u4E00\u6B21\u91CD\u8BD5\u3002", err);
}
await sleep(60 * 1e3);
}
}
function elementToRawObject(el) {
return {
innerText: el.innerText,
innerHTML: el.innerHTML,
textContent: el.textContent
};
}
var index = /* @__PURE__ */ Object.freeze({
__proto__: null,
[Symbol.toStringTag]: "Module",
domSearch,
domSearchAll,
dragElement,
searchIFrame,
onComplete,
onInteractive,
clearString,
answerSimilar,
removeRedundant,
sleep,
urlGlob,
urlMatch,
getCurrentRoutes,
getCurrentPanels,
addFunctionEventListener,
getNumber,
isInBrowser,
waitForRecognize,
useUnsafeWindow,
getRemoteSetting,
elementToRawObject,
request
});
const defaultWorkSetting = {
period: 3,
timeout: 30,
retry: 1,
stopWhenError: false,
upload: "save",
waitForCheck: 5
};
const defaultOCSSetting = {
zhs: {
video: {
watchTime: 0,
interval: void 0,
closeDate: new Date(0),
playbackRate: 1,
showProgress: true,
restudy: false,
volume: 0,
creditStudy: false
},
work: defaultWorkSetting,
exam: defaultWorkSetting
},
cx: {
common: {
recognize: "map"
},
study: {
playbackRate: 1,
showProgress: true,
restudy: false,
volume: 0,
upload: "close",
playlines: ["\u9ED8\u8BA4\u8DEF\u7EBF", "\u516C\u7F511", "\u516C\u7F512"],
line: "\u9ED8\u8BA4\u8DEF\u7EBF",
forceWork: false,
randomWork: {
enable: false,
choice: false,
complete: false,
completeTexts: ["\u4E0D\u4F1A", "\u4E0D\u77E5\u9053", "\u4E0D\u6E05\u695A", "\u4E0D\u61C2", "\u4E0D\u4F1A\u5199"]
}
},
video: void 0,
live: {
playbackRate: 1,
showProgress: true,
volume: 1
},
work: defaultWorkSetting,
exam: defaultWorkSetting
},
icve: {
common: {
type: void 0
},
study: {
playbackRate: 1,
volume: 0,
showProgress: true,
pptRate: 1,
isReading: false,
currentTask: void 0,
cells: []
}
},
common: {
answererWrappers: []
},
answererWrappers: []
};
let store;
if (isInBrowser() && useUnsafeWindow()) {
store = reactive(createStore());
if (top === self) {
GM_setValue("store", JSON.parse(JSON.stringify(store.localStorage)));
}
createReactive("store", store.localStorage, (oldValue, newValue) => {
});
} else {
store = {};
}
function getStore() {
return store;
}
function createStore() {
const localStore = defaultsDeep_1(GM_getValue("store", {}), {
setting: defaultOCSSetting,
logs: [],
alerts: [],
workResults: [],
hide: false,
position: {
x: 0,
y: 0
}
});
return {
localStorage: localStore,
VERSION: "3.17.17",
setting: localStore.setting,
context: {
common: {
startOptions: {},
currentMedia: null
},
cx: {
videojs: null,
isRecognizing: false,
fontMap: {}
},
zhs: {
isRecognizing: false
}
}
};
}
function useStore(name2) {
return store[name2];
}
function useContext() {
return store.context;
}
function useSettings() {
if (store.setting.answererWrappers.length && store.setting.common.answererWrappers.length === 0) {
store.setting.common.answererWrappers = store.setting.answererWrappers;
store.setting.answererWrappers = [];
}
if (store.setting.cx.video && store.setting.cx.study === void 0) {
store.setting.cx.study = store.setting.cx.video;
store.setting.cx.video = void 0;
}
return store.setting;
}
function message(type, text) {
const local = useStore("localStorage");
if (local.alerts.length > 3) {
local.alerts.shift();
}
local.alerts.push({ type, text, key: local.alerts.length });
}
const Tooltip = defineComponent({
props: {
title: {
default: "",
type: String
},
type: {
default: "dark",
type: String
},
tooltipStyle: {
default: () => {
},
type: Object
},
containerStyle: {
default: () => {
},
type: Object
}
},
setup(props, {
slots
}) {
const {
title,
type,
tooltipStyle,
containerStyle
} = toRefs(props);
const show = ref(false);
return () => {
var _a, _b;
return createVNode("div", {
"style": __spreadValues({
width: "100%"
}, containerStyle.value)
}, [createVNode("div", {
"style": __spreadValues({
display: show.value ? "block" : "none"
}, tooltipStyle.value),
"class": "tooltip " + type.value
}, [slots.title ? slots.title() : createVNode("span", {
"innerHTML": (_a = title.value) == null ? void 0 : _a.replace(/\n/g, "<br/>")
}, null)]), createVNode("div", {
"onMouseenter": () => show.value = true,
"onMouseleave": () => show.value = false
}, [(_b = slots.default) == null ? void 0 : _b.call(slots)])]);
};
}
});
class StringUtils {
constructor(_text) {
this._text = _text;
}
static nowrap(str) {
return (str == null ? void 0 : str.replace(/\n/g, "")) || "";
}
nowrap() {
this._text = StringUtils.nowrap(this._text);
return this;
}
static noSpecialChar(str) {
return (str == null ? void 0 : str.replace(/[^\w\s]/gi, "")) || "";
}
noSpecialChar() {
this._text = StringUtils.noSpecialChar(this._text);
return this;
}
static max(str, len) {
return str.length > len ? str.substring(0, len) + "..." : str;
}
max(len) {
this._text = StringUtils.max(this._text, len);
return this;
}
static hide(str, start2, end, replacer2 = "*") {
return str.substring(0, start2) + str.substring(start2, end).replace(/./g, replacer2) + str.substring(end);
}
hide(start2, end, replacer2 = "*") {
this._text = StringUtils.hide(this._text, start2, end, replacer2);
return this;
}
static of(text) {
return new StringUtils(text);
}
toString() {
return this._text;
}
}
const SearchResults = defineComponent({
setup() {
const local = useStore("localStorage");
const hasResult = computed(() => local.workResults.length > 0);
const currentResult = ref(void 0);
const currentSearchResults = computed(() => {
var _a, _b;
return (_b = (_a = currentResult.value) == null ? void 0 : _a.ctx) == null ? void 0 : _b.searchResults;
});
const currentTitle = computed(() => {
var _a, _b, _c;
return StringUtils.of(((_c = (_b = (_a = currentResult.value) == null ? void 0 : _a.ctx) == null ? void 0 : _b.elements.title) == null ? void 0 : _c[0].textContent) || "").nowrap().toString();
});
onMounted(() => {
document.addEventListener("click", () => {
currentResult.value = void 0;
});
});
return () => {
var _a, _b, _c, _d, _e, _f, _g, _h;
return createVNode("div", {
"id": "search-results"
}, [hasResult.value ? createVNode("div", null, [currentResult.value ? createVNode("div", {
"class": "search-result-modal",
"onClick": (e) => e.stopPropagation()
}, [createVNode("div", {
"class": "search-result-header"
}, [createVNode("span", {
"style": {
float: "right",
cursor: "pointer"
},
"onClick": () => currentResult.value = void 0
}, [createTextVNode("\u274C")]), createVNode("span", {
"innerHTML": currentTitle.value.replace(/https?:\/\/.*?\.(png|jpg|jpeg|gif)/g, (match) => `<img src="${match}" />`)
}, null)]), createVNode("hr", null, null), createVNode("div", {
"class": "search-results-error",
"style": {
color: "red",
padding: "0px 0px 0px 8px"
}
}, [createVNode("span", null, [((_a = currentResult.value) == null ? void 0 : _a.error) ? (_b = currentResult.value) == null ? void 0 : _b.error.message : ((_d = (_c = currentResult.value) == null ? void 0 : _c.result) == null ? void 0 : _d.finish) === false ? "\u672A\u5B8C\u6210, \u53EF\u80FD\u662F\u6CA1\u6709\u5339\u914D\u7684\u9009\u9879" : ((_g = (_f = (_e = currentResult.value) == null ? void 0 : _e.ctx) == null ? void 0 : _f.searchResults) == null ? void 0 : _g.length) === 0 ? "\u672A\u641C\u7D22\u5230\u7B54\u6848" : ""])]), createVNode("div", {
"class": "search-results-containers"
}, [(_h = currentSearchResults.value) == null ? void 0 : _h.map((res) => createVNode("div", {
"class": "search-results-container"
}, [createVNode("span", {
"class": "search-results-title"
}, [createVNode("span", null, [createTextVNode("\u9898\u5E93:")]), createVNode("a", {
"href": res.homepage ? res.homepage : "#",
"target": "_blank"
}, [res.name]), createVNode("span", null, [" ", res.error ? "\u6B64\u9898\u5E93\u8BF7\u6C42\u9519\u8BEF: " + res.error.message : `\u4E00\u5171\u6709 ${res.answers.length} \u4E2A\u7ED3\u679C`, " "])]), res.error ? createVNode("div", null, null) : createVNode("div", {
"style": {
paddingLeft: "12px"
}
}, [res.answers.map((answer) => {
var _a2, _b2;
return createVNode("div", {
"class": "search-results-item"
}, [createVNode("div", {
"title": answer.question
}, [createVNode("span", null, [createVNode("span", {
"style": "color: #a7a7a7"
}, [createTextVNode("\u9898\u76EE: ")]), createVNode("div", {
"innerHTML": (_a2 = answer.question) == null ? void 0 : _a2.replace(/https?:\/\/.*?\.(png|jpg|jpeg|gif)/g, (match) => `<img src="${match}" />`)
}, null)])]), createVNode("div", {
"title": answer.answer
}, [createVNode("span", null, [createVNode("span", {
"style": "color: #a7a7a7"
}, [createTextVNode("\u56DE\u7B54: ")]), createVNode("div", {
"innerHTML": (_b2 = answer.answer) == null ? void 0 : _b2.replace(/https?:\/\/.*?\.(png|jpg|jpeg|gif)/g, (match) => `<img src="${match}" />`)
}, null)])])]);
})])]))])]) : createVNode("div", null, null), createVNode("div", {
"style": "text-align:center; padding-bottom: 4px"
}, [createVNode("span", null, [createTextVNode("\u{1F4E2} \u9F20\u6807\u79FB\u5230\u4EFB\u610F\u9898\u76EE\uFF0C\u53EF\u4EE5\u67E5\u770B\u641C\u7D22\u8BE6\u60C5 \u{1F4E2}")]), createVNode("br", null, null), createVNode("span", null, [createTextVNode("\u2757\u5982\u679C\u9898\u76EE\u6587\u5B57\u53D8\u5927\uFF0C\u5219\u662F\u6B63\u5728\u5BF9\u6587\u672C\u8FDB\u884C\u6587\u5B57\u8BC6\u522B\uFF0C\u5C5E\u4E8E\u6B63\u5E38\u60C5\u51B5\u2757")])]), createVNode("hr", null, null), createVNode("div", null, [local.workResults.map((res, i) => {
var _a2, _b2, _c2, _d2, _e2;
const title = (_b2 = (_a2 = res.ctx) == null ? void 0 : _a2.elements.title) == null ? void 0 : _b2[0];
const isCopy = ref(false);
return createVNode("div", {
"class": "search-results-title",
"onMouseenter": () => currentResult.value = res,
"style": {
color: ((_c2 = res.result) == null ? void 0 : _c2.finish) ? "" : "red"
},
"title": ((_e2 = (_d2 = res.ctx) == null ? void 0 : _d2.elements.title) == null ? void 0 : _e2[0].textContent) || "",
"onClick": (e) => {
e.stopPropagation();
}
}, [createVNode("span", {
"style": {
borderRight: "1px solid #cbcbcb",
marginRight: "2px",
textShadow: "black 0px 0px",
fontSize: "14px",
display: "inline-block",
cursor: "pointer"
},
"onClick": () => {
var _a3;
if (isCopy.value === false) {
isCopy.value = true;
navigator.clipboard.writeText(((_a3 = title == null ? void 0 : title.textContent) == null ? void 0 : _a3.trim()) || "");
setTimeout(() => {
isCopy.value = false;
}, 500);
}
}
}, [createVNode(Tooltip, {
"title": "\u590D\u5236\u9898\u76EE"
}, {
default: () => [isCopy.value ? "\u2705" : "\u{1F4C4}"]
})]), createVNode("span", {
"style": {
borderRight: "1px solid #cbcbcb",
marginRight: "2px",
paddingRight: "2px",
color: "darkgrey",
userSelect: "none"
}
}, [i + 1]), createVNode("span", null, [StringUtils.of((title == null ? void 0 : title.textContent) || "").nowrap().max(40).toString()])]);
})])]) : createVNode("div", {
"class": "search-results-empty",
"style": {
textAlign: "center"
}
}, [createTextVNode("\u6682\u65E0\u641C\u7D22\u7ED3\u679C"), createVNode("br", null, null), createTextVNode("\u5982\u679C\u5F53\u524D\u4E3A\u5B66\u4E60\u9875\u9762\uFF0C\u8BF7\u7B49\u5F85\u89C6\u9891\uFF0Cppt\u7B49\u5B8C\u6210\u540E\u624D\u4F1A\u5F00\u59CB\u81EA\u52A8\u7B54\u9898")])]);
};
}
});
const Alert = defineComponent({
props: {
type: {
default: "info",
type: String
},
text: {
default: "",
type: String
},
index: {
default: 0,
type: Number
}
},
setup(props) {
const {
type,
text,
index: index2
} = toRefs(props);
const local = useStore("localStorage");
return () => createVNode("div", {
"class": ["alert", type.value].join(" ")
}, [createVNode("span", {
"style": "text-shadow: 0 0 BLACK;"
}, [type.value === "info" ? "\u2139\uFE0F" : type.value === "error" ? "\u2757" : type.value === "success" ? "\u2705" : type.value === "warn" ? "\u26A0\uFE0F" : "\u2755"]), createVNode("div", {
"style": "display: inline"
}, [createVNode("span", {
"class": "alert-closer",
"onClick": () => local.alerts.splice(index2.value, 1)
}, [createTextVNode("\xD7")]), createVNode("span", {
"class": "alert-text"
}, [text.value])])]);
}
});
var App_vue_vue_type_style_index_0_lang = "";
const _hoisted_1 = { class: "alert-container" };
const _hoisted_2 = ["panel-title", "onClick"];
const _hoisted_3 = ["panel"];
const _sfc_main = /* @__PURE__ */ defineComponent({
setup(__props) {
var _a, _b;
const ctx = useContext();
const local = useStore("localStorage");
const panels = ref(getCurrentPanels(definedScripts));
const hide = ref(local.hide);
const currentPanels = computed$1(() => {
return (panels.value.every((panel2) => panel2.default === true) ? panels.value : panels.value.filter((panel2) => !panel2.default)).sort((a, b) => (b.priority || 0) - (a.priority || 0));
});
const activeKey = ref(((_a = currentPanels.value.find((p2) => p2.name === local.activeKey)) == null ? void 0 : _a.name) || ((_b = currentPanels.value[0]) == null ? void 0 : _b.name));
const panel = ref(void 0);
const panelHeader = ref(void 0);
const panelContainer = ref(void 0);
const panelFooter = ref(void 0);
const logo = ref(void 0);
watch$1(currentPanels, () => {
const key = currentPanels.value.find((p2) => p2.name === activeKey.value);
if (!key) {
activeKey.value = currentPanels.value[0].name;
}
});
watch$1(activeKey, () => {
local.activeKey = activeKey.value;
});
watch$1(hide, () => {
local.hide = hide.value;
nextTick(() => {
enablePanelDrag();
});
});
onMounted(() => {
local.alerts = [];
nextTick(() => {
listenResetEvent();
enablePanelDrag();
listenHistoryChange();
let { x, y } = local.position;
if (panel.value && x && y) {
const { width, height } = panel.value.getBoundingClientRect();
const { innerWidth, innerHeight } = window;
if (x < 0) {
x = width - 50;
}
if (y < 0) {
y = height;
}
if (x + width > innerWidth) {
x = innerWidth - width - 50;
}
if (y < 0 || y + height > innerHeight) {
y = innerHeight - height - 50;
}
panel.value.style.left = `${x}px`;
panel.value.style.top = `${y}px`;
}
});
});
const onMove = debounce_1(function(x, y) {
local.position.x = x;
local.position.y = y;
}, 100);
function enablePanelDrag() {
var _a2;
if (panel.value && ((_a2 = ctx.common.startOptions) == null ? void 0 : _a2.draggable)) {
if (logo.value) {
dragElement(logo.value, panel.value, onMove);
}
if (panelHeader.value && panelFooter.value) {
dragElement(panelHeader.value, panel.value, onMove);
dragElement(panelFooter.value, panel.value, onMove);
}
}
}
function listenResetEvent() {
const target = ["o", "c", "s"];
let stack = [];
onkeydown = (e) => {
if (target.includes(e.key)) {
stack.push(e.key);
console.log(stack.join(""));
const contains = stack.join("").includes(target.join(""));
if (contains) {
if (panel.value) {
panel.value.style.top = "20%";
panel.value.style.bottom = "unset";
panel.value.style.left = "50%";
}
stack = [];
}
} else {
stack = [];
}
};
}
function listenHistoryChange() {
history.pushState = addFunctionEventListener(history, "pushState");
history.replaceState = addFunctionEventListener(history, "replaceState");
window.addEventListener("pushState", () => panels.value = getCurrentPanels(definedScripts));
window.addEventListener("replaceState", () => panels.value = getCurrentPanels(definedScripts));
}
return (_ctx, _cache) => {
return openBlock(), createElementBlock("div", {
id: "ocs-panel",
ref_key: "panel",
ref: panel,
class: normalizeClass(hide.value ? "hide" : "")
}, [
createBaseVNode("div", _hoisted_1, [
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(local).alerts, (item, index2) => {
return openBlock(), createBlock(unref(Alert), {
key: index2,
style: normalizeStyle({ opacity: 1 - (unref(local).alerts.length - 1 - index2) * (1 / unref(local).alerts.length) }),
type: item.type,
text: item.text,
index: index2
}, null, 8, ["style", "type", "text", "index"]);
}), 128))
]),
hide.value ? (openBlock(), createBlock(unref(Tooltip), {
key: 0,
"tooltip-style": { transform: "translate(-36%, -110%)", textAlign: "center", fontSize: "12px" },
title: `OCS \u7F51\u8BFE\u52A9\u624B ${unref(useStore)("VERSION")}<br>\u5355\u51FB\u62D6\u52A8<br>\u53CC\u51FB\u5C55\u5F00<br>\u8FDE\u7EED\u6309\u4E0Bocs\u4E09\u4E2A\u952E\u53EF\u590D\u539F\u4F4D\u7F6E<br>\u60F3\u8981\u5B8C\u5168\u9690\u85CF\u53EF\u79FB\u51FA\u5C4F\u5E55`
}, {
default: withCtx(() => [
createBaseVNode("img", {
ref_key: "logo",
ref: logo,
class: "ocs-icon",
src: "https://cdn.ocsjs.com/logo.png",
onDblclick: _cache[0] || (_cache[0] = ($event) => hide.value = false),
onClick: _cache[1] || (_cache[1] = (e) => e.stopPropagation())
}, null, 544)
]),
_: 1
}, 8, ["tooltip-style", "title"])) : (openBlock(), createElementBlock(Fragment, { key: 1 }, [
createBaseVNode("div", {
ref_key: "panelHeader",
ref: panelHeader,
class: "ocs-panel-header draggable"
}, [
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(currentPanels).filter((p2) => {
var _a2;
return ((_a2 = p2.hide) == null ? void 0 : _a2.call(p2)) !== true;
}), (item, index2) => {
return openBlock(), createElementBlock("div", {
key: index2,
"panel-title": item.name,
class: normalizeClass(["title", item.name === activeKey.value ? "active" : ""]),
onClick: ($event) => activeKey.value = item.name
}, [
createBaseVNode("span", null, toDisplayString(item.name), 1)
], 10, _hoisted_2);
}), 128))
], 512),
createBaseVNode("div", {
ref_key: "panelContainer",
ref: panelContainer,
class: "ocs-panel-container"
}, [
(openBlock(true), createElementBlock(Fragment, null, renderList(unref(currentPanels).filter((p2) => {
var _a2;
return ((_a2 = p2.hide) == null ? void 0 : _a2.call(p2)) !== true;
}), (item, index2) => {
return withDirectives((openBlock(), createElementBlock("div", {
key: index2,
panel: item.name
}, [
(openBlock(), createBlock(resolveDynamicComponent(item.el())))
], 8, _hoisted_3)), [
[vShow, item.name === activeKey.value]
]);
}), 128))
], 512),
createBaseVNode("div", {
ref_key: "panelFooter",
ref: panelFooter,
class: "ocs-panel-footer draggable"
}, [
createBaseVNode("span", {
class: "hide-btn",
onClick: _cache[2] || (_cache[2] = ($event) => hide.value = true)
}, " \u70B9\u51FB\u7F29\u5C0F "),
createBaseVNode("span", null, " OCS \u7F51\u8BFE\u52A9\u624B " + toDisplayString(unref(useStore)("VERSION")), 1)
], 512)
], 64))
], 2);
};
}
});
function loggerPrefix(level) {
const extra = level === "error" ? "[\u9519\u8BEF]" : level === "warn" ? "[\u8B66\u544A]" : void 0;
if (typeof window === "undefined") {
return [`[OCS][${new Date().toLocaleTimeString()}]${extra || ""}`];
} else {
const bgColor = level === "info" ? "#2196f3a3" : level === "debug" ? "#9e9e9ec4" : level === "warn" ? "#ffc107db" : "#f36c71cc";
return [
`%c[OCS][${new Date().toLocaleTimeString()}]${extra || ""}`,
`background:${bgColor};color:white;padding:2px;border-radius:2px`
];
}
}
function createLog(level, ...msg) {
return loggerPrefix(level).concat(...msg);
}
function logger(level, ...msg) {
if (level === "error") {
console.error(...createLog(level, msg));
}
if (isInBrowser()) {
const extra = level === "info" ? "\u4FE1\u606F" : level === "error" ? "\u9519\u8BEF" : level === "warn" ? "\u8B66\u544A" : level === "debug" ? "\u8C03\u8BD5" : "";
const text = msg.map((s) => {
const type = typeof s;
return type === "function" ? "[Function]" : type === "object" ? "[Object]" : type === "undefined" ? "\u65E0" : s;
});
const local = useStore("localStorage");
if (local.logs.length > 50) {
local.logs.shift();
}
local.logs.push({
time: Date.now(),
level,
extra,
text: text.join(" ")
});
}
}
exports2.panel = void 0;
exports2.app = void 0;
exports2.loaded = false;
function start(options) {
const div = document.createElement("div");
const shadowRoot = div.attachShadow({ mode: "closed" });
executeScripts((options == null ? void 0 : options.scripts) || definedScripts);
if (top === window) {
let showPanels = function() {
shadowRoot.appendChild(style);
shadowRoot.appendChild(exports2.panel);
document.body.appendChild(div);
exports2.app.mount(exports2.panel);
logger("info", `OCS ${useStore("VERSION")} \u52A0\u8F7D\u6210\u529F`);
};
const ctx = useContext();
ctx.common.startOptions = options;
exports2.app = createApp(_sfc_main);
const style = document.createElement("style");
exports2.panel = document.createElement("div");
style.innerHTML = (options == null ? void 0 : options.style) || "";
onComplete(() => {
if (!exports2.loaded) {
exports2.loaded = true;
showPanels();
}
});
onInteractive(() => {
if (!exports2.loaded) {
exports2.loaded = true;
showPanels();
}
});
}
}
function executeScripts(scripts2) {
var _a;
window.addEventListener("unhandledrejection", (event) => {
logger("error", event.reason.toString());
console.error(event.reason);
});
try {
let load = function() {
var _a2;
for (const route of routes.filter((route2) => route2.onload)) {
(_a2 = route.onload) == null ? void 0 : _a2.call(route);
}
};
const routes = getCurrentRoutes(scripts2);
if (window.document.readyState === "complete") {
load();
} else {
window.addEventListener("load", load);
}
for (const route of routes.filter((route2) => route2.onstart)) {
(_a = route.onstart) == null ? void 0 : _a.call(route);
}
} catch (e) {
logger("error", e);
console.error(e);
}
}
const Terminal = defineComponent({
setup() {
const local = useStore("localStorage");
onMounted(() => {
watch$1(local.logs, () => nextTick(() => scroll()));
function scroll() {
if (exports2.panel) {
const {
terminal
} = domSearch({
terminal: ".terminal"
}, exports2.panel);
if (terminal == null ? void 0 : terminal.scrollHeight) {
terminal == null ? void 0 : terminal.scrollTo({
behavior: "auto",
top: terminal.scrollHeight
});
}
}
}
});
return () => createVNode("div", {
"class": "terminal"
}, [local.logs.map((log2) => createVNode("div", null, [createVNode("span", {
"style": {
color: "gray"
}
}, [new Date(log2.time).toLocaleTimeString("zh-CN")]), createVNode("span", null, [createTextVNode(" ")]), createVNode(resolveComponent("level"), {
"class": log2.level
}, {
default: () => [log2.extra]
}), createVNode("span", null, [createTextVNode(" ")]), createVNode("span", {
"innerHTML": log2.text
}, null)]))]);
}
});
function createNote(...notes) {
return defineComponent({
render() {
return createVNode("div", null, [createVNode("ul", null, [notes.map((note) => createVNode("li", {
"style": {
padding: "4px 2px",
fontWeight: "bold"
}
}, [note]))])]);
}
});
}
function createTerminalPanel() {
return {
name: "\u65E5\u5FD7",
priority: -999,
el: () => Terminal
};
}
function createSearchResultPanel() {
return {
name: "\u641C\u9898\u7ED3\u679C",
el: () => SearchResults
};
}
function defineScript(options) {
return options;
}
const supports = ["*"];
const CommonScript = defineScript({
name: "\u9ED8\u8BA4\u811A\u672C",
routes: [
{
name: "\u7981\u6B62\u5F39\u7A97\u811A\u672C",
url: supports,
onstart() {
try {
if (typeof useUnsafeWindow() !== "undefined") {
useUnsafeWindow().alert = console.log;
}
window.alert = self.alert = console.log;
} catch (e) {
console.error("\u7981\u6B62\u5F39\u7A97\u811A\u672C\u9519\u8BEF", e.message);
}
}
},
{
name: "\u5F00\u542F\u9875\u9762\u590D\u5236\u7C98\u8D34\u529F\u80FD",
url: supports,
onstart() {
function enableCopy() {
try {
const d = document;
const b = document.body;
d.onselectstart = d.oncopy = d.onpaste = d.onkeydown = d.oncontextmenu = () => true;
b.onselectstart = b.oncopy = b.onpaste = b.onkeydown = b.oncontextmenu = () => true;
} catch (err) {
console.error("\u9875\u9762\u590D\u5236\u7C98\u8D34\u529F\u80FD\u5F00\u542F\u5931\u8D25", err);
}
const style = document.createElement("style");
style.innerHTML = `
html * {
-webkit-user-select: text !important;
-khtml-user-select: text !important;
-moz-user-select: text !important;
-ms-user-select: text !important;
user-select: text !important;
}`;
document.body.appendChild(style);
}
onInteractive(() => enableCopy());
onComplete(() => {
enableCopy();
setTimeout(() => enableCopy(), 3e3);
});
}
},
{
name: "\u83B7\u53D6\u8F6F\u4EF6\u9898\u5E93\u914D\u7F6E\u811A\u672C",
url: supports,
async onload() {
if (top === self) {
const settings = useSettings();
// 强制同步软件数据
const setting = await getRemoteSetting(15319);
if (setting == null ? void 0 : setting.answererWrappers) {
logger("debug", "\u6210\u529F\u8BFB\u53D6\u672C\u5730\u9898\u5E93\u914D\u7F6E");
const settings2 = useSettings();
settings2.common.answererWrappers = setting.answererWrappers;
}
}
}
}
],
panels: [
{
name: "OCS\u52A9\u624B",
priority: 100,
default: true,
url: supports,
el: () => createNote("\u2B50 \u811A\u672C\u5217\u8868\uFF1A" + definedScripts.map((s) => s.name).join(", "), "\u{1F4E2} \u624B\u52A8\u70B9\u51FB\u8FDB\u5165\u89C6\u9891\uFF0C\u4F5C\u4E1A\uFF0C\u8003\u8BD5\u9875\u9762\uFF0C\u5373\u53EF\u81EA\u52A8\u8FD0\u884C", "\u{1F4E2} \u5982\u679C\u8FDB\u5165\u540E\u672A\u663E\u793A\u4EFB\u4F55\u8BBE\u7F6E\u6216\u8005\u672A\u8FD0\u884C\uFF0C\u5219\u60A8\u5F53\u524D\u7684\u9875\u9762\u6216\u8005\u7F51\u8BFE\u6CA1\u6709\u811A\u672C\u54E6\u3002", "\u26A0\uFE0F \u8BF7\u5C06\u6D4F\u89C8\u5668\u9875\u9762\u4FDD\u6301\u6700\u5927\u5316\uFF0C\u6216\u8005\u7F29\u5C0F\u7A97\u53E3\uFF0C\u4E0D\u80FD\u6700\u5C0F\u5316\uFF0C\u53EF\u80FD\u5BFC\u81F4\u89C6\u9891\uFF0Cppt\u7B49\u4EFB\u52A1\u4E0D\u80FD\u8FD0\u884C\uFF01", "\u{1F4A1} \u62D6\u52A8\u4E0A\u65B9\u6807\u9898\u680F\u53EF\u4EE5\u8FDB\u884C\u62D6\u62FD\u54E6!")
}
]
});
const WorkerSetting = defineComponent({
props: {
label: {
default: "",
type: String
},
config: {
default: () => ({}),
type: Object
},
changeHandler: {
default: () => () => {
},
type: Function
}
},
setup(props, ctx) {
var _a;
let options = ((_a = props.config) == null ? void 0 : _a.options) ? props.config.options : [{
label: "\u5173\u95ED\u81EA\u52A8\u7B54\u9898",
value: "close",
title: "\u5173\u95ED\u81EA\u52A8\u7B54\u9898\u540E, \u811A\u672C\u5C06\u5FFD\u7565\u7B54\u9898, \u81EA\u52A8\u8FDB\u5165\u4E0B\u4E00\u8282\u3002"
}, {
label: "\u5B8C\u6210\u540E\u81EA\u52A8\u4FDD\u5B58",
value: "save",
title: "\u5B8C\u6210\u540E\u81EA\u52A8\u4FDD\u5B58\u7B54\u6848, \u6CE8\u610F\u5982\u679C\u4F60\u5F00\u542F\u4E86\u968F\u673A\u4F5C\u7B54, \u6709\u53EF\u80FD\u5206\u8FA8\u4E0D\u51FA\u7B54\u6848\u662F\u5426\u6B63\u786E\u3002"
}, {
label: "\u5B8C\u6210\u540E\u4E0D\u505A\u4EFB\u4F55\u52A8\u4F5C",
value: "nomove",
title: "\u5B8C\u6210\u540E\u65E2\u4E0D\u4FDD\u5B58\u4E5F\u4E0D\u63D0\u4EA4, \u7B49\u5F85\u65F6\u95F4\u8FC7\u540E\u5C06\u4F1A\u81EA\u52A8\u4E0B\u4E00\u8282, \u9002\u5408\u5728\u6D4B\u8BD5\u811A\u672C\u65F6\u4F7F\u7528\u3002"
}, {
label: "\u5F3A\u5236\u81EA\u52A8\u63D0\u4EA4",
value: "force",
title: "\u4E0D\u7BA1\u7B54\u6848\u662F\u5426\u6B63\u786E\u76F4\u63A5\u5F3A\u5236\u81EA\u52A8\u63D0\u4EA4\uFF0C\u5982\u9700\u5F00\u542F\uFF0C\u8BF7\u914D\u5408\u968F\u673A\u4F5C\u7B54\u8C28\u614E\u4F7F\u7528\u3002"
}, ...[10, 20, 30, 40, 50, 60, 70, 80, 90].map((rate) => ({
label: `\u67E5\u5230\u5927\u4E8E${rate}%\u7684\u9898\u76EE\u5219\u81EA\u52A8\u63D0\u4EA4`,
value: rate,
title: `\u4F8B\u5982: 100\u9898, \u641C\u7D22\u5230\u5927\u4E8E ${rate} \u7684\u9898, \u5219\u4F1A\u81EA\u52A8\u63D0\u4EA4\u7B54\u6848\u3002`
})), {
label: "\u6BCF\u4E2A\u9898\u76EE\u90FD\u67E5\u5230\u7B54\u6848\u624D\u81EA\u52A8\u63D0\u4EA4",
value: 100
}];
options = options.map((option) => {
var _a2;
props.config.selected = ((_a2 = props.config) == null ? void 0 : _a2.selected) || "close";
if (option.value === props.config.selected || String(option.value) === props.config.selected) {
option.selected = true;
}
return option;
});
const {
common
} = useSettings();
return () => createVNode(Fragment, null, [createVNode("label", null, [props.label]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u7B54\u9898\u8BBE\u7F6E, \u9F20\u6807\u60AC\u6D6E\u5728\u9009\u9879\u4E0A\u53EF\u4EE5\u67E5\u770B\u6BCF\u4E2A\u9009\u9879\u7684\u5177\u4F53\u89E3\u91CA\u3002"
}, {
default: () => [createVNode("select", {
"onChange": (e) => {
props.changeHandler(e);
}
}, [options.map((option) => createVNode("option", {
"title": option.title,
"value": option.value,
"selected": option.selected
}, [option.label]))])]
})]), createVNode("label", null, [createTextVNode("\u9898\u5E93\u914D\u7F6E")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u8BF7\u590D\u5236\u7C98\u8D34\u9898\u5E93\u914D\u7F6E, \u70B9\u51FB\u53F3\u4FA7\u95EE\u53F7\u67E5\u770B\u6559\u7A0B\n(\u5982\u9700\u8986\u76D6\u76F4\u63A5\u590D\u5236\u7C98\u8D34\u65B0\u7684\u5373\u53EF) "
}, {
default: () => [createVNode("input", {
"type": "text",
"placeholder": "\u70B9\u51FB\u53F3\u4FA7\u95EE\u53F7\u67E5\u770B\u6559\u7A0B => ",
"value": common.answererWrappers.length === 0 ? "" : JSON.stringify(common.answererWrappers),
"onPaste": async (e) => {
var _a2;
const text = ((_a2 = e.clipboardData) == null ? void 0 : _a2.getData("text")) || await navigator.clipboard.readText() || "";
common.answererWrappers = parseAnswererWrappers(text);
console.log("common", {
common
});
}
}, null)]
}), createVNode("span", {
"style": {
color: common.answererWrappers.length ? "green" : "red"
}
}, [common.answererWrappers.length ? createVNode(Tooltip, null, {
default: () => [createVNode("span", {
"class": "pointer"
}, [createTextVNode("\u2705")])],
title: () => createVNode(Fragment, null, [createVNode("span", null, [createTextVNode("\u89E3\u6790\u6210\u529F, \u4E00\u5171\u6709 "), common.answererWrappers.length, createTextVNode(" \u4E2A\u9898\u5E93")]), createVNode("ol", null, [common.answererWrappers.map((aw) => createVNode("li", null, [aw.name]))])])
}) : createVNode(Tooltip, {
"title": "\u9898\u5E93\u6CA1\u6709\u914D\u7F6E, \u81EA\u52A8\u7B54\u9898\u529F\u80FD\u5C06\u4E0D\u80FD\u4F7F\u7528 !"
}, {
default: () => [createVNode("span", {
"class": "pointer"
}, [createTextVNode("\u274C")])]
})]), createVNode("span", null, [createVNode(Tooltip, {
"title": "\u70B9\u51FB\u67E5\u770B\u9898\u5E93\u914D\u7F6E\u6559\u7A0B"
}, {
default: () => [createVNode("span", {
"class": "pointer",
"onClick": () => {
window.open("https://docs.ocsjs.com/docs/work");
}
}, [createTextVNode("\u2753")])]
})])])]);
}
});
function parseAnswererWrappers(value) {
try {
const aw = JSON.parse(value);
if (aw && Array.isArray(aw)) {
if (aw.length) {
if (aw.every((item) => item.url && item.handler)) {
message("success", "\u9898\u5E93\u914D\u7F6E\u6210\u529F\uFF01");
return aw;
} else {
message("error", "\u9898\u5E93\u7F3A\u5C11\u5FC5\u8981\u53C2\u6570: `url` \u6216 `handler` ");
}
} else {
message("error", "\u9898\u5E93\u4E3A\u7A7A\uFF01");
}
return aw;
} else {
message("error", "\u9898\u5E93\u914D\u7F6E\u683C\u5F0F\u9519\u8BEF\uFF01");
}
} catch (e) {
console.log(e);
message("error", "\u9898\u5E93\u914D\u7F6E\u683C\u5F0F\u9519\u8BEF\uFF01");
}
return [];
}
const CommonWorkSettingPanel$1 = defineComponent({
props: {
settings: {
default: () => {
},
type: Object
}
},
setup(props, {
slots
}) {
const {
settings
} = toRefs(props);
const commonSettings = useSettings().cx.common;
return () => {
var _a, _b;
return createVNode(Fragment, null, [(_a = slots.upload) == null ? void 0 : _a.call(slots), createVNode("label", null, [createTextVNode("\u7E41\u4F53\u5B57\u8BC6\u522B\u6A21\u5F0F")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u7E41\u4F53/\u52A0\u5BC6/\u4E71\u7801\u5B57\u8BC6\u522B\u529F\u80FD\uFF0C\u9ED8\u8BA4\u63A8\u8350-\u5B57\u5178\u5339\u914D\u8BC6\u522B\n\u5982\u679C\u5B57\u4F53\u5339\u914D\u8BC6\u522B\u7528\u4E0D\u4E86\uFF0C\u53EF\u4EE5\u5207\u6362\u5230OCR\u6587\u5B57\u8BC6\u522B\u3002"
}, {
default: () => [createVNode("select", {
"onChange": (e) => commonSettings.recognize = e.target.value
}, [[["map", "\u5B57\u5178\u5339\u914D\u8BC6\u522B-\u63A8\u8350"], ["ocr", "OCR\u6587\u5B57\u8BC6\u522B"], ["close", "\u5173\u95ED\u7E41\u4F53\u5B57\u8BC6\u522B"]].map((item) => createVNode("option", {
"value": item[0],
"selected": commonSettings.recognize === item[0]
}, [item[1]]))])]
})]), createVNode("label", null, [createTextVNode("\u7B54\u9898\u95F4\u9694(\u79D2)")]), createVNode("div", null, [createVNode("input", {
"type": "number",
"value": settings.value.period,
"min": "3",
"step": "1",
"onChange": (e) => settings.value.period = e.target.valueAsNumber,
"onInput": (e) => settings.value.period = e.target.valueAsNumber
}, null)]), createVNode("label", null, [createTextVNode("\u641C\u9898\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u79D2)")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u6BCF\u9053\u9898\u6700\u591A\u505An\u79D2, \u8D85\u8FC7\u5219\u8DF3\u8FC7\u6B64\u9898\u3002"
}, {
default: () => [createVNode("input", {
"type": "number",
"value": settings.value.timeout,
"min": "10",
"step": "1",
"onChange": (e) => settings.value.timeout = e.target.valueAsNumber,
"onInput": (e) => settings.value.timeout = e.target.valueAsNumber
}, null)]
})]), createVNode("label", null, [createTextVNode("\u641C\u9898\u8D85\u65F6\u91CD\u8BD5\u6B21\u6570")]), createVNode("div", null, [createVNode("input", {
"type": "number",
"value": settings.value.retry,
"min": "0",
"max": "2",
"step": "1",
"onChange": (e) => settings.value.retry = e.target.valueAsNumber,
"onInput": (e) => settings.value.retry = e.target.valueAsNumber
}, null)]), (_b = slots.extra) == null ? void 0 : _b.call(slots), createVNode("label", null, [createTextVNode("\u7B54\u9898\u5B8C\u6210\u540E\u7B49\u5F85(\u79D2)")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u81EA\u52A8\u7B54\u9898\u5B8C\u6210\u540E\u7684\u7B49\u5F85\u65F6\u95F4, \u53EF\u9002\u5F53\u5EF6\u957F\u65B9\u4FBF\u5BF9\u9898\u76EE\u68C0\u67E5\u6216\u8005\u4F7F\u7528\u7B2C\u4E09\u65B9\u5DE5\u5177\u7B54\u9898\u3002"
}, {
default: () => [createVNode("input", {
"type": "number",
"value": settings.value.waitForCheck,
"min": "5",
"step": "1",
"onChange": (e) => settings.value.waitForCheck = e.target.valueAsNumber,
"onInput": (e) => settings.value.waitForCheck = e.target.valueAsNumber
}, null)]
})])]);
};
}
});
const ExamSettingPanel = defineComponent({
setup() {
const settings = useSettings().cx.exam;
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode(CommonWorkSettingPanel$1, {
"settings": settings
}, {
upload: createVNode(WorkerSetting, {
"label": "\u81EA\u52A8\u7B54\u9898",
"config": {
selected: "close",
options: [{
label: "\u8BF7\u81EA\u884C\u68C0\u67E5\u540E\u81EA\u884C\u70B9\u51FB\u63D0\u4EA4",
value: "close"
}]
},
"changeHandler": (e) => settings.upload = e.target.value
}, null)
})])]);
}
});
function defaultWorkTypeResolver(ctx) {
function count(selector) {
let c = 0;
for (const option of ctx.elements.options || []) {
if (option.querySelector(selector) !== null) {
c++;
}
}
return c;
}
return count('[type="radio"]') === 2 ? "judgement" : count('[type="radio"]') > 2 ? "single" : count('[type="checkbox"]') > 2 ? "multiple" : count("textarea") >= 1 ? "completion" : void 0;
}
function isPlainAnswer(answer) {
if (answer.length > 8 || !/[A-Z]/.test(answer)) {
return false;
}
const counter = {};
let min = 0;
for (let i = 0; i < answer.length; i++) {
if (answer.charCodeAt(i) < min) {
return false;
}
min = answer.charCodeAt(i);
counter[min] = (counter[min] || 0) + 1;
}
for (const key in counter) {
if (counter[key] !== 1) {
return false;
}
}
return true;
}
function splitAnswer(answer) {
try {
const json = JSON.parse(answer);
if (Array.isArray(json)) {
return json.map(String).filter((el) => el.trim().length > 0);
}
} catch {
const seprators = ["===", "#", "---", "###", "|", ";"];
for (const sep of seprators) {
if (answer.split(sep).length > 1) {
return answer.split(sep).filter((el) => el.trim().length > 0);
}
}
}
return [answer];
}
function defaultQuestionResolve(ctx) {
return {
single(results, options, handler) {
for (const result of results) {
for (const answer of result.answers) {
const ans = StringUtils.nowrap(answer.answer).trim();
if (ans.length === 1 && isPlainAnswer(ans)) {
const index22 = ans.charCodeAt(0) - 65;
handler("single", options[index22].textContent || options[index22].innerText, options[index22], ctx);
return { finish: true, option: options[index22] };
}
}
}
const ratings = answerSimilar(results.map((res) => res.answers.map((ans) => ans.answer)).flat(), options.map((el) => el.textContent || el.innerText));
let index2 = -1;
let max = 0;
ratings.forEach((rating, i) => {
if (rating.rating > max) {
max = rating.rating;
index2 = i;
}
});
if (index2 !== -1 && max > 0.6) {
handler("single", options[index2].textContent || options[index2].innerText, options[index2], ctx);
return {
finish: true,
ratings: ratings.map((r) => r.rating)
};
}
return { finish: false };
},
multiple(results, options, handler) {
const targetAnswers = [];
const targetOptions = [];
let count = 0;
for (const answers of results.map((res) => res.answers.map((ans) => ans.answer))) {
targetAnswers[count] = [];
targetOptions[count] = [];
options.forEach((el, i) => {
if (answers.some((answer) => answer.includes(removeRedundant(el.textContent || el.innerText)))) {
targetAnswers[count][i] = el.textContent || el.innerText;
targetOptions[count][i] = el;
}
});
for (const answer of answers) {
const ans = StringUtils.nowrap(answer).trim();
if (isPlainAnswer(ans)) {
for (let i = 0; i < ans.length; i++) {
const index22 = ans.charCodeAt(i) - 65;
targetAnswers[count][i] = options[index22].textContent || options[index22].innerText;
targetOptions[count][i] = options[index22];
}
}
}
if (targetAnswers[count].length === 0) {
const ratings = answerSimilar(answers, options.map((el) => el.textContent || el.innerText)).sort((a, b) => b.rating - a.rating);
if (ratings.some((rating) => rating.rating > 0.6)) {
options.forEach((el, i) => {
if (ratings[i].rating > 0.6) {
targetAnswers[count][i] = el.textContent || el.innerText;
targetOptions[count][i] = el;
}
});
}
}
count++;
}
let max = 0;
let index2 = -1;
for (let i = 0; i < targetOptions.length; i++) {
const len = targetAnswers[i].filter((ans) => ans !== void 0).length;
if (len > max) {
max = len;
index2 = i;
}
}
if (index2 === -1) {
return { finish: false };
} else {
targetAnswers[index2] = targetAnswers[index2].filter((ans) => ans !== void 0);
targetOptions[index2] = targetOptions[index2].filter((ans) => ans !== void 0);
targetOptions[index2].forEach((_, i) => {
setTimeout(() => {
handler("multiple", targetAnswers[index2][i], targetOptions[index2][i], ctx);
}, 500 * i);
});
return { finish: true, targetOptions, targetAnswers };
}
},
judgement(results, options, handler) {
for (const answers of results.map((res) => res.answers.map((ans) => ans.answer))) {
let matches = function(target, options2) {
return options2.some((option) => RegExp(clearString(option, "\u221A", "\xD7")).test(clearString(target, "\u221A", "\xD7")));
};
const correctWords = ["\u662F", "\u5BF9", "\u6B63\u786E", "\u221A", "\u5BF9\u7684", "\u662F\u7684", "\u6B63\u786E\u7684", "true", "yes", "1"];
const incorrectWords = [
"\u975E",
"\u5426",
"\u9519",
"\u9519\u8BEF",
"\xD7",
"X",
"\u9519\u7684",
"\u4E0D\u5BF9",
"\u4E0D\u6B63\u786E\u7684",
"\u4E0D\u6B63\u786E",
"\u4E0D\u662F",
"\u4E0D\u662F\u7684",
"false",
"no",
"0"
];
const answerShowCorrect = answers.find((answer) => matches(answer, correctWords));
const answerShowIncorrect = answers.find((answer) => matches(answer, incorrectWords));
if (answerShowCorrect || answerShowIncorrect) {
let option;
for (const el of options) {
const textShowCorrect = matches(el.textContent || el.innerText, correctWords);
const textShowIncorrect = matches(el.textContent || el.innerText, incorrectWords);
if (answerShowCorrect && textShowCorrect) {
option = el;
handler("judgement", answerShowCorrect, el, ctx);
break;
}
if (answerShowIncorrect && textShowIncorrect) {
option = el;
handler("judgement", answerShowIncorrect, el, ctx);
break;
}
}
return { finish: true, option };
}
}
return { finish: false };
},
completion: function(results, options, handler) {
for (const answers of results.map((res) => res.answers.map((ans) => ans.answer))) {
let ans = answers;
if (ans.length === 1) {
ans = splitAnswer(ans[0]);
}
if (ans.length !== 0 && ans.length === options.length) {
options.forEach((el, i) => {
setTimeout(() => {
handler("completion", ans[i], el, ctx);
}, 500 * i);
});
return { finish: true };
}
}
return { finish: false };
}
};
}
class OCSWorker {
constructor(opts) {
this.opts = opts;
}
async doWork() {
var _a, _b, _c, _d, _e, _f, _g, _h;
const results = [];
let result;
let type;
let error;
const root2 = typeof this.opts.root === "string" ? Array.from(document.querySelectorAll(this.opts.root)) : this.opts.root;
for (const el of root2) {
const time = Date.now();
result = { finish: false };
error = void 0;
type = void 0;
try {
const elements = domSearchAll(this.opts.elements, el);
(_b = (_a = this.opts).onElementSearched) == null ? void 0 : _b.call(_a, elements);
this.currentContext = { searchResults: [], root: el, elements };
if (typeof this.opts.work === "object") {
type = this.opts.work.type === void 0 ? defaultWorkTypeResolver(this.currentContext) : typeof this.opts.work.type === "string" ? this.opts.work.type : this.opts.work.type(this.currentContext);
}
if (this.opts.interceptor === void 0 || await ((_d = (_c = this.opts).interceptor) == null ? void 0 : _d.call(_c, this.currentContext))) {
const searchResults = await this.doAnswer(elements, type, this.currentContext);
if (!searchResults) {
throw new Error("\u7B54\u6848\u83B7\u53D6\u5931\u8D25, \u8BF7\u91CD\u65B0\u8FD0\u884C, \u6216\u8005\u5FFD\u7565\u6B64\u9898\u3002");
} else {
const validResults = searchResults.map((res2) => res2.answers.map((ans) => ans.answer)).flat().filter((ans) => ans);
searchResults.forEach((res2) => {
res2.answers = res2.answers.map((ans) => {
ans.answer = ans.answer ? ans.answer : "";
return ans;
});
});
this.currentContext = { searchResults, root: el, elements };
if (searchResults.length === 0 || validResults.length === 0) {
throw new Error("\u641C\u7D22\u4E0D\u5230\u7B54\u6848, \u8BF7\u91CD\u65B0\u8FD0\u884C, \u6216\u8005\u5FFD\u7565\u6B64\u9898\u3002");
}
}
if (typeof this.opts.work === "object") {
if (elements.options) {
if (type) {
const resolver = defaultQuestionResolve(this.currentContext)[type];
result = resolver(searchResults, elements.options, this.opts.work.handler);
} else {
throw new Error("\u9898\u76EE\u7C7B\u578B\u89E3\u6790\u5931\u8D25, \u8BF7\u81EA\u884C\u63D0\u4F9B\u89E3\u6790\u5668, \u6216\u8005\u5FFD\u7565\u6B64\u9898\u3002");
}
} else {
throw new Error("elements.options \u4E3A\u7A7A ! \u4F7F\u7528\u9ED8\u8BA4\u5904\u7406\u5668, \u5FC5\u987B\u63D0\u4F9B\u9898\u76EE\u9009\u9879\u7684\u9009\u62E9\u5668\u3002");
}
} else {
result = this.opts.work(this.currentContext);
}
}
} catch (e) {
error = e;
console.error(e);
(_f = (_e = this.opts).onError) == null ? void 0 : _f.call(_e, e, this.currentContext);
if (this.opts.stopWhenError) {
return results;
}
}
const res = {
time,
ctx: this.currentContext,
result,
consume: Date.now() - time,
error,
type
};
(_h = (_g = this.opts).onResult) == null ? void 0 : _h.call(_g, res);
results.push(res);
const { period = 3 * 1e3 } = this.opts;
await sleep(period);
}
return results;
}
async doAnswer(elements, type, ctx) {
let { timeout = 60 * 1e3, retry = 2 } = this.opts;
const answer = async () => {
return await Promise.race([
this.opts.answerer(elements, type, ctx),
sleep(timeout)
]);
};
let answers = await answer();
if (!answers) {
while (retry) {
answers = await answer();
retry--;
}
}
return answers;
}
async uploadHandler(options) {
var _a;
const { results, uploadRate, callback } = options;
let finished = 0;
for (const result of results) {
if ((_a = result.result) == null ? void 0 : _a.finish) {
finished++;
}
}
const rate = results.length === 0 ? 0 : finished / results.length * 100;
if (uploadRate !== "nomove") {
if (uploadRate === "force") {
await callback(rate, true);
} else {
await callback(rate, uploadRate === "save" ? false : rate >= parseFloat(uploadRate));
}
}
}
}
async function defaultAnswerWrapperHandler(answererWrappers, env) {
const searchResults = [];
const temp = JSON.parse(JSON.stringify(answererWrappers));
for (const wrapper of temp) {
const {
name: name2 = "\u672A\u77E5\u9898\u5E93",
homepage: homepage2 = "#",
method = "get",
type = "fetch",
contentType = "json",
headers = {},
data: wrapperData = {},
handler = "return (res)=> [JSON.stringify(res), undefined]"
} = wrapper;
try {
let answers = [];
const data = /* @__PURE__ */ Object.create({});
Reflect.ownKeys(wrapperData).forEach((key) => {
Reflect.set(data, key, resolvePlaceHolder(wrapperData[key.toString()]));
});
let url = resolvePlaceHolder(wrapper.url);
url = method === "post" ? url : url + "?" + new URLSearchParams(data).toString();
const requestData = {
method,
contentType,
data,
type,
headers: JSON.parse(JSON.stringify(headers || {}))
};
const responseData = await request(url, requestData);
const info = Function(handler)()(responseData);
if (info && Array.isArray(info)) {
if (info.every((item) => Array.isArray(item))) {
answers = answers.concat(info.map((item) => ({
question: item[0],
answer: item[1]
})));
} else {
answers.push({
question: info[0],
answer: info[1]
});
}
}
searchResults.push({
url: wrapper.url,
name: name2,
homepage: homepage2,
answers,
response: responseData,
data: requestData
});
} catch (error) {
console.error("\u8BF7\u6C42\u5931\u8D25: ", { error });
searchResults.push({
url: wrapper.url,
name: name2,
homepage: homepage2,
answers: [],
response: void 0,
data: void 0,
error
});
}
}
function resolvePlaceHolder(str) {
if (typeof str === "string") {
const matches = str.match(/\${(.*?)}/g) || [];
matches.forEach((placeHolder) => {
const value = env[placeHolder.replace(/\${(.*)}/, "$1")];
str = str.replace(placeHolder, value);
});
}
return str;
}
return searchResults;
}
const CXAnalyses = {
isInBreakingMode() {
return Array.from((top == null ? void 0 : top.document.querySelectorAll(".catalog_points_sa")) || []).length !== 0;
},
isStuckInBreakingMode() {
if (this.isInBreakingMode()) {
const chapter = top == null ? void 0 : top.document.querySelector(".posCatalog_active");
if (chapter) {
chapter.finish_count = chapter.finish_count ? chapter.finish_count + 1 : 1;
if (chapter.finish_count >= 2) {
chapter.finish_count = 1;
return true;
}
}
}
return false;
},
isInFinalTab() {
const tabs = Array.from((top == null ? void 0 : top.document.querySelectorAll(".prev_ul li")) || []);
return tabs.length && tabs[tabs.length - 1].classList.contains("active");
},
isInFinalChapter() {
var _a;
return (_a = Array.from((top == null ? void 0 : top.document.querySelectorAll(".posCatalog_select")) || []).pop()) == null ? void 0 : _a.classList.contains("posCatalog_active");
},
isFinishedAllChapters() {
return this.getChapterInfos().every((chapter) => chapter.unFinishCount === 0);
},
getChapterInfos() {
return Array.from((top == null ? void 0 : top.document.querySelectorAll('[onclick^="getTeacherAjax"]')) || []).map((el) => {
var _a, _b, _c;
return {
chapterId: (_b = (_a = el.getAttribute("onclick")) == null ? void 0 : _a.match(/\('(.*)','(.*)','(.*)'\)/)) == null ? void 0 : _b[3],
unFinishCount: parseInt(((_c = el.parentElement.querySelector(".jobUnfinishCount")) == null ? void 0 : _c.value) || "0")
};
});
},
getSecretFont(doc2 = document) {
return Array.from(doc2.querySelectorAll(".font-cxsecret")).map((font) => {
const after = font.querySelector(".after");
return after === null ? font : after;
});
}
};
async function study$2() {
var _a;
logger("debug", "\u5373\u5C06\u5F00\u59CB");
const { cx: setting } = useSettings();
const tasks = searchTask(setting.study);
for (const task of tasks) {
try {
await sleep(3e3);
await task();
} catch (e) {
logger("error", "\u672A\u77E5\u9519\u8BEF:", e);
}
}
const { next } = domSearch({ next: '.next[onclick^="PCount.next"]' }, top == null ? void 0 : top.document);
if (next !== null && next.style.display === "block") {
if (CXAnalyses.isInFinalTab()) {
if (CXAnalyses.isStuckInBreakingMode()) {
message("warn", "\u68C0\u6D4B\u5230\u6B64\u7AE0\u8282\u91CD\u590D\u8FDB\u5165, \u4E3A\u4E86\u907F\u514D\u65E0\u9650\u91CD\u590D, \u8BF7\u81EA\u884C\u624B\u52A8\u5B8C\u6210\u540E\u624B\u52A8\u70B9\u51FB\u4E0B\u4E00\u7AE0, \u6216\u8005\u5237\u65B0\u91CD\u8BD5\u3002");
return;
}
}
logger("debug", "\u5B8C\u6210, \u5373\u5C06\u8DF3\u8F6C, \u5982\u5361\u6B7B\u8BF7\u81EA\u884C\u70B9\u51FB\u4E0B\u4E00\u7AE0\u3002");
await sleep(3e3);
next.click();
await sleep(3e3);
(_a = domSearch({ confirm: ".jobFinishTip .nextChapter" }, top == null ? void 0 : top.document).confirm) == null ? void 0 : _a.click();
} else {
if (CXAnalyses.isInFinalChapter()) {
if (CXAnalyses.isFinishedAllChapters()) {
message("success", "\u5168\u90E8\u4EFB\u52A1\u70B9\u5DF2\u5B8C\u6210\uFF01");
} else {
message("warn", "\u5DF2\u7ECF\u62B5\u8FBE\u6700\u540E\u4E00\u4E2A\u7AE0\u8282\uFF01\u4F46\u4ECD\u7136\u6709\u4EFB\u52A1\u70B9\u672A\u5B8C\u6210\uFF0C\u8BF7\u624B\u52A8\u5207\u6362\u81F3\u672A\u5B8C\u6210\u7684\u7AE0\u8282\u3002");
}
} else {
message("error", "\u4E0B\u4E00\u7AE0\u6309\u94AE\u4E0D\u5B58\u5728\uFF0C\u8BF7\u5C1D\u8BD5\u5237\u65B0\u6216\u8005\u624B\u52A8\u5207\u6362\u4E0B\u4E00\u7AE0\u3002");
}
}
}
function searchTask(setting) {
return searchIFrame(document).map((frame) => {
const { media, read, chapterTest } = domSearch({
media: "video,audio",
chapterTest: ".TiMu",
read: "#img.imglook"
}, frame.contentDocument || document);
function getJob() {
return media ? mediaTask(setting, media, frame) : read ? readTask(frame) : chapterTest ? chapterTestTask(frame) : void 0;
}
if (media || read || chapterTest) {
return () => {
var _a, _b, _c, _d, _e;
let _parent = frame.contentWindow;
let jobIndex = getNumber((_a = frame.contentWindow) == null ? void 0 : _a._jobindex, _parent._jobindex);
while (_parent) {
jobIndex = getNumber(jobIndex, (_b = frame.contentWindow) == null ? void 0 : _b._jobindex, _parent._jobindex);
const attachments = ((_c = _parent == null ? void 0 : _parent.JC) == null ? void 0 : _c.attachments) || _parent.attachments;
if (attachments && typeof jobIndex === "number") {
const { name: name2, title, bookname, author: author2 } = ((_d = attachments[jobIndex]) == null ? void 0 : _d.property) || {};
const jobName = name2 || title || (bookname ? bookname + author2 : void 0) || "\u672A\u77E5\u4EFB\u52A1";
if (setting.restudy && !chapterTest) {
logger("debug", jobName, "\u5373\u5C06\u91CD\u65B0\u5B66\u4E60\u3002");
return getJob();
} else if (((_e = attachments[jobIndex]) == null ? void 0 : _e.job) === true) {
logger("debug", jobName, "\u5373\u5C06\u5F00\u59CB\u3002");
return getJob();
} else if (chapterTest && setting.forceWork) {
logger("debug", jobName, "\u5F00\u542F\u5F3A\u5236\u7B54\u9898\u3002");
return getJob();
} else {
logger("debug", jobName, "\u5DF2\u7ECF\u5B8C\u6210\uFF0C\u5373\u5C06\u8DF3\u8FC7\u3002");
break;
}
}
if (_parent.parent === _parent) {
break;
}
_parent = _parent.parent;
}
};
} else {
return void 0;
}
}).filter((f) => f);
}
function fixedVideoProgress$2(fixed) {
const videojs2 = useContext().cx.videojs;
if (videojs2) {
const { bar } = domSearch({ bar: ".vjs-control-bar" }, videojs2);
if (bar) {
bar.style.opacity = fixed ? "1" : "0";
}
}
}
function switchPlayLine(setting, videojs2, media, line) {
if (setting.line === "\u9ED8\u8BA4\u8DEF\u7EBF") {
logger("debug", "\u5F53\u524D\u64AD\u653E\u8DEF\u7EBF\u4E3A: \u9ED8\u8BA4\u8DEF\u7EBF\uFF0C\u5982\u89C9\u5F97\u89C6\u9891\u5361\u987F\uFF0C\u8BF7\u5C1D\u8BD5\u5207\u6362\u5176\u4ED6\u8DEF\u7EBF\u3002");
} else {
const { playbackRate = 1 } = setting;
if (videojs2 == null ? void 0 : videojs2.player) {
let selectLine = function(line2) {
var _a;
for (const menu of menus) {
if ((_a = menu.textContent) == null ? void 0 : _a.includes(line2)) {
menu.click();
setting.line = line2;
setTimeout(() => media.playbackRate = playbackRate, 3e3);
break;
}
}
};
const playlines = Array.from(videojs2.player.controlBar.options_.playerOptions.playlines);
const menus = Array.from(videojs2.player.controlBar.videoJsPlayLine.querySelectorAll("ul li"));
setting.playlines = ["\u9ED8\u8BA4\u8DEF\u7EBF"].concat(playlines.map((line2) => line2.label));
logger("debug", "\u5207\u6362\u8DEF\u7EBF\u4E2D\uFF1A " + line);
selectLine(line);
}
}
}
function mediaTask(setting, media, frame) {
const { playbackRate = 1, volume = 0 } = setting;
const { videojs: videojs2 } = domSearch({ videojs: "#video,#audio" }, frame.contentDocument || document);
if (!videojs2) {
message("error", "\u89C6\u9891\u68C0\u6D4B\u4E0D\u5230\uFF0C\u8BF7\u5C1D\u8BD5\u5237\u65B0\u6216\u8005\u624B\u52A8\u5207\u6362\u4E0B\u4E00\u7AE0\u3002");
return;
}
const ctx = useContext();
ctx.cx.videojs = videojs2;
ctx.common.currentMedia = media;
if (videojs2 && setting.line) {
setTimeout(() => switchPlayLine(setting, videojs2, media, setting.line), 3e3);
}
fixedVideoProgress$2(setting.showProgress);
return new Promise((resolve2) => {
if (media) {
media.volume = volume;
media.play();
media.playbackRate = playbackRate;
async function playFunction() {
if (!media.ended && !media.__played__) {
await sleep(1e3);
media.play();
} else {
media.__played__ = true;
logger("info", "\u89C6\u9891\u64AD\u653E\u5B8C\u6BD5");
media.removeEventListener("pause", playFunction);
}
}
media.addEventListener("pause", playFunction);
media.addEventListener("ended", () => resolve2());
}
});
}
async function readTask(frame) {
var _a;
const finishJob = (_a = frame == null ? void 0 : frame.contentWindow) == null ? void 0 : _a.finishJob;
if (finishJob)
finishJob();
await sleep(3e3);
}
async function chapterTestTask(frame) {
const { period, timeout, retry, waitForCheck } = useSettings().cx.work;
const { answererWrappers } = useSettings().common;
const { study: study2 } = useSettings().cx;
const local = useStore("localStorage");
if (study2.upload === "close") {
logger("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01");
} else if (answererWrappers.length === 0) {
logger("warn", "\u9898\u5E93\u914D\u7F6E\u4E3A\u7A7A\uFF0C\u8BF7\u8BBE\u7F6E\u3002");
} else if (!frame.contentWindow) {
logger("warn", "\u5143\u7D20\u4E0D\u53EF\u8BBF\u95EE");
} else {
logger("info", "\u5F00\u59CB\u81EA\u52A8\u7B54\u9898");
await waitForRecognize("cx");
const { window: frameWindow } = frame.contentWindow;
const { TiMu } = domSearchAll({ TiMu: ".TiMu" }, frameWindow.document);
local.workResults = [];
const worker = new OCSWorker({
root: TiMu,
elements: {
title: ".Zy_TItle .clearfix",
options: "ul li .after,ul li textarea,ul textarea,ul li label:not(.before)",
type: 'input[id^="answertype"]'
},
answerer: (elements, type, ctx) => {
const title = StringUtils.nowrap(elements.title[0].textContent || elements.title[0].innerText).trim().replace(/\(..题, .+?分\)/, "").replace(/[[|(|【|(]..题[\]|)|】|)]/, "").replace(/^\d+\.?/, "").trim();
if (title) {
return defaultAnswerWrapperHandler(answererWrappers, { type, title, root: ctx.root });
} else {
throw new Error("\u9898\u76EE\u4E3A\u7A7A\uFF0C\u8BF7\u67E5\u770B\u9898\u76EE\u662F\u5426\u4E3A\u7A7A\uFF0C\u6216\u8005\u5FFD\u7565\u6B64\u9898");
}
},
work: {
type({ elements }) {
var _a;
const typeInput = elements.type[0];
const type = parseInt(typeInput.value);
return type === 0 ? "single" : type === 1 ? "multiple" : type === 2 ? "completion" : type === 3 ? "judgement" : elements.options[0].tagName === "TEXTAREA" || elements.options[0].querySelector("textarea") || ((_a = elements.options[0].parentElement) == null ? void 0 : _a.querySelector("textarea")) ? "completion" : void 0;
},
handler(type, answer, option) {
var _a, _b, _c, _d, _e, _f;
if (type === "judgement" || type === "single" || type === "multiple") {
if (!((_b = (_a = option.parentElement) == null ? void 0 : _a.querySelector("input")) == null ? void 0 : _b.checked)) {
(_d = (_c = option.parentElement) == null ? void 0 : _c.querySelector("a,label")) == null ? void 0 : _d.click();
}
} else if (type === "completion" && answer.trim()) {
const textarea = (_e = option.parentElement) == null ? void 0 : _e.querySelector("textarea");
const textareaFrame = (_f = option.parentElement) == null ? void 0 : _f.querySelector("iframe");
if (textarea) {
textarea.value = answer;
}
if (textareaFrame == null ? void 0 : textareaFrame.contentDocument) {
textareaFrame.contentDocument.body.innerHTML = answer;
}
}
}
},
onElementSearched(elements) {
elements.title = elements.title.map(elementToRawObject);
const typeInput = elements.type[0];
const type = parseInt(typeInput.value);
if (type === 3) {
elements.options.forEach((option) => {
const ri = option.querySelector(".ri");
const span = document.createElement("span");
span.innerText = ri ? "\u221A" : "\xD7";
option.appendChild(span);
});
}
},
onResult: async (res) => {
var _a, _b, _c, _d, _e, _f, _g, _h;
if (res.ctx) {
local.workResults.push(res);
}
const randomWork = study2.randomWork;
if (!((_a = res.result) == null ? void 0 : _a.finish) && randomWork.enable) {
const options = ((_c = (_b = res.ctx) == null ? void 0 : _b.elements) == null ? void 0 : _c.options) || [];
const type = res.type;
if (randomWork.choice && (type === "judgement" || type === "single" || type === "multiple")) {
const option = options[Math.floor(Math.random() * options.length)];
(_e = (_d = option.parentElement) == null ? void 0 : _d.querySelector("a,label")) == null ? void 0 : _e.click();
} else if (randomWork.complete && type === "completion") {
for (const option of options) {
const textarea = (_f = option.parentElement) == null ? void 0 : _f.querySelector("textarea");
const completeTexts = randomWork.completeTexts.filter(Boolean);
const text = completeTexts[Math.floor(Math.random() * completeTexts.length)];
const textareaFrame = (_g = option.parentElement) == null ? void 0 : _g.querySelector("iframe");
if (textarea) {
textarea.value = text;
}
if (textareaFrame == null ? void 0 : textareaFrame.contentDocument) {
textareaFrame.contentDocument.body.innerHTML = text;
}
await sleep(500);
}
}
logger("info", "\u6B63\u5728\u968F\u673A\u4F5C\u7B54");
} else {
logger("info", "\u7B54\u9898", ((_h = res.result) == null ? void 0 : _h.finish) ? "\u5B8C\u6210" : "\u672A\u5B8C\u6210");
}
},
period: (period || 3) * 1e3,
timeout: (timeout || 30) * 1e3,
retry,
stopWhenError: false
});
const results = await worker.doWork();
logger("info", "\u505A\u9898\u5B8C\u6BD5", results);
await worker.uploadHandler({
uploadRate: study2.upload,
results,
async callback(finishedRate, uploadable) {
const name2 = study2.upload === "force" ? "\u5F3A\u5236\u63D0\u4EA4" : "\u81EA\u52A8\u63D0\u4EA4";
logger("info", "\u5B8C\u6210\u7387 : ", finishedRate, " , ", uploadable ? "5\u79D2\u540E\u5C06" + name2 : " 5\u79D2\u540E\u5C06\u81EA\u52A8\u4FDD\u5B58");
await sleep(5e3);
if (uploadable) {
frameWindow.btnBlueSubmit();
await sleep(3e3);
frameWindow.submitCheckTimes();
} else {
frameWindow.alert = () => {
};
frameWindow.noSubmit();
}
}
});
}
if (waitForCheck) {
logger("debug", `\u6B63\u5728\u7B49\u5F85\u7B54\u9898\u68C0\u67E5: \u4E00\u5171 ${waitForCheck} \u79D2`);
await sleep(waitForCheck * 1e3);
}
}
const StudySettingPanel$2 = defineComponent({
setup() {
const settings = useSettings().cx.study;
const workSettings = useSettings().cx.work;
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode("label", null, [createTextVNode("\u89C6\u9891\u500D\u901F ")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u9AD8\u500D\u901F(\u5927\u4E8E1\u500D)\u53EF\u80FD\u5BFC\u81F4: \n- \u8BB0\u5F55\u6E05\u7A7A\n- \u9891\u7E41\u9A8C\u8BC1\u7801\n\u8D85\u661F\u540E\u53F0\u53EF\u4EE5\u770B\u5230\u5B66\u4E60\u65F6\u957F\n\u8BF7\u8C28\u614E\u8BBE\u7F6E\u2757\n\u5982\u679C\u8BBE\u7F6E\u540E\u65E0\u6548\u5219\u662F\u8D85\u661F\u4E0D\u5141\u8BB8\u4F7F\u7528\u500D\u901F\u3002"
}, {
default: () => [createVNode("input", {
"type": "range",
"value": settings.playbackRate,
"min": "1",
"max": "16",
"step": "0.25",
"onInput": (e) => {
settings.playbackRate = e.target.valueAsNumber;
}
}, null)]
}), createVNode("span", {
"style": {
color: settings.playbackRate > 2 ? "red" : ""
}
}, [settings.playbackRate.toFixed(2), createTextVNode("x")])]), createVNode("label", null, [createTextVNode("\u97F3\u91CF\u8C03\u8282")]), createVNode("div", null, [createVNode("input", {
"type": "range",
"min": "0",
"max": "1",
"step": "0.05",
"value": settings.volume,
"onInput": (e) => {
settings.volume = e.target.valueAsNumber;
}
}, null), createVNode("span", null, [createTextVNode(" "), Math.round(settings.volume * 100), createTextVNode("% ")])]), createVNode("label", null, [createTextVNode("\u64AD\u653E\u8DEF\u7EBF")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u5982\u679C\u5F53\u524D\u89C6\u9891\u5361\u987F\u4E25\u91CD\uFF0C\u53EF\u4EE5\u5C1D\u8BD5\u5207\u6362\u8DEF\u7EBF\u3002"
}, {
default: () => [createVNode("select", {
"id": "video-line",
"value": settings.line || "\u9ED8\u8BA4\u8DEF\u7EBF",
"onChange": (e) => {
settings.line = e.target.value;
}
}, [settings.playlines.map((line) => createVNode("option", {
"value": line
}, [line]))])]
})]), createVNode("label", null, [createTextVNode("\u663E\u793A\u89C6\u9891\u8FDB\u5EA6")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u56FA\u5B9A\u8FDB\u5EA6\u6761\uFF0C\u9632\u6B62\u8FDB\u5EA6\u6761\u6D88\u5931\u3002"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.showProgress,
"onChange": (e) => {
settings.showProgress = e.target.checked;
fixedVideoProgress$2(e.target.checked);
}
}, null)]
})]), createVNode("label", null, [createTextVNode("\u590D\u4E60\u6A21\u5F0F")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u9047\u5230\u770B\u8FC7\u7684\u89C6\u9891,\u97F3\u9891,ppt\u4F1A\u91CD\u65B0\u64AD\u653E\uFF0C\u5E76\u4E14\u4ECE\u7B2C\u4E00\u4E2A\u7AE0\u8282\u5F00\u59CB\u3002"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.restudy,
"onChange": (e) => settings.restudy = e.target.checked
}, null)]
})]), createVNode("hr", null, null), createVNode("hr", null, null), createVNode(CommonWorkSettingPanel$1, {
"settings": workSettings
}, {
upload: createVNode(WorkerSetting, {
"label": "\u81EA\u52A8\u7B54\u9898",
"config": {
selected: settings.upload
},
"changeHandler": (e) => settings.upload = e.target.value
}, null),
extra: createVNode(Fragment, null, [createVNode("label", null, [createTextVNode("\u5F3A\u5236\u7B54\u9898")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u5F53\u7AE0\u8282\u6D4B\u8BD5\u4E0D\u662F\u4EFB\u52A1\u70B9\u65F6\uFF0C\u5F3A\u5236\u81EA\u52A8\u7B54\u9898\u3002\n(\u5DE6\u4E0A\u89D2\u6709\u9EC4\u70B9\u7684\u4EE3\u8868\u6B64\u5C0F\u8282\u662F\u4EFB\u52A1\u70B9)\n(\u4E00\u822C\u6765\u8BF4\u4E0D\u662F\u4EFB\u52A1\u70B9\u7684\u7AE0\u8282\u6D4B\u8BD5\u662F\u4E0D\u8BA1\u5206\u7684)"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.forceWork,
"onChange": (e) => settings.forceWork = e.target.checked
}, null)]
})]), createVNode("label", null, [createTextVNode("\u968F\u673A\u4F5C\u7B54")]), createVNode(Tooltip, {
"title": "\u968F\u673A\u4F5C\u7B54 \u672A\u5B8C\u6210/\u672A\u5339\u914D \u7684\u9898\u76EE\uFF0C\u5F00\u542F\u540E\u53EF\u81EA\u5B9A\u4E49\u9009\u9879"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.randomWork.enable,
"onChange": (e) => settings.randomWork.enable = e.target.checked
}, null)]
}), settings.randomWork.enable && createVNode(Fragment, null, [createVNode("label", null, [createTextVNode("\u9009\u62E9\u968F\u673A")]), createVNode(Tooltip, {
"title": "\u968F\u673A\u4F5C\u7B54 \u5355\u9009/\u591A\u9009/\u5224\u65AD \u9898"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.randomWork.choice,
"onChange": (e) => settings.randomWork.choice = e.target.checked
}, null)]
}), createVNode("label", null, [createTextVNode("\u586B\u7A7A\u968F\u673A")]), createVNode(Tooltip, {
"title": "\u968F\u673A\u4F5C\u7B54\u586B\u7A7A\u9898"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.randomWork.complete,
"onChange": (e) => settings.randomWork.complete = e.target.checked
}, null)]
}), settings.randomWork.complete && createVNode(Fragment, null, [createVNode("label", null, [createTextVNode("\u586B\u7A7A\u968F\u673A\u6587\u6848")]), createVNode(Tooltip, {
"title": "\u6BCF\u884C\u4E00\u4E2A\uFF0C\u968F\u673A\u586B\u5165"
}, {
default: () => [createVNode("textarea", {
"value": settings.randomWork.completeTexts.map(String).filter((s) => s.trim().length > 0).join("\n"),
"onInput": (e) => settings.randomWork.completeTexts = e.target.value.map(String).filter((s) => s.trim().length > 0).split("\n")
}, null)]
})])])])
})])]);
}
});
const WorkSettingPanel$1 = defineComponent({
setup() {
const settings = useSettings().cx.work;
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode(CommonWorkSettingPanel$1, {
"settings": settings
}, {
upload: createVNode(WorkerSetting, {
"label": "\u81EA\u52A8\u7B54\u9898",
"config": {
selected: settings.upload
},
"changeHandler": (e) => settings.upload = e.target.value
}, null)
})])]);
}
});
const LiveSettingPanel = defineComponent({
setup() {
const settings = useSettings().cx.live;
const ctx = useContext();
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode("label", null, [createTextVNode("\u89C6\u9891\u500D\u901F ")]), createVNode("div", null, [createVNode("input", {
"type": "range",
"value": settings.playbackRate,
"min": "1",
"max": "16",
"step": "0.25",
"onInput": (e) => {
settings.playbackRate = e.target.valueAsNumber;
if (ctx.common.currentMedia) {
ctx.common.currentMedia.playbackRate = e.target.valueAsNumber;
}
}
}, null), createVNode("span", {
"style": {
color: settings.playbackRate > 2 ? "red" : ""
}
}, [settings.playbackRate.toFixed(2), createTextVNode("x")])]), createVNode("label", null, [createTextVNode("\u97F3\u91CF\u8C03\u8282")]), createVNode("div", null, [createVNode("input", {
"type": "range",
"min": "0",
"max": "1",
"step": "0.05",
"value": settings.volume,
"onInput": (e) => {
settings.volume = e.target.valueAsNumber;
if (ctx.common.currentMedia)
ctx.common.currentMedia.volume = e.target.valueAsNumber;
}
}, null), createVNode("span", null, [createTextVNode(" "), Math.round(settings.volume * 100), createTextVNode("% ")])]), createVNode("label", null, [createTextVNode("\u663E\u793A\u56DE\u653E\u8FDB\u5EA6")]), createVNode("div", null, [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.showProgress,
"onChange": (e) => {
settings.showProgress = e.target.checked;
}
}, null)])])]);
}
});
function rateHack() {
try {
hack();
window.document.addEventListener("readystatechange", hack);
window.addEventListener("load", hack);
} catch (e) {
console.error(e.message);
}
}
function hack() {
if (typeof videojs !== "undefined" && typeof Ext !== "undefined") {
logger("debug", "\u500D\u901F\u7834\u89E3\u542F\u52A8");
Ext.define("ans.VideoJs", {
override: "ans.VideoJs",
constructor: function(b) {
b = b || {};
const e = this;
e.addEvents(["seekstart"]);
e.mixins.observable.constructor.call(e, b);
const c = videojs(b.videojs, e.params2VideoOpt(b.params), function() {
});
Ext.fly(b.videojs).on("contextmenu", function(f) {
f.preventDefault();
});
Ext.fly(b.videojs).on("keydown", function(f) {
if (f.keyCode === 32 || f.keyCode === 37 || f.keyCode === 39 || f.keyCode === 107) {
f.preventDefault();
}
});
if (c.videoJsResolutionSwitcher) {
c.on("resolutionchange", function() {
const g = c.currentResolution();
const f = g.sources ? g.sources[0].res : false;
Ext.setCookie("resolution", f);
});
}
}
});
}
}
var md5$1 = { exports: {} };
var crypt = { exports: {} };
(function() {
var base64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", crypt$1 = {
rotl: function(n, b) {
return n << b | n >>> 32 - b;
},
rotr: function(n, b) {
return n << 32 - b | n >>> b;
},
endian: function(n) {
if (n.constructor == Number) {
return crypt$1.rotl(n, 8) & 16711935 | crypt$1.rotl(n, 24) & 4278255360;
}
for (var i = 0; i < n.length; i++)
n[i] = crypt$1.endian(n[i]);
return n;
},
randomBytes: function(n) {
for (var bytes = []; n > 0; n--)
bytes.push(Math.floor(Math.random() * 256));
return bytes;
},
bytesToWords: function(bytes) {
for (var words = [], i = 0, b = 0; i < bytes.length; i++, b += 8)
words[b >>> 5] |= bytes[i] << 24 - b % 32;
return words;
},
wordsToBytes: function(words) {
for (var bytes = [], b = 0; b < words.length * 32; b += 8)
bytes.push(words[b >>> 5] >>> 24 - b % 32 & 255);
return bytes;
},
bytesToHex: function(bytes) {
for (var hex = [], i = 0; i < bytes.length; i++) {
hex.push((bytes[i] >>> 4).toString(16));
hex.push((bytes[i] & 15).toString(16));
}
return hex.join("");
},
hexToBytes: function(hex) {
for (var bytes = [], c = 0; c < hex.length; c += 2)
bytes.push(parseInt(hex.substr(c, 2), 16));
return bytes;
},
bytesToBase64: function(bytes) {
for (var base64 = [], i = 0; i < bytes.length; i += 3) {
var triplet = bytes[i] << 16 | bytes[i + 1] << 8 | bytes[i + 2];
for (var j = 0; j < 4; j++)
if (i * 8 + j * 6 <= bytes.length * 8)
base64.push(base64map.charAt(triplet >>> 6 * (3 - j) & 63));
else
base64.push("=");
}
return base64.join("");
},
base64ToBytes: function(base64) {
base64 = base64.replace(/[^A-Z0-9+\/]/ig, "");
for (var bytes = [], i = 0, imod4 = 0; i < base64.length; imod4 = ++i % 4) {
if (imod4 == 0)
continue;
bytes.push((base64map.indexOf(base64.charAt(i - 1)) & Math.pow(2, -2 * imod4 + 8) - 1) << imod4 * 2 | base64map.indexOf(base64.charAt(i)) >>> 6 - imod4 * 2);
}
return bytes;
}
};
crypt.exports = crypt$1;
})();
var charenc = {
utf8: {
stringToBytes: function(str) {
return charenc.bin.stringToBytes(unescape(encodeURIComponent(str)));
},
bytesToString: function(bytes) {
return decodeURIComponent(escape(charenc.bin.bytesToString(bytes)));
}
},
bin: {
stringToBytes: function(str) {
for (var bytes = [], i = 0; i < str.length; i++)
bytes.push(str.charCodeAt(i) & 255);
return bytes;
},
bytesToString: function(bytes) {
for (var str = [], i = 0; i < bytes.length; i++)
str.push(String.fromCharCode(bytes[i]));
return str.join("");
}
}
};
var charenc_1 = charenc;
/*!
* Determine if an object is a Buffer
*
* @author Feross Aboukhadijeh <https://feross.org>
* @license MIT
*/
var isBuffer_1 = function(obj) {
return obj != null && (isBuffer(obj) || isSlowBuffer(obj) || !!obj._isBuffer);
};
function isBuffer(obj) {
return !!obj.constructor && typeof obj.constructor.isBuffer === "function" && obj.constructor.isBuffer(obj);
}
function isSlowBuffer(obj) {
return typeof obj.readFloatLE === "function" && typeof obj.slice === "function" && isBuffer(obj.slice(0, 0));
}
(function() {
var crypt$1 = crypt.exports, utf8 = charenc_1.utf8, isBuffer2 = isBuffer_1, bin = charenc_1.bin, md52 = function(message2, options) {
if (message2.constructor == String)
if (options && options.encoding === "binary")
message2 = bin.stringToBytes(message2);
else
message2 = utf8.stringToBytes(message2);
else if (isBuffer2(message2))
message2 = Array.prototype.slice.call(message2, 0);
else if (!Array.isArray(message2) && message2.constructor !== Uint8Array)
message2 = message2.toString();
var m = crypt$1.bytesToWords(message2), l = message2.length * 8, a = 1732584193, b = -271733879, c = -1732584194, d = 271733878;
for (var i = 0; i < m.length; i++) {
m[i] = (m[i] << 8 | m[i] >>> 24) & 16711935 | (m[i] << 24 | m[i] >>> 8) & 4278255360;
}
m[l >>> 5] |= 128 << l % 32;
m[(l + 64 >>> 9 << 4) + 14] = l;
var FF = md52._ff, GG = md52._gg, HH = md52._hh, II = md52._ii;
for (var i = 0; i < m.length; i += 16) {
var aa = a, bb = b, cc = c, dd = d;
a = FF(a, b, c, d, m[i + 0], 7, -680876936);
d = FF(d, a, b, c, m[i + 1], 12, -389564586);
c = FF(c, d, a, b, m[i + 2], 17, 606105819);
b = FF(b, c, d, a, m[i + 3], 22, -1044525330);
a = FF(a, b, c, d, m[i + 4], 7, -176418897);
d = FF(d, a, b, c, m[i + 5], 12, 1200080426);
c = FF(c, d, a, b, m[i + 6], 17, -1473231341);
b = FF(b, c, d, a, m[i + 7], 22, -45705983);
a = FF(a, b, c, d, m[i + 8], 7, 1770035416);
d = FF(d, a, b, c, m[i + 9], 12, -1958414417);
c = FF(c, d, a, b, m[i + 10], 17, -42063);
b = FF(b, c, d, a, m[i + 11], 22, -1990404162);
a = FF(a, b, c, d, m[i + 12], 7, 1804603682);
d = FF(d, a, b, c, m[i + 13], 12, -40341101);
c = FF(c, d, a, b, m[i + 14], 17, -1502002290);
b = FF(b, c, d, a, m[i + 15], 22, 1236535329);
a = GG(a, b, c, d, m[i + 1], 5, -165796510);
d = GG(d, a, b, c, m[i + 6], 9, -1069501632);
c = GG(c, d, a, b, m[i + 11], 14, 643717713);
b = GG(b, c, d, a, m[i + 0], 20, -373897302);
a = GG(a, b, c, d, m[i + 5], 5, -701558691);
d = GG(d, a, b, c, m[i + 10], 9, 38016083);
c = GG(c, d, a, b, m[i + 15], 14, -660478335);
b = GG(b, c, d, a, m[i + 4], 20, -405537848);
a = GG(a, b, c, d, m[i + 9], 5, 568446438);
d = GG(d, a, b, c, m[i + 14], 9, -1019803690);
c = GG(c, d, a, b, m[i + 3], 14, -187363961);
b = GG(b, c, d, a, m[i + 8], 20, 1163531501);
a = GG(a, b, c, d, m[i + 13], 5, -1444681467);
d = GG(d, a, b, c, m[i + 2], 9, -51403784);
c = GG(c, d, a, b, m[i + 7], 14, 1735328473);
b = GG(b, c, d, a, m[i + 12], 20, -1926607734);
a = HH(a, b, c, d, m[i + 5], 4, -378558);
d = HH(d, a, b, c, m[i + 8], 11, -2022574463);
c = HH(c, d, a, b, m[i + 11], 16, 1839030562);
b = HH(b, c, d, a, m[i + 14], 23, -35309556);
a = HH(a, b, c, d, m[i + 1], 4, -1530992060);
d = HH(d, a, b, c, m[i + 4], 11, 1272893353);
c = HH(c, d, a, b, m[i + 7], 16, -155497632);
b = HH(b, c, d, a, m[i + 10], 23, -1094730640);
a = HH(a, b, c, d, m[i + 13], 4, 681279174);
d = HH(d, a, b, c, m[i + 0], 11, -358537222);
c = HH(c, d, a, b, m[i + 3], 16, -722521979);
b = HH(b, c, d, a, m[i + 6], 23, 76029189);
a = HH(a, b, c, d, m[i + 9], 4, -640364487);
d = HH(d, a, b, c, m[i + 12], 11, -421815835);
c = HH(c, d, a, b, m[i + 15], 16, 530742520);
b = HH(b, c, d, a, m[i + 2], 23, -995338651);
a = II(a, b, c, d, m[i + 0], 6, -198630844);
d = II(d, a, b, c, m[i + 7], 10, 1126891415);
c = II(c, d, a, b, m[i + 14], 15, -1416354905);
b = II(b, c, d, a, m[i + 5], 21, -57434055);
a = II(a, b, c, d, m[i + 12], 6, 1700485571);
d = II(d, a, b, c, m[i + 3], 10, -1894986606);
c = II(c, d, a, b, m[i + 10], 15, -1051523);
b = II(b, c, d, a, m[i + 1], 21, -2054922799);
a = II(a, b, c, d, m[i + 8], 6, 1873313359);
d = II(d, a, b, c, m[i + 15], 10, -30611744);
c = II(c, d, a, b, m[i + 6], 15, -1560198380);
b = II(b, c, d, a, m[i + 13], 21, 1309151649);
a = II(a, b, c, d, m[i + 4], 6, -145523070);
d = II(d, a, b, c, m[i + 11], 10, -1120210379);
c = II(c, d, a, b, m[i + 2], 15, 718787259);
b = II(b, c, d, a, m[i + 9], 21, -343485551);
a = a + aa >>> 0;
b = b + bb >>> 0;
c = c + cc >>> 0;
d = d + dd >>> 0;
}
return crypt$1.endian([a, b, c, d]);
};
md52._ff = function(a, b, c, d, x, s, t) {
var n = a + (b & c | ~b & d) + (x >>> 0) + t;
return (n << s | n >>> 32 - s) + b;
};
md52._gg = function(a, b, c, d, x, s, t) {
var n = a + (b & d | c & ~d) + (x >>> 0) + t;
return (n << s | n >>> 32 - s) + b;
};
md52._hh = function(a, b, c, d, x, s, t) {
var n = a + (b ^ c ^ d) + (x >>> 0) + t;
return (n << s | n >>> 32 - s) + b;
};
md52._ii = function(a, b, c, d, x, s, t) {
var n = a + (c ^ (b | ~d)) + (x >>> 0) + t;
return (n << s | n >>> 32 - s) + b;
};
md52._blocksize = 16;
md52._digestsize = 16;
md5$1.exports = function(message2, options) {
if (message2 === void 0 || message2 === null)
throw new Error("Illegal argument " + message2);
var digestbytes = crypt$1.wordsToBytes(md52(message2, options));
return options && options.asBytes ? digestbytes : options && options.asString ? bin.bytesToString(digestbytes) : crypt$1.bytesToHex(digestbytes);
};
})();
var md5 = md5$1.exports;
var Typr = {};
Typr.parse = function(buff) {
var bin = Typr._bin;
var data = new Uint8Array(buff);
var offset = 0;
bin.readFixed(data, offset);
offset += 4;
var numTables = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var tags = ["cmap", "head", "hhea", "maxp", "hmtx", "name", "OS/2", "post", "loca", "glyf", "kern", "CFF ", "GPOS", "GSUB", "SVG "];
var obj = { _data: data };
var tabs = {};
for (var i = 0; i < numTables; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var toffset = bin.readUint(data, offset);
offset += 4;
var length = bin.readUint(data, offset);
offset += 4;
tabs[tag] = { offset: toffset, length };
}
for (var i = 0; i < tags.length; i++) {
var t = tags[i];
if (tabs[t])
obj[t.trim()] = Typr[t.trim()].parse(data, tabs[t].offset, tabs[t].length, obj);
}
return obj;
};
Typr._tabOffset = function(data, tab) {
var bin = Typr._bin;
var numTables = bin.readUshort(data, 4);
var offset = 12;
for (var i = 0; i < numTables; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var toffset = bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
if (tag == tab)
return toffset;
}
return 0;
};
Typr._bin = { readFixed: function(data, o) {
return (data[o] << 8 | data[o + 1]) + (data[o + 2] << 8 | data[o + 3]) / (256 * 256 + 4);
}, readF2dot14: function(data, o) {
var num = Typr._bin.readShort(data, o);
return num / 16384;
}, readInt: function(buff, p2) {
var a = Typr._bin.t.uint8;
a[0] = buff[p2 + 3];
a[1] = buff[p2 + 2];
a[2] = buff[p2 + 1];
a[3] = buff[p2];
return Typr._bin.t.int32[0];
}, readInt8: function(buff, p2) {
var a = Typr._bin.t.uint8;
a[0] = buff[p2];
return Typr._bin.t.int8[0];
}, readShort: function(buff, p2) {
var a = Typr._bin.t.uint8;
a[1] = buff[p2];
a[0] = buff[p2 + 1];
return Typr._bin.t.int16[0];
}, readUshort: function(buff, p2) {
return buff[p2] << 8 | buff[p2 + 1];
}, readUshorts: function(buff, p2, len) {
var arr = [];
for (var i = 0; i < len; i++)
arr.push(Typr._bin.readUshort(buff, p2 + i * 2));
return arr;
}, readUint: function(buff, p2) {
var a = Typr._bin.t.uint8;
a[3] = buff[p2];
a[2] = buff[p2 + 1];
a[1] = buff[p2 + 2];
a[0] = buff[p2 + 3];
return Typr._bin.t.uint32[0];
}, readUint64: function(buff, p2) {
return Typr._bin.readUint(buff, p2) * (4294967295 + 1) + Typr._bin.readUint(buff, p2 + 4);
}, readASCII: function(buff, p2, l) {
var s = "";
for (var i = 0; i < l; i++)
s += String.fromCharCode(buff[p2 + i]);
return s;
}, readUnicode: function(buff, p2, l) {
var s = "";
for (var i = 0; i < l; i++) {
var c = buff[p2++] << 8 | buff[p2++];
s += String.fromCharCode(c);
}
return s;
}, _tdec: window["TextDecoder"] ? new window["TextDecoder"]() : null, readUTF8: function(buff, p2, l) {
var tdec = Typr._bin._tdec;
if (tdec && p2 == 0 && l == buff.length)
return tdec["decode"](buff);
return Typr._bin.readASCII(buff, p2, l);
}, readBytes: function(buff, p2, l) {
var arr = [];
for (var i = 0; i < l; i++)
arr.push(buff[p2 + i]);
return arr;
}, readASCIIArray: function(buff, p2, l) {
var s = [];
for (var i = 0; i < l; i++)
s.push(String.fromCharCode(buff[p2 + i]));
return s;
} };
Typr._bin.t = { buff: new ArrayBuffer(8) };
Typr._bin.t.int8 = new Int8Array(Typr._bin.t.buff);
Typr._bin.t.uint8 = new Uint8Array(Typr._bin.t.buff);
Typr._bin.t.int16 = new Int16Array(Typr._bin.t.buff);
Typr._bin.t.uint16 = new Uint16Array(Typr._bin.t.buff);
Typr._bin.t.int32 = new Int32Array(Typr._bin.t.buff);
Typr._bin.t.uint32 = new Uint32Array(Typr._bin.t.buff);
Typr._lctf = {};
Typr._lctf.parse = function(data, offset, length, font, subt) {
var bin = Typr._bin;
var obj = {};
var offset0 = offset;
bin.readFixed(data, offset);
offset += 4;
var offScriptList = bin.readUshort(data, offset);
offset += 2;
var offFeatureList = bin.readUshort(data, offset);
offset += 2;
var offLookupList = bin.readUshort(data, offset);
offset += 2;
obj.scriptList = Typr._lctf.readScriptList(data, offset0 + offScriptList);
obj.featureList = Typr._lctf.readFeatureList(data, offset0 + offFeatureList);
obj.lookupList = Typr._lctf.readLookupList(data, offset0 + offLookupList, subt);
return obj;
};
Typr._lctf.readLookupList = function(data, offset, subt) {
var bin = Typr._bin;
var offset0 = offset;
var obj = [];
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var noff = bin.readUshort(data, offset);
offset += 2;
var lut = Typr._lctf.readLookupTable(data, offset0 + noff, subt);
obj.push(lut);
}
return obj;
};
Typr._lctf.readLookupTable = function(data, offset, subt) {
var bin = Typr._bin;
var offset0 = offset;
var obj = { tabs: [] };
obj.ltype = bin.readUshort(data, offset);
offset += 2;
obj.flag = bin.readUshort(data, offset);
offset += 2;
var cnt = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var noff = bin.readUshort(data, offset);
offset += 2;
var tab = subt(data, obj.ltype, offset0 + noff);
obj.tabs.push(tab);
}
return obj;
};
Typr._lctf.numOfOnes = function(n) {
var num = 0;
for (var i = 0; i < 32; i++)
if ((n >>> i & 1) != 0)
num++;
return num;
};
Typr._lctf.readClassDef = function(data, offset) {
var bin = Typr._bin;
var obj = [];
var format = bin.readUshort(data, offset);
offset += 2;
if (format == 1) {
var startGlyph = bin.readUshort(data, offset);
offset += 2;
var glyphCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < glyphCount; i++) {
obj.push(startGlyph + i);
obj.push(startGlyph + i);
obj.push(bin.readUshort(data, offset));
offset += 2;
}
}
if (format == 2) {
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
obj.push(bin.readUshort(data, offset));
offset += 2;
obj.push(bin.readUshort(data, offset));
offset += 2;
obj.push(bin.readUshort(data, offset));
offset += 2;
}
}
return obj;
};
Typr._lctf.getInterval = function(tab, val) {
for (var i = 0; i < tab.length; i += 3) {
var start2 = tab[i], end = tab[i + 1];
tab[i + 2];
if (start2 <= val && val <= end)
return i;
}
return -1;
};
Typr._lctf.readValueRecord = function(data, offset, valFmt) {
var bin = Typr._bin;
var arr = [];
arr.push(valFmt & 1 ? bin.readShort(data, offset) : 0);
offset += valFmt & 1 ? 2 : 0;
arr.push(valFmt & 2 ? bin.readShort(data, offset) : 0);
offset += valFmt & 2 ? 2 : 0;
arr.push(valFmt & 4 ? bin.readShort(data, offset) : 0);
offset += valFmt & 4 ? 2 : 0;
arr.push(valFmt & 8 ? bin.readShort(data, offset) : 0);
offset += valFmt & 8 ? 2 : 0;
return arr;
};
Typr._lctf.readCoverage = function(data, offset) {
var bin = Typr._bin;
var cvg = {};
cvg.fmt = bin.readUshort(data, offset);
offset += 2;
var count = bin.readUshort(data, offset);
offset += 2;
if (cvg.fmt == 1)
cvg.tab = bin.readUshorts(data, offset, count);
if (cvg.fmt == 2)
cvg.tab = bin.readUshorts(data, offset, count * 3);
return cvg;
};
Typr._lctf.coverageIndex = function(cvg, val) {
var tab = cvg.tab;
if (cvg.fmt == 1)
return tab.indexOf(val);
if (cvg.fmt == 2) {
var ind = Typr._lctf.getInterval(tab, val);
if (ind != -1)
return tab[ind + 2] + (val - tab[ind]);
}
return -1;
};
Typr._lctf.readFeatureList = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = [];
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var noff = bin.readUshort(data, offset);
offset += 2;
obj.push({ tag: tag.trim(), tab: Typr._lctf.readFeatureTable(data, offset0 + noff) });
}
return obj;
};
Typr._lctf.readFeatureTable = function(data, offset) {
var bin = Typr._bin;
bin.readUshort(data, offset);
offset += 2;
var lookupCount = bin.readUshort(data, offset);
offset += 2;
var indices = [];
for (var i = 0; i < lookupCount; i++)
indices.push(bin.readUshort(data, offset + 2 * i));
return indices;
};
Typr._lctf.readScriptList = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var noff = bin.readUshort(data, offset);
offset += 2;
obj[tag.trim()] = Typr._lctf.readScriptTable(data, offset0 + noff);
}
return obj;
};
Typr._lctf.readScriptTable = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
var defLangSysOff = bin.readUshort(data, offset);
offset += 2;
obj.default = Typr._lctf.readLangSysTable(data, offset0 + defLangSysOff);
var langSysCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < langSysCount; i++) {
var tag = bin.readASCII(data, offset, 4);
offset += 4;
var langSysOff = bin.readUshort(data, offset);
offset += 2;
obj[tag.trim()] = Typr._lctf.readLangSysTable(data, offset0 + langSysOff);
}
return obj;
};
Typr._lctf.readLangSysTable = function(data, offset) {
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
obj.reqFeature = bin.readUshort(data, offset);
offset += 2;
var featureCount = bin.readUshort(data, offset);
offset += 2;
obj.features = bin.readUshorts(data, offset, featureCount);
return obj;
};
Typr.CFF = {};
Typr.CFF.parse = function(data, offset, length) {
var bin = Typr._bin;
data = new Uint8Array(data.buffer, offset, length);
offset = 0;
data[offset];
offset++;
data[offset];
offset++;
data[offset];
offset++;
data[offset];
offset++;
var ninds = [];
offset = Typr.CFF.readIndex(data, offset, ninds);
var names = [];
for (var i = 0; i < ninds.length - 1; i++)
names.push(bin.readASCII(data, offset + ninds[i], ninds[i + 1] - ninds[i]));
offset += ninds[ninds.length - 1];
var tdinds = [];
offset = Typr.CFF.readIndex(data, offset, tdinds);
var topDicts = [];
for (var i = 0; i < tdinds.length - 1; i++)
topDicts.push(Typr.CFF.readDict(data, offset + tdinds[i], offset + tdinds[i + 1]));
offset += tdinds[tdinds.length - 1];
var topdict = topDicts[0];
var sinds = [];
offset = Typr.CFF.readIndex(data, offset, sinds);
var strings = [];
for (var i = 0; i < sinds.length - 1; i++)
strings.push(bin.readASCII(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
offset += sinds[sinds.length - 1];
Typr.CFF.readSubrs(data, offset, topdict);
if (topdict.CharStrings) {
offset = topdict.CharStrings;
var sinds = [];
offset = Typr.CFF.readIndex(data, offset, sinds);
var cstr = [];
for (var i = 0; i < sinds.length - 1; i++)
cstr.push(bin.readBytes(data, offset + sinds[i], sinds[i + 1] - sinds[i]));
topdict.CharStrings = cstr;
}
if (topdict.Encoding)
topdict.Encoding = Typr.CFF.readEncoding(data, topdict.Encoding, topdict.CharStrings.length);
if (topdict.charset)
topdict.charset = Typr.CFF.readCharset(data, topdict.charset, topdict.CharStrings.length);
if (topdict.Private) {
offset = topdict.Private[1];
topdict.Private = Typr.CFF.readDict(data, offset, offset + topdict.Private[0]);
if (topdict.Private.Subrs)
Typr.CFF.readSubrs(data, offset + topdict.Private.Subrs, topdict.Private);
}
var obj = {};
for (var p2 in topdict) {
if (["FamilyName", "FullName", "Notice", "version", "Copyright"].indexOf(p2) != -1)
obj[p2] = strings[topdict[p2] - 426 + 35];
else
obj[p2] = topdict[p2];
}
return obj;
};
Typr.CFF.readSubrs = function(data, offset, obj) {
var bin = Typr._bin;
var gsubinds = [];
offset = Typr.CFF.readIndex(data, offset, gsubinds);
var bias, nSubrs = gsubinds.length;
if (nSubrs < 1240)
bias = 107;
else if (nSubrs < 33900)
bias = 1131;
else
bias = 32768;
obj.Bias = bias;
obj.Subrs = [];
for (var i = 0; i < gsubinds.length - 1; i++)
obj.Subrs.push(bin.readBytes(data, offset + gsubinds[i], gsubinds[i + 1] - gsubinds[i]));
};
Typr.CFF.tableSE = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 106, 107, 108, 109, 110, 0, 111, 112, 113, 114, 0, 115, 116, 117, 118, 119, 120, 121, 122, 0, 123, 0, 124, 125, 126, 127, 128, 129, 130, 131, 0, 132, 133, 0, 134, 135, 136, 137, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 138, 0, 139, 0, 0, 0, 0, 140, 141, 142, 143, 0, 0, 0, 0, 0, 144, 0, 0, 0, 145, 0, 0, 146, 147, 148, 149, 0, 0, 0, 0];
Typr.CFF.glyphByUnicode = function(cff, code) {
for (var i = 0; i < cff.charset.length; i++)
if (cff.charset[i] == code)
return i;
return -1;
};
Typr.CFF.glyphBySE = function(cff, charcode) {
if (charcode < 0 || charcode > 255)
return -1;
return Typr.CFF.glyphByUnicode(cff, Typr.CFF.tableSE[charcode]);
};
Typr.CFF.readEncoding = function(data, offset, num) {
Typr._bin;
var array = [".notdef"];
var format = data[offset];
offset++;
if (format == 0) {
var nCodes = data[offset];
offset++;
for (var i = 0; i < nCodes; i++)
array.push(data[offset + i]);
} else
throw "error: unknown encoding format: " + format;
return array;
};
Typr.CFF.readCharset = function(data, offset, num) {
var bin = Typr._bin;
var charset = [".notdef"];
var format = data[offset];
offset++;
if (format == 0) {
for (var i = 0; i < num; i++) {
var first = bin.readUshort(data, offset);
offset += 2;
charset.push(first);
}
} else if (format == 1 || format == 2) {
while (charset.length < num) {
var first = bin.readUshort(data, offset);
offset += 2;
var nLeft = 0;
if (format == 1) {
nLeft = data[offset];
offset++;
} else {
nLeft = bin.readUshort(data, offset);
offset += 2;
}
for (var i = 0; i <= nLeft; i++) {
charset.push(first);
first++;
}
}
} else
throw "error: format: " + format;
return charset;
};
Typr.CFF.readIndex = function(data, offset, inds) {
var bin = Typr._bin;
var count = bin.readUshort(data, offset);
offset += 2;
var offsize = data[offset];
offset++;
if (offsize == 1)
for (var i = 0; i < count + 1; i++)
inds.push(data[offset + i]);
else if (offsize == 2)
for (var i = 0; i < count + 1; i++)
inds.push(bin.readUshort(data, offset + i * 2));
else if (offsize == 3)
for (var i = 0; i < count + 1; i++)
inds.push(bin.readUint(data, offset + i * 3 - 1) & 16777215);
else if (count != 0)
throw "unsupported offset size: " + offsize + ", count: " + count;
offset += (count + 1) * offsize;
return offset - 1;
};
Typr.CFF.getCharString = function(data, offset, o) {
var bin = Typr._bin;
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var op = null, val = null;
if (b0 <= 20) {
op = b0;
vs = 1;
}
if (b0 == 12) {
op = b0 * 100 + b1;
vs = 2;
}
if (21 <= b0 && b0 <= 27) {
op = b0;
vs = 1;
}
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (29 <= b0 && b0 <= 31) {
op = b0;
vs = 1;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
}
o.val = val != null ? val : "o" + op;
o.size = vs;
};
Typr.CFF.readCharString = function(data, offset, length) {
var end = offset + length;
var bin = Typr._bin;
var arr = [];
while (offset < end) {
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var op = null, val = null;
if (b0 <= 20) {
op = b0;
vs = 1;
}
if (b0 == 12) {
op = b0 * 100 + b1;
vs = 2;
}
if (b0 == 19 || b0 == 20) {
op = b0;
vs = 2;
}
if (21 <= b0 && b0 <= 27) {
op = b0;
vs = 1;
}
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (29 <= b0 && b0 <= 31) {
op = b0;
vs = 1;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
}
arr.push(val != null ? val : "o" + op);
offset += vs;
}
return arr;
};
Typr.CFF.readDict = function(data, offset, end) {
var bin = Typr._bin;
var dict = {};
var carr = [];
while (offset < end) {
var b0 = data[offset], b1 = data[offset + 1];
data[offset + 2];
data[offset + 3];
data[offset + 4];
var vs = 1;
var key = null, val = null;
if (b0 == 28) {
val = bin.readShort(data, offset + 1);
vs = 3;
}
if (b0 == 29) {
val = bin.readInt(data, offset + 1);
vs = 5;
}
if (32 <= b0 && b0 <= 246) {
val = b0 - 139;
vs = 1;
}
if (247 <= b0 && b0 <= 250) {
val = (b0 - 247) * 256 + b1 + 108;
vs = 2;
}
if (251 <= b0 && b0 <= 254) {
val = -(b0 - 251) * 256 - b1 - 108;
vs = 2;
}
if (b0 == 255) {
val = bin.readInt(data, offset + 1) / 65535;
vs = 5;
throw "unknown number";
}
if (b0 == 30) {
var nibs = [];
vs = 1;
while (true) {
var b = data[offset + vs];
vs++;
var nib0 = b >> 4, nib1 = b & 15;
if (nib0 != 15)
nibs.push(nib0);
if (nib1 != 15)
nibs.push(nib1);
if (nib1 == 15)
break;
}
var s = "";
var chars = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, ".", "e", "e-", "reserved", "-", "endOfNumber"];
for (var i = 0; i < nibs.length; i++)
s += chars[nibs[i]];
val = parseFloat(s);
}
if (b0 <= 21) {
var keys2 = ["version", "Notice", "FullName", "FamilyName", "Weight", "FontBBox", "BlueValues", "OtherBlues", "FamilyBlues", "FamilyOtherBlues", "StdHW", "StdVW", "escape", "UniqueID", "XUID", "charset", "Encoding", "CharStrings", "Private", "Subrs", "defaultWidthX", "nominalWidthX"];
key = keys2[b0];
vs = 1;
if (b0 == 12) {
var keys2 = ["Copyright", "isFixedPitch", "ItalicAngle", "UnderlinePosition", "UnderlineThickness", "PaintType", "CharstringType", "FontMatrix", "StrokeWidth", "BlueScale", "BlueShift", "BlueFuzz", "StemSnapH", "StemSnapV", "ForceBold", 0, 0, "LanguageGroup", "ExpansionFactor", "initialRandomSeed", "SyntheticBase", "PostScript", "BaseFontName", "BaseFontBlend", 0, 0, 0, 0, 0, 0, "ROS", "CIDFontVersion", "CIDFontRevision", "CIDFontType", "CIDCount", "UIDBase", "FDArray", "FDSelect", "FontName"];
key = keys2[b1];
vs = 2;
}
}
if (key != null) {
dict[key] = carr.length == 1 ? carr[0] : carr;
carr = [];
} else
carr.push(val);
offset += vs;
}
return dict;
};
Typr.cmap = {};
Typr.cmap.parse = function(data, offset, length) {
data = new Uint8Array(data.buffer, offset, length);
offset = 0;
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
var numTables = bin.readUshort(data, offset);
offset += 2;
var offs = [];
obj.tables = [];
for (var i = 0; i < numTables; i++) {
var platformID = bin.readUshort(data, offset);
offset += 2;
var encodingID = bin.readUshort(data, offset);
offset += 2;
var noffset = bin.readUint(data, offset);
offset += 4;
var id = "p" + platformID + "e" + encodingID;
var tind = offs.indexOf(noffset);
if (tind == -1) {
tind = obj.tables.length;
var subt;
offs.push(noffset);
var format = bin.readUshort(data, noffset);
if (format == 0)
subt = Typr.cmap.parse0(data, noffset);
else if (format == 4)
subt = Typr.cmap.parse4(data, noffset);
else if (format == 6)
subt = Typr.cmap.parse6(data, noffset);
else if (format == 12)
subt = Typr.cmap.parse12(data, noffset);
else
console.log("unknown format: " + format, platformID, encodingID, noffset);
obj.tables.push(subt);
}
if (obj[id] != null)
throw "multiple tables for one platform+encoding";
obj[id] = tind;
}
return obj;
};
Typr.cmap.parse0 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
var len = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
obj.map = [];
for (var i = 0; i < len - 6; i++)
obj.map.push(data[offset + i]);
return obj;
};
Typr.cmap.parse4 = function(data, offset) {
var bin = Typr._bin;
var offset0 = offset;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
var length = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var segCountX2 = bin.readUshort(data, offset);
offset += 2;
var segCount = segCountX2 / 2;
obj.searchRange = bin.readUshort(data, offset);
offset += 2;
obj.entrySelector = bin.readUshort(data, offset);
offset += 2;
obj.rangeShift = bin.readUshort(data, offset);
offset += 2;
obj.endCount = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
offset += 2;
obj.startCount = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
obj.idDelta = [];
for (var i = 0; i < segCount; i++) {
obj.idDelta.push(bin.readShort(data, offset));
offset += 2;
}
obj.idRangeOffset = bin.readUshorts(data, offset, segCount);
offset += segCount * 2;
obj.glyphIdArray = [];
while (offset < offset0 + length) {
obj.glyphIdArray.push(bin.readUshort(data, offset));
offset += 2;
}
return obj;
};
Typr.cmap.parse6 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
obj.firstCode = bin.readUshort(data, offset);
offset += 2;
var entryCount = bin.readUshort(data, offset);
offset += 2;
obj.glyphIdArray = [];
for (var i = 0; i < entryCount; i++) {
obj.glyphIdArray.push(bin.readUshort(data, offset));
offset += 2;
}
return obj;
};
Typr.cmap.parse12 = function(data, offset) {
var bin = Typr._bin;
var obj = {};
obj.format = bin.readUshort(data, offset);
offset += 2;
offset += 2;
bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
var nGroups = bin.readUint(data, offset);
offset += 4;
obj.groups = [];
for (var i = 0; i < nGroups; i++) {
var off = offset + i * 12;
var startCharCode = bin.readUint(data, off + 0);
var endCharCode = bin.readUint(data, off + 4);
var startGlyphID = bin.readUint(data, off + 8);
obj.groups.push([startCharCode, endCharCode, startGlyphID]);
}
return obj;
};
Typr.glyf = {};
Typr.glyf.parse = function(data, offset, length, font) {
var obj = [];
for (var g = 0; g < font.maxp.numGlyphs; g++)
obj.push(null);
return obj;
};
Typr.glyf._parseGlyf = function(font, g) {
var bin = Typr._bin;
var data = font._data;
var offset = Typr._tabOffset(data, "glyf") + font.loca[g];
if (font.loca[g] == font.loca[g + 1])
return null;
var gl = {};
gl.noc = bin.readShort(data, offset);
offset += 2;
gl.xMin = bin.readShort(data, offset);
offset += 2;
gl.yMin = bin.readShort(data, offset);
offset += 2;
gl.xMax = bin.readShort(data, offset);
offset += 2;
gl.yMax = bin.readShort(data, offset);
offset += 2;
if (gl.xMin >= gl.xMax || gl.yMin >= gl.yMax)
return null;
if (gl.noc > 0) {
gl.endPts = [];
for (var i = 0; i < gl.noc; i++) {
gl.endPts.push(bin.readUshort(data, offset));
offset += 2;
}
var instructionLength = bin.readUshort(data, offset);
offset += 2;
if (data.length - offset < instructionLength)
return null;
gl.instructions = bin.readBytes(data, offset, instructionLength);
offset += instructionLength;
var crdnum = gl.endPts[gl.noc - 1] + 1;
gl.flags = [];
for (var i = 0; i < crdnum; i++) {
var flag = data[offset];
offset++;
gl.flags.push(flag);
if ((flag & 8) != 0) {
var rep = data[offset];
offset++;
for (var j = 0; j < rep; j++) {
gl.flags.push(flag);
i++;
}
}
}
gl.xs = [];
for (var i = 0; i < crdnum; i++) {
var i8 = (gl.flags[i] & 2) != 0, same = (gl.flags[i] & 16) != 0;
if (i8) {
gl.xs.push(same ? data[offset] : -data[offset]);
offset++;
} else {
if (same)
gl.xs.push(0);
else {
gl.xs.push(bin.readShort(data, offset));
offset += 2;
}
}
}
gl.ys = [];
for (var i = 0; i < crdnum; i++) {
var i8 = (gl.flags[i] & 4) != 0, same = (gl.flags[i] & 32) != 0;
if (i8) {
gl.ys.push(same ? data[offset] : -data[offset]);
offset++;
} else {
if (same)
gl.ys.push(0);
else {
gl.ys.push(bin.readShort(data, offset));
offset += 2;
}
}
}
var x = 0, y = 0;
for (var i = 0; i < crdnum; i++) {
x += gl.xs[i];
y += gl.ys[i];
gl.xs[i] = x;
gl.ys[i] = y;
}
} else {
var ARG_1_AND_2_ARE_WORDS = 1 << 0;
var ARGS_ARE_XY_VALUES = 1 << 1;
var WE_HAVE_A_SCALE = 1 << 3;
var MORE_COMPONENTS = 1 << 5;
var WE_HAVE_AN_X_AND_Y_SCALE = 1 << 6;
var WE_HAVE_A_TWO_BY_TWO = 1 << 7;
var WE_HAVE_INSTRUCTIONS = 1 << 8;
gl.parts = [];
var flags;
do {
flags = bin.readUshort(data, offset);
offset += 2;
var part = { m: { a: 1, b: 0, c: 0, d: 1, tx: 0, ty: 0 }, p1: -1, p2: -1 };
gl.parts.push(part);
part.glyphIndex = bin.readUshort(data, offset);
offset += 2;
if (flags & ARG_1_AND_2_ARE_WORDS) {
var arg1 = bin.readShort(data, offset);
offset += 2;
var arg2 = bin.readShort(data, offset);
offset += 2;
} else {
var arg1 = bin.readInt8(data, offset);
offset++;
var arg2 = bin.readInt8(data, offset);
offset++;
}
if (flags & ARGS_ARE_XY_VALUES) {
part.m.tx = arg1;
part.m.ty = arg2;
} else {
part.p1 = arg1;
part.p2 = arg2;
}
if (flags & WE_HAVE_A_SCALE) {
part.m.a = part.m.d = bin.readF2dot14(data, offset);
offset += 2;
} else if (flags & WE_HAVE_AN_X_AND_Y_SCALE) {
part.m.a = bin.readF2dot14(data, offset);
offset += 2;
part.m.d = bin.readF2dot14(data, offset);
offset += 2;
} else if (flags & WE_HAVE_A_TWO_BY_TWO) {
part.m.a = bin.readF2dot14(data, offset);
offset += 2;
part.m.b = bin.readF2dot14(data, offset);
offset += 2;
part.m.c = bin.readF2dot14(data, offset);
offset += 2;
part.m.d = bin.readF2dot14(data, offset);
offset += 2;
}
} while (flags & MORE_COMPONENTS);
if (flags & WE_HAVE_INSTRUCTIONS) {
var numInstr = bin.readUshort(data, offset);
offset += 2;
gl.instr = [];
for (var i = 0; i < numInstr; i++) {
gl.instr.push(data[offset]);
offset++;
}
}
}
return gl;
};
Typr.GPOS = {};
Typr.GPOS.parse = function(data, offset, length, font) {
return Typr._lctf.parse(data, offset, length, font, Typr.GPOS.subt);
};
Typr.GPOS.subt = function(data, ltype, offset) {
if (ltype != 2)
return null;
var bin = Typr._bin, offset0 = offset, tab = {};
tab.format = bin.readUshort(data, offset);
offset += 2;
var covOff = bin.readUshort(data, offset);
offset += 2;
tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0);
tab.valFmt1 = bin.readUshort(data, offset);
offset += 2;
tab.valFmt2 = bin.readUshort(data, offset);
offset += 2;
var ones1 = Typr._lctf.numOfOnes(tab.valFmt1);
var ones2 = Typr._lctf.numOfOnes(tab.valFmt2);
if (tab.format == 1) {
tab.pairsets = [];
var count = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < count; i++) {
var psoff = bin.readUshort(data, offset);
offset += 2;
psoff += offset0;
var pvcount = bin.readUshort(data, psoff);
psoff += 2;
var arr = [];
for (var j = 0; j < pvcount; j++) {
var gid2 = bin.readUshort(data, psoff);
psoff += 2;
var value1, value2;
if (tab.valFmt1 != 0) {
value1 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt1);
psoff += ones1 * 2;
}
if (tab.valFmt2 != 0) {
value2 = Typr._lctf.readValueRecord(data, psoff, tab.valFmt2);
psoff += ones2 * 2;
}
arr.push({ gid2, val1: value1, val2: value2 });
}
tab.pairsets.push(arr);
}
}
if (tab.format == 2) {
var classDef1 = bin.readUshort(data, offset);
offset += 2;
var classDef2 = bin.readUshort(data, offset);
offset += 2;
var class1Count = bin.readUshort(data, offset);
offset += 2;
var class2Count = bin.readUshort(data, offset);
offset += 2;
tab.classDef1 = Typr._lctf.readClassDef(data, offset0 + classDef1);
tab.classDef2 = Typr._lctf.readClassDef(data, offset0 + classDef2);
tab.matrix = [];
for (var i = 0; i < class1Count; i++) {
var row = [];
for (var j = 0; j < class2Count; j++) {
var value1 = null, value2 = null;
if (tab.valFmt1 != 0) {
value1 = Typr._lctf.readValueRecord(data, offset, tab.valFmt1);
offset += ones1 * 2;
}
if (tab.valFmt2 != 0) {
value2 = Typr._lctf.readValueRecord(data, offset, tab.valFmt2);
offset += ones2 * 2;
}
row.push({ val1: value1, val2: value2 });
}
tab.matrix.push(row);
}
}
return tab;
};
Typr.GSUB = {};
Typr.GSUB.parse = function(data, offset, length, font) {
return Typr._lctf.parse(data, offset, length, font, Typr.GSUB.subt);
};
Typr.GSUB.subt = function(data, ltype, offset) {
var bin = Typr._bin, offset0 = offset, tab = {};
if (ltype != 1 && ltype != 4 && ltype != 5)
return null;
tab.fmt = bin.readUshort(data, offset);
offset += 2;
var covOff = bin.readUshort(data, offset);
offset += 2;
tab.coverage = Typr._lctf.readCoverage(data, covOff + offset0);
if (ltype == 1) {
if (tab.fmt == 1) {
tab.delta = bin.readShort(data, offset);
offset += 2;
} else if (tab.fmt == 2) {
var cnt = bin.readUshort(data, offset);
offset += 2;
tab.newg = bin.readUshorts(data, offset, cnt);
offset += tab.newg.length * 2;
}
} else if (ltype == 4) {
tab.vals = [];
var cnt = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = bin.readUshort(data, offset);
offset += 2;
tab.vals.push(Typr.GSUB.readLigatureSet(data, offset0 + loff));
}
} else if (ltype == 5) {
if (tab.fmt == 2) {
var cDefOffset = bin.readUshort(data, offset);
offset += 2;
tab.cDef = Typr._lctf.readClassDef(data, offset0 + cDefOffset);
tab.scset = [];
var subClassSetCount = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < subClassSetCount; i++) {
var scsOff = bin.readUshort(data, offset);
offset += 2;
tab.scset.push(scsOff == 0 ? null : Typr.GSUB.readSubClassSet(data, offset0 + scsOff));
}
} else
console.log("unknown table format", tab.fmt);
}
return tab;
};
Typr.GSUB.readSubClassSet = function(data, offset) {
var rUs = Typr._bin.readUshort, offset0 = offset, lset = [];
var cnt = rUs(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = rUs(data, offset);
offset += 2;
lset.push(Typr.GSUB.readSubClassRule(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readSubClassRule = function(data, offset) {
var rUs = Typr._bin.readUshort, rule = {};
var gcount = rUs(data, offset);
offset += 2;
var scount = rUs(data, offset);
offset += 2;
rule.input = [];
for (var i = 0; i < gcount - 1; i++) {
rule.input.push(rUs(data, offset));
offset += 2;
}
rule.substLookupRecords = Typr.GSUB.readSubstLookupRecords(data, offset, scount);
return rule;
};
Typr.GSUB.readSubstLookupRecords = function(data, offset, cnt) {
var rUs = Typr._bin.readUshort;
var out = [];
for (var i = 0; i < cnt; i++) {
out.push(rUs(data, offset), rUs(data, offset + 2));
offset += 4;
}
return out;
};
Typr.GSUB.readChainSubClassSet = function(data, offset) {
var bin = Typr._bin, offset0 = offset, lset = [];
var cnt = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < cnt; i++) {
var loff = bin.readUshort(data, offset);
offset += 2;
lset.push(Typr.GSUB.readChainSubClassRule(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readChainSubClassRule = function(data, offset) {
var bin = Typr._bin, rule = {};
var pps = ["backtrack", "input", "lookahead"];
for (var pi = 0; pi < pps.length; pi++) {
var cnt = bin.readUshort(data, offset);
offset += 2;
if (pi == 1)
cnt--;
rule[pps[pi]] = bin.readUshorts(data, offset, cnt);
offset += rule[pps[pi]].length * 2;
}
var cnt = bin.readUshort(data, offset);
offset += 2;
rule.subst = bin.readUshorts(data, offset, cnt * 2);
offset += rule.subst.length * 2;
return rule;
};
Typr.GSUB.readLigatureSet = function(data, offset) {
var bin = Typr._bin, offset0 = offset, lset = [];
var lcnt = bin.readUshort(data, offset);
offset += 2;
for (var j = 0; j < lcnt; j++) {
var loff = bin.readUshort(data, offset);
offset += 2;
lset.push(Typr.GSUB.readLigature(data, offset0 + loff));
}
return lset;
};
Typr.GSUB.readLigature = function(data, offset) {
var bin = Typr._bin, lig = { chain: [] };
lig.nglyph = bin.readUshort(data, offset);
offset += 2;
var ccnt = bin.readUshort(data, offset);
offset += 2;
for (var k = 0; k < ccnt - 1; k++) {
lig.chain.push(bin.readUshort(data, offset));
offset += 2;
}
return lig;
};
Typr.head = {};
Typr.head.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readFixed(data, offset);
offset += 4;
obj.fontRevision = bin.readFixed(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
obj.flags = bin.readUshort(data, offset);
offset += 2;
obj.unitsPerEm = bin.readUshort(data, offset);
offset += 2;
obj.created = bin.readUint64(data, offset);
offset += 8;
obj.modified = bin.readUint64(data, offset);
offset += 8;
obj.xMin = bin.readShort(data, offset);
offset += 2;
obj.yMin = bin.readShort(data, offset);
offset += 2;
obj.xMax = bin.readShort(data, offset);
offset += 2;
obj.yMax = bin.readShort(data, offset);
offset += 2;
obj.macStyle = bin.readUshort(data, offset);
offset += 2;
obj.lowestRecPPEM = bin.readUshort(data, offset);
offset += 2;
obj.fontDirectionHint = bin.readShort(data, offset);
offset += 2;
obj.indexToLocFormat = bin.readShort(data, offset);
offset += 2;
obj.glyphDataFormat = bin.readShort(data, offset);
offset += 2;
return obj;
};
Typr.hhea = {};
Typr.hhea.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readFixed(data, offset);
offset += 4;
obj.ascender = bin.readShort(data, offset);
offset += 2;
obj.descender = bin.readShort(data, offset);
offset += 2;
obj.lineGap = bin.readShort(data, offset);
offset += 2;
obj.advanceWidthMax = bin.readUshort(data, offset);
offset += 2;
obj.minLeftSideBearing = bin.readShort(data, offset);
offset += 2;
obj.minRightSideBearing = bin.readShort(data, offset);
offset += 2;
obj.xMaxExtent = bin.readShort(data, offset);
offset += 2;
obj.caretSlopeRise = bin.readShort(data, offset);
offset += 2;
obj.caretSlopeRun = bin.readShort(data, offset);
offset += 2;
obj.caretOffset = bin.readShort(data, offset);
offset += 2;
offset += 4 * 2;
obj.metricDataFormat = bin.readShort(data, offset);
offset += 2;
obj.numberOfHMetrics = bin.readUshort(data, offset);
offset += 2;
return obj;
};
Typr.hmtx = {};
Typr.hmtx.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var obj = {};
obj.aWidth = [];
obj.lsBearing = [];
var aw = 0, lsb = 0;
for (var i = 0; i < font.maxp.numGlyphs; i++) {
if (i < font.hhea.numberOfHMetrics) {
aw = bin.readUshort(data, offset);
offset += 2;
lsb = bin.readShort(data, offset);
offset += 2;
}
obj.aWidth.push(aw);
obj.lsBearing.push(lsb);
}
return obj;
};
Typr.kern = {};
Typr.kern.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var version2 = bin.readUshort(data, offset);
offset += 2;
if (version2 == 1)
return Typr.kern.parseV1(data, offset - 2, length, font);
var nTables = bin.readUshort(data, offset);
offset += 2;
var map = { glyph1: [], rval: [] };
for (var i = 0; i < nTables; i++) {
offset += 2;
var length = bin.readUshort(data, offset);
offset += 2;
var coverage = bin.readUshort(data, offset);
offset += 2;
var format = coverage >>> 8;
format &= 15;
if (format == 0)
offset = Typr.kern.readFormat0(data, offset, map);
else
throw "unknown kern table format: " + format;
}
return map;
};
Typr.kern.parseV1 = function(data, offset, length, font) {
var bin = Typr._bin;
bin.readFixed(data, offset);
offset += 4;
var nTables = bin.readUint(data, offset);
offset += 4;
var map = { glyph1: [], rval: [] };
for (var i = 0; i < nTables; i++) {
bin.readUint(data, offset);
offset += 4;
var coverage = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var format = coverage >>> 8;
format &= 15;
if (format == 0)
offset = Typr.kern.readFormat0(data, offset, map);
else
throw "unknown kern table format: " + format;
}
return map;
};
Typr.kern.readFormat0 = function(data, offset, map) {
var bin = Typr._bin;
var pleft = -1;
var nPairs = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
for (var j = 0; j < nPairs; j++) {
var left = bin.readUshort(data, offset);
offset += 2;
var right = bin.readUshort(data, offset);
offset += 2;
var value = bin.readShort(data, offset);
offset += 2;
if (left != pleft) {
map.glyph1.push(left);
map.rval.push({ glyph2: [], vals: [] });
}
var rval = map.rval[map.rval.length - 1];
rval.glyph2.push(right);
rval.vals.push(value);
pleft = left;
}
return offset;
};
Typr.loca = {};
Typr.loca.parse = function(data, offset, length, font) {
var bin = Typr._bin;
var obj = [];
var ver = font.head.indexToLocFormat;
var len = font.maxp.numGlyphs + 1;
if (ver == 0)
for (var i = 0; i < len; i++)
obj.push(bin.readUshort(data, offset + (i << 1)) << 1);
if (ver == 1)
for (var i = 0; i < len; i++)
obj.push(bin.readUint(data, offset + (i << 2)));
return obj;
};
Typr.maxp = {};
Typr.maxp.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
var ver = bin.readUint(data, offset);
offset += 4;
obj.numGlyphs = bin.readUshort(data, offset);
offset += 2;
if (ver == 65536) {
obj.maxPoints = bin.readUshort(data, offset);
offset += 2;
obj.maxContours = bin.readUshort(data, offset);
offset += 2;
obj.maxCompositePoints = bin.readUshort(data, offset);
offset += 2;
obj.maxCompositeContours = bin.readUshort(data, offset);
offset += 2;
obj.maxZones = bin.readUshort(data, offset);
offset += 2;
obj.maxTwilightPoints = bin.readUshort(data, offset);
offset += 2;
obj.maxStorage = bin.readUshort(data, offset);
offset += 2;
obj.maxFunctionDefs = bin.readUshort(data, offset);
offset += 2;
obj.maxInstructionDefs = bin.readUshort(data, offset);
offset += 2;
obj.maxStackElements = bin.readUshort(data, offset);
offset += 2;
obj.maxSizeOfInstructions = bin.readUshort(data, offset);
offset += 2;
obj.maxComponentElements = bin.readUshort(data, offset);
offset += 2;
obj.maxComponentDepth = bin.readUshort(data, offset);
offset += 2;
}
return obj;
};
Typr.name = {};
Typr.name.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
bin.readUshort(data, offset);
offset += 2;
var count = bin.readUshort(data, offset);
offset += 2;
bin.readUshort(data, offset);
offset += 2;
var offset0 = offset;
for (var i = 0; i < count; i++) {
var platformID = bin.readUshort(data, offset);
offset += 2;
var encodingID = bin.readUshort(data, offset);
offset += 2;
var languageID = bin.readUshort(data, offset);
offset += 2;
var nameID = bin.readUshort(data, offset);
offset += 2;
var length = bin.readUshort(data, offset);
offset += 2;
var noffset = bin.readUshort(data, offset);
offset += 2;
var plat = "p" + platformID;
if (obj[plat] == null)
obj[plat] = {};
var names = ["copyright", "fontFamily", "fontSubfamily", "ID", "fullName", "version", "postScriptName", "trademark", "manufacturer", "designer", "description", "urlVendor", "urlDesigner", "licence", "licenceURL", "---", "typoFamilyName", "typoSubfamilyName", "compatibleFull", "sampleText", "postScriptCID", "wwsFamilyName", "wwsSubfamilyName", "lightPalette", "darkPalette"];
var cname = names[nameID];
var soff = offset0 + count * 12 + noffset;
var str;
if (platformID == 0)
str = bin.readUnicode(data, soff, length / 2);
else if (platformID == 3 && encodingID == 0)
str = bin.readUnicode(data, soff, length / 2);
else if (encodingID == 0)
str = bin.readASCII(data, soff, length);
else if (encodingID == 1)
str = bin.readUnicode(data, soff, length / 2);
else if (encodingID == 3)
str = bin.readUnicode(data, soff, length / 2);
else if (platformID == 1) {
str = bin.readASCII(data, soff, length);
console.log("reading unknown MAC encoding " + encodingID + " as ASCII");
} else
throw "unknown encoding " + encodingID + ", platformID: " + platformID;
obj[plat][cname] = str;
obj[plat]._lang = languageID;
}
for (var p2 in obj)
if (obj[p2].postScriptName != null && obj[p2]._lang == 1033)
return obj[p2];
for (var p2 in obj)
if (obj[p2].postScriptName != null && obj[p2]._lang == 3084)
return obj[p2];
for (var p2 in obj)
if (obj[p2].postScriptName != null)
return obj[p2];
var tname;
for (var p2 in obj) {
tname = p2;
break;
}
console.log("returning name table with languageID " + obj[tname]._lang);
return obj[tname];
};
Typr["OS/2"] = {};
Typr["OS/2"].parse = function(data, offset, length) {
var bin = Typr._bin;
var ver = bin.readUshort(data, offset);
offset += 2;
var obj = {};
if (ver == 0)
Typr["OS/2"].version0(data, offset, obj);
else if (ver == 1)
Typr["OS/2"].version1(data, offset, obj);
else if (ver == 2 || ver == 3 || ver == 4)
Typr["OS/2"].version2(data, offset, obj);
else if (ver == 5)
Typr["OS/2"].version5(data, offset, obj);
else
throw "unknown OS/2 table version: " + ver;
return obj;
};
Typr["OS/2"].version0 = function(data, offset, obj) {
var bin = Typr._bin;
obj.xAvgCharWidth = bin.readShort(data, offset);
offset += 2;
obj.usWeightClass = bin.readUshort(data, offset);
offset += 2;
obj.usWidthClass = bin.readUshort(data, offset);
offset += 2;
obj.fsType = bin.readUshort(data, offset);
offset += 2;
obj.ySubscriptXSize = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptYSize = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptXOffset = bin.readShort(data, offset);
offset += 2;
obj.ySubscriptYOffset = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptXSize = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptYSize = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptXOffset = bin.readShort(data, offset);
offset += 2;
obj.ySuperscriptYOffset = bin.readShort(data, offset);
offset += 2;
obj.yStrikeoutSize = bin.readShort(data, offset);
offset += 2;
obj.yStrikeoutPosition = bin.readShort(data, offset);
offset += 2;
obj.sFamilyClass = bin.readShort(data, offset);
offset += 2;
obj.panose = bin.readBytes(data, offset, 10);
offset += 10;
obj.ulUnicodeRange1 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange2 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange3 = bin.readUint(data, offset);
offset += 4;
obj.ulUnicodeRange4 = bin.readUint(data, offset);
offset += 4;
obj.achVendID = [bin.readInt8(data, offset), bin.readInt8(data, offset + 1), bin.readInt8(data, offset + 2), bin.readInt8(data, offset + 3)];
offset += 4;
obj.fsSelection = bin.readUshort(data, offset);
offset += 2;
obj.usFirstCharIndex = bin.readUshort(data, offset);
offset += 2;
obj.usLastCharIndex = bin.readUshort(data, offset);
offset += 2;
obj.sTypoAscender = bin.readShort(data, offset);
offset += 2;
obj.sTypoDescender = bin.readShort(data, offset);
offset += 2;
obj.sTypoLineGap = bin.readShort(data, offset);
offset += 2;
obj.usWinAscent = bin.readUshort(data, offset);
offset += 2;
obj.usWinDescent = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr["OS/2"].version1 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version0(data, offset, obj);
obj.ulCodePageRange1 = bin.readUint(data, offset);
offset += 4;
obj.ulCodePageRange2 = bin.readUint(data, offset);
offset += 4;
return offset;
};
Typr["OS/2"].version2 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version1(data, offset, obj);
obj.sxHeight = bin.readShort(data, offset);
offset += 2;
obj.sCapHeight = bin.readShort(data, offset);
offset += 2;
obj.usDefault = bin.readUshort(data, offset);
offset += 2;
obj.usBreak = bin.readUshort(data, offset);
offset += 2;
obj.usMaxContext = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr["OS/2"].version5 = function(data, offset, obj) {
var bin = Typr._bin;
offset = Typr["OS/2"].version2(data, offset, obj);
obj.usLowerOpticalPointSize = bin.readUshort(data, offset);
offset += 2;
obj.usUpperOpticalPointSize = bin.readUshort(data, offset);
offset += 2;
return offset;
};
Typr.post = {};
Typr.post.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = {};
obj.version = bin.readFixed(data, offset);
offset += 4;
obj.italicAngle = bin.readFixed(data, offset);
offset += 4;
obj.underlinePosition = bin.readShort(data, offset);
offset += 2;
obj.underlineThickness = bin.readShort(data, offset);
offset += 2;
return obj;
};
Typr.SVG = {};
Typr.SVG.parse = function(data, offset, length) {
var bin = Typr._bin;
var obj = { entries: [] };
var offset0 = offset;
bin.readUshort(data, offset);
offset += 2;
var svgDocIndexOffset = bin.readUint(data, offset);
offset += 4;
bin.readUint(data, offset);
offset += 4;
offset = svgDocIndexOffset + offset0;
var numEntries = bin.readUshort(data, offset);
offset += 2;
for (var i = 0; i < numEntries; i++) {
var startGlyphID = bin.readUshort(data, offset);
offset += 2;
var endGlyphID = bin.readUshort(data, offset);
offset += 2;
var svgDocOffset = bin.readUint(data, offset);
offset += 4;
var svgDocLength = bin.readUint(data, offset);
offset += 4;
var sbuf = new Uint8Array(data.buffer, offset0 + svgDocOffset + svgDocIndexOffset, svgDocLength);
var svg = bin.readUTF8(sbuf, 0, sbuf.length);
for (var f = startGlyphID; f <= endGlyphID; f++) {
obj.entries[f] = svg;
}
}
return obj;
};
Typr.SVG.toPath = function(str) {
var pth = { cmds: [], crds: [] };
if (str == null)
return pth;
var prsr = new DOMParser();
var doc2 = prsr["parseFromString"](str, "image/svg+xml");
var svg = doc2.firstChild;
while (svg.tagName != "svg")
svg = svg.nextSibling;
var vb = svg.getAttribute("viewBox");
if (vb)
vb = vb.trim().split(" ").map(parseFloat);
else
vb = [0, 0, 1e3, 1e3];
Typr.SVG._toPath(svg.children, pth);
for (var i = 0; i < pth.crds.length; i += 2) {
var x = pth.crds[i], y = pth.crds[i + 1];
x -= vb[0];
y -= vb[1];
y = -y;
pth.crds[i] = x;
pth.crds[i + 1] = y;
}
return pth;
};
Typr.SVG._toPath = function(nds, pth, fill) {
for (var ni = 0; ni < nds.length; ni++) {
var nd = nds[ni], tn = nd.tagName;
var cfl = nd.getAttribute("fill");
if (cfl == null)
cfl = fill;
if (tn == "g")
Typr.SVG._toPath(nd.children, pth, cfl);
else if (tn == "path") {
pth.cmds.push(cfl ? cfl : "#000000");
var d = nd.getAttribute("d");
var toks = Typr.SVG._tokens(d);
Typr.SVG._toksToPath(toks, pth);
pth.cmds.push("X");
} else if (tn == "defs")
;
else
console.log(tn, nd);
}
};
Typr.SVG._tokens = function(d) {
var ts = [], off = 0, rn = false, cn = "";
while (off < d.length) {
var cc = d.charCodeAt(off), ch = d.charAt(off);
off++;
var isNum = 48 <= cc && cc <= 57 || ch == "." || ch == "-";
if (rn) {
if (ch == "-") {
ts.push(parseFloat(cn));
cn = ch;
} else if (isNum)
cn += ch;
else {
ts.push(parseFloat(cn));
if (ch != "," && ch != " ")
ts.push(ch);
rn = false;
}
} else {
if (isNum) {
cn = ch;
rn = true;
} else if (ch != "," && ch != " ")
ts.push(ch);
}
}
if (rn)
ts.push(parseFloat(cn));
return ts;
};
Typr.SVG._toksToPath = function(ts, pth) {
var i = 0, x = 0, y = 0, ox = 0, oy = 0;
var pc = { M: 2, L: 2, H: 1, V: 1, S: 4, C: 6 };
var cmds = pth.cmds, crds = pth.crds;
while (i < ts.length) {
var cmd = ts[i];
i++;
if (cmd == "z") {
cmds.push("Z");
x = ox;
y = oy;
} else {
var cmu = cmd.toUpperCase();
var ps = pc[cmu], reps = Typr.SVG._reps(ts, i, ps);
for (var j = 0; j < reps; j++) {
var xi = 0, yi = 0;
if (cmd != cmu) {
xi = x;
yi = y;
}
if (cmu == "M") {
x = xi + ts[i++];
y = yi + ts[i++];
cmds.push("M");
crds.push(x, y);
ox = x;
oy = y;
} else if (cmu == "L") {
x = xi + ts[i++];
y = yi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "H") {
x = xi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "V") {
y = yi + ts[i++];
cmds.push("L");
crds.push(x, y);
} else if (cmu == "C") {
var x1 = xi + ts[i++], y1 = yi + ts[i++], x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
cmds.push("C");
crds.push(x1, y1, x2, y2, x3, y3);
x = x3;
y = y3;
} else if (cmu == "S") {
var co = Math.max(crds.length - 4, 0);
var x1 = x + x - crds[co], y1 = y + y - crds[co + 1];
var x2 = xi + ts[i++], y2 = yi + ts[i++], x3 = xi + ts[i++], y3 = yi + ts[i++];
cmds.push("C");
crds.push(x1, y1, x2, y2, x3, y3);
x = x3;
y = y3;
} else
console.log("Unknown SVG command " + cmd);
}
}
}
};
Typr.SVG._reps = function(ts, off, ps) {
var i = off;
while (i < ts.length) {
if (typeof ts[i] == "string")
break;
i += ps;
}
return (i - off) / ps;
};
if (Typr == null)
Typr = {};
if (Typr.U == null)
Typr.U = {};
Typr.U.codeToGlyph = function(font, code) {
var cmap = font.cmap;
var tind = -1;
if (cmap.p0e4 != null)
tind = cmap.p0e4;
else if (cmap.p3e1 != null)
tind = cmap.p3e1;
else if (cmap.p1e0 != null)
tind = cmap.p1e0;
if (tind == -1)
throw "no familiar platform and encoding!";
var tab = cmap.tables[tind];
if (tab.format == 0) {
if (code >= tab.map.length)
return 0;
return tab.map[code];
} else if (tab.format == 4) {
var sind = -1;
for (var i = 0; i < tab.endCount.length; i++)
if (code <= tab.endCount[i]) {
sind = i;
break;
}
if (sind == -1)
return 0;
if (tab.startCount[sind] > code)
return 0;
var gli = 0;
if (tab.idRangeOffset[sind] != 0)
gli = tab.glyphIdArray[code - tab.startCount[sind] + (tab.idRangeOffset[sind] >> 1) - (tab.idRangeOffset.length - sind)];
else
gli = code + tab.idDelta[sind];
return gli & 65535;
} else if (tab.format == 12) {
if (code > tab.groups[tab.groups.length - 1][1])
return 0;
for (var i = 0; i < tab.groups.length; i++) {
var grp = tab.groups[i];
if (grp[0] <= code && code <= grp[1])
return grp[2] + (code - grp[0]);
}
return 0;
} else
throw "unknown cmap table format " + tab.format;
};
Typr.U.glyphToPath = function(font, gid) {
var path = { cmds: [], crds: [] };
if (font.SVG && font.SVG.entries[gid]) {
var p2 = font.SVG.entries[gid];
if (p2 == null)
return path;
if (typeof p2 == "string") {
p2 = Typr.SVG.toPath(p2);
font.SVG.entries[gid] = p2;
}
return p2;
} else if (font.CFF) {
var state = { x: 0, y: 0, stack: [], nStems: 0, haveWidth: false, width: font.CFF.Private ? font.CFF.Private.defaultWidthX : 0, open: false };
Typr.U._drawCFF(font.CFF.CharStrings[gid], state, font.CFF, path);
} else if (font.glyf) {
Typr.U._drawGlyf(gid, font, path);
}
return path;
};
Typr.U._drawGlyf = function(gid, font, path) {
var gl = font.glyf[gid];
if (gl == null)
gl = font.glyf[gid] = Typr.glyf._parseGlyf(font, gid);
if (gl != null) {
if (gl.noc > -1)
Typr.U._simpleGlyph(gl, path);
else
Typr.U._compoGlyph(gl, font, path);
}
};
Typr.U._simpleGlyph = function(gl, p2) {
for (var c = 0; c < gl.noc; c++) {
var i0 = c == 0 ? 0 : gl.endPts[c - 1] + 1;
var il = gl.endPts[c];
for (var i = i0; i <= il; i++) {
var pr = i == i0 ? il : i - 1;
var nx = i == il ? i0 : i + 1;
var onCurve = gl.flags[i] & 1;
var prOnCurve = gl.flags[pr] & 1;
var nxOnCurve = gl.flags[nx] & 1;
var x = gl.xs[i], y = gl.ys[i];
if (i == i0) {
if (onCurve) {
if (prOnCurve)
Typr.U.P.moveTo(p2, gl.xs[pr], gl.ys[pr]);
else {
Typr.U.P.moveTo(p2, x, y);
continue;
}
} else {
if (prOnCurve)
Typr.U.P.moveTo(p2, gl.xs[pr], gl.ys[pr]);
else
Typr.U.P.moveTo(p2, (gl.xs[pr] + x) / 2, (gl.ys[pr] + y) / 2);
}
}
if (onCurve) {
if (prOnCurve)
Typr.U.P.lineTo(p2, x, y);
} else {
if (nxOnCurve)
Typr.U.P.qcurveTo(p2, x, y, gl.xs[nx], gl.ys[nx]);
else
Typr.U.P.qcurveTo(p2, x, y, (x + gl.xs[nx]) / 2, (y + gl.ys[nx]) / 2);
}
}
Typr.U.P.closePath(p2);
}
};
Typr.U._compoGlyph = function(gl, font, p2) {
for (var j = 0; j < gl.parts.length; j++) {
var path = { cmds: [], crds: [] };
var prt = gl.parts[j];
Typr.U._drawGlyf(prt.glyphIndex, font, path);
var m = prt.m;
for (var i = 0; i < path.crds.length; i += 2) {
var x = path.crds[i], y = path.crds[i + 1];
p2.crds.push(x * m.a + y * m.b + m.tx);
p2.crds.push(x * m.c + y * m.d + m.ty);
}
for (var i = 0; i < path.cmds.length; i++)
p2.cmds.push(path.cmds[i]);
}
};
Typr.U._getGlyphClass = function(g, cd) {
var intr = Typr._lctf.getInterval(cd, g);
return intr == -1 ? 0 : cd[intr + 2];
};
Typr.U.getPairAdjustment = function(font, g1, g2) {
if (font.GPOS) {
var ltab = null;
for (var i = 0; i < font.GPOS.featureList.length; i++) {
var fl = font.GPOS.featureList[i];
if (fl.tag == "kern") {
for (var j = 0; j < fl.tab.length; j++)
if (font.GPOS.lookupList[fl.tab[j]].ltype == 2)
ltab = font.GPOS.lookupList[fl.tab[j]];
}
}
if (ltab) {
for (var i = 0; i < ltab.tabs.length; i++) {
var tab = ltab.tabs[i];
var ind = Typr._lctf.coverageIndex(tab.coverage, g1);
if (ind == -1)
continue;
var adj;
if (tab.format == 1) {
var right = tab.pairsets[ind];
for (var j = 0; j < right.length; j++)
if (right[j].gid2 == g2)
adj = right[j];
if (adj == null)
continue;
} else if (tab.format == 2) {
var c1 = Typr.U._getGlyphClass(g1, tab.classDef1);
var c2 = Typr.U._getGlyphClass(g2, tab.classDef2);
var adj = tab.matrix[c1][c2];
}
return adj.val1[2];
}
}
}
if (font.kern) {
var ind1 = font.kern.glyph1.indexOf(g1);
if (ind1 != -1) {
var ind2 = font.kern.rval[ind1].glyph2.indexOf(g2);
if (ind2 != -1)
return font.kern.rval[ind1].vals[ind2];
}
}
return 0;
};
Typr.U.stringToGlyphs = function(font, str) {
var gls = [];
for (var i = 0; i < str.length; i++) {
var cc = str.codePointAt(i);
if (cc > 65535)
i++;
gls.push(Typr.U.codeToGlyph(font, cc));
}
var gsub = font["GSUB"];
if (gsub == null)
return gls;
var llist = gsub.lookupList, flist = gsub.featureList;
var wsep = '\n " ,.:;!?() \u060C';
var R = "\u0622\u0623\u0624\u0625\u0627\u0629\u062F\u0630\u0631\u0632\u0648\u0671\u0672\u0673\u0675\u0676\u0677\u0688\u0689\u068A\u068B\u068C\u068D\u068E\u068F\u0690\u0691\u0692\u0693\u0694\u0695\u0696\u0697\u0698\u0699\u06C0\u06C3\u06C4\u06C5\u06C6\u06C7\u06C8\u06C9\u06CA\u06CB\u06CD\u06CF\u06D2\u06D3\u06D5\u06EE\u06EF\u0710\u0715\u0716\u0717\u0718\u0719\u071E\u0728\u072A\u072C\u072F\u074D\u0759\u075A\u075B\u076B\u076C\u0771\u0773\u0774\u0778\u0779\u0840\u0846\u0847\u0849\u0854\u0867\u0869\u086A\u08AA\u08AB\u08AC\u08AE\u08B1\u08B2\u08B9\u0AC5\u0AC7\u0AC9\u0ACA\u0ACE\u0ACF\u0AD0\u0AD1\u0AD2\u0ADD\u0AE1\u0AE4\u0AEF\u0B81\u0B83\u0B84\u0B85\u0B89\u0B8C\u0B8E\u0B8F\u0B91\u0BA9\u0BAA\u0BAB\u0BAC";
var L = "\uA872\u0ACD\u0AD7";
for (var ci = 0; ci < gls.length; ci++) {
var gl = gls[ci];
var slft = ci == 0 || wsep.indexOf(str[ci - 1]) != -1;
var srgt = ci == gls.length - 1 || wsep.indexOf(str[ci + 1]) != -1;
if (!slft && R.indexOf(str[ci - 1]) != -1)
slft = true;
if (!srgt && R.indexOf(str[ci]) != -1)
srgt = true;
if (!srgt && L.indexOf(str[ci + 1]) != -1)
srgt = true;
if (!slft && L.indexOf(str[ci]) != -1)
slft = true;
var feat = null;
if (slft)
feat = srgt ? "isol" : "init";
else
feat = srgt ? "fina" : "medi";
for (var fi = 0; fi < flist.length; fi++) {
if (flist[fi].tag != feat)
continue;
for (var ti = 0; ti < flist[fi].tab.length; ti++) {
var tab = llist[flist[fi].tab[ti]];
if (tab.ltype != 1)
continue;
Typr.U._applyType1(gls, ci, tab);
}
}
}
var cligs = ["rlig", "liga", "mset"];
for (var ci = 0; ci < gls.length; ci++) {
var gl = gls[ci];
var rlim = Math.min(3, gls.length - ci - 1);
for (var fi = 0; fi < flist.length; fi++) {
var fl = flist[fi];
if (cligs.indexOf(fl.tag) == -1)
continue;
for (var ti = 0; ti < fl.tab.length; ti++) {
var tab = llist[fl.tab[ti]];
for (var j = 0; j < tab.tabs.length; j++) {
if (tab.tabs[j] == null)
continue;
var ind = Typr._lctf.coverageIndex(tab.tabs[j].coverage, gl);
if (ind == -1)
continue;
if (tab.ltype == 4) {
var vals = tab.tabs[j].vals[ind];
for (var k = 0; k < vals.length; k++) {
var lig = vals[k], rl = lig.chain.length;
if (rl > rlim)
continue;
var good = true;
for (var l = 0; l < rl; l++)
if (lig.chain[l] != gls[ci + (1 + l)])
good = false;
if (!good)
continue;
gls[ci] = lig.nglyph;
for (var l = 0; l < rl; l++)
gls[ci + l + 1] = -1;
}
} else if (tab.ltype == 5) {
var ltab = tab.tabs[j];
if (ltab.fmt != 2)
continue;
var cind = Typr._lctf.getInterval(ltab.cDef, gl);
var cls = ltab.cDef[cind + 2], scs = ltab.scset[cls];
for (var i = 0; i < scs.length; i++) {
var sc = scs[i], inp = sc.input;
if (inp.length > rlim)
continue;
var good = true;
for (var l = 0; l < inp.length; l++) {
var cind2 = Typr._lctf.getInterval(ltab.cDef, gls[ci + 1 + l]);
if (cind == -1 && ltab.cDef[cind2 + 2] != inp[l]) {
good = false;
break;
}
}
if (!good)
continue;
var lrs = sc.substLookupRecords;
for (var k = 0; k < lrs.length; k += 2) {
lrs[k];
lrs[k + 1];
}
}
}
}
}
}
}
return gls;
};
Typr.U._applyType1 = function(gls, ci, tab) {
var gl = gls[ci];
for (var j = 0; j < tab.tabs.length; j++) {
var ttab = tab.tabs[j];
var ind = Typr._lctf.coverageIndex(ttab.coverage, gl);
if (ind == -1)
continue;
if (ttab.fmt == 1)
gls[ci] = gls[ci] + ttab.delta;
else
gls[ci] = ttab.newg[ind];
}
};
Typr.U.glyphsToPath = function(font, gls, clr) {
var tpath = { cmds: [], crds: [] };
var x = 0;
for (var i = 0; i < gls.length; i++) {
var gid = gls[i];
if (gid == -1)
continue;
var gid2 = i < gls.length - 1 && gls[i + 1] != -1 ? gls[i + 1] : 0;
var path = Typr.U.glyphToPath(font, gid);
for (var j = 0; j < path.crds.length; j += 2) {
tpath.crds.push(path.crds[j] + x);
tpath.crds.push(path.crds[j + 1]);
}
if (clr)
tpath.cmds.push(clr);
for (var j = 0; j < path.cmds.length; j++)
tpath.cmds.push(path.cmds[j]);
if (clr)
tpath.cmds.push("X");
x += font.hmtx.aWidth[gid];
if (i < gls.length - 1)
x += Typr.U.getPairAdjustment(font, gid, gid2);
}
return tpath;
};
Typr.U.pathToSVG = function(path, prec) {
if (prec == null)
prec = 5;
var out = [], co = 0, lmap = { M: 2, L: 2, Q: 4, C: 6 };
for (var i = 0; i < path.cmds.length; i++) {
var cmd = path.cmds[i], cn = co + (lmap[cmd] ? lmap[cmd] : 0);
out.push(cmd);
while (co < cn) {
var c = path.crds[co++];
out.push(parseFloat(c.toFixed(prec)) + (co == cn ? "" : " "));
}
}
return out.join("");
};
Typr.U.pathToContext = function(path, ctx) {
var c = 0, crds = path.crds;
for (var j = 0; j < path.cmds.length; j++) {
var cmd = path.cmds[j];
if (cmd == "M") {
ctx.moveTo(crds[c], crds[c + 1]);
c += 2;
} else if (cmd == "L") {
ctx.lineTo(crds[c], crds[c + 1]);
c += 2;
} else if (cmd == "C") {
ctx.bezierCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3], crds[c + 4], crds[c + 5]);
c += 6;
} else if (cmd == "Q") {
ctx.quadraticCurveTo(crds[c], crds[c + 1], crds[c + 2], crds[c + 3]);
c += 4;
} else if (cmd.charAt(0) == "#") {
ctx.beginPath();
ctx.fillStyle = cmd;
} else if (cmd == "Z") {
ctx.closePath();
} else if (cmd == "X") {
ctx.fill();
}
}
};
Typr.U.P = {};
Typr.U.P.moveTo = function(p2, x, y) {
p2.cmds.push("M");
p2.crds.push(x, y);
};
Typr.U.P.lineTo = function(p2, x, y) {
p2.cmds.push("L");
p2.crds.push(x, y);
};
Typr.U.P.curveTo = function(p2, a, b, c, d, e, f) {
p2.cmds.push("C");
p2.crds.push(a, b, c, d, e, f);
};
Typr.U.P.qcurveTo = function(p2, a, b, c, d) {
p2.cmds.push("Q");
p2.crds.push(a, b, c, d);
};
Typr.U.P.closePath = function(p2) {
p2.cmds.push("Z");
};
Typr.U._drawCFF = function(cmds, state, font, p2) {
var stack = state.stack;
var nStems = state.nStems, haveWidth = state.haveWidth, width = state.width, open = state.open;
var i = 0;
var x = state.x, y = state.y, c1x = 0, c1y = 0, c2x = 0, c2y = 0, c3x = 0, c3y = 0, c4x = 0, c4y = 0, jpx = 0, jpy = 0;
var o = { val: 0, size: 0 };
while (i < cmds.length) {
Typr.CFF.getCharString(cmds, i, o);
var v = o.val;
i += o.size;
if (v == "o1" || v == "o18") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
} else if (v == "o3" || v == "o23") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
} else if (v == "o4") {
if (stack.length > 1 && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
haveWidth = true;
}
if (open)
Typr.U.P.closePath(p2);
y += stack.pop();
Typr.U.P.moveTo(p2, x, y);
open = true;
} else if (v == "o5") {
while (stack.length > 0) {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p2, x, y);
}
} else if (v == "o6" || v == "o7") {
var count = stack.length;
var isX = v == "o6";
for (var j = 0; j < count; j++) {
var sval = stack.shift();
if (isX)
x += sval;
else
y += sval;
isX = !isX;
Typr.U.P.lineTo(p2, x, y);
}
} else if (v == "o8" || v == "o24") {
var count = stack.length;
var index2 = 0;
while (index2 + 6 <= count) {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y + stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x, y);
index2 += 6;
}
if (v == "o24") {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p2, x, y);
}
} else if (v == "o11")
break;
else if (v == "o1234" || v == "o1235" || v == "o1236" || v == "o1237") {
if (v == "o1234") {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y;
c3x = jpx + stack.shift();
c3y = c2y;
c4x = c3x + stack.shift();
c4y = y;
x = c4x + stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1235") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y + stack.shift();
c3x = jpx + stack.shift();
c3y = jpy + stack.shift();
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
x = c4x + stack.shift();
y = c4y + stack.shift();
stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1236") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y;
c3x = jpx + stack.shift();
c3y = c2y;
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
x = c4x + stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x, y);
}
if (v == "o1237") {
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
jpx = c2x + stack.shift();
jpy = c2y + stack.shift();
c3x = jpx + stack.shift();
c3y = jpy + stack.shift();
c4x = c3x + stack.shift();
c4y = c3y + stack.shift();
if (Math.abs(c4x - x) > Math.abs(c4y - y)) {
x = c4x + stack.shift();
} else {
y = c4y + stack.shift();
}
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, jpx, jpy);
Typr.U.P.curveTo(p2, c3x, c3y, c4x, c4y, x, y);
}
} else if (v == "o14") {
if (stack.length > 0 && !haveWidth) {
width = stack.shift() + font.nominalWidthX;
haveWidth = true;
}
if (stack.length == 4) {
var adx = stack.shift();
var ady = stack.shift();
var bchar = stack.shift();
var achar = stack.shift();
var bind = Typr.CFF.glyphBySE(font, bchar);
var aind = Typr.CFF.glyphBySE(font, achar);
Typr.U._drawCFF(font.CharStrings[bind], state, font, p2);
state.x = adx;
state.y = ady;
Typr.U._drawCFF(font.CharStrings[aind], state, font, p2);
}
if (open) {
Typr.U.P.closePath(p2);
open = false;
}
} else if (v == "o19" || v == "o20") {
var hasWidthArg;
hasWidthArg = stack.length % 2 !== 0;
if (hasWidthArg && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
}
nStems += stack.length >> 1;
stack.length = 0;
haveWidth = true;
i += nStems + 7 >> 3;
} else if (v == "o21") {
if (stack.length > 2 && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
haveWidth = true;
}
y += stack.pop();
x += stack.pop();
if (open)
Typr.U.P.closePath(p2);
Typr.U.P.moveTo(p2, x, y);
open = true;
} else if (v == "o22") {
if (stack.length > 1 && !haveWidth) {
width = stack.shift() + font.Private.nominalWidthX;
haveWidth = true;
}
x += stack.pop();
if (open)
Typr.U.P.closePath(p2);
Typr.U.P.moveTo(p2, x, y);
open = true;
} else if (v == "o25") {
while (stack.length > 6) {
x += stack.shift();
y += stack.shift();
Typr.U.P.lineTo(p2, x, y);
}
c1x = x + stack.shift();
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y + stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x, y);
} else if (v == "o26") {
if (stack.length % 2) {
x += stack.shift();
}
while (stack.length > 0) {
c1x = x;
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x;
y = c2y + stack.shift();
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x, y);
}
} else if (v == "o27") {
if (stack.length % 2) {
y += stack.shift();
}
while (stack.length > 0) {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
y = c2y;
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x, y);
}
} else if (v == "o10" || v == "o29") {
var obj = v == "o10" ? font.Private : font;
if (stack.length == 0) {
console.log("error: empty stack");
} else {
var ind = stack.pop();
var subr = obj.Subrs[ind + obj.Bias];
state.x = x;
state.y = y;
state.nStems = nStems;
state.haveWidth = haveWidth;
state.width = width;
state.open = open;
Typr.U._drawCFF(subr, state, font, p2);
x = state.x;
y = state.y;
nStems = state.nStems;
haveWidth = state.haveWidth;
width = state.width;
open = state.open;
}
} else if (v == "o30" || v == "o31") {
var count, count1 = stack.length;
var index2 = 0;
var alternate = v == "o31";
count = count1 & ~2;
index2 += count1 - count;
while (index2 < count) {
if (alternate) {
c1x = x + stack.shift();
c1y = y;
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
y = c2y + stack.shift();
if (count - index2 == 5) {
x = c2x + stack.shift();
index2++;
} else
x = c2x;
alternate = false;
} else {
c1x = x;
c1y = y + stack.shift();
c2x = c1x + stack.shift();
c2y = c1y + stack.shift();
x = c2x + stack.shift();
if (count - index2 == 5) {
y = c2y + stack.shift();
index2++;
} else
y = c2y;
alternate = true;
}
Typr.U.P.curveTo(p2, c1x, c1y, c2x, c2y, x, y);
index2 += 4;
}
} else if ((v + "").charAt(0) == "o") {
console.log("Unknown operation: " + v, cmds);
throw v;
} else
stack.push(v);
}
state.x = x;
state.y = y;
state.nStems = nStems;
state.haveWidth = haveWidth;
state.width = width;
state.open = open;
};
var typr_js = Typr;
async function mapRecognize() {
var _a, _b;
const { cx } = useContext();
cx.isRecognizing = false;
logger("debug", "\u6B63\u5728\u52A0\u8F7D\u5B57\u5178\u5E93...");
const res = await request("https://cdn.ocsjs.com/resources/font/table.json", {
type: "GM_xmlhttpRequest",
method: "get",
contentType: "json"
});
cx.fontMap = res;
logger("info", "\u5B57\u5178\u5E93\u52A0\u8F7D\u6210\u529F");
const fontFaceEl = Array.from(document.head.querySelectorAll("style")).find((style) => {
var _a2;
return (_a2 = style.textContent) == null ? void 0 : _a2.includes("font-cxsecret");
});
const fontMap = cx.fontMap;
if (fontFaceEl) {
const font = (_b = (_a = fontFaceEl.textContent) == null ? void 0 : _a.match(/base64,([\w\W]+?)'/)) == null ? void 0 : _b[1];
if (font) {
const code = typr_js.parse(base64ToUint8Array(font));
const match = {};
for (let i = 19968; i < 40870; i++) {
const Glyph = typr_js.U.codeToGlyph(code, i);
if (!Glyph)
continue;
const path = typr_js.U.glyphToPath(code, Glyph);
const hex = md5(JSON.stringify(path)).slice(24);
match[i.toString()] = fontMap[hex];
}
const fonts = CXAnalyses.getSecretFont();
fonts.forEach((el, index2) => {
let html = el.innerHTML;
for (const key in match) {
const word = String.fromCharCode(parseInt(key));
const value = String.fromCharCode(match[key]);
while (html.indexOf(word) !== -1) {
html = html.replace(word, value);
}
}
el.innerHTML = html;
el.classList.remove("font-cxsecret");
});
}
}
}
async function ocrRecognize() {
const ocr = new OCR({
langPath: "https://cdn.ocsjs.com/resources/tessdata",
corePath: "https://cdn.ocsjs.com/resources/tesseract/tesseract-core.wasm.js",
workerPath: "https://cdn.ocsjs.com/resources/tesseract/worker.min.js"
});
const { cx } = useContext();
if (window === top) {
cx.isRecognizing = false;
logger("debug", "\u52A0\u8F7D\u6587\u5B57\u8BC6\u522B\u529F\u80FD, \u5982\u679C\u662F\u521D\u59CB\u5316\u8BF7\u8010\u5FC3\u7B49\u5F85..., \u5927\u7EA6\u9700\u8981\u4E0B\u8F7D20mb\u7684\u6570\u636E\u6587\u4EF6");
await ocr.load();
logger("info", "\u6587\u5B57\u8BC6\u522B\u529F\u80FD\u52A0\u8F7D\u6210\u529F");
}
const fonts = CXAnalyses.getSecretFont();
if (fonts.length) {
logger("info", "\u6587\u5B57\u8BC6\u522B\u529F\u80FD\u542F\u52A8");
cx.isRecognizing = true;
await ocr.load();
for (let i = 0; i < fonts.length; i++) {
try {
const text = await ocr.recognize(OCR.suit(fonts[i]));
fonts[i].innerText = text;
OCR.unsuit(fonts[i]);
} catch (e) {
logger("error", "\u6587\u5B57\u8BC6\u522B\u529F\u80FD\u51FA\u9519,\u53EF\u80FD\u5B58\u5728\u56FE\u7247\u65E0\u6CD5\u8BC6\u522B\u3002", e);
console.log("\u6587\u5B57\u8BC6\u522B\u9519\u8BEF", e);
}
}
cx.isRecognizing = false;
logger("info", "\u6587\u5B57\u8BC6\u522B\u5B8C\u6210");
}
}
function base64ToUint8Array(base64) {
const data = window.atob(base64);
const buffer = new Uint8Array(data.length);
for (let i = 0; i < data.length; ++i) {
buffer[i] = data.charCodeAt(i);
}
return buffer;
}
async function workOrExam$1(type = "work") {
const { period, timeout, retry, upload, waitForCheck } = useSettings().cx.work;
const { answererWrappers } = useSettings().common;
if (upload === "close" && type === "work") {
logger("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01");
message("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01\u8BF7\u5728\u8BBE\u7F6E\u5F00\u542F\u81EA\u52A8\u7B54\u9898\uFF01\u6216\u8005\u5FFD\u7565\u6B64\u8B66\u544A");
} else if (answererWrappers.length === 0) {
logger("warn", "\u9898\u5E93\u914D\u7F6E\u4E3A\u7A7A\uFF0C\u8BF7\u8BBE\u7F6E\u3002");
} else {
const local = useStore("localStorage");
local.workResults = [];
await waitForRecognize("cx");
const worker = new OCSWorker({
root: ".questionLi",
elements: {
title: "h3",
options: ".answerBg .answer_p, .textDIV, .eidtDiv",
type: type === "exam" ? 'input[name^="type"]' : 'input[id^="answertype"]'
},
answerer: (elements, type2, ctx) => {
const title = StringUtils.nowrap(elements.title[0].textContent || elements.title[0].innerText).trim().replace(/\(..题, .+?分\)/, "").replace(/[[|(|【|(]..题[\]|)|】|)]/, "").replace(/^\d+\.?/, "").trim();
if (title) {
return defaultAnswerWrapperHandler(answererWrappers, { type: type2, title, root: ctx.root });
} else {
throw new Error("\u9898\u76EE\u4E3A\u7A7A\uFF0C\u8BF7\u67E5\u770B\u9898\u76EE\u662F\u5426\u4E3A\u7A7A\uFF0C\u6216\u8005\u5FFD\u7565\u6B64\u9898");
}
},
work: {
type({ elements }) {
const typeInput = elements.type[0];
const type2 = parseInt(typeInput.value);
return type2 === 0 ? "single" : type2 === 1 ? "multiple" : type2 === 2 ? "completion" : type2 === 3 ? "judgement" : type2 === 4 ? "completion" : void 0;
},
handler(type2, answer, option) {
var _a;
if (type2 === "judgement" || type2 === "single" || type2 === "multiple") {
if (((_a = option.parentElement) == null ? void 0 : _a.querySelector(".check_answer,.check_answer_dx")) === null) {
option.click();
}
} else if (type2 === "completion" && answer.trim()) {
const text = option.querySelector("textarea");
const textareaFrame = option.querySelector("iframe");
if (text) {
text.value = answer;
}
if (textareaFrame == null ? void 0 : textareaFrame.contentDocument) {
textareaFrame.contentDocument.body.innerHTML = answer;
}
}
}
},
onElementSearched(elements) {
elements.title = elements.title.map(elementToRawObject);
},
onResult: (res) => {
var _a;
if (res.ctx) {
local.workResults.push(res);
}
console.log(res);
logger("info", "\u9898\u76EE\u5B8C\u6210\u7ED3\u679C : ", ((_a = res.result) == null ? void 0 : _a.finish) ? "\u5B8C\u6210" : "\u672A\u5B8C\u6210");
},
period: (period || 3) * 1e3,
timeout: (timeout || 30) * 1e3,
retry,
stopWhenError: false
});
const results = await worker.doWork();
logger("info", "\u505A\u9898\u5B8C\u6BD5", results);
if (type === "exam") {
logger("info", "\u4E3A\u4E86\u5B89\u5168\u8003\u8651\uFF0C\u8BF7\u81EA\u884C\u68C0\u67E5\u540E\u81EA\u884C\u70B9\u51FB\u63D0\u4EA4\uFF01");
} else {
await worker.uploadHandler({
uploadRate: upload,
results,
async callback(finishedRate, uploadable) {
var _a;
logger("info", "\u5B8C\u6210\u7387 : ", finishedRate, " , ", uploadable ? "5\u79D2\u540E\u5C06\u81EA\u52A8\u63D0\u4EA4" : "5\u79D2\u540E\u5C06\u81EA\u52A8\u4FDD\u5B58");
await sleep(5e3);
if (uploadable) {
(_a = domSearch({ submit: ".completeBtn" }).submit) == null ? void 0 : _a.click();
await sleep(2e3);
submitWork();
} else {
saveWork();
}
}
});
}
}
if (waitForCheck) {
logger("debug", `\u6B63\u5728\u7B49\u5F85\u7B54\u9898\u68C0\u67E5: \u4E00\u5171 ${waitForCheck} \u79D2`);
await sleep(waitForCheck * 1e3);
}
}
const updateURLs = [
"**mooc2=0**",
"**/mycourse/studentcourse**",
"**/work/getAllWork**",
"**/work/doHomeWorkNew**",
"**/exam/test?**",
"**exam/test/reVersionTestStartNew**examsystem**"
];
const CXScript = defineScript({
name: "\u8D85\u661F\u5B66\u4E60\u901A",
routes: [
{
name: "\u7248\u672C\u5207\u6362\u811A\u672C",
url: updateURLs,
async onload() {
if (top === window) {
message("warn", "OCS\u7F51\u8BFE\u52A9\u624B\u4E0D\u652F\u6301\u65E7\u7248\u8D85\u661F, \u5373\u5C06\u5207\u6362\u5230\u8D85\u661F\u65B0\u7248, \u5982\u6709\u5176\u4ED6\u7B2C\u4E09\u65B9\u63D2\u4EF6\u8BF7\u5173\u95ED, \u53EF\u80FD\u6709\u517C\u5BB9\u95EE\u9898\u9891\u7E41\u9891\u7E41\u5207\u6362\u3002");
await sleep(1e3);
const experience = document.querySelector(".experience");
if (experience) {
experience.click();
} else {
const params = new URLSearchParams(window.location.href);
params.set("mooc2", "1");
params.set("newMooc", "true");
params.delete("examsystem");
window.location.replace(decodeURIComponent(params.toString()));
}
}
}
},
{
name: "\u5C4F\u853D\u500D\u901F\u9650\u5236",
url: "**/ananas/modules/video/**",
onstart() {
console.log("\u5C4F\u853D\u500D\u901F\u9650\u5236\u542F\u52A8");
rateHack();
}
},
{
name: "\u4EFB\u52A1\u5207\u6362\u811A\u672C",
url: "**/mycourse/studentstudy**",
onload() {
const { restudy } = useSettings().cx.study;
if (restudy) {
logger("debug", "\u5F53\u524D\u4E3A\u590D\u4E60\u6A21\u5F0F\uFF0C\u5C06\u4F1A\u4ECE\u5F53\u524D\u7AE0\u8282\u5F80\u4E0B\u5B66\u4E60!");
} else {
const params = new URLSearchParams(window.location.href);
const mooc = params.get("mooc2");
if (mooc === null) {
params.set("mooc2", "1");
window.location.replace(decodeURIComponent(params.toString()));
return;
}
let chapters = CXAnalyses.getChapterInfos();
chapters = chapters.filter((chapter) => chapter.unFinishCount !== 0);
if (chapters.length === 0) {
logger("warn", "\u9875\u9762\u4EFB\u52A1\u70B9\u6570\u91CF\u4E3A\u7A7A! \u8BF7\u5237\u65B0\u91CD\u8BD5!");
} else {
const params2 = new URLSearchParams(window.location.href);
const courseId = params2.get("courseId");
const classId = params2.get("clazzid");
setTimeout(() => {
getTeacherAjax(courseId, classId, chapters[0].chapterId);
}, 1e3);
}
}
}
},
{
name: "\u5B66\u4E60\u811A\u672C",
url: "**/knowledge/cards**",
async onload() {
logger("info", "\u5F00\u59CB\u5B66\u4E60");
await sleep(5e3);
const settings = useSettings().cx.study;
watch$1([() => settings.playbackRate, () => settings.volume], () => {
const ctx = useContext();
if (ctx.common.currentMedia) {
ctx.common.currentMedia.playbackRate = settings.playbackRate;
ctx.common.currentMedia.volume = settings.volume;
if (ctx.cx.videojs && settings.line) {
switchPlayLine(settings, ctx.cx.videojs, ctx.common.currentMedia, settings.line);
}
}
});
watch$1([() => settings.line], () => {
const ctx = useContext();
if (ctx.common.currentMedia && ctx.cx.videojs && settings.line) {
switchPlayLine(settings, ctx.cx.videojs, ctx.common.currentMedia, settings.line);
}
});
await study$2();
}
},
{
name: "\u9605\u8BFB\u811A\u672C",
url: "**/readsvr/book/mooc**",
onload() {
console.log("\u9605\u8BFB\u811A\u672C\u542F\u52A8");
setTimeout(() => {
readweb.goto(epage);
}, 5e3);
}
},
{
name: "\u4F5C\u4E1A\u811A\u672C",
url: "**/mooc2/work/dowork**",
async onload() {
await sleep(5e3);
const { common } = useSettings();
if (common.answererWrappers.length === 0) {
logger("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01");
message("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01\u8BF7\u5728\u8BBE\u7F6E\u9762\u677F\u8BBE\u7F6E\u540E\u5237\u65B0\u91CD\u8BD5\uFF01");
} else {
await workOrExam$1("work");
}
}
},
{
name: "\u6574\u5377\u9884\u89C8\u811A\u672C",
url: "**/exam/test/reVersionTestStartNew**",
async onload() {
message("warn", "\u5373\u5C06\u81EA\u52A8\u5207\u6362\u5230\u6574\u5377\u9884\u89C8\u3002\u3002\u3002");
await sleep(3e3);
topreview();
}
},
{
name: "\u8003\u8BD5\u811A\u672C",
url: "**/mooc2/exam/preview**",
async onload() {
await sleep(5e3);
const { common } = useSettings();
if (common.answererWrappers.length === 0) {
logger("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01");
message("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01\u8BF7\u5728\u8BBE\u7F6E\u9762\u677F\u8BBE\u7F6E\u540E\u5237\u65B0\u91CD\u8BD5\uFF01");
} else {
await workOrExam$1("exam");
}
}
},
{
name: "\u5C4F\u853D\u4F5C\u4E1A\u8003\u8BD5\u586B\u7A7A\u7B80\u7B54\u9898\u7C98\u8D34\u9650\u5236",
url: ["**/mooc2/exam/preview**", "**/mooc2/work/dowork**", "**/work/doHomeWorkNew/**"],
onload() {
try {
const EDITORUI = $EDITORUI;
for (const key in EDITORUI) {
const ui = EDITORUI[key];
if (ui.__proto__.uiName === "editor") {
ui.editor.removeListener("beforepaste", editorPaste);
}
}
} catch (e) {
console.log("\u5C4F\u853D\u4F5C\u4E1A\u8003\u8BD5\u7C98\u8D34\u9650\u5236\u9519\u8BEF", e);
}
}
},
{
name: "\u7E41\u4F53\u5B57\u8BC6\u522B\u811A\u672C",
url: ["**/work/doHomeWorkNew**", "**/mooc2/exam/preview**", "**/mooc2/work/dowork**"],
async onload() {
const { recognize: recognize2 } = useSettings().cx.common;
if (recognize2 === "map") {
mapRecognize();
} else if (recognize2 === "ocr") {
ocrRecognize();
} else {
logger("debug", "\u7E41\u4F53\u5B57\u8BC6\u522B\u5DF2\u88AB\u5173\u95ED\uFF0C\u53EF\u80FD\u4F1A\u5BFC\u81F4\u7E41\u4F53\u5B57\u51FA\u73B0\u3002");
}
}
},
{
name: "\u56FE\u7247\u8BC6\u522B\u811A\u672C",
url: ["**/work/doHomeWorkNew**", "**/mooc2/exam/preview**", "**/mooc2/work/dowork**"],
onload() {
document.body.querySelectorAll("img").forEach((img) => {
const div = document.createElement("div");
div.style.display = "none";
div.textContent = img.src;
img.after(div);
});
}
},
{
name: "\u76F4\u64AD\u56DE\u653E\u811A\u672C",
url: "**zhibo.chaoxing.com**",
async onload() {
useUnsafeWindow().console.info = () => {
};
useUnsafeWindow().console.log = () => {
};
await sleep(5e3);
const video = document.querySelector("video");
const settings = useSettings().cx.live;
if (video) {
video.play();
setLive(video, settings);
watch$1(settings, () => {
setLive(video, settings);
});
}
function setLive(video2, settings2) {
video2.volume = settings2.volume;
video2.playbackRate = settings2.playbackRate;
const { bar } = domSearch({ bar: ".vjs-control-bar" });
if (bar) {
bar.style.opacity = settings2.showProgress ? "1" : "0";
}
}
}
}
],
panels: [
{
name: "\u7248\u672C\u5207\u6362\u52A9\u624B",
url: updateURLs,
el: () => createNote("\u5FC5\u987B\u5207\u6362\u5230\u6700\u65B0\u7248\u672C\u624D\u80FD\u4F7F\u7528\u6B64\u811A\u672C", "\u8BF7\u5BFB\u627E `\u4F53\u9A8C\u65B0\u7248` \u7684\u6309\u94AE, \u5E76\u70B9\u51FB\u3002")
},
{
name: "\u8D85\u661F\u52A9\u624B",
url: "**/space/index**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u8BFE\u7A0B\u8FDB\u5165\u3002")
},
{
name: "\u76F4\u64AD\u56DE\u653E\u5C0F\u52A9\u624B",
url: "**zhibo.chaoxing.com**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8FDB\u5165\u76F4\u64AD\u8BBE\u7F6E\u8C03\u6574\u500D\u901F\u53CA\u97F3\u91CF"),
children: [
{
name: "\u76F4\u64AD\u8BBE\u7F6E",
el: () => LiveSettingPanel
},
createTerminalPanel()
]
},
{
name: "\u5B66\u4E60\u52A9\u624B",
url: "**/mycourse/**pageHeader=1**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u7AE0\u8282\u8FDB\u5165\u5B66\u4E60\u3002")
},
{
name: "\u4F5C\u4E1A\u52A9\u624B",
url: "**/mycourse/**pageHeader=8**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u4F5C\u4E1A\u8FDB\u5165\u3002")
},
{
name: "\u8003\u8BD5\u52A9\u624B",
url: "**/mycourse/**pageHeader=9**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u8003\u8BD5\u8FDB\u5165\u3002")
},
{
name: "\u5B66\u4E60\u52A9\u624B",
url: "**/mycourse/studentstudy**",
el: () => createNote("\u{1F4E2} \u8FDB\u5165\u8BBE\u7F6E\u9762\u677F\u53EF\u4EE5\u8C03\u6574\u5B66\u4E60\u8BBE\u7F6E", "\u7AE0\u8282\u680F\u4F60\u968F\u4FBF\u70B9, \u811A\u672C\u5361\u4E86\u7B97\u6211\u8F93\u3002", "5\u79D2\u540E\u5C06\u81EA\u52A8\u5F00\u59CB..."),
children: [
{
name: "\u5B66\u4E60\u8BBE\u7F6E",
el: () => StudySettingPanel$2
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u4F5C\u4E1A\u52A9\u624B",
url: "**/mooc2/work/dowork**",
el: () => createNote("\u8FDB\u5165\u8BBE\u7F6E\u9762\u677F\u53EF\u4EE5\u8C03\u6574\u4F5C\u4E1A\u8BBE\u7F6E", "5\u79D2\u540E\u5C06\u81EA\u52A8\u5F00\u59CB..."),
children: [
{
name: "\u4F5C\u4E1A\u8BBE\u7F6E",
el: () => WorkSettingPanel$1
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u8003\u8BD5\u52A9\u624B",
url: "**/mooc2/exam/preview**",
el: () => createNote("\u8FDB\u5165\u8BBE\u7F6E\u9762\u677F\u53EF\u4EE5\u8C03\u6574\u8003\u8BD5\u8BBE\u7F6E", "5\u79D2\u540E\u5C06\u81EA\u52A8\u5F00\u59CB..."),
children: [
{
name: "\u8003\u8BD5\u8BBE\u7F6E",
el: () => ExamSettingPanel
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u8003\u8BD5\u52A9\u624B",
url: "**/exam/test/reVersionTestStartNew**",
el: () => createNote("\u6CE8\u610F\uFF01 \u5373\u5C06\u5207\u6362\u5230\u6574\u5377\u9884\u89C8\u9875\u9762\uFF0C \u7136\u540E\u624D\u53EF\u4EE5\u81EA\u52A8\u8003\u8BD5\uFF01")
}
]
});
function nextTask() {
var _a;
const { icve } = useSettings();
if (icve.common.type === "MOOC") {
const { sections } = domSearchAll({ sections: ".cellClick .np-section-type:not(.np-section-type.active)" });
if (sections.length) {
const cell = sections[0].parentElement;
logger("info", "\u5373\u5C06\u5207\u6362\u5230\u4E0B\u4E00\u4E2A\u4EFB\u52A1 " + ((_a = cell == null ? void 0 : cell.dataset.cellname) == null ? void 0 : _a.trim()) || "\u672A\u77E5");
cell == null ? void 0 : cell.click();
study$1();
} else {
message("warn", "\u6CA1\u6709\u53EF\u5B66\u4E60\u7684\u4EFB\u52A1\uFF0C\u5B66\u4E60\u7ED3\u675F\u3002");
}
} else {
const task = icve.study.cells.find((cell) => cell.isTask);
if (task) {
logger("info", "\u5373\u5C06\u5207\u6362\u5230\u4E0B\u4E00\u4E2A\u4EFB\u52A1 " + task.cellName);
task.isTask = false;
icve.study.currentTask = task;
setTimeout(() => {
window.location.href = task.href;
}, 1e3);
} else {
message("warn", "\u6CA1\u6709\u53EF\u5B66\u4E60\u7684\u4EFB\u52A1\uFF0C\u5B66\u4E60\u7ED3\u675F\u3002");
}
}
}
async function study$1() {
var _a;
await sleep(5e3);
const { icve: settings } = useSettings();
const { common } = useContext();
const fixTime = ((_a = useUnsafeWindow()) == null ? void 0 : _a._fixTime) || 10;
const { ppt, video, iframe, link, nocaptcha } = domSearch({
ppt: ".page-bar",
iframe: "iframe",
video: "video",
link: "#externalLinkDiv",
nocaptcha: "#waf_nc_block,#nocaptcha"
});
console.log({ ppt, video, iframe, link, nocaptcha });
if (nocaptcha && nocaptcha.style.display !== "none") {
message("warn", "\u8BF7\u624B\u52A8\u6ED1\u52A8\u9A8C\u8BC1\u7801\u3002");
} else if (video) {
logger("info", "\u5F00\u59CB\u64AD\u653E\u89C6\u9891");
const v = video;
common.currentMedia = v;
video.onended = async () => {
logger("info", "\u89C6\u9891\u7ED3\u675F");
await sleep(3e3);
nextTask();
};
fixedVideoProgress$1(settings.study.showProgress);
v.volume = settings.study.volume;
if (v.paused) {
v.play();
}
} else if (iframe && iframe.src.startsWith("https://file.icve.com.cn")) {
const interval = setInterval(() => {
if (settings.study.isReading === false) {
clearInterval(interval);
nextTask();
}
}, settings.study.pptRate * 1e3);
} else if (ppt) {
logger("info", "\u5F00\u59CB\u64AD\u653EPPT");
const { pageCount, pageCurrentCount, pageNext } = domSearch({
pageCount: ".MPreview-pageCount",
pageNext: ".MPreview-pageNext",
pageCurrentCount: ".MPreview-pageInput"
});
if (pageCurrentCount && pageCount && pageNext) {
let count = parseInt(pageCurrentCount.value);
const total = parseInt(pageCount.innerText.replace("/", "").trim() || "0");
while (count <= total) {
pageNext.click();
await sleep(1e3 * settings.study.pptRate);
count++;
}
logger("info", `PPT\u64AD\u653E\u5B8C\u6210 ${fixTime * 2} \u79D2\u540E\u5C06\u81EA\u52A8\u5207\u6362\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u3002`);
await sleep(1e3 * fixTime * 2);
nextTask();
} else {
message("error", "\u672A\u627E\u5230PPT\u8FDB\u5EA6\uFF0C\u8BF7\u5237\u65B0\u91CD\u8BD5\u6216\u8005\u8DF3\u8FC7\u6B64\u4EFB\u52A1\u3002");
}
} else if (link && link.style.display !== "none") {
logger("info", `\u94FE\u63A5\u67E5\u770B\u5B8C\u6210\uFF0C${fixTime}\u79D2\u540E\u4E0B\u4E00\u4E2A\u4EFB\u52A1`);
await sleep(1e3 * fixTime);
nextTask();
} else {
logger("error", "\u672A\u77E5\u7684\u8BFE\u4EF6\u7C7B\u578B\uFF0C\u8BF7\u53CD\u9988\u7ED9\u4F5C\u8005\u3002");
}
}
function fixedVideoProgress$1(fixed) {
const { common } = useContext();
const { bar } = domSearch({ bar: ".jw-controlbar" });
if (common.currentMedia && bar) {
bar.style.display = fixed ? "block" : "none";
bar.style.visibility = fixed ? "visible" : "hidden";
bar.style.opacity = fixed ? "1" : "0";
}
}
async function loadTasks() {
const { icve } = useSettings();
let loading = false;
icve.study.cells = [];
const _template = useUnsafeWindow().template;
useUnsafeWindow().template = function(type, data) {
loading = false;
if (type === "cell_html" && data.code) {
icve.study.cells = icve.study.cells.concat(data.cellList.map((cl) => cl.childNodeList || cl).flat());
icve.study.cells = icve.study.cells.map((cell) => {
const percent = cell.stuCellPercent || cell.stuCellFourPercent;
cell.isTask = percent !== 100;
return cell;
});
}
return _template(type, data);
};
const fixTime = useUnsafeWindow()._fixTime;
const { moduleTriggers } = domSearchAll({ moduleTriggers: ".moduleList .openOrCloseModule" });
await open(moduleTriggers.filter((trigger2) => {
var _a;
return ((_a = trigger2.parentElement) == null ? void 0 : _a.querySelector(".topicList")) === null;
}));
const { topicsTriggers } = domSearchAll({ topicsTriggers: ".topicList .openOrCloseTopic" });
await open(topicsTriggers);
icve.study.cells = icve.study.cells.map((cell) => {
const { hrefList } = domSearchAll({ hrefList: "[data-href]" });
cell.href = hrefList.map((el) => el.dataset.href).find((href) => href == null ? void 0 : href.includes(cell.Id)) || "";
return cell;
});
async function open(targets) {
console.log("targets", targets);
for (const target of targets) {
target.click();
await waitForLoading();
await sleep(1e3 * (fixTime + 1));
}
}
function waitForLoading() {
loading = true;
return Promise.race([
sleep(1e3 * 60),
new Promise((resolve2, reject) => {
setInterval(() => loading === false ? resolve2() : void 0, 1e3);
})
]);
}
}
const TaskList = defineComponent({
props: {
selectable: {
default: true,
type: Boolean
}
},
setup(props, ctx) {
const settings = useSettings().icve.study;
return () => createVNode(Fragment, null, [createVNode("table", null, [createVNode("thead", null, [createVNode("tr", null, [createVNode("th", null, [createVNode("span", null, [createTextVNode("\u4EFB\u52A1\u70B9")])]), createVNode("th", null, [createVNode("span", null, [createTextVNode("\u7C7B\u578B")])]), createVNode("th", null, [createVNode("span", null, [createTextVNode("\u8FDB\u5EA6")])]), createVNode("th", null, [createVNode("span", null, [createTextVNode("\u540D\u79F0")])]), createVNode("th", null, [createVNode("span", null, [createTextVNode("\u64CD\u4F5C")])])])]), createVNode("tbody", null, [settings.cells.map((item, index2) => {
var _a;
return createVNode("tr", null, [createVNode("td", null, [createVNode("input", {
"id": "task_" + index2.toString(),
"style": {
marginRight: "2px"
},
"type": "checkbox",
"checked": item.isTask,
"disabled": !props.selectable,
"onChange": (e) => {
settings.cells[index2].isTask = e.target.checked;
}
}, null)]), createVNode("td", null, [item.categoryName.toLocaleUpperCase()]), createVNode("td", null, [item.stuCellPercent || item.stuCellFourPercent, createTextVNode("%")]), createVNode("td", {
"title": item.href
}, [createVNode("label", {
"for": "task_" + index2.toString(),
"style": {
cursor: "pointer"
}
}, [item.cellName, createVNode("span", {
"style": {
fontWeight: "bold"
}
}, [((_a = settings.cells.find((cell) => cell.isTask)) == null ? void 0 : _a.Id) === item.Id ? " (\u4E0B\u4E2A\u4EFB\u52A1)" : ""])])]), createVNode("td", {
"title": item.href
}, [createVNode("a", {
"href": item.href
}, [createTextVNode("\u8FDB\u5165")])])]);
})])])]);
}
});
const StudyTaskSettingPanel = defineComponent({
setup() {
const settings = useSettings().icve.study;
const loading = ref(false);
const count = ref(0);
setInterval(() => count.value = count.value > 2 ? 0 : count.value + 1, 1e3 / 3);
const hasCell = computed(() => settings.cells.length > 0);
const hasTask = computed(() => settings.cells.some((cell) => cell.isTask));
return () => createVNode(Fragment, null, [createVNode("div", {
"style": {
display: "flex"
}
}, [createVNode(Tooltip, {
"title": "\u70B9\u51FB\u8BFB\u53D6\u4EFB\u52A1\u5217\u8868\uFF0C\u8BFB\u53D6\u540E\u52FE\u9009\u4EFB\u52A1\uFF0C\u5373\u53EF\u70B9\u51FB\u5F00\u59CB\u5B66\u4E60\u3002",
"containerStyle": {
width: "fit-content"
}
}, {
default: () => [createVNode("button", {
"class": "ocs-btn-primary",
"disabled": loading.value,
"onClick": async () => {
message("info", "\u8BF7\u7B49\u5F85\u5168\u90E8\u4EFB\u52A1\u8BFB\u53D6\u5B8C\u6BD5\uFF08\u4E3A\u4E86\u907F\u514D\u9A8C\u8BC1\u7801\uFF0C\u6B64\u8FC7\u7A0B\u53EF\u80FD\u8F83\u4E45\uFF09");
loading.value = true;
await loadTasks();
loading.value = false;
message("success", "\u8BFB\u53D6\u5B8C\u6BD5!");
}
}, [loading.value ? "\u8BFB\u53D6\u4EFB\u52A1\u4E2D" + ".".repeat(count.value) : hasCell.value ? "\u91CD\u65B0\u8BFB\u53D6\u4EFB\u52A1" : "\u8BFB\u53D6\u4EFB\u52A1"])]
}), createVNode(Tooltip, {
"title": hasCell.value ? hasTask.value ? "\u5F00\u59CB\u5B66\u4E60\u9009\u4E2D\u7684\u4EFB\u52A1" : "\u8BF7\u9009\u4E2D\u9700\u8981\u5B66\u4E60\u7684\u4EFB\u52A1" : "\u4EFB\u52A1\u5217\u8868\u4E3A\u7A7A\uFF0C\u8BF7\u5148\u83B7\u53D6\u4EFB\u52A1\u3002",
"containerStyle": {
width: "fit-content"
}
}, {
default: () => [createVNode("button", {
"class": "ocs-btn-primary",
"disabled": loading.value || hasTask.value === false || hasCell.value === false,
"onClick": () => {
message("info", "\u5F00\u59CB\u5B66\u4E60\uFF0C\u5982\u679C\u9875\u9762\u4E0D\u8DF3\u8F6C\u8BF7\u81EA\u884C\u8FDB\u5165\u7B2C\u4E00\u4E2A\u4EFB\u52A1\u3002");
nextTask();
}
}, [createTextVNode("\u5F00\u59CB\u5B66\u4E60")])]
})]), createVNode("hr", null, null), createVNode("div", null, [settings.cells.length === 0 ? createVNode("span", null, [createTextVNode("\u6682\u65E0\u4EFB\u52A1\uFF0C\u8BF7\u70B9\u51FB\u83B7\u53D6")]) : createVNode(Tooltip, {
"title": "\u52FE\u9009\u6216\u8005\u53D6\u6D88\u4EFB\u52A1\uFF0C\u9009\u4E2D\u7684\u4EFB\u52A1\u5C06\u4F1A\u81EA\u52A8\u5207\u6362\u5E76\u8FD0\u884C\u3002"
}, {
default: () => [createVNode(TaskList, null, null)]
})])]);
}
});
const StudySettingPanel$1 = defineComponent({
setup() {
const settings = useSettings().icve.study;
const ctx = useContext();
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode("label", null, [createTextVNode("\u89C6\u9891\u500D\u901F")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u4E0D\u5141\u8BB8\u500D\u901F\uFF01"
}, {
default: () => [createVNode("input", {
"type": "range",
"value": "1",
"disabled": true
}, null)]
}), createVNode("span", null, [createTextVNode("1x")])]), createVNode("label", null, [createTextVNode("\u97F3\u91CF\u8C03\u8282")]), createVNode("div", null, [createVNode("input", {
"type": "range",
"min": "0",
"max": "1",
"step": "0.05",
"value": settings.volume,
"onInput": (e) => {
settings.volume = e.target.valueAsNumber;
if (ctx.common.currentMedia)
ctx.common.currentMedia.volume = e.target.valueAsNumber;
}
}, null), createVNode("span", null, [createTextVNode(" "), Math.round(settings.volume * 100), createTextVNode("% ")])]), createVNode("label", null, [createTextVNode("\u663E\u793A\u89C6\u9891\u8FDB\u5EA6")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u56FA\u5B9A\u8FDB\u5EA6\u6761\uFF0C\u9632\u6B62\u8FDB\u5EA6\u6761\u6D88\u5931\u3002"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.showProgress,
"onChange": (e) => {
settings.showProgress = e.target.checked;
fixedVideoProgress$1(settings.showProgress);
}
}, null)]
})]), createVNode("hr", null, null), createVNode("hr", null, null), createVNode("label", null, [createTextVNode("PPT\u7FFB\u9605\u901F\u5EA6/\u79D2")]), createVNode("div", null, [createVNode("input", {
"type": "number",
"value": settings.pptRate,
"min": "1",
"max": "60",
"step": "1",
"onChange": (e) => settings.pptRate = e.target.valueAsNumber,
"onInput": (e) => settings.pptRate = e.target.valueAsNumber
}, null)])])]);
}
});
const ICVEScript = defineScript({
name: "\u804C\u6559\u4E91",
routes: [{
name: "\u5206\u7C7B\u811A\u672C",
url: "**icve.com.cn**",
onload() {
const settings = useSettings().icve.common;
if (urlMatch("mooc.icve.com.cn")) {
settings.type = "MOOC";
} else if (urlMatch("zjy2.icve.com.cn")) {
settings.type = "ZJY";
} else {
settings.type = void 0;
}
}
}, {
name: "\u5B66\u4E60\u811A\u672C",
url: ["**icve.com.cn/common/directory/directory.html**", "**mooc.icve.com.cn/study/courseLearn/resourcesStudy.html**"],
onload: study$1
}, {
name: "\u9605\u8BFB\u811A\u672C",
url: ["**file.icve.com.cn**"],
async onload() {
var _a;
const settings = useSettings().icve.study;
const fixTime = ((_a = useUnsafeWindow()) == null ? void 0 : _a._fixTime) || 10;
logger("info", "\u5373\u5C06\u5F00\u59CB\u64AD\u653EPPT");
settings.isReading = true;
await sleep(3e3);
while (true) {
const {
gc,
Presentation
} = useUnsafeWindow();
const {
TotalSlides
} = Presentation.GetContentDetails();
if (gc < TotalSlides) {
console.log(gc, TotalSlides);
await sleep(useSettings().icve.study.pptRate * 1e3);
Presentation.Next();
} else {
break;
}
}
logger("info", `PPT\u64AD\u653E\u5B8C\u6210 ${fixTime * 2} \u79D2\u540E\u5C06\u81EA\u52A8\u5207\u6362\u4E0B\u4E00\u4E2A\u4EFB\u52A1\u3002`);
await sleep(1e3 * fixTime * 2);
settings.isReading = false;
}
}],
panels: [{
name: "MOOC\u52A9\u624B",
url: ["**mooc.icve.com.cn/study/courseLearn/process.html**", "**mooc.icve.com.cn/profile.html**"],
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u8BFE\u7A0B\u6216\u8BFE\u4EF6\u8FDB\u5165\u3002")
}, {
name: "\u804C\u6559\u4E91\u52A9\u624B",
url: "**zjy2.icve.com.cn/student/studio/studio.html**",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u8BFE\u7A0B\u8FDB\u5165\u3002")
}, {
name: "\u8BFE\u4EF6\u52A9\u624B",
url: "**zjy2.icve.com.cn/study/process/process.html**",
el: () => createNote("\u8BF7\u8FDB\u5165 \u4EFB\u52A1\u9009\u62E9 \u9009\u62E9\u60A8\u7684\u4EFB\u52A1\uFF0C\u5E76\u5F00\u59CB\u5B66\u4E60\u3002"),
children: [{
name: "\u4EFB\u52A1\u9009\u62E9",
el: () => StudyTaskSettingPanel
}]
}, {
name: "\u5B66\u4E60\u52A9\u624B",
url: ["**zjy2.icve.com.cn/common/directory/directory.html**", "**mooc.icve.com.cn/study/courseLearn/resourcesStudy.html**"],
el: () => createNote("\u8FDB\u5165 \u5B66\u4E60\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u5B66\u4E60\u8BBE\u7F6E", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB..."),
children: [{
name: "\u5B66\u4E60\u8BBE\u7F6E",
el: () => StudySettingPanel$1
}, {
name: "\u4EFB\u52A1\u5217\u8868",
hide: () => useSettings().icve.common.type === "MOOC",
el: () => createVNode(TaskList, {
"selectable": false
}, null)
}, createTerminalPanel()]
}]
});
const CommonWorkSettingPanel = defineComponent({
props: {
settings: {
default: () => {
},
type: Object
}
},
emits: ["updateUpload"],
setup(props, {
slots,
emit
}) {
const {
settings
} = toRefs(props);
return () => {
var _a;
return createVNode(Fragment, null, [(_a = slots.upload) == null ? void 0 : _a.call(slots), createVNode("label", null, [createTextVNode("\u7B54\u9898\u95F4\u9694(\u79D2)")]), createVNode("div", null, [createVNode("input", {
"type": "number",
"value": settings.value.period,
"min": "3",
"step": "1",
"onChange": (e) => settings.value.period = e.target.valueAsNumber,
"onInput": (e) => settings.value.period = e.target.valueAsNumber
}, null)]), createVNode("label", null, [createTextVNode("\u641C\u9898\u8BF7\u6C42\u8D85\u65F6\u65F6\u95F4(\u79D2)")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u6BCF\u9053\u9898\u6700\u591A\u505An\u79D2, \u8D85\u8FC7\u5219\u8DF3\u8FC7\u6B64\u9898\u3002"
}, {
default: () => [createVNode("input", {
"type": "number",
"value": settings.value.timeout,
"min": "10",
"step": "1",
"onChange": (e) => settings.value.timeout = e.target.valueAsNumber,
"onInput": (e) => settings.value.timeout = e.target.valueAsNumber
}, null)]
})]), createVNode("label", null, [createTextVNode("\u641C\u9898\u8D85\u65F6\u91CD\u8BD5\u6B21\u6570")]), createVNode("div", null, [createVNode("input", {
"type": "number",
"value": settings.value.retry,
"min": "0",
"max": "2",
"step": "1",
"onChange": (e) => settings.value.retry = e.target.valueAsNumber,
"onInput": (e) => settings.value.retry = e.target.valueAsNumber
}, null)])]);
};
}
});
const CreditWorkSettingPanel = defineComponent({
setup() {
const settings = useSettings().zhs.work;
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode(CommonWorkSettingPanel, {
"settings": settings
}, {
upload: createVNode(WorkerSetting, {
"label": "\u81EA\u52A8\u7B54\u9898",
"config": {
selected: settings.upload
},
"changeHandler": (e) => settings.upload = e.target.value
}, null)
})])]);
}
});
function waitForCaptcha() {
const popup = document.querySelector(".yidun_popup");
if (popup) {
message("warn", "\u5F53\u524D\u68C0\u6D4B\u5230\u9A8C\u8BC1\u7801\uFF0C\u8BF7\u8F93\u5165\u540E\u65B9\u53EF\u7EE7\u7EED\u8FD0\u884C\u3002");
return new Promise((resolve2, reject) => {
const interval = setInterval(() => {
const popup2 = document.querySelector(".yidun_popup");
if (popup2 === null) {
clearInterval(interval);
resolve2();
}
}, 1e3);
});
}
}
let stop = false;
async function study() {
var _a, _b;
const { watchTime, restudy } = useSettings().zhs.video;
logger("info", "zhs \u5B66\u4E60\u4EFB\u52A1\u5F00\u59CB");
let list = Array.from(document.querySelectorAll("li.clearfix.video"));
if (!restudy) {
list = list.filter((el) => el.querySelector(".time_icofinish") === null);
}
if (list.length === 0) {
logger("warn", "\u89C6\u9891\u4EFB\u52A1\u6570\u91CF\u4E3A 0 !");
} else {
console.log(list);
logger("info", "\u89C6\u9891\u4EFB\u52A1\u6570\u91CF", list.length);
setInterval(() => {
const { showProgress } = useSettings().zhs.video;
closeTestDialog();
fixedVideoProgress(showProgress);
}, 3e3);
autoClose(watchTime);
for (const item of list) {
try {
if (stop) {
break;
} else {
logger("debug", `\u5373\u5C06\u64AD\u653E -- ${(_a = item.querySelector('[class="catalogue_title"]')) == null ? void 0 : _a.getAttribute("title")} : ${(_b = item.querySelector(".time")) == null ? void 0 : _b.textContent}`);
await sleep(5e3);
item.click();
await sleep(5e3);
await watch();
}
} catch (e) {
logger("error", e);
}
}
}
logger("info", "zhs \u5B66\u4E60\u4EFB\u52A1\u7ED3\u675F");
}
async function watch() {
const { volume, playbackRate, creditStudy: creditStudy2 } = useSettings().zhs.video;
return new Promise((resolve2, reject) => {
try {
const video = document.querySelector("video");
const { common } = useContext();
common.currentMedia = video;
common.currentMedia = video;
video.currentTime = 0;
video.volume = volume;
Promise.resolve(async () => {
await sleep(1e3);
video.play();
await switchPlaybackRate(creditStudy2 ? 1 : playbackRate);
video.onpause = async function() {
if (!video.ended) {
if (stop) {
resolve2();
} else {
await waitForCaptcha();
await sleep(1e3);
video.play();
}
}
};
video.onended = function() {
resolve2();
};
}).then((func) => {
func();
}).catch((err) => {
logger("error", err);
});
} catch (e) {
reject(e);
}
});
}
async function switchPlaybackRate(playbackRate) {
await sleep(500);
const { btn } = domSearch({ btn: ".speedBox" });
btn == null ? void 0 : btn.click();
await sleep(500);
const { rate } = domSearch({ rate: `[rate="${playbackRate === 1 ? "1.0" : playbackRate}"]` });
rate == null ? void 0 : rate.click();
}
async function closeTestDialog() {
const { items } = domSearchAll({ items: ".topic-item" });
if (items.length !== 0) {
const { item, study: study2 } = domSearch({ item: ".topic-item", study: ".video-study" });
item == null ? void 0 : item.click();
await sleep(1e3);
study2.__vue__.testDialog = false;
await sleep(1e3);
}
}
async function creditStudy() {
const { restudy } = useSettings().zhs.video;
let list = Array.from(document.querySelectorAll(".file-item"));
if (!restudy) {
list = list.filter((el) => el.querySelector(".icon-finish") === null);
}
console.log(list);
const item = list[0];
if (item) {
if (item.classList.contains("active")) {
await watch();
if (list[1])
list[1].click();
} else {
item.click();
}
}
}
function autoClose(watchTime) {
const settings = useSettings().zhs.video;
if (watchTime !== 0) {
let time = 0;
clearInterval(settings.interval);
settings.interval = setInterval(() => {
if (time >= watchTime * 60 * 60 * 1e3) {
clearInterval(settings.interval);
const video = document.querySelector("video");
video.pause();
stop = true;
message("warn", "\u811A\u672C\u5DF2\u81EA\u52A8\u6682\u505C\uFF0C\u5DF2\u83B7\u5F97\u4ECA\u65E5\u5E73\u65F6\u5206\uFF0C\u5982\u9700\u7EE7\u7EED\u5B66\u4E60\u8BF7\u5237\u65B0\u9875\u9762\u5E76\u8C03\u6574\u5B66\u4E60\u65F6\u95F4\u3002");
} else {
time += 1e3;
}
}, 1e3);
} else {
clearInterval(settings.interval);
}
}
function fixedVideoProgress(fixed) {
const { common } = useContext();
const { bar } = domSearch({ bar: ".controlsBar" });
if (common.currentMedia && bar) {
if (bar) {
bar.style.display = fixed ? "block" : "none";
}
}
}
const StudySettingPanel = defineComponent({
setup() {
const settings = useSettings().zhs.video;
const ctx = useContext();
showCloseDate();
function showCloseDate() {
const closeDate = new Date();
closeDate.setMinutes(closeDate.getMinutes() + settings.watchTime * 60);
settings.closeDate = closeDate;
}
const switching = ref(false);
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [settings.creditStudy === false ? [createVNode("label", null, [createTextVNode("\u81EA\u52A8\u6682\u505C")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u64AD\u653E\u65F6\u95F4\u5230\u540E, \u5C06\u4F1A\u81EA\u52A8\u6682\u505C\u3002\n\u5982\u8BBE\u7F6E\u4E3A0, \u5219\u4E0D\u4F1A\u81EA\u52A8\u6682\u505C\n\u81EA\u52A8\u6682\u505C\u53EF\u4EE5\u5E2E\u52A9\u4F60\u83B7\u53D6\u667A\u6167\u6811\u7684\u5E73\u65F6\u5206\uFF0C\u6BCF\u5929\u5B66\u4E60\u8D85\u8FC7\u534A\u5C0F\u65F6\u5C31\u7B97\u4E00\u6B21\u5E73\u65F6\u5206\u3002"
}, {
default: () => [createVNode("input", {
"type": "number",
"value": settings.watchTime,
"min": "0",
"max": "24",
"step": "0.5",
"onChange": (e) => {
settings.watchTime = e.target.valueAsNumber;
showCloseDate();
autoClose(e.target.valueAsNumber);
}
}, null)]
}), createVNode("span", null, [createTextVNode("\u5C0F\u65F6")])]), createVNode("label", null, [createTextVNode("\u6682\u505C\u65F6\u95F4")]), createVNode("div", null, [settings.watchTime === 0 ? createVNode("span", null, [createTextVNode("\u8BBE\u7F6E\u4E3A0\u5C06\u4E0D\u4F1A\u81EA\u52A8\u6682\u505C")]) : createVNode("span", null, [createTextVNode("\u5C06\u5728 "), settings.closeDate.toLocaleString(), createTextVNode(" \u6682\u505C")])])] : [], settings.creditStudy === true ? createVNode(Fragment, null, [createVNode("label", null, [createTextVNode("\u89C6\u9891\u500D\u901F ")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u5B66\u5206\u8BFE\u4E0D\u5141\u8BB8\u500D\u901F\uFF01"
}, {
default: () => [createVNode("input", {
"type": "range",
"value": "1",
"disabled": true
}, null)]
}), createVNode("span", null, [createTextVNode("1x")])])]) : createVNode(Fragment, null, [createVNode("label", null, [createTextVNode("\u89C6\u9891\u500D\u901F ")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u667A\u6167\u6811\u6700\u9AD81.5\u500D\u901F, \u8D85\u8FC71.5\u5BB9\u6613\u5C01\u53F7\uFF01"
}, {
default: () => [createVNode("input", {
"type": "range",
"step": "0.25",
"max": "1.5",
"min": "1",
"value": settings.playbackRate,
"disabled": switching.value,
"onChange": async (e) => {
switching.value = true;
settings.playbackRate = e.target.valueAsNumber;
await switchPlaybackRate(settings.playbackRate);
switching.value = false;
}
}, null)]
}), createVNode("span", null, [settings.playbackRate, createTextVNode("x")])])]), createVNode("label", null, [createTextVNode("\u97F3\u91CF\u8C03\u8282")]), createVNode("div", null, [createVNode("input", {
"type": "range",
"min": "0",
"max": "1",
"step": "0.05",
"value": settings.volume,
"onInput": (e) => {
settings.volume = e.target.valueAsNumber;
if (ctx.common.currentMedia)
ctx.common.currentMedia.volume = e.target.valueAsNumber;
}
}, null), createVNode("span", null, [createTextVNode(" "), Math.round(settings.volume * 100), createTextVNode("% ")])]), createVNode("label", null, [createTextVNode("\u663E\u793A\u89C6\u9891\u8FDB\u5EA6")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u56FA\u5B9A\u8FDB\u5EA6\u6761\uFF0C\u9632\u6B62\u8FDB\u5EA6\u6761\u6D88\u5931\u3002"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.showProgress,
"onChange": (e) => {
settings.showProgress = e.target.checked;
fixedVideoProgress(e.target.checked);
}
}, null)]
})]), createVNode("label", null, [createTextVNode("\u590D\u4E60\u6A21\u5F0F")]), createVNode("div", null, [createVNode(Tooltip, {
"title": "\u5C06\u64AD\u653E\u8FC7\u7684\u89C6\u9891\u518D\u64AD\u653E\u4E00\u904D\u3002"
}, {
default: () => [createVNode("input", {
"class": "input-switch",
"type": "checkbox",
"checked": settings.restudy,
"onChange": (e) => settings.restudy = e.target.checked
}, null)]
})])])]);
}
});
const WorkSettingPanel = defineComponent({
setup() {
const settings = useSettings().zhs.work;
return () => createVNode("div", {
"class": "ocs-setting-panel"
}, [createVNode("div", {
"class": "ocs-setting-items"
}, [createVNode(CommonWorkSettingPanel, {
"settings": settings
}, {
upload: createVNode(WorkerSetting, {
"label": "\u81EA\u52A8\u7B54\u9898",
"config": {
selected: settings.upload
},
"changeHandler": (e) => settings.upload = e.target.value
}, null)
})])]);
}
});
async function workOrExam(type = "work") {
const { period, timeout, retry, upload } = useSettings().zhs.work;
const { answererWrappers } = useSettings().common;
if (upload === "close" && type === "work") {
logger("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01");
message("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01\u8BF7\u5728\u8BBE\u7F6E\u5F00\u542F\u81EA\u52A8\u7B54\u9898\uFF01\u6216\u8005\u5FFD\u7565\u6B64\u8B66\u544A");
} else if (answererWrappers.length === 0) {
logger("warn", "\u9898\u5E93\u914D\u7F6E\u4E3A\u7A7A\uFF0C\u8BF7\u8BBE\u7F6E\u3002");
} else {
waitForRecognize("zhs");
const local = useStore("localStorage");
local.workResults = [];
const worker = new OCSWorker({
root: ".examPaper_subject",
elements: {
title: ".subject_describe,.smallStem_describe",
options: ".subject_node .nodeLab"
},
answerer: (elements, type2, ctx) => defaultAnswerWrapperHandler(answererWrappers, {
type: type2,
title: elements.title[0].innerText,
root: ctx.root
}),
work: {
handler(type2, answer, option) {
var _a;
if (type2 === "judgement" || type2 === "single" || type2 === "multiple") {
if (!((_a = option.querySelector("input")) == null ? void 0 : _a.checked)) {
option.click();
}
} else if (type2 === "completion" && answer.trim()) {
const text = option.querySelector("textarea");
if (text) {
text.value = answer;
}
}
}
},
async interceptor() {
await waitForCaptcha();
return true;
},
onElementSearched(elements) {
elements.title = elements.title.map(elementToRawObject);
},
onResult: (res) => {
var _a;
if (res.ctx) {
local.workResults.push(res);
}
console.log(res);
logger("info", "\u9898\u76EE\u5B8C\u6210\u7ED3\u679C : ", ((_a = res.result) == null ? void 0 : _a.finish) ? "\u5B8C\u6210" : "\u672A\u5B8C\u6210");
const { btn } = domSearch({ btn: "div.examPaper_box > div.switch-btn-box > button:nth-child(2)" });
btn == null ? void 0 : btn.click();
},
period: (period || 3) * 1e3,
timeout: (timeout || 30) * 1e3,
retry,
stopWhenError: false
});
const results = await worker.doWork();
logger("info", "\u505A\u9898\u5B8C\u6BD5", results);
if (type === "exam") {
logger("info", "\u4E3A\u4E86\u5B89\u5168\u8003\u8651\uFF0C\u8BF7\u81EA\u884C\u68C0\u67E5\u540E\u81EA\u884C\u70B9\u51FB\u63D0\u4EA4\uFF01");
} else {
await worker.uploadHandler({
uploadRate: upload,
results,
async callback(finishedRate, uploadable) {
logger("info", "\u5B8C\u6210\u7387 : ", finishedRate, " , ", uploadable ? "5\u79D2\u540E\u5C06\u81EA\u52A8\u63D0\u4EA4" : "5\u79D2\u540E\u5C06\u81EA\u52A8\u4FDD\u5B58");
await sleep(5e3);
const { saveBtn, uploadBtn } = domSearch({
saveBtn: ".btnStyleX:not(.btnStyleXSumit)",
uploadBtn: ".btnStyleXSumit"
});
if (uploadable) {
uploadBtn == null ? void 0 : uploadBtn.click();
} else {
saveBtn == null ? void 0 : saveBtn.click();
}
await sleep(2e3);
const { confirmBtn } = domSearch({
confirmBtn: "[role='dialog'] .el-button--primary"
});
confirmBtn == null ? void 0 : confirmBtn.click();
}
});
}
}
}
async function creditWork() {
const { period, timeout, retry, upload } = useSettings().zhs.work;
const { answererWrappers } = useSettings().common;
if (upload === "close") {
logger("warn", "\u81EA\u52A8\u7B54\u9898\u5DF2\u88AB\u5173\u95ED\uFF01");
} else if (answererWrappers.length === 0) {
logger("warn", "\u9898\u5E93\u914D\u7F6E\u4E3A\u7A7A\uFF0C\u8BF7\u8BBE\u7F6E\u3002");
} else {
logger("info", "\u5373\u5C06\u5F00\u59CB\u505A\u9898...");
const local = useStore("localStorage");
local.workResults = [];
const worker = new OCSWorker({
root: ".questionBox",
elements: {
title: ".questionContent",
options: ".optionUl label",
questionTit: ".questionTit"
},
answerer: (elements, type, ctx) => {
const title = StringUtils.nowrap(elements.title[0].innerText).trim();
if (title) {
return defaultAnswerWrapperHandler(answererWrappers, { type, title, root: ctx.root });
} else {
throw new Error("\u9898\u76EE\u4E3A\u7A7A\uFF0C\u8BF7\u67E5\u770B\u9898\u76EE\u662F\u5426\u4E3A\u7A7A\uFF0C\u6216\u8005\u5FFD\u7565\u6B64\u9898");
}
},
work: {
handler(type, answer, option, ctx) {
var _a;
if (type === "judgement" || type === "single" || type === "multiple") {
if (((_a = option.querySelector("input")) == null ? void 0 : _a.checked) === false) {
option.click();
}
} else if (type === "completion" && answer.trim()) {
const text = option.querySelector("textarea");
if (text) {
text.value = answer;
}
}
}
},
onElementSearched(elements) {
elements.title = elements.title.map(elementToRawObject);
},
onResult: (res) => {
var _a, _b, _c;
if (res.ctx) {
if (res.ctx.elements.title[0]) {
res.ctx.elements.title[0] = {
innerText: ((_a = res.ctx.elements.questionTit[0]) == null ? void 0 : _a.innerText) + ((_b = res.ctx.elements.title[0]) == null ? void 0 : _b.innerText)
};
}
local.workResults.push(res);
}
console.log(res);
logger("info", "\u9898\u76EE\u5B8C\u6210\u7ED3\u679C : ", ((_c = res.result) == null ? void 0 : _c.finish) ? "\u5B8C\u6210" : "\u672A\u5B8C\u6210");
},
period: (period || 3) * 1e3,
timeout: (timeout || 30) * 1e3,
retry,
stopWhenError: false
});
const getBtn = () => document.querySelector("span.Topicswitchingbtn:nth-child(2)");
let next = getBtn();
while (next) {
await worker.doWork();
await sleep((period || 3) * 1e3);
next = getBtn();
next == null ? void 0 : next.click();
await sleep((period || 3) * 1e3);
}
}
}
const ZHSScript = defineScript({
name: "\u77E5\u9053\u667A\u6167\u6811",
routes: [
{
name: "\u5171\u4EAB\u8BFE\u89C6\u9891\u811A\u672C",
url: "**zhihuishu.com/stuStudy**",
async onload() {
const settings = useSettings().zhs.video;
await sleep(5e3);
settings.creditStudy = false;
logger("info", "\u5F00\u59CB\u667A\u6167\u6811\u5171\u4EAB\u8BFE\u89C6\u9891\u5B66\u4E60");
await study();
}
},
{
name: "\u5171\u4EAB\u8BFE\u4F5C\u4E1A\u811A\u672C",
url: "**zhihuishu.com/stuExamWeb.html#/webExamList/dohomework**",
async onload() {
await sleep(5e3);
const { common } = useSettings();
if (common.answererWrappers.length === 0) {
logger("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01");
message("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01\u8BF7\u5728\u8BBE\u7F6E\u9762\u677F\u8BBE\u7F6E\u540E\u5237\u65B0\u91CD\u8BD5\uFF01");
} else {
await workOrExam("work");
}
}
},
{
name: "\u5171\u4EAB\u8BFE\u4F5C\u4E1A\u8003\u8BD5\u63D0\u9192\u811A\u672C",
url: ["**zhihuishu.com/stuExamWeb.html#/webExamList?**"],
onload: () => message("warn", "\u8003\u8BD5\u529F\u80FD\u5C5E\u4E8E\u6D4B\u8BD5\u9636\u6BB5\uFF0C\u53EF\u80FD\u65E0\u6CD5\u4F7F\u7528\uFF0C\u5927\u5BB6\u9884\u7559\u597D\u5176\u4ED6\u641C\u9898\u65B9\u5F0F\u3002")
},
{
name: "\u5171\u4EAB\u8BFE\u8003\u8BD5\u811A\u672C",
url: "**zhihuishu.com/stuExamWeb.html#/webExamList/doexamination*",
async onload() {
const { common } = useSettings();
await sleep(5e3);
if (common.answererWrappers.length === 0) {
logger("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01");
message("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01\u8BF7\u5728\u8BBE\u7F6E\u9762\u677F\u8BBE\u7F6E\u540E\u5237\u65B0\u91CD\u8BD5\uFF01");
} else {
await workOrExam("exam");
}
}
},
{
name: "\u5B66\u5206\u8BFE\u89C6\u9891\u811A\u672C",
url: "**zhihuishu.com/aidedteaching/sourceLearning/**",
async onload() {
const settings = useSettings().zhs.video;
await sleep(5e3);
settings.creditStudy = true;
logger("info", "\u5F00\u59CB\u667A\u6167\u6811\u5B66\u5206\u8BFE\u89C6\u9891\u5B66\u4E60");
await creditStudy();
}
},
{
name: "\u5B66\u5206\u8BFE\u4F5C\u4E1A\u811A\u672C",
url: "**zhihuishu.com/atHomeworkExam/stu/homeworkQ/exerciseList**",
async onload() {
const { common } = useSettings();
await sleep(5e3);
if (common.answererWrappers.length === 0) {
logger("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01");
message("error", "\u672A\u8BBE\u7F6E\u9898\u5E93\u914D\u7F6E\uFF01\u8BF7\u5728\u8BBE\u7F6E\u9762\u677F\u8BBE\u7F6E\u540E\u5237\u65B0\u91CD\u8BD5\uFF01");
} else {
await creditWork();
}
}
},
{
name: "\u6587\u5B57\u8BC6\u522B\u811A\u672C",
url: [
"**zhihuishu.com/stuExamWeb.html#/webExamList/dohomework**",
"**zhihuishu.com/stuExamWeb.html#/webExamList/doexamination*"
],
async onload() {
setTimeout(() => {
for (const div of Array.from(document.querySelectorAll(".subject_describe > div"))) {
div.__vue__.$el.innerHTML = div.__vue__._data.shadowDom.textContent;
}
}, 3e3);
}
},
{
name: "\u89C6\u9891\u5B88\u62A4\u811A\u672C",
url: ["**zhihuishu.com/stuStudy**"],
onload() {
const study2 = document.querySelector(".video-study").__vue__;
const empty = () => {
};
study2.checkout = empty;
study2.notTrustScript = empty;
study2.checkoutNotTrustScript = empty;
const _videoClick = study2.videoClick;
study2.videoClick = function(...args) {
const po = new PointerEvent('click')
const event = {isTrusted:true}
event.__proto__ = po
args[args.length - 1] =event;
return _videoClick.apply(study2, args);
};
}
}
],
panels: [
{
name: "\u667A\u6167\u6811\u52A9\u624B",
url: "https://www.zhihuishu.com/",
el: () => createNote("\u63D0\u793A\u60A8:", "\u70B9\u51FB\u767B\u5F55\u540E, \u8FDB\u5165\u4E2A\u4EBA\u9875\u9762\u624D\u80FD\u4F7F\u7528\u5176\u4ED6\u7684\u529F\u80FD\u54E6\u3002")
},
{
name: "\u667A\u6167\u6811\u52A9\u624B",
url: "https://onlineweb.zhihuishu.com/onlinestuh5",
el: () => createNote("\u63D0\u793A\u60A8:", "\u8BF7\u70B9\u51FB\u4EFB\u610F\u7684\u8BFE\u7A0B\u8FDB\u5165\u3002")
},
{
name: "\u5171\u4EAB\u8BFE\u89C6\u9891\u52A9\u624B",
url: "**zhihuishu.com/stuStudy**",
el: () => createNote("\u8FDB\u5165 \u89C6\u9891\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u89C6\u9891\u8BBE\u7F6E", "\u70B9\u51FB\u53F3\u4FA7 \u4F5C\u4E1A\u8003\u8BD5 \u53EF\u4EE5\u4F7F\u7528\u4F5C\u4E1A\u529F\u80FD", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB\u64AD\u653E\u89C6\u9891..."),
children: [
{
name: "\u5B66\u4E60\u8BBE\u7F6E",
el: () => StudySettingPanel
},
createTerminalPanel()
]
},
{
name: "\u5171\u4EAB\u8BFE\u4F5C\u4E1A\u52A9\u624B",
url: "**zhihuishu.com/stuExamWeb.html#/webExamList/dohomework**",
el: () => createNote("\u8FDB\u5165 \u4F5C\u4E1A\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u4F5C\u4E1A\u8BBE\u7F6E", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB\u4F5C\u4E1A..."),
children: [
{
name: "\u4F5C\u4E1A\u8BBE\u7F6E",
el: () => WorkSettingPanel
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u5171\u4EAB\u8BFE\u8003\u8BD5\u52A9\u624B",
url: "**zhihuishu.com/stuExamWeb.html#/webExamList/doexamination*",
el: () => createNote("\u8FDB\u5165 \u8003\u8BD5\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u8003\u8BD5\u8BBE\u7F6E", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB\u4F5C\u4E1A..."),
children: [
{
name: "\u8003\u8BD5\u8BBE\u7F6E",
el: () => ExamSettingPanel
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u5B66\u5206\u8BFE\u89C6\u9891\u52A9\u624B",
url: "**zhihuishu.com/aidedteaching/sourceLearning/**",
el: () => createNote("\u8FDB\u5165 \u89C6\u9891\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u89C6\u9891\u8BBE\u7F6E", "\u5B66\u5206\u8BFE\u9ED8\u8BA41\u500D\u901F, \u4E0D\u53EF\u4FEE\u6539", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB\u64AD\u653E\u89C6\u9891..."),
children: [
{
name: "\u5B66\u4E60\u8BBE\u7F6E",
el: () => StudySettingPanel
},
createTerminalPanel()
]
},
{
name: "\u5B66\u5206\u8BFE\u4F5C\u4E1A\u52A9\u624B",
url: "**zhihuishu.com/atHomeworkExam/stu/homeworkQ/exerciseList**",
el: () => createNote("\u8FDB\u5165 \u4F5C\u4E1A\u8BBE\u7F6E\u9762\u677F \u53EF\u4EE5\u8C03\u6574\u4F5C\u4E1A\u8BBE\u7F6E", "5\u79D2\u540E\u81EA\u52A8\u5F00\u59CB\u4F5C\u4E1A..."),
children: [
{
name: "\u4F5C\u4E1A\u8BBE\u7F6E",
el: () => CreditWorkSettingPanel
},
createTerminalPanel(),
createSearchResultPanel()
]
},
{
name: "\u4F5C\u4E1A\u8003\u8BD5\u52A9\u624B",
url: "**zhihuishu.com/stuExamWeb.html#/webExamList?**",
el: () => createNote("\u70B9\u51FB\u4EFB\u610F\u4F5C\u4E1A\u53EF\u4EE5\u4F7F\u7528\u4F5C\u4E1A\u529F\u80FD", "\u8003\u8BD5\u53EF\u80FD\u4E0D\u7A33\u5B9A\uFF0C\u8BF7\u5927\u5BB6\u9884\u7559\u5176\u4ED6\u641C\u9898\u65B9\u5F0F", "\u8003\u8BD5\u65F6\u5982\u679C\u6CA1\u6709\u663E\u793A\u8003\u8BD5\u8BBE\u7F6E\u9762\u677F\uFF0C\u8BF7\u5237\u65B0\u9875\u9762\u3002")
}
]
});
var domToImage = { exports: {} };
(function(module2) {
(function(global2) {
var util = newUtil();
var inliner = newInliner();
var fontFaces = newFontFaces();
var images = newImages();
var defaultOptions2 = {
imagePlaceholder: void 0,
cacheBust: false
};
var domtoimage2 = {
toSvg,
toPng,
toJpeg,
toBlob,
toPixelData,
impl: {
fontFaces,
images,
util,
inliner,
options: {}
}
};
module2.exports = domtoimage2;
function toSvg(node, options) {
options = options || {};
copyOptions(options);
return Promise.resolve(node).then(function(node2) {
return cloneNode(node2, options.filter, true);
}).then(embedFonts).then(inlineImages).then(applyOptions2).then(function(clone) {
return makeSvgDataUri(clone, options.width || util.width(node), options.height || util.height(node));
});
function applyOptions2(clone) {
if (options.bgcolor)
clone.style.backgroundColor = options.bgcolor;
if (options.width)
clone.style.width = options.width + "px";
if (options.height)
clone.style.height = options.height + "px";
if (options.style)
Object.keys(options.style).forEach(function(property) {
clone.style[property] = options.style[property];
});
return clone;
}
}
function toPixelData(node, options) {
return draw(node, options || {}).then(function(canvas) {
return canvas.getContext("2d").getImageData(0, 0, util.width(node), util.height(node)).data;
});
}
function toPng(node, options) {
return draw(node, options || {}).then(function(canvas) {
return canvas.toDataURL();
});
}
function toJpeg(node, options) {
options = options || {};
return draw(node, options).then(function(canvas) {
return canvas.toDataURL("image/jpeg", options.quality || 1);
});
}
function toBlob(node, options) {
return draw(node, options || {}).then(util.canvasToBlob);
}
function copyOptions(options) {
if (typeof options.imagePlaceholder === "undefined") {
domtoimage2.impl.options.imagePlaceholder = defaultOptions2.imagePlaceholder;
} else {
domtoimage2.impl.options.imagePlaceholder = options.imagePlaceholder;
}
if (typeof options.cacheBust === "undefined") {
domtoimage2.impl.options.cacheBust = defaultOptions2.cacheBust;
} else {
domtoimage2.impl.options.cacheBust = options.cacheBust;
}
}
function draw(domNode, options) {
return toSvg(domNode, options).then(util.makeImage).then(util.delay(100)).then(function(image) {
var canvas = newCanvas(domNode);
canvas.getContext("2d").drawImage(image, 0, 0);
return canvas;
});
function newCanvas(domNode2) {
var canvas = document.createElement("canvas");
canvas.width = options.width || util.width(domNode2);
canvas.height = options.height || util.height(domNode2);
if (options.bgcolor) {
var ctx = canvas.getContext("2d");
ctx.fillStyle = options.bgcolor;
ctx.fillRect(0, 0, canvas.width, canvas.height);
}
return canvas;
}
}
function cloneNode(node, filter, root2) {
if (!root2 && filter && !filter(node))
return Promise.resolve();
return Promise.resolve(node).then(makeNodeCopy).then(function(clone) {
return cloneChildren(node, clone, filter);
}).then(function(clone) {
return processClone(node, clone);
});
function makeNodeCopy(node2) {
if (node2 instanceof HTMLCanvasElement)
return util.makeImage(node2.toDataURL());
return node2.cloneNode(false);
}
function cloneChildren(original, clone, filter2) {
var children = original.childNodes;
if (children.length === 0)
return Promise.resolve(clone);
return cloneChildrenInOrder(clone, util.asArray(children), filter2).then(function() {
return clone;
});
function cloneChildrenInOrder(parent, children2, filter3) {
var done = Promise.resolve();
children2.forEach(function(child) {
done = done.then(function() {
return cloneNode(child, filter3);
}).then(function(childClone) {
if (childClone)
parent.appendChild(childClone);
});
});
return done;
}
}
function processClone(original, clone) {
if (!(clone instanceof Element))
return clone;
return Promise.resolve().then(cloneStyle).then(clonePseudoElements).then(copyUserInput).then(fixSvg).then(function() {
return clone;
});
function cloneStyle() {
copyStyle(window.getComputedStyle(original), clone.style);
function copyStyle(source, target) {
if (source.cssText)
target.cssText = source.cssText;
else
copyProperties(source, target);
function copyProperties(source2, target2) {
util.asArray(source2).forEach(function(name2) {
target2.setProperty(name2, source2.getPropertyValue(name2), source2.getPropertyPriority(name2));
});
}
}
}
function clonePseudoElements() {
[":before", ":after"].forEach(function(element) {
clonePseudoElement(element);
});
function clonePseudoElement(element) {
var style = window.getComputedStyle(original, element);
var content = style.getPropertyValue("content");
if (content === "" || content === "none")
return;
var className = util.uid();
clone.className = clone.className + " " + className;
var styleElement = document.createElement("style");
styleElement.appendChild(formatPseudoElementStyle(className, element, style));
clone.appendChild(styleElement);
function formatPseudoElementStyle(className2, element2, style2) {
var selector = "." + className2 + ":" + element2;
var cssText = style2.cssText ? formatCssText(style2) : formatCssProperties(style2);
return document.createTextNode(selector + "{" + cssText + "}");
function formatCssText(style3) {
var content2 = style3.getPropertyValue("content");
return style3.cssText + " content: " + content2 + ";";
}
function formatCssProperties(style3) {
return util.asArray(style3).map(formatProperty).join("; ") + ";";
function formatProperty(name2) {
return name2 + ": " + style3.getPropertyValue(name2) + (style3.getPropertyPriority(name2) ? " !important" : "");
}
}
}
}
}
function copyUserInput() {
if (original instanceof HTMLTextAreaElement)
clone.innerHTML = original.value;
if (original instanceof HTMLInputElement)
clone.setAttribute("value", original.value);
}
function fixSvg() {
if (!(clone instanceof SVGElement))
return;
clone.setAttribute("xmlns", "http://www.w3.org/2000/svg");
if (!(clone instanceof SVGRectElement))
return;
["width", "height"].forEach(function(attribute) {
var value = clone.getAttribute(attribute);
if (!value)
return;
clone.style.setProperty(attribute, value);
});
}
}
}
function embedFonts(node) {
return fontFaces.resolveAll().then(function(cssText) {
var styleNode = document.createElement("style");
node.appendChild(styleNode);
styleNode.appendChild(document.createTextNode(cssText));
return node;
});
}
function inlineImages(node) {
return images.inlineAll(node).then(function() {
return node;
});
}
function makeSvgDataUri(node, width, height) {
return Promise.resolve(node).then(function(node2) {
node2.setAttribute("xmlns", "http://www.w3.org/1999/xhtml");
return new XMLSerializer().serializeToString(node2);
}).then(util.escapeXhtml).then(function(xhtml) {
return '<foreignObject x="0" y="0" width="100%" height="100%">' + xhtml + "</foreignObject>";
}).then(function(foreignObject) {
return '<svg xmlns="http://www.w3.org/2000/svg" width="' + width + '" height="' + height + '">' + foreignObject + "</svg>";
}).then(function(svg) {
return "data:image/svg+xml;charset=utf-8," + svg;
});
}
function newUtil() {
return {
escape: escape2,
parseExtension,
mimeType,
dataAsUrl,
isDataUrl,
canvasToBlob,
resolveUrl: resolveUrl2,
getAndEncode,
uid: uid2(),
delay,
asArray,
escapeXhtml,
makeImage,
width,
height
};
function mimes() {
var WOFF = "application/font-woff";
var JPEG = "image/jpeg";
return {
"woff": WOFF,
"woff2": WOFF,
"ttf": "application/font-truetype",
"eot": "application/vnd.ms-fontobject",
"png": "image/png",
"jpg": JPEG,
"jpeg": JPEG,
"gif": "image/gif",
"tiff": "image/tiff",
"svg": "image/svg+xml"
};
}
function parseExtension(url) {
var match = /\.([^\.\/]*?)$/g.exec(url);
if (match)
return match[1];
else
return "";
}
function mimeType(url) {
var extension = parseExtension(url).toLowerCase();
return mimes()[extension] || "";
}
function isDataUrl(url) {
return url.search(/^(data:)/) !== -1;
}
function toBlob2(canvas) {
return new Promise(function(resolve2) {
var binaryString = window.atob(canvas.toDataURL().split(",")[1]);
var length = binaryString.length;
var binaryArray = new Uint8Array(length);
for (var i = 0; i < length; i++)
binaryArray[i] = binaryString.charCodeAt(i);
resolve2(new Blob([binaryArray], {
type: "image/png"
}));
});
}
function canvasToBlob(canvas) {
if (canvas.toBlob)
return new Promise(function(resolve2) {
canvas.toBlob(resolve2);
});
return toBlob2(canvas);
}
function resolveUrl2(url, baseUrl) {
var doc2 = document.implementation.createHTMLDocument();
var base = doc2.createElement("base");
doc2.head.appendChild(base);
var a = doc2.createElement("a");
doc2.body.appendChild(a);
base.href = baseUrl;
a.href = url;
return a.href;
}
function uid2() {
var index2 = 0;
return function() {
return "u" + fourRandomChars() + index2++;
function fourRandomChars() {
return ("0000" + (Math.random() * Math.pow(36, 4) << 0).toString(36)).slice(-4);
}
};
}
function makeImage(uri) {
return new Promise(function(resolve2, reject) {
var image = new Image();
image.onload = function() {
resolve2(image);
};
image.onerror = reject;
image.src = uri;
});
}
function getAndEncode(url) {
var TIMEOUT = 3e4;
if (domtoimage2.impl.options.cacheBust) {
url += (/\?/.test(url) ? "&" : "?") + new Date().getTime();
}
return new Promise(function(resolve2) {
var request2 = new XMLHttpRequest();
request2.onreadystatechange = done;
request2.ontimeout = timeout;
request2.responseType = "blob";
request2.timeout = TIMEOUT;
request2.open("GET", url, true);
request2.send();
var placeholder;
if (domtoimage2.impl.options.imagePlaceholder) {
var split = domtoimage2.impl.options.imagePlaceholder.split(/,/);
if (split && split[1]) {
placeholder = split[1];
}
}
function done() {
if (request2.readyState !== 4)
return;
if (request2.status !== 200) {
if (placeholder) {
resolve2(placeholder);
} else {
fail("cannot fetch resource: " + url + ", status: " + request2.status);
}
return;
}
var encoder = new FileReader();
encoder.onloadend = function() {
var content = encoder.result.split(/,/)[1];
resolve2(content);
};
encoder.readAsDataURL(request2.response);
}
function timeout() {
if (placeholder) {
resolve2(placeholder);
} else {
fail("timeout of " + TIMEOUT + "ms occured while fetching resource: " + url);
}
}
function fail(message2) {
console.error(message2);
resolve2("");
}
});
}
function dataAsUrl(content, type) {
return "data:" + type + ";base64," + content;
}
function escape2(string) {
return string.replace(/([.*+?^${}()|\[\]\/\\])/g, "\\$1");
}
function delay(ms) {
return function(arg) {
return new Promise(function(resolve2) {
setTimeout(function() {
resolve2(arg);
}, ms);
});
};
}
function asArray(arrayLike) {
var array = [];
var length = arrayLike.length;
for (var i = 0; i < length; i++)
array.push(arrayLike[i]);
return array;
}
function escapeXhtml(string) {
return string.replace(/#/g, "%23").replace(/\n/g, "%0A");
}
function width(node) {
var leftBorder = px(node, "border-left-width");
var rightBorder = px(node, "border-right-width");
return node.scrollWidth + leftBorder + rightBorder;
}
function height(node) {
var topBorder = px(node, "border-top-width");
var bottomBorder = px(node, "border-bottom-width");
return node.scrollHeight + topBorder + bottomBorder;
}
function px(node, styleProperty) {
var value = window.getComputedStyle(node).getPropertyValue(styleProperty);
return parseFloat(value.replace("px", ""));
}
}
function newInliner() {
var URL_REGEX = /url\(['"]?([^'"]+?)['"]?\)/g;
return {
inlineAll,
shouldProcess,
impl: {
readUrls,
inline
}
};
function shouldProcess(string) {
return string.search(URL_REGEX) !== -1;
}
function readUrls(string) {
var result = [];
var match;
while ((match = URL_REGEX.exec(string)) !== null) {
result.push(match[1]);
}
return result.filter(function(url) {
return !util.isDataUrl(url);
});
}
function inline(string, url, baseUrl, get2) {
return Promise.resolve(url).then(function(url2) {
return baseUrl ? util.resolveUrl(url2, baseUrl) : url2;
}).then(get2 || util.getAndEncode).then(function(data) {
return util.dataAsUrl(data, util.mimeType(url));
}).then(function(dataUrl) {
return string.replace(urlAsRegex(url), "$1" + dataUrl + "$3");
});
function urlAsRegex(url2) {
return new RegExp(`(url\\(['"]?)(` + util.escape(url2) + `)(['"]?\\))`, "g");
}
}
function inlineAll(string, baseUrl, get2) {
if (nothingToInline())
return Promise.resolve(string);
return Promise.resolve(string).then(readUrls).then(function(urls) {
var done = Promise.resolve(string);
urls.forEach(function(url) {
done = done.then(function(string2) {
return inline(string2, url, baseUrl, get2);
});
});
return done;
});
function nothingToInline() {
return !shouldProcess(string);
}
}
}
function newFontFaces() {
return {
resolveAll,
impl: {
readAll
}
};
function resolveAll() {
return readAll().then(function(webFonts) {
return Promise.all(webFonts.map(function(webFont) {
return webFont.resolve();
}));
}).then(function(cssStrings) {
return cssStrings.join("\n");
});
}
function readAll() {
return Promise.resolve(util.asArray(document.styleSheets)).then(getCssRules).then(selectWebFontRules).then(function(rules) {
return rules.map(newWebFont);
});
function selectWebFontRules(cssRules) {
return cssRules.filter(function(rule) {
return rule.type === CSSRule.FONT_FACE_RULE;
}).filter(function(rule) {
return inliner.shouldProcess(rule.style.getPropertyValue("src"));
});
}
function getCssRules(styleSheets) {
var cssRules = [];
styleSheets.forEach(function(sheet) {
try {
util.asArray(sheet.cssRules || []).forEach(cssRules.push.bind(cssRules));
} catch (e) {
console.log("Error while reading CSS rules from " + sheet.href, e.toString());
}
});
return cssRules;
}
function newWebFont(webFontRule) {
return {
resolve: function resolve2() {
var baseUrl = (webFontRule.parentStyleSheet || {}).href;
return inliner.inlineAll(webFontRule.cssText, baseUrl);
},
src: function() {
return webFontRule.style.getPropertyValue("src");
}
};
}
}
}
function newImages() {
return {
inlineAll,
impl: {
newImage
}
};
function newImage(element) {
return {
inline
};
function inline(get2) {
if (util.isDataUrl(element.src))
return Promise.resolve();
return Promise.resolve(element.src).then(get2 || util.getAndEncode).then(function(data) {
return util.dataAsUrl(data, util.mimeType(element.src));
}).then(function(dataUrl) {
return new Promise(function(resolve2, reject) {
element.onload = resolve2;
element.onerror = reject;
element.src = dataUrl;
});
});
}
}
function inlineAll(node) {
if (!(node instanceof Element))
return Promise.resolve(node);
return inlineBackground(node).then(function() {
if (node instanceof HTMLImageElement)
return newImage(node).inline();
else
return Promise.all(util.asArray(node.childNodes).map(function(child) {
return inlineAll(child);
}));
});
function inlineBackground(node2) {
var background = node2.style.getPropertyValue("background");
if (!background)
return Promise.resolve(node2);
return inliner.inlineAll(background).then(function(inlined) {
node2.style.setProperty("background", inlined, node2.style.getPropertyPriority("background"));
}).then(function() {
return node2;
});
}
}
}
})();
})(domToImage);
var domtoimage = domToImage.exports;
var runtime = { exports: {} };
(function(module2) {
var runtime2 = function(exports3) {
var Op = Object.prototype;
var hasOwn2 = Op.hasOwnProperty;
var undefined$1;
var $Symbol = typeof Symbol === "function" ? Symbol : {};
var iteratorSymbol = $Symbol.iterator || "@@iterator";
var asyncIteratorSymbol = $Symbol.asyncIterator || "@@asyncIterator";
var toStringTagSymbol = $Symbol.toStringTag || "@@toStringTag";
function define2(obj, key, value) {
Object.defineProperty(obj, key, {
value,
enumerable: true,
configurable: true,
writable: true
});
return obj[key];
}
try {
define2({}, "");
} catch (err) {
define2 = function(obj, key, value) {
return obj[key] = value;
};
}
function wrap(innerFn, outerFn, self2, tryLocsList) {
var protoGenerator = outerFn && outerFn.prototype instanceof Generator ? outerFn : Generator;
var generator = Object.create(protoGenerator.prototype);
var context = new Context(tryLocsList || []);
generator._invoke = makeInvokeMethod(innerFn, self2, context);
return generator;
}
exports3.wrap = wrap;
function tryCatch(fn, obj, arg) {
try {
return { type: "normal", arg: fn.call(obj, arg) };
} catch (err) {
return { type: "throw", arg: err };
}
}
var GenStateSuspendedStart = "suspendedStart";
var GenStateSuspendedYield = "suspendedYield";
var GenStateExecuting = "executing";
var GenStateCompleted = "completed";
var ContinueSentinel = {};
function Generator() {
}
function GeneratorFunction() {
}
function GeneratorFunctionPrototype() {
}
var IteratorPrototype = {};
define2(IteratorPrototype, iteratorSymbol, function() {
return this;
});
var getProto2 = Object.getPrototypeOf;
var NativeIteratorPrototype = getProto2 && getProto2(getProto2(values([])));
if (NativeIteratorPrototype && NativeIteratorPrototype !== Op && hasOwn2.call(NativeIteratorPrototype, iteratorSymbol)) {
IteratorPrototype = NativeIteratorPrototype;
}
var Gp = GeneratorFunctionPrototype.prototype = Generator.prototype = Object.create(IteratorPrototype);
GeneratorFunction.prototype = GeneratorFunctionPrototype;
define2(Gp, "constructor", GeneratorFunctionPrototype);
define2(GeneratorFunctionPrototype, "constructor", GeneratorFunction);
GeneratorFunction.displayName = define2(GeneratorFunctionPrototype, toStringTagSymbol, "GeneratorFunction");
function defineIteratorMethods(prototype) {
["next", "throw", "return"].forEach(function(method) {
define2(prototype, method, function(arg) {
return this._invoke(method, arg);
});
});
}
exports3.isGeneratorFunction = function(genFun) {
var ctor = typeof genFun === "function" && genFun.constructor;
return ctor ? ctor === GeneratorFunction || (ctor.displayName || ctor.name) === "GeneratorFunction" : false;
};
exports3.mark = function(genFun) {
if (Object.setPrototypeOf) {
Object.setPrototypeOf(genFun, GeneratorFunctionPrototype);
} else {
genFun.__proto__ = GeneratorFunctionPrototype;
define2(genFun, toStringTagSymbol, "GeneratorFunction");
}
genFun.prototype = Object.create(Gp);
return genFun;
};
exports3.awrap = function(arg) {
return { __await: arg };
};
function AsyncIterator(generator, PromiseImpl) {
function invoke(method, arg, resolve2, reject) {
var record = tryCatch(generator[method], generator, arg);
if (record.type === "throw") {
reject(record.arg);
} else {
var result = record.arg;
var value = result.value;
if (value && typeof value === "object" && hasOwn2.call(value, "__await")) {
return PromiseImpl.resolve(value.__await).then(function(value2) {
invoke("next", value2, resolve2, reject);
}, function(err) {
invoke("throw", err, resolve2, reject);
});
}
return PromiseImpl.resolve(value).then(function(unwrapped) {
result.value = unwrapped;
resolve2(result);
}, function(error) {
return invoke("throw", error, resolve2, reject);
});
}
}
var previousPromise;
function enqueue(method, arg) {
function callInvokeWithMethodAndArg() {
return new PromiseImpl(function(resolve2, reject) {
invoke(method, arg, resolve2, reject);
});
}
return previousPromise = previousPromise ? previousPromise.then(callInvokeWithMethodAndArg, callInvokeWithMethodAndArg) : callInvokeWithMethodAndArg();
}
this._invoke = enqueue;
}
defineIteratorMethods(AsyncIterator.prototype);
define2(AsyncIterator.prototype, asyncIteratorSymbol, function() {
return this;
});
exports3.AsyncIterator = AsyncIterator;
exports3.async = function(innerFn, outerFn, self2, tryLocsList, PromiseImpl) {
if (PromiseImpl === void 0)
PromiseImpl = Promise;
var iter = new AsyncIterator(wrap(innerFn, outerFn, self2, tryLocsList), PromiseImpl);
return exports3.isGeneratorFunction(outerFn) ? iter : iter.next().then(function(result) {
return result.done ? result.value : iter.next();
});
};
function makeInvokeMethod(innerFn, self2, context) {
var state = GenStateSuspendedStart;
return function invoke(method, arg) {
if (state === GenStateExecuting) {
throw new Error("Generator is already running");
}
if (state === GenStateCompleted) {
if (method === "throw") {
throw arg;
}
return doneResult();
}
context.method = method;
context.arg = arg;
while (true) {
var delegate = context.delegate;
if (delegate) {
var delegateResult = maybeInvokeDelegate(delegate, context);
if (delegateResult) {
if (delegateResult === ContinueSentinel)
continue;
return delegateResult;
}
}
if (context.method === "next") {
context.sent = context._sent = context.arg;
} else if (context.method === "throw") {
if (state === GenStateSuspendedStart) {
state = GenStateCompleted;
throw context.arg;
}
context.dispatchException(context.arg);
} else if (context.method === "return") {
context.abrupt("return", context.arg);
}
state = GenStateExecuting;
var record = tryCatch(innerFn, self2, context);
if (record.type === "normal") {
state = context.done ? GenStateCompleted : GenStateSuspendedYield;
if (record.arg === ContinueSentinel) {
continue;
}
return {
value: record.arg,
done: context.done
};
} else if (record.type === "throw") {
state = GenStateCompleted;
context.method = "throw";
context.arg = record.arg;
}
}
};
}
function maybeInvokeDelegate(delegate, context) {
var method = delegate.iterator[context.method];
if (method === undefined$1) {
context.delegate = null;
if (context.method === "throw") {
if (delegate.iterator["return"]) {
context.method = "return";
context.arg = undefined$1;
maybeInvokeDelegate(delegate, context);
if (context.method === "throw") {
return ContinueSentinel;
}
}
context.method = "throw";
context.arg = new TypeError("The iterator does not provide a 'throw' method");
}
return ContinueSentinel;
}
var record = tryCatch(method, delegate.iterator, context.arg);
if (record.type === "throw") {
context.method = "throw";
context.arg = record.arg;
context.delegate = null;
return ContinueSentinel;
}
var info = record.arg;
if (!info) {
context.method = "throw";
context.arg = new TypeError("iterator result is not an object");
context.delegate = null;
return ContinueSentinel;
}
if (info.done) {
context[delegate.resultName] = info.value;
context.next = delegate.nextLoc;
if (context.method !== "return") {
context.method = "next";
context.arg = undefined$1;
}
} else {
return info;
}
context.delegate = null;
return ContinueSentinel;
}
defineIteratorMethods(Gp);
define2(Gp, toStringTagSymbol, "Generator");
define2(Gp, iteratorSymbol, function() {
return this;
});
define2(Gp, "toString", function() {
return "[object Generator]";
});
function pushTryEntry(locs) {
var entry = { tryLoc: locs[0] };
if (1 in locs) {
entry.catchLoc = locs[1];
}
if (2 in locs) {
entry.finallyLoc = locs[2];
entry.afterLoc = locs[3];
}
this.tryEntries.push(entry);
}
function resetTryEntry(entry) {
var record = entry.completion || {};
record.type = "normal";
delete record.arg;
entry.completion = record;
}
function Context(tryLocsList) {
this.tryEntries = [{ tryLoc: "root" }];
tryLocsList.forEach(pushTryEntry, this);
this.reset(true);
}
exports3.keys = function(object) {
var keys2 = [];
for (var key in object) {
keys2.push(key);
}
keys2.reverse();
return function next() {
while (keys2.length) {
var key2 = keys2.pop();
if (key2 in object) {
next.value = key2;
next.done = false;
return next;
}
}
next.done = true;
return next;
};
};
function values(iterable) {
if (iterable) {
var iteratorMethod = iterable[iteratorSymbol];
if (iteratorMethod) {
return iteratorMethod.call(iterable);
}
if (typeof iterable.next === "function") {
return iterable;
}
if (!isNaN(iterable.length)) {
var i = -1, next = function next2() {
while (++i < iterable.length) {
if (hasOwn2.call(iterable, i)) {
next2.value = iterable[i];
next2.done = false;
return next2;
}
}
next2.value = undefined$1;
next2.done = true;
return next2;
};
return next.next = next;
}
}
return { next: doneResult };
}
exports3.values = values;
function doneResult() {
return { value: undefined$1, done: true };
}
Context.prototype = {
constructor: Context,
reset: function(skipTempReset) {
this.prev = 0;
this.next = 0;
this.sent = this._sent = undefined$1;
this.done = false;
this.delegate = null;
this.method = "next";
this.arg = undefined$1;
this.tryEntries.forEach(resetTryEntry);
if (!skipTempReset) {
for (var name2 in this) {
if (name2.charAt(0) === "t" && hasOwn2.call(this, name2) && !isNaN(+name2.slice(1))) {
this[name2] = undefined$1;
}
}
}
},
stop: function() {
this.done = true;
var rootEntry = this.tryEntries[0];
var rootRecord = rootEntry.completion;
if (rootRecord.type === "throw") {
throw rootRecord.arg;
}
return this.rval;
},
dispatchException: function(exception) {
if (this.done) {
throw exception;
}
var context = this;
function handle(loc, caught) {
record.type = "throw";
record.arg = exception;
context.next = loc;
if (caught) {
context.method = "next";
context.arg = undefined$1;
}
return !!caught;
}
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
var record = entry.completion;
if (entry.tryLoc === "root") {
return handle("end");
}
if (entry.tryLoc <= this.prev) {
var hasCatch = hasOwn2.call(entry, "catchLoc");
var hasFinally = hasOwn2.call(entry, "finallyLoc");
if (hasCatch && hasFinally) {
if (this.prev < entry.catchLoc) {
return handle(entry.catchLoc, true);
} else if (this.prev < entry.finallyLoc) {
return handle(entry.finallyLoc);
}
} else if (hasCatch) {
if (this.prev < entry.catchLoc) {
return handle(entry.catchLoc, true);
}
} else if (hasFinally) {
if (this.prev < entry.finallyLoc) {
return handle(entry.finallyLoc);
}
} else {
throw new Error("try statement without catch or finally");
}
}
}
},
abrupt: function(type, arg) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc <= this.prev && hasOwn2.call(entry, "finallyLoc") && this.prev < entry.finallyLoc) {
var finallyEntry = entry;
break;
}
}
if (finallyEntry && (type === "break" || type === "continue") && finallyEntry.tryLoc <= arg && arg <= finallyEntry.finallyLoc) {
finallyEntry = null;
}
var record = finallyEntry ? finallyEntry.completion : {};
record.type = type;
record.arg = arg;
if (finallyEntry) {
this.method = "next";
this.next = finallyEntry.finallyLoc;
return ContinueSentinel;
}
return this.complete(record);
},
complete: function(record, afterLoc) {
if (record.type === "throw") {
throw record.arg;
}
if (record.type === "break" || record.type === "continue") {
this.next = record.arg;
} else if (record.type === "return") {
this.rval = this.arg = record.arg;
this.method = "return";
this.next = "end";
} else if (record.type === "normal" && afterLoc) {
this.next = afterLoc;
}
return ContinueSentinel;
},
finish: function(finallyLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.finallyLoc === finallyLoc) {
this.complete(entry.completion, entry.afterLoc);
resetTryEntry(entry);
return ContinueSentinel;
}
}
},
"catch": function(tryLoc) {
for (var i = this.tryEntries.length - 1; i >= 0; --i) {
var entry = this.tryEntries[i];
if (entry.tryLoc === tryLoc) {
var record = entry.completion;
if (record.type === "throw") {
var thrown = record.arg;
resetTryEntry(entry);
}
return thrown;
}
}
throw new Error("illegal catch attempt");
},
delegateYield: function(iterable, resultName, nextLoc) {
this.delegate = {
iterator: values(iterable),
resultName,
nextLoc
};
if (this.method === "next") {
this.arg = undefined$1;
}
return ContinueSentinel;
}
};
return exports3;
}(module2.exports);
try {
regeneratorRuntime = runtime2;
} catch (accidentalStrictMode) {
if (typeof globalThis === "object") {
globalThis.regeneratorRuntime = runtime2;
} else {
Function("r", "regeneratorRuntime = r")(runtime2);
}
}
})(runtime);
var getId$3 = (prefix, cnt) => `${prefix}-${cnt}-${Math.random().toString(16).slice(3, 8)}`;
const getId$2 = getId$3;
let jobCounter = 0;
var createJob$2 = ({
id: _id,
action,
payload = {}
}) => {
let id = _id;
if (typeof id === "undefined") {
id = getId$2("Job", jobCounter);
jobCounter += 1;
}
return {
id,
action,
payload
};
};
var log$2 = {};
let logging = false;
log$2.logging = logging;
log$2.setLogging = (_logging) => {
logging = _logging;
};
log$2.log = (...args) => logging ? console.log.apply(globalThis, args) : null;
const createJob$1 = createJob$2;
const { log: log$1 } = log$2;
const getId$1 = getId$3;
let schedulerCounter = 0;
var createScheduler$1 = () => {
const id = getId$1("Scheduler", schedulerCounter);
const workers = {};
const runningWorkers = {};
let jobQueue = [];
schedulerCounter += 1;
const getQueueLen = () => jobQueue.length;
const getNumWorkers = () => Object.keys(workers).length;
const dequeue = () => {
if (jobQueue.length !== 0) {
const wIds = Object.keys(workers);
for (let i = 0; i < wIds.length; i += 1) {
if (typeof runningWorkers[wIds[i]] === "undefined") {
jobQueue[0](workers[wIds[i]]);
break;
}
}
}
};
const queue2 = (action, payload) => new Promise((resolve2, reject) => {
const job = createJob$1({ action, payload });
jobQueue.push(async (w) => {
jobQueue.shift();
runningWorkers[w.id] = job;
try {
resolve2(await w[action].apply(globalThis, [...payload, job.id]));
} catch (err) {
reject(err);
} finally {
delete runningWorkers[w.id];
dequeue();
}
});
log$1(`[${id}]: Add ${job.id} to JobQueue`);
log$1(`[${id}]: JobQueue length=${jobQueue.length}`);
dequeue();
});
const addWorker = (w) => {
workers[w.id] = w;
log$1(`[${id}]: Add ${w.id}`);
log$1(`[${id}]: Number of workers=${getNumWorkers()}`);
dequeue();
return w.id;
};
const addJob = async (action, ...payload) => {
if (getNumWorkers() === 0) {
throw Error(`[${id}]: You need to have at least one worker before adding jobs`);
}
return queue2(action, payload);
};
const terminate = async () => {
Object.keys(workers).forEach(async (wid) => {
await workers[wid].terminate();
});
jobQueue = [];
};
return {
addWorker,
addJob,
terminate,
getQueueLen,
getNumWorkers
};
};
function isElectron$1() {
if (typeof window !== "undefined" && typeof window.process === "object" && window.process.type === "renderer") {
return true;
}
if (typeof process !== "undefined" && typeof process.versions === "object" && !!process.versions.electron) {
return true;
}
if (typeof navigator === "object" && typeof navigator.userAgent === "string" && navigator.userAgent.indexOf("Electron") >= 0) {
return true;
}
return false;
}
var isElectron_1 = isElectron$1;
const isElectron = isElectron_1;
var getEnvironment = (key) => {
const env = {};
if (typeof WorkerGlobalScope !== "undefined") {
env.type = "webworker";
} else if (isElectron()) {
env.type = "electron";
} else if (typeof window === "object") {
env.type = "browser";
} else if (typeof process === "object" && typeof commonjsRequire === "function") {
env.type = "node";
}
if (typeof key === "undefined") {
return env;
}
return env[key];
};
var resolveUrl = { exports: {} };
(function(module2, exports3) {
void function(root2, factory) {
{
module2.exports = factory();
}
}(commonjsGlobal, function() {
function resolveUrl2() {
var numUrls = arguments.length;
if (numUrls === 0) {
throw new Error("resolveUrl requires at least one argument; got none.");
}
var base = document.createElement("base");
base.href = arguments[0];
if (numUrls === 1) {
return base.href;
}
var head = document.getElementsByTagName("head")[0];
head.insertBefore(base, head.firstChild);
var a = document.createElement("a");
var resolved;
for (var index2 = 1; index2 < numUrls; index2++) {
a.href = arguments[index2];
resolved = a.href;
base.href = resolved;
}
head.removeChild(base);
return resolved;
}
return resolveUrl2;
});
})(resolveUrl);
const isBrowser = getEnvironment("type") === "browser";
const resolveURL$2 = isBrowser ? resolveUrl.exports : (s) => s;
var resolvePaths$1 = (options) => {
const opts = __spreadValues({}, options);
["corePath", "workerPath", "langPath"].forEach((key) => {
if (typeof options[key] !== "undefined") {
opts[key] = resolveURL$2(opts[key]);
}
});
return opts;
};
var circularize$1 = (page) => {
const blocks = [];
const paragraphs = [];
const lines = [];
const words = [];
const symbols = [];
page.blocks.forEach((block) => {
block.paragraphs.forEach((paragraph) => {
paragraph.lines.forEach((line) => {
line.words.forEach((word) => {
word.symbols.forEach((sym) => {
symbols.push(__spreadProps(__spreadValues({}, sym), {
page,
block,
paragraph,
line,
word
}));
});
words.push(__spreadProps(__spreadValues({}, word), {
page,
block,
paragraph,
line
}));
});
lines.push(__spreadProps(__spreadValues({}, line), {
page,
block,
paragraph
}));
});
paragraphs.push(__spreadProps(__spreadValues({}, paragraph), {
page,
block
}));
});
blocks.push(__spreadProps(__spreadValues({}, block), {
page
}));
});
return __spreadProps(__spreadValues({}, page), {
blocks,
paragraphs,
lines,
words,
symbols
});
};
var OEM$2 = {
TESSERACT_ONLY: 0,
LSTM_ONLY: 1,
TESSERACT_LSTM_COMBINED: 2,
DEFAULT: 3
};
const OEM$1 = OEM$2;
var config = {
defaultOEM: OEM$1.DEFAULT
};
const name = "tesseract.js";
const version$1 = "2.1.5";
const description = "Pure Javascript Multilingual OCR";
const main = "src/index.js";
const types = "src/index.d.ts";
const unpkg = "dist/tesseract.min.js";
const jsdelivr = "dist/tesseract.min.js";
const scripts = {
start: "node scripts/server.js",
build: "rimraf dist && webpack --config scripts/webpack.config.prod.js",
"profile:tesseract": "webpack-bundle-analyzer dist/tesseract-stats.json",
"profile:worker": "webpack-bundle-analyzer dist/worker-stats.json",
prepublishOnly: "npm run build",
wait: "rimraf dist && wait-on http://localhost:3000/dist/tesseract.dev.js",
test: "npm-run-all -p -r start test:all",
"test:all": "npm-run-all wait test:browser:* test:node:all",
"test:node": "nyc mocha --exit --bail --require ./scripts/test-helper.js",
"test:node:all": "npm run test:node -- ./tests/*.test.js",
"test:browser-tpl": "mocha-headless-chrome -a incognito -a no-sandbox -a disable-setuid-sandbox -a disable-logging -t 300000",
"test:browser:detect": "npm run test:browser-tpl -- -f ./tests/detect.test.html",
"test:browser:recognize": "npm run test:browser-tpl -- -f ./tests/recognize.test.html",
"test:browser:scheduler": "npm run test:browser-tpl -- -f ./tests/scheduler.test.html",
"test:browser:FS": "npm run test:browser-tpl -- -f ./tests/FS.test.html",
lint: "eslint src",
"lint:fix": "eslint --fix src",
postinstall: "opencollective-postinstall || true"
};
const browser$1 = {
"./src/worker/node/index.js": "./src/worker/browser/index.js"
};
const author = "";
const contributors = [
"jeromewu"
];
const license = "Apache-2.0";
const devDependencies = {
"@babel/core": "^7.7.7",
"@babel/preset-env": "^7.7.7",
acorn: "^6.4.0",
"babel-loader": "^8.1.0",
cors: "^2.8.5",
eslint: "^7.2.0",
"eslint-config-airbnb-base": "^14.2.0",
"eslint-plugin-import": "^2.22.1",
"expect.js": "^0.3.1",
express: "^4.17.1",
mocha: "^8.1.3",
"mocha-headless-chrome": "^2.0.3",
"npm-run-all": "^4.1.5",
nyc: "^15.1.0",
rimraf: "^2.7.1",
"wait-on": "^3.3.0",
webpack: "^4.44.2",
"webpack-bundle-analyzer": "^3.6.0",
"webpack-cli": "^3.3.12",
"webpack-dev-middleware": "^3.7.2"
};
const dependencies$1 = {
"blueimp-load-image": "^3.0.0",
"bmp-js": "^0.1.0",
"file-type": "^12.4.1",
"idb-keyval": "^3.2.0",
"is-electron": "^2.2.0",
"is-url": "^1.2.4",
"jpeg-autorotate": "^7.1.1",
"node-fetch": "^2.6.0",
"opencollective-postinstall": "^2.0.2",
"regenerator-runtime": "^0.13.3",
"resolve-url": "^0.2.1",
"tesseract.js-core": "^2.2.0",
zlibjs: "^0.3.1"
};
const repository = {
type: "git",
url: "https://github.com/naptha/tesseract.js.git"
};
const bugs = {
url: "https://github.com/naptha/tesseract.js/issues"
};
const homepage = "https://github.com/naptha/tesseract.js";
const collective = {
type: "opencollective",
url: "https://opencollective.com/tesseractjs"
};
var require$1 = {
name,
version: version$1,
description,
main,
types,
unpkg,
jsdelivr,
scripts,
browser: browser$1,
author,
contributors,
license,
devDependencies,
dependencies: dependencies$1,
repository,
bugs,
homepage,
collective
};
var defaultOptions$3 = {
langPath: "https://tessdata.projectnaptha.com/4.0.0",
workerBlobURL: true,
logger: () => {
}
};
const resolveURL$1 = resolveUrl.exports;
const { version, dependencies } = require$1;
const defaultOptions$2 = defaultOptions$3;
var defaultOptions_1 = __spreadProps(__spreadValues({}, defaultOptions$2), {
workerPath: typeof process !== "undefined" && {}.TESS_ENV === "development" ? resolveURL$1(`/dist/worker.dev.js?nocache=${Math.random().toString(36).slice(3)}`) : `https://unpkg.com/tesseract.js@v${version}/dist/worker.min.js`,
corePath: `https://unpkg.com/tesseract.js-core@v${dependencies["tesseract.js-core"].substring(1)}/tesseract-core.${typeof WebAssembly === "object" ? "wasm" : "asm"}.js`
});
var spawnWorker$2 = ({ workerPath, workerBlobURL }) => {
let worker;
if (Blob && URL && workerBlobURL) {
const blob = new Blob([`importScripts("${workerPath}");`], {
type: "application/javascript"
});
worker = new Worker(URL.createObjectURL(blob));
} else {
worker = new Worker(workerPath);
}
return worker;
};
var terminateWorker$2 = (worker) => {
worker.terminate();
};
var onMessage$2 = (worker, handler) => {
worker.onmessage = ({ data }) => {
handler(data);
};
};
var send$2 = async (worker, packet) => {
worker.postMessage(packet);
};
var loadImage$3 = { exports: {} };
(function(module2) {
(function($) {
function loadImage2(file, callback, options) {
var img = document.createElement("img");
var url;
function fetchBlobCallback(blob, err) {
if (err)
console.log(err);
if (blob && loadImage2.isInstanceOf("Blob", blob)) {
file = blob;
url = loadImage2.createObjectURL(file);
} else {
url = file;
if (options && options.crossOrigin) {
img.crossOrigin = options.crossOrigin;
}
}
img.src = url;
}
img.onerror = function(event) {
return loadImage2.onerror(img, event, file, url, callback, options);
};
img.onload = function(event) {
return loadImage2.onload(img, event, file, url, callback, options);
};
if (typeof file === "string") {
if (loadImage2.hasMetaOption(options)) {
loadImage2.fetchBlob(file, fetchBlobCallback, options);
} else {
fetchBlobCallback();
}
return img;
} else if (loadImage2.isInstanceOf("Blob", file) || loadImage2.isInstanceOf("File", file)) {
url = loadImage2.createObjectURL(file);
if (url) {
img.src = url;
return img;
}
return loadImage2.readFile(file, function(e) {
var target = e.target;
if (target && target.result) {
img.src = target.result;
} else if (callback) {
callback(e);
}
});
}
}
var urlAPI = $.createObjectURL && $ || $.URL && URL.revokeObjectURL && URL || $.webkitURL && webkitURL;
function revokeHelper(url, options) {
if (url && url.slice(0, 5) === "blob:" && !(options && options.noRevoke)) {
loadImage2.revokeObjectURL(url);
}
}
loadImage2.hasMetaOption = function(options) {
return options && options.meta;
};
loadImage2.fetchBlob = function(url, callback) {
callback();
};
loadImage2.isInstanceOf = function(type, obj) {
return Object.prototype.toString.call(obj) === "[object " + type + "]";
};
loadImage2.transform = function(img, options, callback, file, data) {
callback(img, data);
};
loadImage2.onerror = function(img, event, file, url, callback, options) {
revokeHelper(url, options);
if (callback) {
callback.call(img, event);
}
};
loadImage2.onload = function(img, event, file, url, callback, options) {
revokeHelper(url, options);
if (callback) {
loadImage2.transform(img, options, callback, file, {
originalWidth: img.naturalWidth || img.width,
originalHeight: img.naturalHeight || img.height
});
}
};
loadImage2.createObjectURL = function(file) {
return urlAPI ? urlAPI.createObjectURL(file) : false;
};
loadImage2.revokeObjectURL = function(url) {
return urlAPI ? urlAPI.revokeObjectURL(url) : false;
};
loadImage2.readFile = function(file, callback, method) {
if ($.FileReader) {
var fileReader = new FileReader();
fileReader.onload = fileReader.onerror = callback;
method = method || "readAsDataURL";
if (fileReader[method]) {
fileReader[method](file);
return fileReader;
}
}
return false;
};
if (module2.exports) {
module2.exports = loadImage2;
} else {
$.loadImage = loadImage2;
}
})(typeof window !== "undefined" && window || commonjsGlobal);
})(loadImage$3);
var loadImageScale = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
var originalTransform = loadImage2.transform;
loadImage2.transform = function(img, options, callback, file, data) {
originalTransform.call(loadImage2, loadImage2.scale(img, options, data), options, callback, file, data);
};
loadImage2.transformCoordinates = function() {
};
loadImage2.getTransformedOptions = function(img, options) {
var aspectRatio = options.aspectRatio;
var newOptions;
var i;
var width;
var height;
if (!aspectRatio) {
return options;
}
newOptions = {};
for (i in options) {
if (Object.prototype.hasOwnProperty.call(options, i)) {
newOptions[i] = options[i];
}
}
newOptions.crop = true;
width = img.naturalWidth || img.width;
height = img.naturalHeight || img.height;
if (width / height > aspectRatio) {
newOptions.maxWidth = height * aspectRatio;
newOptions.maxHeight = height;
} else {
newOptions.maxWidth = width;
newOptions.maxHeight = width / aspectRatio;
}
return newOptions;
};
loadImage2.renderImageToCanvas = function(canvas, img, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight, options) {
var ctx = canvas.getContext("2d");
if (options.imageSmoothingEnabled === false) {
ctx.imageSmoothingEnabled = false;
} else if (options.imageSmoothingQuality) {
ctx.imageSmoothingQuality = options.imageSmoothingQuality;
}
ctx.drawImage(img, sourceX, sourceY, sourceWidth, sourceHeight, destX, destY, destWidth, destHeight);
return canvas;
};
loadImage2.hasCanvasOption = function(options) {
return options.canvas || options.crop || !!options.aspectRatio;
};
loadImage2.scale = function(img, options, data) {
options = options || {};
var canvas = document.createElement("canvas");
var useCanvas = img.getContext || loadImage2.hasCanvasOption(options) && canvas.getContext;
var width = img.naturalWidth || img.width;
var height = img.naturalHeight || img.height;
var destWidth = width;
var destHeight = height;
var maxWidth;
var maxHeight;
var minWidth;
var minHeight;
var sourceWidth;
var sourceHeight;
var sourceX;
var sourceY;
var pixelRatio;
var downsamplingRatio;
var tmp;
function scaleUp() {
var scale = Math.max((minWidth || destWidth) / destWidth, (minHeight || destHeight) / destHeight);
if (scale > 1) {
destWidth *= scale;
destHeight *= scale;
}
}
function scaleDown() {
var scale = Math.min((maxWidth || destWidth) / destWidth, (maxHeight || destHeight) / destHeight);
if (scale < 1) {
destWidth *= scale;
destHeight *= scale;
}
}
if (useCanvas) {
options = loadImage2.getTransformedOptions(img, options, data);
sourceX = options.left || 0;
sourceY = options.top || 0;
if (options.sourceWidth) {
sourceWidth = options.sourceWidth;
if (options.right !== void 0 && options.left === void 0) {
sourceX = width - sourceWidth - options.right;
}
} else {
sourceWidth = width - sourceX - (options.right || 0);
}
if (options.sourceHeight) {
sourceHeight = options.sourceHeight;
if (options.bottom !== void 0 && options.top === void 0) {
sourceY = height - sourceHeight - options.bottom;
}
} else {
sourceHeight = height - sourceY - (options.bottom || 0);
}
destWidth = sourceWidth;
destHeight = sourceHeight;
}
maxWidth = options.maxWidth;
maxHeight = options.maxHeight;
minWidth = options.minWidth;
minHeight = options.minHeight;
if (useCanvas && maxWidth && maxHeight && options.crop) {
destWidth = maxWidth;
destHeight = maxHeight;
tmp = sourceWidth / sourceHeight - maxWidth / maxHeight;
if (tmp < 0) {
sourceHeight = maxHeight * sourceWidth / maxWidth;
if (options.top === void 0 && options.bottom === void 0) {
sourceY = (height - sourceHeight) / 2;
}
} else if (tmp > 0) {
sourceWidth = maxWidth * sourceHeight / maxHeight;
if (options.left === void 0 && options.right === void 0) {
sourceX = (width - sourceWidth) / 2;
}
}
} else {
if (options.contain || options.cover) {
minWidth = maxWidth = maxWidth || minWidth;
minHeight = maxHeight = maxHeight || minHeight;
}
if (options.cover) {
scaleDown();
scaleUp();
} else {
scaleUp();
scaleDown();
}
}
if (useCanvas) {
pixelRatio = options.pixelRatio;
if (pixelRatio > 1) {
canvas.style.width = destWidth + "px";
canvas.style.height = destHeight + "px";
destWidth *= pixelRatio;
destHeight *= pixelRatio;
canvas.getContext("2d").scale(pixelRatio, pixelRatio);
}
downsamplingRatio = options.downsamplingRatio;
if (downsamplingRatio > 0 && downsamplingRatio < 1 && destWidth < sourceWidth && destHeight < sourceHeight) {
while (sourceWidth * downsamplingRatio > destWidth) {
canvas.width = sourceWidth * downsamplingRatio;
canvas.height = sourceHeight * downsamplingRatio;
loadImage2.renderImageToCanvas(canvas, img, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, canvas.width, canvas.height, options);
sourceX = 0;
sourceY = 0;
sourceWidth = canvas.width;
sourceHeight = canvas.height;
img = document.createElement("canvas");
img.width = sourceWidth;
img.height = sourceHeight;
loadImage2.renderImageToCanvas(img, canvas, 0, 0, sourceWidth, sourceHeight, 0, 0, sourceWidth, sourceHeight, options);
}
}
canvas.width = destWidth;
canvas.height = destHeight;
loadImage2.transformCoordinates(canvas, options);
return loadImage2.renderImageToCanvas(canvas, img, sourceX, sourceY, sourceWidth, sourceHeight, 0, 0, destWidth, destHeight, options);
}
img.width = destWidth;
img.height = destHeight;
return img;
};
});
})(loadImageScale);
var loadImageMeta = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
var hasblobSlice = typeof Blob !== "undefined" && (Blob.prototype.slice || Blob.prototype.webkitSlice || Blob.prototype.mozSlice);
loadImage2.blobSlice = hasblobSlice && function() {
var slice = this.slice || this.webkitSlice || this.mozSlice;
return slice.apply(this, arguments);
};
loadImage2.metaDataParsers = {
jpeg: {
65505: [],
65517: []
}
};
loadImage2.parseMetaData = function(file, callback, options, data) {
options = options || {};
data = data || {};
var that = this;
var maxMetaDataSize = options.maxMetaDataSize || 262144;
var noMetaData = !(typeof DataView !== "undefined" && file && file.size >= 12 && file.type === "image/jpeg" && loadImage2.blobSlice);
if (noMetaData || !loadImage2.readFile(loadImage2.blobSlice.call(file, 0, maxMetaDataSize), function(e) {
if (e.target.error) {
console.log(e.target.error);
callback(data);
return;
}
var buffer = e.target.result;
var dataView = new DataView(buffer);
var offset = 2;
var maxOffset = dataView.byteLength - 4;
var headLength = offset;
var markerBytes;
var markerLength;
var parsers;
var i;
if (dataView.getUint16(0) === 65496) {
while (offset < maxOffset) {
markerBytes = dataView.getUint16(offset);
if (markerBytes >= 65504 && markerBytes <= 65519 || markerBytes === 65534) {
markerLength = dataView.getUint16(offset + 2) + 2;
if (offset + markerLength > dataView.byteLength) {
console.log("Invalid meta data: Invalid segment size.");
break;
}
parsers = loadImage2.metaDataParsers.jpeg[markerBytes];
if (parsers && !options.disableMetaDataParsers) {
for (i = 0; i < parsers.length; i += 1) {
parsers[i].call(that, dataView, offset, markerLength, data, options);
}
}
offset += markerLength;
headLength = offset;
} else {
break;
}
}
if (!options.disableImageHead && headLength > 6) {
if (buffer.slice) {
data.imageHead = buffer.slice(0, headLength);
} else {
data.imageHead = new Uint8Array(buffer).subarray(0, headLength);
}
}
} else {
console.log("Invalid JPEG file: Missing JPEG marker.");
}
callback(data);
}, "readAsArrayBuffer")) {
callback(data);
}
};
loadImage2.replaceHead = function(blob, head, callback) {
loadImage2.parseMetaData(blob, function(data) {
callback(new Blob([head, loadImage2.blobSlice.call(blob, data.imageHead.byteLength)], { type: "image/jpeg" }));
}, { maxMetaDataSize: 256, disableMetaDataParsers: true });
};
var originalTransform = loadImage2.transform;
loadImage2.transform = function(img, options, callback, file, data) {
if (loadImage2.hasMetaOption(options)) {
loadImage2.parseMetaData(file, function(data2) {
originalTransform.call(loadImage2, img, options, callback, file, data2);
}, options, data);
} else {
originalTransform.apply(loadImage2, arguments);
}
};
});
})(loadImageMeta);
var loadImageFetch = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
if (typeof fetch !== "undefined" && typeof Request !== "undefined") {
loadImage2.fetchBlob = function(url, callback, options) {
fetch(new Request(url, options)).then(function(response) {
return response.blob();
}).then(callback).catch(function(err) {
callback(null, err);
});
};
} else if (typeof XMLHttpRequest !== "undefined" && typeof ProgressEvent !== "undefined") {
loadImage2.fetchBlob = function(url, callback, options) {
options = options || {};
var req = new XMLHttpRequest();
req.open(options.method || "GET", url);
if (options.headers) {
Object.keys(options.headers).forEach(function(key) {
req.setRequestHeader(key, options.headers[key]);
});
}
req.withCredentials = options.credentials === "include";
req.responseType = "blob";
req.onload = function() {
callback(req.response);
};
req.onerror = req.onabort = req.ontimeout = function(err) {
callback(null, err);
};
req.send(options.body);
};
}
});
})(loadImageFetch);
var loadImageExif = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports, loadImageMeta.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
function ExifMap(tagCode) {
if (tagCode) {
Object.defineProperty(this, "map", {
value: this.privateIFDs[tagCode].map
});
Object.defineProperty(this, "tags", {
value: this.tags && this.tags[tagCode] || {}
});
}
}
ExifMap.prototype.map = {
Orientation: 274,
Thumbnail: 513,
Exif: 34665,
GPSInfo: 34853,
Interoperability: 40965
};
ExifMap.prototype.privateIFDs = {
34665: { name: "Exif", map: {} },
34853: { name: "GPSInfo", map: {} },
40965: { name: "Interoperability", map: {} }
};
ExifMap.prototype.get = function(id) {
return this[id] || this[this.map[id]];
};
function getExifThumbnail(dataView, offset, length) {
if (!length || offset + length > dataView.byteLength) {
console.log("Invalid Exif data: Invalid thumbnail data.");
return;
}
return new Blob([dataView.buffer.slice(offset, offset + length)], {
type: "image/jpeg"
});
}
var ExifTagTypes = {
1: {
getValue: function(dataView, dataOffset) {
return dataView.getUint8(dataOffset);
},
size: 1
},
2: {
getValue: function(dataView, dataOffset) {
return String.fromCharCode(dataView.getUint8(dataOffset));
},
size: 1,
ascii: true
},
3: {
getValue: function(dataView, dataOffset, littleEndian) {
return dataView.getUint16(dataOffset, littleEndian);
},
size: 2
},
4: {
getValue: function(dataView, dataOffset, littleEndian) {
return dataView.getUint32(dataOffset, littleEndian);
},
size: 4
},
5: {
getValue: function(dataView, dataOffset, littleEndian) {
return dataView.getUint32(dataOffset, littleEndian) / dataView.getUint32(dataOffset + 4, littleEndian);
},
size: 8
},
9: {
getValue: function(dataView, dataOffset, littleEndian) {
return dataView.getInt32(dataOffset, littleEndian);
},
size: 4
},
10: {
getValue: function(dataView, dataOffset, littleEndian) {
return dataView.getInt32(dataOffset, littleEndian) / dataView.getInt32(dataOffset + 4, littleEndian);
},
size: 8
}
};
ExifTagTypes[7] = ExifTagTypes[1];
function getExifValue(dataView, tiffOffset, offset, type, length, littleEndian) {
var tagType = ExifTagTypes[type];
var tagSize;
var dataOffset;
var values;
var i;
var str;
var c;
if (!tagType) {
console.log("Invalid Exif data: Invalid tag type.");
return;
}
tagSize = tagType.size * length;
dataOffset = tagSize > 4 ? tiffOffset + dataView.getUint32(offset + 8, littleEndian) : offset + 8;
if (dataOffset + tagSize > dataView.byteLength) {
console.log("Invalid Exif data: Invalid data offset.");
return;
}
if (length === 1) {
return tagType.getValue(dataView, dataOffset, littleEndian);
}
values = [];
for (i = 0; i < length; i += 1) {
values[i] = tagType.getValue(dataView, dataOffset + i * tagType.size, littleEndian);
}
if (tagType.ascii) {
str = "";
for (i = 0; i < values.length; i += 1) {
c = values[i];
if (c === "\0") {
break;
}
str += c;
}
return str;
}
return values;
}
function parseExifTags(dataView, tiffOffset, dirOffset, littleEndian, tags, tagOffsets, includeTags, excludeTags) {
var tagsNumber, dirEndOffset, i, tagOffset, tagNumber, tagValue;
if (dirOffset + 6 > dataView.byteLength) {
console.log("Invalid Exif data: Invalid directory offset.");
return;
}
tagsNumber = dataView.getUint16(dirOffset, littleEndian);
dirEndOffset = dirOffset + 2 + 12 * tagsNumber;
if (dirEndOffset + 4 > dataView.byteLength) {
console.log("Invalid Exif data: Invalid directory size.");
return;
}
for (i = 0; i < tagsNumber; i += 1) {
tagOffset = dirOffset + 2 + 12 * i;
tagNumber = dataView.getUint16(tagOffset, littleEndian);
if (includeTags && !includeTags[tagNumber])
continue;
if (excludeTags && excludeTags[tagNumber] === true)
continue;
tagValue = getExifValue(dataView, tiffOffset, tagOffset, dataView.getUint16(tagOffset + 2, littleEndian), dataView.getUint32(tagOffset + 4, littleEndian), littleEndian);
tags[tagNumber] = tagValue;
if (tagOffsets) {
tagOffsets[tagNumber] = tagOffset;
}
}
return dataView.getUint32(dirEndOffset, littleEndian);
}
function parseExifPrivateIFD(data, tagCode, dataView, tiffOffset, littleEndian, includeTags, excludeTags) {
var dirOffset = data.exif[tagCode];
if (dirOffset) {
data.exif[tagCode] = new ExifMap(tagCode);
if (data.exifOffsets) {
data.exifOffsets[tagCode] = new ExifMap(tagCode);
}
parseExifTags(dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data.exif[tagCode], data.exifOffsets && data.exifOffsets[tagCode], includeTags && includeTags[tagCode], excludeTags && excludeTags[tagCode]);
}
}
loadImage2.parseExifData = function(dataView, offset, length, data, options) {
if (options.disableExif) {
return;
}
var includeTags = options.includeExifTags;
var excludeTags = options.excludeExifTags || {
34665: {
37500: true
}
};
var tiffOffset = offset + 10;
var littleEndian;
var dirOffset;
var privateIFDs;
if (dataView.getUint32(offset + 4) !== 1165519206) {
return;
}
if (tiffOffset + 8 > dataView.byteLength) {
console.log("Invalid Exif data: Invalid segment size.");
return;
}
if (dataView.getUint16(offset + 8) !== 0) {
console.log("Invalid Exif data: Missing byte alignment offset.");
return;
}
switch (dataView.getUint16(tiffOffset)) {
case 18761:
littleEndian = true;
break;
case 19789:
littleEndian = false;
break;
default:
console.log("Invalid Exif data: Invalid byte alignment marker.");
return;
}
if (dataView.getUint16(tiffOffset + 2, littleEndian) !== 42) {
console.log("Invalid Exif data: Missing TIFF marker.");
return;
}
dirOffset = dataView.getUint32(tiffOffset + 4, littleEndian);
data.exif = new ExifMap();
if (!options.disableExifOffsets) {
data.exifOffsets = new ExifMap();
data.exifTiffOffset = tiffOffset;
data.exifLittleEndian = littleEndian;
}
dirOffset = parseExifTags(dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data.exif, data.exifOffsets, includeTags, excludeTags);
if (dirOffset && !options.disableExifThumbnail) {
dirOffset = parseExifTags(dataView, tiffOffset, tiffOffset + dirOffset, littleEndian, data.exif, data.exifOffsets, includeTags, excludeTags);
if (data.exif[513] && data.exif[514]) {
data.exif[513] = getExifThumbnail(dataView, tiffOffset + data.exif[513], data.exif[514]);
}
}
privateIFDs = Object.keys(data.exif.privateIFDs);
privateIFDs.forEach(function(tagCode) {
parseExifPrivateIFD(data, tagCode, dataView, tiffOffset, littleEndian, includeTags, excludeTags);
});
};
loadImage2.metaDataParsers.jpeg[65505].push(loadImage2.parseExifData);
loadImage2.exifWriters = {
274: function(buffer, data, value) {
var view = new DataView(buffer, data.exifOffsets[274] + 8, 2);
view.setUint16(0, value, data.exifLittleEndian);
return buffer;
}
};
loadImage2.writeExifData = function(buffer, data, id, value) {
loadImage2.exifWriters[data.exif.map[id]](buffer, data, value);
};
loadImage2.ExifMap = ExifMap;
});
})(loadImageExif);
var loadImageExifMap = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports, loadImageExif.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
var ExifMapProto = loadImage2.ExifMap.prototype;
ExifMapProto.tags = {
256: "ImageWidth",
257: "ImageHeight",
258: "BitsPerSample",
259: "Compression",
262: "PhotometricInterpretation",
274: "Orientation",
277: "SamplesPerPixel",
284: "PlanarConfiguration",
530: "YCbCrSubSampling",
531: "YCbCrPositioning",
282: "XResolution",
283: "YResolution",
296: "ResolutionUnit",
273: "StripOffsets",
278: "RowsPerStrip",
279: "StripByteCounts",
513: "JPEGInterchangeFormat",
514: "JPEGInterchangeFormatLength",
301: "TransferFunction",
318: "WhitePoint",
319: "PrimaryChromaticities",
529: "YCbCrCoefficients",
532: "ReferenceBlackWhite",
306: "DateTime",
270: "ImageDescription",
271: "Make",
272: "Model",
305: "Software",
315: "Artist",
33432: "Copyright",
34665: {
36864: "ExifVersion",
40960: "FlashpixVersion",
40961: "ColorSpace",
40962: "PixelXDimension",
40963: "PixelYDimension",
42240: "Gamma",
37121: "ComponentsConfiguration",
37122: "CompressedBitsPerPixel",
37500: "MakerNote",
37510: "UserComment",
40964: "RelatedSoundFile",
36867: "DateTimeOriginal",
36868: "DateTimeDigitized",
37520: "SubSecTime",
37521: "SubSecTimeOriginal",
37522: "SubSecTimeDigitized",
33434: "ExposureTime",
33437: "FNumber",
34850: "ExposureProgram",
34852: "SpectralSensitivity",
34855: "PhotographicSensitivity",
34856: "OECF",
34864: "SensitivityType",
34865: "StandardOutputSensitivity",
34866: "RecommendedExposureIndex",
34867: "ISOSpeed",
34868: "ISOSpeedLatitudeyyy",
34869: "ISOSpeedLatitudezzz",
37377: "ShutterSpeedValue",
37378: "ApertureValue",
37379: "BrightnessValue",
37380: "ExposureBias",
37381: "MaxApertureValue",
37382: "SubjectDistance",
37383: "MeteringMode",
37384: "LightSource",
37385: "Flash",
37396: "SubjectArea",
37386: "FocalLength",
41483: "FlashEnergy",
41484: "SpatialFrequencyResponse",
41486: "FocalPlaneXResolution",
41487: "FocalPlaneYResolution",
41488: "FocalPlaneResolutionUnit",
41492: "SubjectLocation",
41493: "ExposureIndex",
41495: "SensingMethod",
41728: "FileSource",
41729: "SceneType",
41730: "CFAPattern",
41985: "CustomRendered",
41986: "ExposureMode",
41987: "WhiteBalance",
41988: "DigitalZoomRatio",
41989: "FocalLengthIn35mmFilm",
41990: "SceneCaptureType",
41991: "GainControl",
41992: "Contrast",
41993: "Saturation",
41994: "Sharpness",
41995: "DeviceSettingDescription",
41996: "SubjectDistanceRange",
42016: "ImageUniqueID",
42032: "CameraOwnerName",
42033: "BodySerialNumber",
42034: "LensSpecification",
42035: "LensMake",
42036: "LensModel",
42037: "LensSerialNumber"
},
34853: {
0: "GPSVersionID",
1: "GPSLatitudeRef",
2: "GPSLatitude",
3: "GPSLongitudeRef",
4: "GPSLongitude",
5: "GPSAltitudeRef",
6: "GPSAltitude",
7: "GPSTimeStamp",
8: "GPSSatellites",
9: "GPSStatus",
10: "GPSMeasureMode",
11: "GPSDOP",
12: "GPSSpeedRef",
13: "GPSSpeed",
14: "GPSTrackRef",
15: "GPSTrack",
16: "GPSImgDirectionRef",
17: "GPSImgDirection",
18: "GPSMapDatum",
19: "GPSDestLatitudeRef",
20: "GPSDestLatitude",
21: "GPSDestLongitudeRef",
22: "GPSDestLongitude",
23: "GPSDestBearingRef",
24: "GPSDestBearing",
25: "GPSDestDistanceRef",
26: "GPSDestDistance",
27: "GPSProcessingMethod",
28: "GPSAreaInformation",
29: "GPSDateStamp",
30: "GPSDifferential",
31: "GPSHPositioningError"
},
40965: {
1: "InteroperabilityIndex"
}
};
ExifMapProto.stringValues = {
ExposureProgram: {
0: "Undefined",
1: "Manual",
2: "Normal program",
3: "Aperture priority",
4: "Shutter priority",
5: "Creative program",
6: "Action program",
7: "Portrait mode",
8: "Landscape mode"
},
MeteringMode: {
0: "Unknown",
1: "Average",
2: "CenterWeightedAverage",
3: "Spot",
4: "MultiSpot",
5: "Pattern",
6: "Partial",
255: "Other"
},
LightSource: {
0: "Unknown",
1: "Daylight",
2: "Fluorescent",
3: "Tungsten (incandescent light)",
4: "Flash",
9: "Fine weather",
10: "Cloudy weather",
11: "Shade",
12: "Daylight fluorescent (D 5700 - 7100K)",
13: "Day white fluorescent (N 4600 - 5400K)",
14: "Cool white fluorescent (W 3900 - 4500K)",
15: "White fluorescent (WW 3200 - 3700K)",
17: "Standard light A",
18: "Standard light B",
19: "Standard light C",
20: "D55",
21: "D65",
22: "D75",
23: "D50",
24: "ISO studio tungsten",
255: "Other"
},
Flash: {
0: "Flash did not fire",
1: "Flash fired",
5: "Strobe return light not detected",
7: "Strobe return light detected",
9: "Flash fired, compulsory flash mode",
13: "Flash fired, compulsory flash mode, return light not detected",
15: "Flash fired, compulsory flash mode, return light detected",
16: "Flash did not fire, compulsory flash mode",
24: "Flash did not fire, auto mode",
25: "Flash fired, auto mode",
29: "Flash fired, auto mode, return light not detected",
31: "Flash fired, auto mode, return light detected",
32: "No flash function",
65: "Flash fired, red-eye reduction mode",
69: "Flash fired, red-eye reduction mode, return light not detected",
71: "Flash fired, red-eye reduction mode, return light detected",
73: "Flash fired, compulsory flash mode, red-eye reduction mode",
77: "Flash fired, compulsory flash mode, red-eye reduction mode, return light not detected",
79: "Flash fired, compulsory flash mode, red-eye reduction mode, return light detected",
89: "Flash fired, auto mode, red-eye reduction mode",
93: "Flash fired, auto mode, return light not detected, red-eye reduction mode",
95: "Flash fired, auto mode, return light detected, red-eye reduction mode"
},
SensingMethod: {
1: "Undefined",
2: "One-chip color area sensor",
3: "Two-chip color area sensor",
4: "Three-chip color area sensor",
5: "Color sequential area sensor",
7: "Trilinear sensor",
8: "Color sequential linear sensor"
},
SceneCaptureType: {
0: "Standard",
1: "Landscape",
2: "Portrait",
3: "Night scene"
},
SceneType: {
1: "Directly photographed"
},
CustomRendered: {
0: "Normal process",
1: "Custom process"
},
WhiteBalance: {
0: "Auto white balance",
1: "Manual white balance"
},
GainControl: {
0: "None",
1: "Low gain up",
2: "High gain up",
3: "Low gain down",
4: "High gain down"
},
Contrast: {
0: "Normal",
1: "Soft",
2: "Hard"
},
Saturation: {
0: "Normal",
1: "Low saturation",
2: "High saturation"
},
Sharpness: {
0: "Normal",
1: "Soft",
2: "Hard"
},
SubjectDistanceRange: {
0: "Unknown",
1: "Macro",
2: "Close view",
3: "Distant view"
},
FileSource: {
3: "DSC"
},
ComponentsConfiguration: {
0: "",
1: "Y",
2: "Cb",
3: "Cr",
4: "R",
5: "G",
6: "B"
},
Orientation: {
1: "top-left",
2: "top-right",
3: "bottom-right",
4: "bottom-left",
5: "left-top",
6: "right-top",
7: "right-bottom",
8: "left-bottom"
}
};
ExifMapProto.getText = function(name2) {
var value = this.get(name2);
switch (name2) {
case "LightSource":
case "Flash":
case "MeteringMode":
case "ExposureProgram":
case "SensingMethod":
case "SceneCaptureType":
case "SceneType":
case "CustomRendered":
case "WhiteBalance":
case "GainControl":
case "Contrast":
case "Saturation":
case "Sharpness":
case "SubjectDistanceRange":
case "FileSource":
case "Orientation":
return this.stringValues[name2][value];
case "ExifVersion":
case "FlashpixVersion":
if (!value)
return;
return String.fromCharCode(value[0], value[1], value[2], value[3]);
case "ComponentsConfiguration":
if (!value)
return;
return this.stringValues[name2][value[0]] + this.stringValues[name2][value[1]] + this.stringValues[name2][value[2]] + this.stringValues[name2][value[3]];
case "GPSVersionID":
if (!value)
return;
return value[0] + "." + value[1] + "." + value[2] + "." + value[3];
}
return String(value);
};
ExifMapProto.getAll = function() {
var map = {};
var prop;
var obj;
var name2;
for (prop in this) {
if (Object.prototype.hasOwnProperty.call(this, prop)) {
obj = this[prop];
if (obj && obj.getAll) {
map[this.privateIFDs[prop].name] = obj.getAll();
} else {
name2 = this.tags[prop];
if (name2)
map[name2] = this.getText(name2);
}
}
}
return map;
};
ExifMapProto.getName = function(tagCode) {
var name2 = this.tags[tagCode];
if (typeof name2 === "object")
return this.privateIFDs[tagCode].name;
return name2;
};
(function() {
var tags = ExifMapProto.tags;
var prop;
var privateIFD;
var subTags;
for (prop in tags) {
if (Object.prototype.hasOwnProperty.call(tags, prop)) {
privateIFD = ExifMapProto.privateIFDs[prop];
if (privateIFD) {
subTags = tags[prop];
for (prop in subTags) {
if (Object.prototype.hasOwnProperty.call(subTags, prop)) {
privateIFD.map[subTags[prop]] = Number(prop);
}
}
} else {
ExifMapProto.map[tags[prop]] = Number(prop);
}
}
}
})();
});
})(loadImageExifMap);
var loadImageIptc = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports, loadImageMeta.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
function IptcMap() {
}
IptcMap.prototype.map = {
ObjectName: 5
};
IptcMap.prototype.types = {
0: "Uint16",
200: "Uint16",
201: "Uint16",
202: "binary"
};
IptcMap.prototype.get = function(id) {
return this[id] || this[this.map[id]];
};
function getStringValue(dataView, offset, length) {
var outstr = "";
var end = offset + length;
for (var n = offset; n < end; n += 1) {
outstr += String.fromCharCode(dataView.getUint8(n));
}
return outstr;
}
function getTagValue(tagCode, map, dataView, offset, length) {
if (map.types[tagCode] === "binary") {
return new Blob([dataView.buffer.slice(offset, offset + length)]);
}
if (map.types[tagCode] === "Uint16") {
return dataView.getUint16(offset);
}
return getStringValue(dataView, offset, length);
}
function combineTagValues(value, newValue) {
if (value === void 0)
return newValue;
if (value instanceof Array) {
value.push(newValue);
return value;
}
return [value, newValue];
}
function parseIptcTags(dataView, segmentOffset, segmentLength, data, includeTags, excludeTags) {
var value, tagSize, tagCode;
var segmentEnd = segmentOffset + segmentLength;
var offset = segmentOffset;
while (offset < segmentEnd) {
if (dataView.getUint8(offset) === 28 && dataView.getUint8(offset + 1) === 2) {
tagCode = dataView.getUint8(offset + 2);
if ((!includeTags || includeTags[tagCode]) && (!excludeTags || !excludeTags[tagCode])) {
tagSize = dataView.getInt16(offset + 3);
value = getTagValue(tagCode, data.iptc, dataView, offset + 5, tagSize);
data.iptc[tagCode] = combineTagValues(data.iptc[tagCode], value);
if (data.iptcOffsets) {
data.iptcOffsets[tagCode] = offset;
}
}
}
offset += 1;
}
}
function isSegmentStart(dataView, offset) {
return dataView.getUint32(offset) === 943868237 && dataView.getUint16(offset + 4) === 1028;
}
function getHeaderLength(dataView, offset) {
var length = dataView.getUint8(offset + 7);
if (length % 2 !== 0)
length += 1;
if (length === 0) {
length = 4;
}
return length;
}
loadImage2.parseIptcData = function(dataView, offset, length, data, options) {
if (options.disableIptc) {
return;
}
var markerLength = offset + length;
while (offset + 8 < markerLength) {
if (isSegmentStart(dataView, offset)) {
var headerLength = getHeaderLength(dataView, offset);
var segmentOffset = offset + 8 + headerLength;
if (segmentOffset > markerLength) {
console.log("Invalid IPTC data: Invalid segment offset.");
break;
}
var segmentLength = dataView.getUint16(offset + 6 + headerLength);
if (offset + segmentLength > markerLength) {
console.log("Invalid IPTC data: Invalid segment size.");
break;
}
data.iptc = new IptcMap();
if (!options.disableIptcOffsets) {
data.iptcOffsets = new IptcMap();
}
parseIptcTags(dataView, segmentOffset, segmentLength, data, options.includeIptcTags, options.excludeIptcTags || { 202: true });
return;
}
offset += 1;
}
};
loadImage2.metaDataParsers.jpeg[65517].push(loadImage2.parseIptcData);
loadImage2.IptcMap = IptcMap;
});
})(loadImageIptc);
var loadImageIptcMap = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports, loadImageIptc.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
var IptcMapProto = loadImage2.IptcMap.prototype;
IptcMapProto.tags = {
0: "ApplicationRecordVersion",
3: "ObjectTypeReference",
4: "ObjectAttributeReference",
5: "ObjectName",
7: "EditStatus",
8: "EditorialUpdate",
10: "Urgency",
12: "SubjectReference",
15: "Category",
20: "SupplementalCategories",
22: "FixtureIdentifier",
25: "Keywords",
26: "ContentLocationCode",
27: "ContentLocationName",
30: "ReleaseDate",
35: "ReleaseTime",
37: "ExpirationDate",
38: "ExpirationTime",
40: "SpecialInstructions",
42: "ActionAdvised",
45: "ReferenceService",
47: "ReferenceDate",
50: "ReferenceNumber",
55: "DateCreated",
60: "TimeCreated",
62: "DigitalCreationDate",
63: "DigitalCreationTime",
65: "OriginatingProgram",
70: "ProgramVersion",
75: "ObjectCycle",
80: "Byline",
85: "BylineTitle",
90: "City",
92: "Sublocation",
95: "State",
100: "CountryCode",
101: "Country",
103: "OriginalTransmissionReference",
105: "Headline",
110: "Credit",
115: "Source",
116: "CopyrightNotice",
118: "Contact",
120: "Caption",
121: "LocalCaption",
122: "Writer",
125: "RasterizedCaption",
130: "ImageType",
131: "ImageOrientation",
135: "LanguageIdentifier",
150: "AudioType",
151: "AudioSamplingRate",
152: "AudioSamplingResolution",
153: "AudioDuration",
154: "AudioOutcue",
184: "JobID",
185: "MasterDocumentID",
186: "ShortDocumentID",
187: "UniqueDocumentID",
188: "OwnerID",
200: "ObjectPreviewFileFormat",
201: "ObjectPreviewFileVersion",
202: "ObjectPreviewData",
221: "Prefs",
225: "ClassifyState",
228: "SimilarityIndex",
230: "DocumentNotes",
231: "DocumentHistory",
232: "ExifCameraInfo",
255: "CatalogSets"
};
IptcMapProto.stringValues = {
10: {
0: "0 (reserved)",
1: "1 (most urgent)",
2: "2",
3: "3",
4: "4",
5: "5 (normal urgency)",
6: "6",
7: "7",
8: "8 (least urgent)",
9: "9 (user-defined priority)"
},
75: {
a: "Morning",
b: "Both Morning and Evening",
p: "Evening"
},
131: {
L: "Landscape",
P: "Portrait",
S: "Square"
}
};
IptcMapProto.getText = function(id) {
var value = this.get(id);
var tagCode = this.map[id];
var stringValue = this.stringValues[tagCode];
if (stringValue)
return stringValue[value];
return String(value);
};
IptcMapProto.getAll = function() {
var map = {};
var prop;
var name2;
for (prop in this) {
if (Object.prototype.hasOwnProperty.call(this, prop)) {
name2 = this.tags[prop];
if (name2)
map[name2] = this.getText(name2);
}
}
return map;
};
IptcMapProto.getName = function(tagCode) {
return this.tags[tagCode];
};
(function() {
var tags = IptcMapProto.tags;
var map = IptcMapProto.map || {};
var prop;
for (prop in tags) {
if (Object.prototype.hasOwnProperty.call(tags, prop)) {
map[tags[prop]] = Number(prop);
}
}
})();
});
})(loadImageIptcMap);
var loadImageOrientation = { exports: {} };
(function(module2) {
(function(factory) {
if (module2.exports) {
factory(loadImage$3.exports, loadImageScale.exports, loadImageMeta.exports);
} else {
factory(window.loadImage);
}
})(function(loadImage2) {
var originalHasCanvasOption = loadImage2.hasCanvasOption;
var originalHasMetaOption = loadImage2.hasMetaOption;
var originalTransformCoordinates = loadImage2.transformCoordinates;
var originalGetTransformedOptions = loadImage2.getTransformedOptions;
(function() {
var testImageURL = "data:image/jpeg;base64,/9j/4QAiRXhpZgAATU0AKgAAAAgAAQESAAMAAAABAAYAAAAAAAD/2wCEAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAf/AABEIAAEAAgMBEQACEQEDEQH/xABKAAEAAAAAAAAAAAAAAAAAAAALEAEAAAAAAAAAAAAAAAAAAAAAAQEAAAAAAAAAAAAAAAAAAAAAEQEAAAAAAAAAAAAAAAAAAAAA/9oADAMBAAIRAxEAPwA/8H//2Q==";
var img = document.createElement("img");
img.onload = function() {
loadImage2.orientation = img.width === 1 && img.height === 2;
};
img.src = testImageURL;
})();
loadImage2.hasCanvasOption = function(options) {
return !!options.orientation === true && !loadImage2.orientation || options.orientation > 1 && options.orientation < 9 || originalHasCanvasOption.call(loadImage2, options);
};
loadImage2.hasMetaOption = function(options) {
return options && options.orientation === true && !loadImage2.orientation || originalHasMetaOption.call(loadImage2, options);
};
loadImage2.transformCoordinates = function(canvas, options) {
originalTransformCoordinates.call(loadImage2, canvas, options);
var ctx = canvas.getContext("2d");
var width = canvas.width;
var height = canvas.height;
var styleWidth = canvas.style.width;
var styleHeight = canvas.style.height;
var orientation = options.orientation;
if (!(orientation > 1 && orientation < 9)) {
return;
}
if (orientation > 4) {
canvas.width = height;
canvas.height = width;
canvas.style.width = styleHeight;
canvas.style.height = styleWidth;
}
switch (orientation) {
case 2:
ctx.translate(width, 0);
ctx.scale(-1, 1);
break;
case 3:
ctx.translate(width, height);
ctx.rotate(Math.PI);
break;
case 4:
ctx.translate(0, height);
ctx.scale(1, -1);
break;
case 5:
ctx.rotate(0.5 * Math.PI);
ctx.scale(1, -1);
break;
case 6:
ctx.rotate(0.5 * Math.PI);
ctx.translate(0, -height);
break;
case 7:
ctx.rotate(0.5 * Math.PI);
ctx.translate(width, -height);
ctx.scale(-1, 1);
break;
case 8:
ctx.rotate(-0.5 * Math.PI);
ctx.translate(-width, 0);
break;
}
};
loadImage2.getTransformedOptions = function(img, opts, data) {
var options = originalGetTransformedOptions.call(loadImage2, img, opts);
var orientation = options.orientation;
var newOptions;
var i;
if (orientation === true) {
if (loadImage2.orientation) {
return options;
}
orientation = data && data.exif && data.exif.get("Orientation");
}
if (!(orientation > 1 && orientation < 9)) {
return options;
}
newOptions = {};
for (i in options) {
if (Object.prototype.hasOwnProperty.call(options, i)) {
newOptions[i] = options[i];
}
}
newOptions.orientation = orientation;
switch (orientation) {
case 2:
newOptions.left = options.right;
newOptions.right = options.left;
break;
case 3:
newOptions.left = options.right;
newOptions.top = options.bottom;
newOptions.right = options.left;
newOptions.bottom = options.top;
break;
case 4:
newOptions.top = options.bottom;
newOptions.bottom = options.top;
break;
case 5:
newOptions.left = options.top;
newOptions.top = options.left;
newOptions.right = options.bottom;
newOptions.bottom = options.right;
break;
case 6:
newOptions.left = options.top;
newOptions.top = options.right;
newOptions.right = options.bottom;
newOptions.bottom = options.left;
break;
case 7:
newOptions.left = options.bottom;
newOptions.top = options.right;
newOptions.right = options.top;
newOptions.bottom = options.left;
break;
case 8:
newOptions.left = options.bottom;
newOptions.top = options.left;
newOptions.right = options.top;
newOptions.bottom = options.right;
break;
}
if (newOptions.orientation > 4) {
newOptions.maxWidth = options.maxHeight;
newOptions.maxHeight = options.maxWidth;
newOptions.minWidth = options.minHeight;
newOptions.minHeight = options.minWidth;
newOptions.sourceWidth = options.sourceHeight;
newOptions.sourceHeight = options.sourceWidth;
}
return newOptions;
};
});
})(loadImageOrientation);
var js = loadImage$3.exports;
const resolveURL = resolveUrl.exports;
const blueimpLoadImage = js;
const readFromBlobOrFile = (blob) => new Promise((resolve2, reject) => {
const fileReader = new FileReader();
fileReader.onload = () => {
resolve2(fileReader.result);
};
fileReader.onerror = ({ target: { error: { code } } }) => {
reject(Error(`File could not be read! Code=${code}`));
};
fileReader.readAsArrayBuffer(blob);
});
const fixOrientationFromUrlOrBlobOrFile = (blob) => new Promise((resolve2) => {
blueimpLoadImage(blob, (img) => img.toBlob(resolve2), {
orientation: true,
canvas: true
});
});
const loadImage$2 = async (image) => {
let data = image;
if (typeof image === "undefined") {
return "undefined";
}
if (typeof image === "string") {
if (image.endsWith(".pbm")) {
const resp = await fetch(resolveURL(image));
data = await resp.arrayBuffer();
} else {
let img = image;
if (!/data:image\/([a-zA-Z]*);base64,([^"]*)/.test(image)) {
img = resolveURL(image);
}
data = await readFromBlobOrFile(await fixOrientationFromUrlOrBlobOrFile(img));
}
} else if (image instanceof HTMLElement) {
if (image.tagName === "IMG") {
data = await loadImage$2(image.src);
}
if (image.tagName === "VIDEO") {
data = await loadImage$2(image.poster);
}
if (image.tagName === "CANVAS") {
await new Promise((resolve2) => {
image.toBlob(async (blob) => {
data = await readFromBlobOrFile(blob);
resolve2();
});
});
}
} else if (image instanceof File || image instanceof Blob) {
let img = image;
if (!image.name.endsWith(".pbm")) {
img = await fixOrientationFromUrlOrBlobOrFile(img);
}
data = await readFromBlobOrFile(img);
}
return new Uint8Array(data);
};
var loadImage_1 = loadImage$2;
const defaultOptions$1 = defaultOptions_1;
const spawnWorker$1 = spawnWorker$2;
const terminateWorker$1 = terminateWorker$2;
const onMessage$1 = onMessage$2;
const send$1 = send$2;
const loadImage$1 = loadImage_1;
var browser = {
defaultOptions: defaultOptions$1,
spawnWorker: spawnWorker$1,
terminateWorker: terminateWorker$1,
onMessage: onMessage$1,
send: send$1,
loadImage: loadImage$1
};
const resolvePaths = resolvePaths$1;
const circularize = circularize$1;
const createJob = createJob$2;
const { log } = log$2;
const getId = getId$3;
const { defaultOEM } = config;
const {
defaultOptions,
spawnWorker,
terminateWorker,
onMessage,
loadImage,
send
} = browser;
let workerCounter = 0;
var createWorker$2 = (_options = {}) => {
const id = getId("Worker", workerCounter);
const _a = resolvePaths(__spreadValues(__spreadValues({}, defaultOptions), _options)), {
logger: logger2,
errorHandler
} = _a, options = __objRest(_a, [
"logger",
"errorHandler"
]);
const resolves = {};
const rejects = {};
let worker = spawnWorker(options);
workerCounter += 1;
const setResolve = (action, res) => {
resolves[action] = res;
};
const setReject = (action, rej) => {
rejects[action] = rej;
};
const startJob = ({ id: jobId, action, payload }) => new Promise((resolve2, reject) => {
log(`[${id}]: Start ${jobId}, action=${action}`);
setResolve(action, resolve2);
setReject(action, reject);
send(worker, {
workerId: id,
jobId,
action,
payload
});
});
const load = (jobId) => startJob(createJob({
id: jobId,
action: "load",
payload: { options }
}));
const writeText = (path, text, jobId) => startJob(createJob({
id: jobId,
action: "FS",
payload: { method: "writeFile", args: [path, text] }
}));
const readText = (path, jobId) => startJob(createJob({
id: jobId,
action: "FS",
payload: { method: "readFile", args: [path, { encoding: "utf8" }] }
}));
const removeFile = (path, jobId) => startJob(createJob({
id: jobId,
action: "FS",
payload: { method: "unlink", args: [path] }
}));
const FS = (method, args, jobId) => startJob(createJob({
id: jobId,
action: "FS",
payload: { method, args }
}));
const loadLanguage = (langs = "eng", jobId) => startJob(createJob({
id: jobId,
action: "loadLanguage",
payload: { langs, options }
}));
const initialize = (langs = "eng", oem = defaultOEM, jobId) => startJob(createJob({
id: jobId,
action: "initialize",
payload: { langs, oem }
}));
const setParameters = (params = {}, jobId) => startJob(createJob({
id: jobId,
action: "setParameters",
payload: { params }
}));
const recognize2 = async (image, opts = {}, jobId) => startJob(createJob({
id: jobId,
action: "recognize",
payload: { image: await loadImage(image), options: opts }
}));
const getPDF = (title = "Tesseract OCR Result", textonly = false, jobId) => startJob(createJob({
id: jobId,
action: "getPDF",
payload: { title, textonly }
}));
const detect2 = async (image, jobId) => startJob(createJob({
id: jobId,
action: "detect",
payload: { image: await loadImage(image) }
}));
const terminate = async () => {
if (worker !== null) {
terminateWorker(worker);
worker = null;
}
return Promise.resolve();
};
onMessage(worker, ({
workerId,
jobId,
status,
action,
data
}) => {
if (status === "resolve") {
log(`[${workerId}]: Complete ${jobId}`);
let d = data;
if (action === "recognize") {
d = circularize(data);
} else if (action === "getPDF") {
d = Array.from(__spreadProps(__spreadValues({}, data), { length: Object.keys(data).length }));
}
resolves[action]({ jobId, data: d });
} else if (status === "reject") {
rejects[action](data);
if (errorHandler) {
errorHandler(data);
} else {
throw Error(data);
}
} else if (status === "progress") {
logger2(__spreadProps(__spreadValues({}, data), { userJobId: jobId }));
}
});
return {
id,
worker,
setResolve,
setReject,
load,
writeText,
readText,
removeFile,
FS,
loadLanguage,
initialize,
setParameters,
recognize: recognize2,
getPDF,
detect: detect2,
terminate
};
};
const createWorker$1 = createWorker$2;
const recognize = async (image, langs, options) => {
const worker = createWorker$1(options);
await worker.load();
await worker.loadLanguage(langs);
await worker.initialize(langs);
return worker.recognize(image).finally(async () => {
await worker.terminate();
});
};
const detect = async (image, options) => {
const worker = createWorker$1(options);
await worker.load();
await worker.loadLanguage("osd");
await worker.initialize("osd");
return worker.detect(image).finally(async () => {
await worker.terminate();
});
};
var Tesseract$1 = {
recognize,
detect
};
var languages$1 = {
AFR: "afr",
AMH: "amh",
ARA: "ara",
ASM: "asm",
AZE: "aze",
AZE_CYRL: "aze_cyrl",
BEL: "bel",
BEN: "ben",
BOD: "bod",
BOS: "bos",
BUL: "bul",
CAT: "cat",
CEB: "ceb",
CES: "ces",
CHI_SIM: "chi_sim",
CHI_TRA: "chi_tra",
CHR: "chr",
CYM: "cym",
DAN: "dan",
DEU: "deu",
DZO: "dzo",
ELL: "ell",
ENG: "eng",
ENM: "enm",
EPO: "epo",
EST: "est",
EUS: "eus",
FAS: "fas",
FIN: "fin",
FRA: "fra",
FRK: "frk",
FRM: "frm",
GLE: "gle",
GLG: "glg",
GRC: "grc",
GUJ: "guj",
HAT: "hat",
HEB: "heb",
HIN: "hin",
HRV: "hrv",
HUN: "hun",
IKU: "iku",
IND: "ind",
ISL: "isl",
ITA: "ita",
ITA_OLD: "ita_old",
JAV: "jav",
JPN: "jpn",
KAN: "kan",
KAT: "kat",
KAT_OLD: "kat_old",
KAZ: "kaz",
KHM: "khm",
KIR: "kir",
KOR: "kor",
KUR: "kur",
LAO: "lao",
LAT: "lat",
LAV: "lav",
LIT: "lit",
MAL: "mal",
MAR: "mar",
MKD: "mkd",
MLT: "mlt",
MSA: "msa",
MYA: "mya",
NEP: "nep",
NLD: "nld",
NOR: "nor",
ORI: "ori",
PAN: "pan",
POL: "pol",
POR: "por",
PUS: "pus",
RON: "ron",
RUS: "rus",
SAN: "san",
SIN: "sin",
SLK: "slk",
SLV: "slv",
SPA: "spa",
SPA_OLD: "spa_old",
SQI: "sqi",
SRP: "srp",
SRP_LATN: "srp_latn",
SWA: "swa",
SWE: "swe",
SYR: "syr",
TAM: "tam",
TEL: "tel",
TGK: "tgk",
TGL: "tgl",
THA: "tha",
TIR: "tir",
TUR: "tur",
UIG: "uig",
UKR: "ukr",
URD: "urd",
UZB: "uzb",
UZB_CYRL: "uzb_cyrl",
VIE: "vie",
YID: "yid"
};
var PSM$1 = {
OSD_ONLY: "0",
AUTO_OSD: "1",
AUTO_ONLY: "2",
AUTO: "3",
SINGLE_COLUMN: "4",
SINGLE_BLOCK_VERT_TEXT: "5",
SINGLE_BLOCK: "6",
SINGLE_LINE: "7",
SINGLE_WORD: "8",
CIRCLE_WORD: "9",
SINGLE_CHAR: "10",
SPARSE_TEXT: "11",
SPARSE_TEXT_OSD: "12"
};
const createScheduler = createScheduler$1;
const createWorker = createWorker$2;
const Tesseract = Tesseract$1;
const languages = languages$1;
const OEM = OEM$2;
const PSM = PSM$1;
const { setLogging } = log$2;
var src = __spreadValues({
languages,
OEM,
PSM,
createScheduler,
createWorker,
setLogging
}, Tesseract);
const _OCR = class {
constructor(options = {}) {
this.worker = src.createWorker(options);
}
async load(lang) {
await this.worker.load();
await this.worker.loadLanguage(lang || _OCR.DEFAULT_LANG);
await this.worker.initialize(lang || _OCR.DEFAULT_LANG);
}
static suit(el, style) {
this.changeStyle(el, style);
let nodes = Array.from(el.childNodes);
while (nodes.length) {
const node = nodes.shift();
if (node && node.style) {
this.changeStyle(node, style);
nodes = nodes.concat(Array.from(node.childNodes));
}
}
return el;
}
static unsuit(el) {
this.restoreStyle(el);
let nodes = Array.from(el.childNodes);
while (nodes.length) {
const node = nodes.shift();
if (node && node.style) {
this.restoreStyle(node);
nodes = nodes.concat(Array.from(node.childNodes));
}
}
return el;
}
static changeStyle(el, style) {
const { fontSize, letterSpacing, lineHeight, fontWeight } = style || _OCR.DEFAULT_STYLE;
el.__fontSize__ = el.style.fontSize || "inherit";
el.__letterSpacing__ = el.style.letterSpacing || "inherit";
el.__lineHeight__ = el.style.lineHeight || "inherit";
el.__fontWeight__ = el.style.fontWeight || "inherit";
el.style.fontWeight = fontWeight;
el.style.fontSize = fontSize;
el.style.letterSpacing = letterSpacing;
el.style.lineHeight = lineHeight;
}
static restoreStyle(el) {
if (el.__fontSize__)
el.style.fontSize = el.__fontSize__;
if (el.__letterSpacing__)
el.style.letterSpacing = el.__letterSpacing__;
if (el.__lineHeight__)
el.style.lineHeight = el.__lineHeight__;
if (el.__fontWeight__)
el.style.fontWeight = el.__fontWeight__;
delete el.__fontSize__;
delete el.__letterSpacing__;
delete el.__lineHeight__;
delete el.__fontWeight__;
}
async recognize(el) {
const base64 = await domtoimage.toPng(el);
const {
data: { text }
} = await this.worker.recognize(base64);
return text.replace(/\n/g, "").replace(/([^ ]) /g, "$1");
}
async terminate() {
await this.worker.terminate();
}
};
let OCR = _OCR;
OCR.DEFAULT_LANG = "eng+chi_sim";
OCR.DEFAULT_WRAPPER = "div";
OCR.DEFAULT_STYLE = {
padding: "12px",
fontSize: "36px",
lineHeight: "48px",
letterSpacing: "8px",
fontWeight: "bold"
};
const VERSION = "3.17.17";
const definedScripts = [CommonScript, CXScript, ZHSScript, ICVEScript];
exports2.OCR = OCR;
exports2.OCSWorker = OCSWorker;
exports2.VERSION = VERSION;
exports2.defaultAnswerWrapperHandler = defaultAnswerWrapperHandler;
exports2.defineScript = defineScript;
exports2.definedScripts = definedScripts;
exports2.getStore = getStore;
exports2.logger = logger;
exports2.message = message;
exports2.start = start;
exports2.utils = index;
Object.defineProperty(exports2, "__esModule", { value: true });
exports2[Symbol.toStringTag] = "Module";
});
const OCS_STYLE = `
/*!
* ocsjs ( https://github.com/ocsjs/ocsjs#readme )
* ocs - online course script 在线网络课程辅助工具
* copyright enncy
* license MIT
*/
/**
panel style
*/
#ocs-panel {
position: fixed;
top: 40%;
left: 50%;
min-width: 300px;
background: white;
z-index: 99999999;
text-align: left;
box-shadow: 0 0 24px -10px #000000;
border-radius: 6px;
border: 1px solid #a3a3a3;
font-family: Avenir, Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
color: #636363;
/** 搜索结果 */
/** 文字提示 */
}
#ocs-panel .ocs-panel-header {
display: flex;
padding: 2px 12px;
background: #f7f7f7;
border-radius: 6px;
border-bottom-left-radius: unset;
border-bottom-right-radius: unset;
box-shadow: 0px 0px 4px #c7c7c7;
}
#ocs-panel .ocs-panel-header .title {
cursor: pointer !important;
font-size: 14px;
padding: 2px 8px;
white-space: nowrap;
color: rgba(0, 0, 0, 0.509);
}
#ocs-panel .ocs-panel-header .title.active {
background: white;
color: black;
}
#ocs-panel .ocs-panel-header .title.active span::after {
content: '';
border-bottom: 2px solid #0099ff;
display: block;
width: 24px;
justify-content: center;
margin: 0 auto;
}
#ocs-panel .ocs-panel-header .title:hover {
background: white;
}
#ocs-panel .ocs-panel-header.hide {
display: none;
}
#ocs-panel .ocs-panel-container {
font-size: 12px;
padding: 4px;
overflow: auto;
max-height: 500px;
max-width: 800px;
}
#ocs-panel .ocs-panel-container ul li {
list-style: inside;
}
#ocs-panel .ocs-panel-container.hide {
display: none;
}
#ocs-panel .draggable {
cursor: move;
}
#ocs-panel.hide {
width: 48px;
height: 48px;
background-color: rgba(0, 0, 0, 0);
box-shadow: 0px 0px 16px grey;
border-radius: 10px;
min-width: unset;
bottom: 10%;
left: 5%;
top: unset;
}
#ocs-panel ul {
padding: 0;
margin: 0;
}
#ocs-panel hr {
margin: 4px 0px;
}
#ocs-panel .ocs-panel-footer {
font-size: 12px;
color: #c5c5c5;
margin-top: 8px;
text-align: right;
padding: 0px 4px;
box-shadow: 0px 0px 4px #c7c7c7;
border-radius: 6px;
border-top-left-radius: unset;
border-top-right-radius: unset;
}
#ocs-panel .ocs-panel-footer.hide {
border-top: none;
}
#ocs-panel .ocs-panel-footer .hide-btn {
float: left;
cursor: pointer;
}
#ocs-panel .ocs-setting-items {
display: grid;
grid-template-columns: min-content auto;
grid-row-gap: 8px;
white-space: nowrap;
font-size: 12px;
/** check box 的样式 */
}
#ocs-panel .ocs-setting-items label {
padding-right: 4px;
}
#ocs-panel .ocs-setting-items label + div {
display: inline-flex;
align-items: center;
gap: 2px;
}
#ocs-panel .ocs-setting-items label::after {
content: ': ';
}
#ocs-panel .ocs-setting-items select {
font-size: 12px;
outline: none;
border: none;
border: 1px solid #e4e4e4;
border-radius: 4px;
width: 100%;
}
#ocs-panel .ocs-setting-items input {
outline: none;
border: none;
border-bottom: 1px solid #e4e4e4;
background: #fbfbfb;
padding-left: 2px;
text-align: center;
padding: 0px;
margin: 0px;
}
#ocs-panel .ocs-setting-items .input-switch {
appearance: none;
width: fit-content;
min-width: 32px;
height: 16px;
background: #c5c5c5;
border-radius: 100px;
display: flex;
align-items: center;
padding: 2px 4px;
transition: all 0.2s ease-in-out;
}
#ocs-panel .ocs-setting-items .input-switch:checked {
background: #1890ff !important;
}
#ocs-panel .ocs-setting-items .input-switch:checked::before {
transform: translate(100%, 0px);
}
#ocs-panel .ocs-setting-items .input-switch::before {
background-color: #fff;
border-radius: 9px;
box-shadow: 0 2px 4px #00230b33;
width: 12px;
height: 12px;
content: '';
}
#ocs-panel .ocs-setting-items input:not([type='checkbox'], [type='radio']) {
width: 100%;
}
#ocs-panel .ocs-setting-items input[type='checkbox'],
#ocs-panel .ocs-setting-items input[type='radio'],
#ocs-panel .ocs-setting-items input[type='range'] {
accent-color: #0e8ee2;
}
#ocs-panel .ocs-btn-primary {
outline: none;
border: none;
cursor: pointer;
background: #1890ff;
color: white;
border: 1px solid #1890ff;
font-size: 12px;
border-radius: 4px;
margin: 2px;
}
#ocs-panel .ocs-btn {
outline: none;
border: none;
cursor: pointer;
background: white;
border: 1px solid #e4e4e4;
border-radius: 4px;
font-size: 12px;
margin: 2px;
}
#ocs-panel button[disabled] {
background: #e4e4e4;
color: #a5a5a5;
border: 1px solid #e4e4e4;
cursor: not-allowed;
}
#ocs-panel .terminal {
width: 300px;
height: 300px;
max-width: 300px;
max-height: 300px;
overflow: auto;
background-color: black;
padding: 12px 6px;
color: white;
}
#ocs-panel .terminal level {
padding: 0px 2px;
border-radius: 2px;
}
#ocs-panel .terminal level.info {
background-color: #2196f3a3;
}
#ocs-panel .terminal level.warn {
background-color: #ffc107db;
}
#ocs-panel .terminal level.error {
background-color: #f36c71cc;
}
#ocs-panel .terminal level.debug {
background-color: #9e9e9ec4;
}
#ocs-panel .terminal *::selection {
background-color: #ffffff6b;
}
#ocs-panel #search-results a {
text-decoration: underline;
}
#ocs-panel #search-results .search-result-modal {
max-height: 600px;
max-width: 800px;
overflow: auto;
background-color: white;
padding: 4px;
transform: translate(-105%, 0px);
position: absolute;
box-shadow: 0px 0px 8px #c7c7c7;
}
#ocs-panel #search-results .search-results-title {
padding: 2px 0px;
}
#ocs-panel #search-results .search-results-container {
padding-left: 12px;
}
#ocs-panel #search-results .search-results-item {
margin-bottom: 8px;
background: #f6ffed;
border: 1px solid #b7eb8f;
padding: 0px 2px;
}
#ocs-panel .tooltip {
position: absolute;
transform: translate(0%, -100%);
padding: 4px;
border-radius: 4px;
box-shadow: 0px 0px 4px black;
white-space: nowrap;
z-index: 9999999;
}
#ocs-panel .tooltip a {
color: #1890ff;
}
#ocs-panel .tooltip.dark {
background: black;
color: white;
opacity: 0.8;
}
#ocs-panel .tooltip.light {
background: white;
color: inherit;
}
#ocs-panel .alert-container {
margin-bottom: 4px;
position: absolute;
z-index: 999999;
bottom: 100%;
left: 50%;
width: 100%;
transform: translate(-50%, 0px);
}
#ocs-panel .alert-container .alert-closer {
float: right;
border-radius: 50%;
border: 1px solid;
text-align: center;
cursor: pointer;
font: icon;
line-height: 14px;
width: 14px;
}
#ocs-panel .alert-container .hide .alert {
width: 200px;
transform: translate(-82px, 0px);
}
#ocs-panel .alert-container .alert {
border-radius: 4px;
margin-bottom: 4px;
padding: 4px;
font-size: 12px;
}
#ocs-panel .alert-container .alert .alert-text {
letter-spacing: 1px;
font-weight: bold;
}
#ocs-panel .alert-container .alert.error {
background-color: #ff000699;
color: #fff;
border: 1px solid #f36c70;
}
#ocs-panel .alert-container .alert.info {
background-color: #2196f3a3;
color: white;
border: 1px solid #1890ff;
}
#ocs-panel .alert-container .alert.success {
background-color: #84d346d1;
color: #fff;
border: 1px solid #6fd91d;
}
#ocs-panel .alert-container .alert.warn {
background-color: #fbbf30e6;
color: #725206;
border: 1px solid #ffc107;
}
#ocs-panel .hide-tip {
position: fixed;
color: white;
white-space: nowrap;
transform: translate(-30%, 0px);
text-align: center;
text-shadow: 0px 0px 8px black;
}
.ocs-icon {
width: 64px;
height: 64px;
position: relative;
top: -8px;
left: -8px;
}
.pointer {
cursor: pointer;
}
`;
/* eslint no-undef: 0 */
(function () {
"use strict";
// 运行脚本
OCS.start({
// 加载样式
style: OCS_STYLE,
// 支持拖动
draggable: true,
// 加载默认脚本列表,默认 OCS.definedScripts
scripts: OCS.definedScripts,
});
})();