您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
使用图像处理技术对CSGO饰品网站上的皮肤进行对比,可以快速分辨出饰品细微的差异,不用再手动来回切换对比了
当前为
// ==UserScript== // @name CSGO饰品2D/3D对比 // @namespace https://github.com/qianjiachun // @version 2021.07.28.01 // @description 使用图像处理技术对CSGO饰品网站上的皮肤进行对比,可以快速分辨出饰品细微的差异,不用再手动来回切换对比了 // @author 小淳 // @match *://buff.163.com/goods* // @match *://buff.163.com/market/csgo_inspect/3d?compare=true* // @match *://spect.fp.ps.netease.com/* // @match *://buff.163.com/compare3d* // @grant GM_setValue // @grant GM_getValue // @grant GM_deleteValue // @grant GM_listValues // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/notice.js // @require https://lib.baomitu.com/vue/3.0.11/vue.global.prod.js // @require https://cdn.jsdelivr.net/npm/[email protected]/dist/comparison-slider.min.js // @require https://cdn.jsdelivr.net/npm/[email protected]/src/canvas-compare.min.js // ==/UserScript== /******/ (function (modules) { // webpackBootstrap /******/ // The module cache /******/ var installedModules = {}; /******/ /******/ // The require function /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache /******/ if (installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; /******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, /******/ l: false, /******/ exports: {} /******/ }; /******/ /******/ // Execute the module function /******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__); /******/ /******/ // Flag the module as loaded /******/ module.l = true; /******/ /******/ // Return the exports of the module /******/ return module.exports; /******/ } /******/ /******/ /******/ // expose the modules object (__webpack_modules__) /******/ __webpack_require__.m = modules; /******/ /******/ // expose the module cache /******/ __webpack_require__.c = installedModules; /******/ /******/ // define getter function for harmony exports /******/ __webpack_require__.d = function (exports, name, getter) { /******/ if (!__webpack_require__.o(exports, name)) { /******/ Object.defineProperty(exports, name, { enumerable: true, get: getter }); /******/ } /******/ }; /******/ /******/ // define __esModule on exports /******/ __webpack_require__.r = function (exports) { /******/ if (typeof Symbol !== 'undefined' && Symbol.toStringTag) { /******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); /******/ } /******/ Object.defineProperty(exports, '__esModule', { value: true }); /******/ }; /******/ /******/ // create a fake namespace object /******/ // mode & 1: value is a module id, require it /******/ // mode & 2: merge all properties of value into the ns /******/ // mode & 4: return value when already ns object /******/ // mode & 8|1: behave like require /******/ __webpack_require__.t = function (value, mode) { /******/ if (mode & 1) value = __webpack_require__(value); /******/ if (mode & 8) return value; /******/ if ((mode & 4) && typeof value === 'object' && value && value.__esModule) return value; /******/ var ns = Object.create(null); /******/ __webpack_require__.r(ns); /******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value }); /******/ if (mode & 2 && typeof value != 'string') for (var key in value) __webpack_require__.d(ns, key, function (key) { return value[key]; }.bind(null, key)); /******/ return ns; /******/ }; /******/ /******/ // getDefaultExport function for compatibility with non-harmony modules /******/ __webpack_require__.n = function (module) { /******/ var getter = module && module.__esModule ? /******/ function getDefault() { return module['default']; } : /******/ function getModuleExports() { return module; }; /******/ __webpack_require__.d(getter, 'a', getter); /******/ return getter; /******/ }; /******/ /******/ // Object.prototype.hasOwnProperty.call /******/ __webpack_require__.o = function (object, property) { return Object.prototype.hasOwnProperty.call(object, property); }; /******/ /******/ // __webpack_public_path__ /******/ __webpack_require__.p = "/dist/"; /******/ /******/ /******/ // Load entry module and return exports /******/ return __webpack_require__(__webpack_require__.s = 28); /******/ }) /************************************************************************/ /******/ ([ /* 0 */ /***/ (function (module, exports) { module.exports = Vue; /***/ }), /* 1 */ /***/ (function (module, exports, __webpack_require__) { "use strict"; var isOldIE = function isOldIE() { var memo; return function memorize() { if (typeof memo === 'undefined') { // Test for IE <= 9 as proposed by Browserhacks // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805 // Tests for existence of standard globals is to allow style-loader // to operate correctly into non-standard environments // @see https://github.com/webpack-contrib/style-loader/issues/177 memo = Boolean(window && document && document.all && !window.atob); } return memo; }; }(); var getTarget = function getTarget() { var memo = {}; return function memorize(target) { if (typeof memo[target] === 'undefined') { var styleTarget = document.querySelector(target); // Special case to return head of iframe instead of iframe itself if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) { try { // This will throw an exception if access to iframe is blocked // due to cross-origin restrictions styleTarget = styleTarget.contentDocument.head; } catch (e) { // istanbul ignore next styleTarget = null; } } memo[target] = styleTarget; } return memo[target]; }; }(); var stylesInDom = []; function getIndexByIdentifier(identifier) { var result = -1; for (var i = 0; i < stylesInDom.length; i++) { if (stylesInDom[i].identifier === identifier) { result = i; break; } } return result; } function modulesToDom(list, options) { var idCountMap = {}; var identifiers = []; for (var i = 0; i < list.length; i++) { var item = list[i]; var id = options.base ? item[0] + options.base : item[0]; var count = idCountMap[id] || 0; var identifier = "".concat(id, " ").concat(count); idCountMap[id] = count + 1; var index = getIndexByIdentifier(identifier); var obj = { css: item[1], media: item[2], sourceMap: item[3] }; if (index !== -1) { stylesInDom[index].references++; stylesInDom[index].updater(obj); } else { stylesInDom.push({ identifier: identifier, updater: addStyle(obj, options), references: 1 }); } identifiers.push(identifier); } return identifiers; } function insertStyleElement(options) { var style = document.createElement('style'); var attributes = options.attributes || {}; if (typeof attributes.nonce === 'undefined') { var nonce = true ? __webpack_require__.nc : undefined; if (nonce) { attributes.nonce = nonce; } } Object.keys(attributes).forEach(function (key) { style.setAttribute(key, attributes[key]); }); if (typeof options.insert === 'function') { options.insert(style); } else { var target = getTarget(options.insert || 'head'); if (!target) { throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid."); } target.appendChild(style); } return style; } function removeStyleElement(style) { // istanbul ignore if if (style.parentNode === null) { return false; } style.parentNode.removeChild(style); } /* istanbul ignore next */ var replaceText = function replaceText() { var textStore = []; return function replace(index, replacement) { textStore[index] = replacement; return textStore.filter(Boolean).join('\n'); }; }(); function applyToSingletonTag(style, index, remove, obj) { var css = remove ? '' : obj.media ? "@media ".concat(obj.media, " {").concat(obj.css, "}") : obj.css; // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = replaceText(index, css); } else { var cssNode = document.createTextNode(css); var childNodes = style.childNodes; if (childNodes[index]) { style.removeChild(childNodes[index]); } if (childNodes.length) { style.insertBefore(cssNode, childNodes[index]); } else { style.appendChild(cssNode); } } } function applyToTag(style, options, obj) { var css = obj.css; var media = obj.media; var sourceMap = obj.sourceMap; if (media) { style.setAttribute('media', media); } else { style.removeAttribute('media'); } if (sourceMap && btoa) { css += "\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))), " */"); } // For old IE /* istanbul ignore if */ if (style.styleSheet) { style.styleSheet.cssText = css; } else { while (style.firstChild) { style.removeChild(style.firstChild); } style.appendChild(document.createTextNode(css)); } } var singleton = null; var singletonCounter = 0; function addStyle(obj, options) { var style; var update; var remove; if (options.singleton) { var styleIndex = singletonCounter++; style = singleton || (singleton = insertStyleElement(options)); update = applyToSingletonTag.bind(null, style, styleIndex, false); remove = applyToSingletonTag.bind(null, style, styleIndex, true); } else { style = insertStyleElement(options); update = applyToTag.bind(null, style, options); remove = function remove() { removeStyleElement(style); }; } update(obj); return function updateStyle(newObj) { if (newObj) { if (newObj.css === obj.css && newObj.media === obj.media && newObj.sourceMap === obj.sourceMap) { return; } update(obj = newObj); } else { remove(); } }; } module.exports = function (list, options) { options = options || {}; // Force single-tag solution on IE6-9, which has a hard limit on the # of <style> // tags it will allow on a page if (!options.singleton && typeof options.singleton !== 'boolean') { options.singleton = isOldIE(); } list = list || []; var lastIdentifiers = modulesToDom(list, options); return function update(newList) { newList = newList || []; if (Object.prototype.toString.call(newList) !== '[object Array]') { return; } for (var i = 0; i < lastIdentifiers.length; i++) { var identifier = lastIdentifiers[i]; var index = getIndexByIdentifier(identifier); stylesInDom[index].references--; } var newLastIdentifiers = modulesToDom(newList, options); for (var _i = 0; _i < lastIdentifiers.length; _i++) { var _identifier = lastIdentifiers[_i]; var _index = getIndexByIdentifier(_identifier); if (stylesInDom[_index].references === 0) { stylesInDom[_index].updater(); stylesInDom.splice(_index, 1); } } lastIdentifiers = newLastIdentifiers; }; }; /***/ }), /* 2 */ /***/ (function (module, exports, __webpack_require__) { "use strict"; /* MIT License http://www.opensource.org/licenses/mit-license.php Author Tobias Koppers @sokra */ // css base code, injected by the css-loader // eslint-disable-next-line func-names module.exports = function (useSourceMap) { var list = []; // return the list of modules as css string list.toString = function toString() { return this.map(function (item) { var content = cssWithMappingToString(item, useSourceMap); if (item[2]) { return "@media ".concat(item[2], " {").concat(content, "}"); } return content; }).join(''); }; // import a list of modules into the list // eslint-disable-next-line func-names list.i = function (modules, mediaQuery, dedupe) { if (typeof modules === 'string') { // eslint-disable-next-line no-param-reassign modules = [ [null, modules, ''] ]; } var alreadyImportedModules = {}; if (dedupe) { for (var i = 0; i < this.length; i++) { // eslint-disable-next-line prefer-destructuring var id = this[i][0]; if (id != null) { alreadyImportedModules[id] = true; } } } for (var _i = 0; _i < modules.length; _i++) { var item = [].concat(modules[_i]); if (dedupe && alreadyImportedModules[item[0]]) { // eslint-disable-next-line no-continue continue; } if (mediaQuery) { if (!item[2]) { item[2] = mediaQuery; } else { item[2] = "".concat(mediaQuery, " and ").concat(item[2]); } } list.push(item); } }; return list; }; function cssWithMappingToString(item, useSourceMap) { var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring var cssMapping = item[3]; if (!cssMapping) { return content; } if (useSourceMap && typeof btoa === 'function') { var sourceMapping = toComment(cssMapping); var sourceURLs = cssMapping.sources.map(function (source) { return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */"); }); return [content].concat(sourceURLs).concat([sourceMapping]).join('\n'); } return [content].join('\n'); } // Adapted from convert-source-map (MIT) function toComment(sourceMap) { // eslint-disable-next-line no-undef var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))); var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64); return "/*# ".concat(data, " */"); } /***/ }), /* 3 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(13); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 4 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(15); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 5 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(23); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 6 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(25); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 7 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(27); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 8 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(9); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 9 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, ".noticejs-top{top:0;width:100%!important}.noticejs-top .item{border-radius:0!important;margin:0!important}.noticejs-topRight{top:10px;right:10px}.noticejs-topLeft{top:10px;left:10px}.noticejs-topCenter{top:10px;left:50%;transform:translate(-50%)}.noticejs-middleLeft,.noticejs-middleRight{right:10px;top:50%;transform:translateY(-50%)}.noticejs-middleLeft{left:10px}.noticejs-middleCenter{top:50%;left:50%;transform:translate(-50%,-50%)}.noticejs-bottom{bottom:0;width:100%!important}.noticejs-bottom .item{border-radius:0!important;margin:0!important}.noticejs-bottomRight{bottom:10px;right:10px}.noticejs-bottomLeft{bottom:10px;left:10px}.noticejs-bottomCenter{bottom:10px;left:50%;transform:translate(-50%)}.noticejs{font-family:Helvetica Neue,Helvetica,Arial,sans-serif}.noticejs .item{margin:0 0 10px;border-radius:3px;overflow:hidden}.noticejs .item .close{float:right;font-size:18px;font-weight:700;line-height:1;color:#fff;text-shadow:0 1px 0 #fff;opacity:1;margin-right:7px}.noticejs .item .close:hover{opacity:.5;color:#000}.noticejs .item a{color:#fff;border-bottom:1px dashed #fff}.noticejs .item a,.noticejs .item a:hover{text-decoration:none}.noticejs .success{background-color:#64ce83}.noticejs .success .noticejs-heading{background-color:#3da95c;color:#fff;padding:10px}.noticejs .success .noticejs-body{color:#fff;padding:10px}.noticejs .success .noticejs-body:hover{visibility:visible!important}.noticejs .success .noticejs-content{visibility:visible}.noticejs .info{background-color:#3ea2ff}.noticejs .info .noticejs-heading{background-color:#067cea;color:#fff;padding:10px}.noticejs .info .noticejs-body{color:#fff;padding:10px}.noticejs .info .noticejs-body:hover{visibility:visible!important}.noticejs .info .noticejs-content{visibility:visible}.noticejs .warning{background-color:#ff7f48}.noticejs .warning .noticejs-heading{background-color:#f44e06;color:#fff;padding:10px}.noticejs .warning .noticejs-body{color:#fff;padding:10px}.noticejs .warning .noticejs-body:hover{visibility:visible!important}.noticejs .warning .noticejs-content{visibility:visible}.noticejs .error{background-color:#e74c3c}.noticejs .error .noticejs-heading{background-color:#ba2c1d;color:#fff;padding:10px}.noticejs .error .noticejs-body{color:#fff;padding:10px}.noticejs .error .noticejs-body:hover{visibility:visible!important}.noticejs .error .noticejs-content{visibility:visible}.noticejs .progressbar{width:100%}.noticejs .progressbar .bar{width:1%;height:30px;background-color:#4caf50}.noticejs .success .noticejs-progressbar{width:100%;background-color:#64ce83;margin-top:-1px}.noticejs .success .noticejs-progressbar .noticejs-bar{width:100%;height:5px;background:#3da95c}.noticejs .info .noticejs-progressbar{width:100%;background-color:#3ea2ff;margin-top:-1px}.noticejs .info .noticejs-progressbar .noticejs-bar{width:100%;height:5px;background:#067cea}.noticejs .warning .noticejs-progressbar{width:100%;background-color:#ff7f48;margin-top:-1px}.noticejs .warning .noticejs-progressbar .noticejs-bar{width:100%;height:5px;background:#f44e06}.noticejs .error .noticejs-progressbar{width:100%;background-color:#e74c3c;margin-top:-1px}.noticejs .error .noticejs-progressbar .noticejs-bar{width:100%;height:5px;background:#ba2c1d}@keyframes noticejs-fadeOut{0%{opacity:1}to{opacity:0}}.noticejs-fadeOut{animation-name:noticejs-fadeOut}@keyframes noticejs-modal-in{to{opacity:.3}}@keyframes noticejs-modal-out{to{opacity:0}}.noticejs-rtl .noticejs-heading{direction:rtl}.noticejs-rtl .close{float:left!important;margin-left:7px;margin-right:0!important}.noticejs-rtl .noticejs-content{direction:rtl}.noticejs{position:fixed;z-index:10050;width:320px}.noticejs ::-webkit-scrollbar{width:8px}.noticejs ::-webkit-scrollbar-button{width:8px;height:5px}.noticejs ::-webkit-scrollbar-track{border-radius:10px}.noticejs ::-webkit-scrollbar-thumb{background:hsla(0,0%,100%,.5);border-radius:10px}.noticejs ::-webkit-scrollbar-thumb:hover{background:#fff}.noticejs-modal{position:fixed;width:100%;height:100%;background-color:#000;z-index:10000;opacity:.3;left:0;top:0}.noticejs-modal-open{opacity:0;animation:noticejs-modal-in .3s ease-out}.noticejs-modal-close{animation:noticejs-modal-out .3s ease-out;animation-fill-mode:forwards}", ""]); // Exports module.exports = exports; /***/ }), /* 10 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(11); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 11 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, ".el-button {\r\n display: inline-block;\r\n line-height: 1;\r\n white-space: nowrap;\r\n cursor: pointer;\r\n background: #fff;\r\n border: 1px solid #dcdfe6;\r\n color: #606266;\r\n -webkit-appearance: none;\r\n text-align: center;\r\n box-sizing: border-box;\r\n outline: none;\r\n margin: 0;\r\n transition: .1s;\r\n font-weight: 500;\r\n -moz-user-select: none;\r\n -webkit-user-select: none;\r\n -ms-user-select: none;\r\n padding: 12px 20px;\r\n font-size: 14px;\r\n border-radius: 4px;\r\n}\r\n\r\n.el-button--primary {\r\n color: #fff;\r\n background-color: #409eff;\r\n border-color: #409eff;\r\n}\r\n\r\n.el-button--primary:hover {\r\n background: #66b1ff;\r\n border-color: #66b1ff;\r\n color: #fff;\r\n}\r\n\r\n.el-button.is-disabled, .el-button.is-disabled:focus, .el-button.is-disabled:hover {\r\n color: #c0c4cc;\r\n cursor: not-allowed;\r\n background-image: none;\r\n background-color: #fff;\r\n border-color: #ebeef5;\r\n}\r\n\r\n.el-button--success {\r\n color: #fff;\r\n background-color: #67c23a;\r\n border-color: #67c23a;\r\n}\r\n.el-button--success:hover {\r\n background: #85ce61;\r\n border-color: #85ce61;\r\n color: #fff;\r\n}\r\n\r\n.el-button--danger {\r\n color: #fff;\r\n background-color: #f56c6c;\r\n border-color: #f56c6c;\r\n}\r\n\r\n.el-button--danger:hover {\r\n background: #f78989;\r\n border-color: #f78989;\r\n color: #fff;\r\n}\r\n\r\n.el-button--warning {\r\n color: #fff;\r\n background-color: #e6a23c;\r\n border-color: #e6a23c;\r\n}\r\n\r\n.el-button--warning:focus, .el-button--warning:hover {\r\n background: #ebb563;\r\n border-color: #ebb563;\r\n color: #fff;\r\n}", ""]); // Exports module.exports = exports; /***/ }), /* 12 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_SkinInfo_vue_vue_type_style_index_0_id_c03073cc_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(3); /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_SkinInfo_vue_vue_type_style_index_0_id_c03073cc_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_SkinInfo_vue_vue_type_style_index_0_id_c03073cc_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /* 13 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "\n.imgWrap[data-v-c03073cc] {\r\n text-align: center;\r\n background: url(https://buff.163.com/static/images/item_bg.png);\r\n background-size: cover;\r\n width: 88px;\r\n height: 66px;\n}\n.imgWrap img[data-v-c03073cc] {\r\n width: 66px;\r\n height: 66px;\r\n max-width: 88px;\n}\n.imgWrap .view-btn[data-v-c03073cc] {\r\n display: block;\r\n width: 48px;\r\n position: relative;\r\n top: -22px;\r\n left: 2px;\r\n color: white !important;\n}\n.infoWrap[data-v-c03073cc] {\r\n margin-left: 15px;\r\n display: flex;\r\n flex-direction: column;\r\n text-align: left;\r\n justify-content: flex-end;\n}\r\n", ""]); // Exports module.exports = exports; /***/ }), /* 14 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_CompareList_vue_vue_type_style_index_0_id_8a9384f8_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(4); /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_CompareList_vue_vue_type_style_index_0_id_8a9384f8_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_CompareList_vue_vue_type_style_index_0_id_8a9384f8_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /* 15 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "\n.compare__table[data-v-8a9384f8] {\r\n width: 100%;\r\n margin-bottom: 1rem;\r\n color: rgb(29,30,35);\r\n border-collapse: collapse;\r\n border-spacing: 0;\r\n text-align: center;\n}\n.compare__table th[data-v-8a9384f8], .compare__table td[data-v-8a9384f8]{\r\n border: 1px solid #dee2e6;\r\n padding: .75rem;\n}\n.compare__table thead th[data-v-8a9384f8]{\r\n color: #fff;\r\n background-color: #343a40;\r\n border-color: #454d55;\n}\n.compare__table tbody[data-v-8a9384f8] {\r\n display: block;\r\n height: 400px;\r\n overflow-y: scroll;\r\n overflow-x: hidden;\n}\n.compare__table thead[data-v-8a9384f8],\r\n.compare__table tbody tr[data-v-8a9384f8] {\r\n display: table;\r\n width: 100%;\r\n table-layout: fixed;\n}\n.compare__table thead[data-v-8a9384f8] {\r\n width: calc( 100% - 4px)\n}\n.compare__table tbody tr[data-v-8a9384f8]:hover {\r\n background: rgb(245,245,245);\n}\n.list-footer[data-v-8a9384f8]{\r\n text-align: right;\n}\r\n", ""]); // Exports module.exports = exports; /***/ }), /* 16 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(17); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 17 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, ".compare__wrap {\r\n position: absolute;\r\n z-index: 1015;\r\n}\r\n\r\n.compare__mask {\r\n width: 100%;\r\n height: 100%;\r\n background-color: rgba(0, 0, 0, 0.6);\r\n}\r\n\r\n.compare__dialog {\r\n padding: 10px;\r\n width: 800px;\r\n height: 500px;\r\n background-color: white;\r\n position: fixed;\r\n left: 0;\r\n right: 0;\r\n top: 250px;\r\n margin: auto;\r\n box-shadow: 0px 0px 10px 0px #888888;\r\n border-radius: 10px;\r\n}", ""]); // Exports module.exports = exports; /***/ }), /* 18 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(19); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 19 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "* {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n\r\n.compare3d__iframe {\r\n width: 100%;\r\n height: 100vh;\r\n border: 0px solid white;\r\n}\r\n\r\n.compare3d__tips {\r\n position: fixed;\r\n color: rgba(255, 255, 255, 0.6);\r\n font-size: 14px;\r\n top: 70px;\r\n left: 10px;\r\n cursor: default;\r\n user-select: none;\r\n}\r\n\r\n.compare3d__watermark {\r\n position: fixed;\r\n right: 10px;\r\n top: 70px;\r\n color: rgba(255, 255, 255, 0.6);\r\n z-index: 1;\r\n cursor: pointer;\r\n font-size: 24px;\r\n user-select: none;\r\n}", ""]); // Exports module.exports = exports; /***/ }), /* 20 */ /***/ (function (module, exports, __webpack_require__) { var api = __webpack_require__(1); var content = __webpack_require__(21); content = content.__esModule ? content.default : content; if (typeof content === 'string') { content = [ [module.i, content, ''] ]; } var options = {}; options.insert = "head"; options.singleton = false; var update = api(content, options); module.exports = content.locals || {}; /***/ }), /* 21 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "* {\r\n padding: 0;\r\n margin: 0;\r\n}\r\n\r\n.pdl-10 {\r\n padding-left: 10px;\r\n}\r\n\r\n.pdl-20 {\r\n padding-left: 20px;\r\n}\r\n\r\n.wrap {\r\n display: flex;\r\n width: 100%;\r\n height: 100%;\r\n}\r\n\r\n.compare2d__watermark {\r\n position: fixed;\r\n right: 10px;\r\n top: 10px;\r\n color: rgba(255, 255, 255, 0.6);\r\n z-index: 1;\r\n cursor: pointer;\r\n font-size: 24px;\r\n user-select: none;\r\n}\r\n\r\n.skin1-info {\r\n position: fixed;\r\n left: 260px;\r\n bottom: 10px;\r\n color: rgba(255, 255, 255, 0.5);\r\n z-index: 1;\r\n cursor: pointer;\r\n font-size: 16px;\r\n}\r\n\r\n.skin2-info {\r\n position: fixed;\r\n right: 10px;\r\n bottom: 10px;\r\n color: rgba(255, 255, 255, 0.5);\r\n z-index: 1;\r\n cursor: pointer;\r\n font-size: 16px;\r\n}\r\n\r\n.menu {\r\n background-color: rgb(29,30,35);\r\n cursor: default;\r\n height: 100%;\r\n flex: 0 0 250px;\r\n color: rgba(255, 255, 255, 0.7);\r\n font-size: 16px;\r\n font-family: \"微软雅黑\";\r\n user-select:none;\r\n}\r\n\r\n.view {\r\n width: 100%;\r\n height: 100%;\r\n flex: 1;\r\n}\r\n\r\n.menu__title {\r\n text-align: center;\r\n font-size: 30px;\r\n font-weight: 600;\r\n margin-top: 15px;\r\n margin-bottom: 30px;\r\n color: #f6ca9d;\r\n}\r\n\r\n.sub__view {\r\n margin-bottom: 30px;\r\n}\r\n\r\n.view__title {\r\n font-size: 26px;\r\n font-weight: 600;\r\n margin-bottom: 10px;\r\n color: rgba(255, 255, 255, 0.9);\r\n}\r\n\r\n.view__item {\r\n cursor: pointer;\r\n height: 56px;\r\n line-height: 56px;\r\n}\r\n\r\n.view__item:hover {\r\n background-color: rgb(23,24,28);\r\n}\r\n\r\n.is-active {\r\n background-color: rgb(23,24,28);\r\n color: white;\r\n}\r\n\r\n.texture__title {\r\n font-size: 26px;\r\n font-weight: 600;\r\n margin-bottom: 10px;\r\n color: rgba(255, 255, 255, 0.9);\r\n}\r\n\r\n.texture__item {\r\n cursor: pointer;\r\n height: 56px;\r\n line-height: 56px;\r\n}\r\n\r\n.texture__item:hover {\r\n background-color: rgb(23,24,28);\r\n}", ""]); // Exports module.exports = exports; /***/ }), /* 22 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Compare_vue_vue_type_style_index_0_id_cc8794de_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(5); /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Compare_vue_vue_type_style_index_0_id_cc8794de_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Compare_vue_vue_type_style_index_0_id_cc8794de_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /* 23 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "\n.panel[data-v-cc8794de] {\r\n width: 250px;\r\n height: 45px;\r\n background-color: rgba(255, 255, 255, 0.2);\r\n position: fixed;\r\n left: 0;\r\n bottom: 0;\r\n z-index: 1;\r\n padding: 10px;\r\n box-sizing: border-box;\r\n color: rgba(255,255,255,0.7);\n}\n.panel__slider[data-v-cc8794de] {\r\n display: inline-block;\r\n width: 160px;\n}\n.panel__option[data-v-cc8794de] {\r\n margin-bottom: 10px;\n}\n.panel__option[data-v-cc8794de]:last-child {\r\n margin-bottom: 0px;\n}\r\n", ""]); // Exports module.exports = exports; /***/ }), /* 24 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _style_loader_dist_cjs_js_css_loader_dist_cjs_js_vue_loader_dist_stylePostLoader_js_default_css_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(6); /* harmony import */ var _style_loader_dist_cjs_js_css_loader_dist_cjs_js_vue_loader_dist_stylePostLoader_js_default_css_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_style_loader_dist_cjs_js_css_loader_dist_cjs_js_vue_loader_dist_stylePostLoader_js_default_css_vue_type_style_index_0_lang_css__WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /* 25 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, ".slider-target,.slider-target *{-webkit-touch-callout:none;-webkit-tap-highlight-color:rgba(0,0,0,0);-webkit-user-select:none;touch-action:none;-ms-user-select:none;-moz-user-select:none;user-select:none;box-sizing:border-box}.slider-target{position:relative}.slider-base,.slider-connects{width:100%;height:100%;position:relative;z-index:1}.slider-connects{overflow:hidden;z-index:0}.slider-connect,.slider-origin{will-change:transform;position:absolute;z-index:1;top:0;right:0;-ms-transform-origin:0 0;-webkit-transform-origin:0 0;-webkit-transform-style:preserve-3d;transform-origin:0 0;transform-style:flat}.slider-connect{height:100%;width:100%}.slider-origin{height:10%;width:10%}.slider-txt-dir-rtl.slider-horizontal .slider-origin{left:0;right:auto}.slider-vertical .slider-origin{width:0}.slider-horizontal .slider-origin{height:0}.slider-handle{-webkit-backface-visibility:hidden;backface-visibility:hidden;position:absolute}.slider-touch-area{height:100%;width:100%}.slider-state-tap .slider-connect,.slider-state-tap .slider-origin{transition:transform .3s}.slider-state-drag *{cursor:inherit!important}.slider-horizontal{height:6px}.slider-horizontal .slider-handle{width:16px;height:16px;top:-6px;right:-8px}.slider-vertical{width:6px;height:300px}.slider-vertical .slider-handle{width:16px;height:16px;top:-8px;right:-6px}.slider-txt-dir-rtl.slider-horizontal .slider-handle{left:-8px;right:auto}.slider-base{background-color:#d4e0e7}.slider-base,.slider-connects{border-radius:3px}.slider-connect{background:#41b883;cursor:pointer}.slider-draggable{cursor:ew-resize}.slider-vertical .slider-draggable{cursor:ns-resize}.slider-handle{width:16px;height:16px;border-radius:50%;background:#fff;border:0;right:-8px;box-shadow:.5px .5px 2px 1px rgba(0,0,0,.32);cursor:-webkit-grab;cursor:grab}.slider-handle:focus{outline:none}.slider-active{box-shadow:.5px .5px 2px 1px rgba(0,0,0,.42);cursor:-webkit-grabbing;cursor:grabbing}[disabled] .slider-connect{background:#b8b8b8}[disabled].slider-handle,[disabled] .slider-handle,[disabled].slider-target{cursor:not-allowed}[disabled] .slider-tooltip{background:#b8b8b8;border-color:#b8b8b8}.slider-tooltip{position:absolute;display:block;font-size:14px;font-weight:500;white-space:nowrap;padding:2px 5px;min-width:20px;text-align:center;color:#fff;border-radius:5px;border:1px solid #41b883;background:#41b883}.slider-horizontal .slider-tooltip{transform:translate(-50%);left:50%;bottom:24px}.slider-horizontal .slider-tooltip:before{content:\"\";position:absolute;bottom:-10px;left:50%;width:0;height:0;border:5px solid transparent;border-top-color:inherit;transform:translate(-50%)}.slider-vertical .slider-tooltip{transform:translateY(-50%);top:50%;right:24px}.slider-vertical .slider-tooltip:before{content:\"\";position:absolute;right:-10px;top:50%;width:0;height:0;border:5px solid transparent;border-left-color:inherit;transform:translateY(-50%)}.slider-horizontal .slider-origin>.slider-tooltip{transform:translate(50%);left:auto;bottom:14px}.slider-vertical .slider-origin>.slider-tooltip{transform:translateY(-18px);top:auto;right:18px}.slider-pips,.slider-pips *{box-sizing:border-box}.slider-pips{position:absolute;color:#999}.slider-value{position:absolute;white-space:nowrap;text-align:center}.slider-value-sub{color:#ccc;font-size:10px}.slider-marker{position:absolute;background:#ccc}.slider-marker-large,.slider-marker-sub{background:#aaa}.slider-pips-horizontal{padding:10px 0;height:80px;top:100%;left:0;width:100%}.slider-value-horizontal{transform:translate(-50%,50%)}.slider-rtl .slider-value-horizontal{transform:translate(50%,50%)}.slider-marker-horizontal.slider-marker{margin-left:-1px;width:2px;height:5px}.slider-marker-horizontal.slider-marker-sub{height:10px}.slider-marker-horizontal.slider-marker-large{height:15px}.slider-pips-vertical{padding:0 10px;height:100%;top:0;left:100%}.slider-value-vertical{transform:translateY(-50%);padding-left:25px}.slider-rtl .slider-value-vertical{transform:translateY(50%)}.slider-marker-vertical.slider-marker{width:5px;height:2px;margin-top:-1px}.slider-marker-vertical.slider-marker-sub{width:10px}.slider-marker-vertical.slider-marker-large{width:15px}", ""]); // Exports module.exports = exports; /***/ }), /* 26 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Diff_vue_vue_type_style_index_1_id_990cae7c_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(7); /* harmony import */ var _node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Diff_vue_vue_type_style_index_1_id_990cae7c_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0___default = /*#__PURE__*/ __webpack_require__.n(_node_modules_style_loader_dist_cjs_js_node_modules_css_loader_dist_cjs_js_node_modules_vue_loader_dist_stylePostLoader_js_node_modules_vue_loader_dist_index_js_ref_8_0_Diff_vue_vue_type_style_index_1_id_990cae7c_scoped_true_lang_css__WEBPACK_IMPORTED_MODULE_0__); /* unused harmony reexport * */ /***/ }), /* 27 */ /***/ (function (module, exports, __webpack_require__) { // Imports var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(2); exports = ___CSS_LOADER_API_IMPORT___(false); // Module exports.push([module.i, "\n.panel[data-v-990cae7c] {\r\n width: 250px;\r\n height: 110px;\r\n background-color: rgba(255, 255, 255, 0.2);\r\n position: fixed;\r\n left: 0;\r\n bottom: 0;\r\n z-index: 1;\r\n padding: 10px;\r\n box-sizing: border-box;\r\n color: rgba(255,255,255,0.7);\n}\n.panel__slider[data-v-990cae7c] {\r\n display: inline-block;\r\n width: 160px;\n}\n.panel__option[data-v-990cae7c] {\r\n margin-bottom: 10px;\n}\n.panel__option[data-v-990cae7c]:last-child {\r\n margin-bottom: 0px;\n}\r\n", ""]); // Exports module.exports = exports; /***/ }), /* 28 */ /***/ (function (module, __webpack_exports__, __webpack_require__) { "use strict"; // ESM COMPAT FLAG __webpack_require__.r(__webpack_exports__); // CONCATENATED MODULE: ./src/pages/buff/packages/AddButton/apis/index.js function getAssetIdInfo(assetid) { return fetch('https://buff.163.com/market/csgo_inspect/3d?assetid=' + assetid, { method: 'GET', mode: 'no-cors', // cache: 'default', // credentials: 'include', }) } // EXTERNAL MODULE: ./src/utils/Notice/Notice.css var Notice = __webpack_require__(8); // CONCATENATED MODULE: ./src/utils/index.js // 公共 function getStrMiddle(str, before, after) { // 取中间文本 let m = str.match(new RegExp(before + '(.*?)' + after)); return m ? m[1] : false; } function showMessage(msg, type) { // type: success[green] error[red] warning[orange] info[blue] new NoticeJs({ text: msg, type: type, position: 'bottomRight', }).show(); } function getBase64(imgUrl, callback) { window.URL = window.URL || window.webkitURL; var xhr = new XMLHttpRequest(); xhr.open("get", imgUrl, true); xhr.responseType = "blob"; xhr.onload = function () { if (this.status == 200) { var blob = this.response; let oFileReader = new FileReader(); oFileReader.onloadend = function (e) { let base64 = e.target.result; callback(base64); }; oFileReader.readAsDataURL(blob); } } xhr.send(); } // 模拟鼠标按住拖动 function createMouseEvent(eventName, ofsx, ofsy) { let evt = document.createEvent('MouseEvents'); evt = new MouseEvent(eventName, { clientX: ofsx, clientY: ofsy, bubbles: true }) evt.isMessage = true; return evt }; function setMouseMove(dom, x, y) { dom.dispatchEvent(createMouseEvent("mousedown")); dom.dispatchEvent(createMouseEvent("mousemove", x, y)); dom.dispatchEvent(createMouseEvent("mouseup")); } // 获取URL参数 function getQueryString(name) { let reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)", "i"); let r = window.location.search.substr(1).match(reg); if (r != null) return unescape(r[2]); return null; } // CONCATENATED MODULE: ./src/utils/DomHook/DomHook.js class DomHook { constructor(selector, isSubtree, callback) { this.selector = selector; this.isSubtree = isSubtree; let targetNode = document.querySelector(this.selector); if (targetNode == null) { return; } let observer = new MutationObserver(function (mutations) { callback(mutations); }); this.observer = observer; this.observer.observe(targetNode, { attributes: true, childList: true, subtree: this.isSubtree }); } closeHook() { this.observer.disconnect(); } } // CONCATENATED MODULE: ./src/utils/DomHook/index.js // CONCATENATED MODULE: ./src/pages/buff/packages/AddButton/index.js let skinImg // 皮肤图片地址 let skinName // 皮肤名字 const LIST_MAX = 50 // 对比列表最多存放数 function init() { initDom(); initFunc(); let hook = new DomHook(".detail-tab-cont", false, (m => { for (let i = 0; i < m[0].addedNodes.length; i++) { let item = m[0].addedNodes[i]; if (item.id == "market-selling-list") { initDom(); initFunc(); break; } } })) } function initDom() { skinImg = getSkinImg(); skinName = getSkinName(); let domList = document.getElementsByClassName("ctag btn_3d"); for (let i = 0; i < domList.length; i++) { let parentDom = domList[i].parentNode; let trDom = domList[i].parentNode.parentNode.parentNode.parentNode; let assetid = domList[i].getAttribute("data-assetid"); let inspectUrl = trDom.getElementsByClassName("csgo_inspect_img_btn")[0].getAttribute("data-inspecturl"); if (!trDom.getElementsByClassName("btn-buy-order")[0]) { // 有自己上架的饰品 continue; } let price = trDom.getElementsByClassName("btn-buy-order")[0].getAttribute("data-price"); let shopDom = trDom.getElementsByClassName("j_shoptip_handler")[0]; let shopHref = shopDom.href; let shopImg = shopDom.getElementsByClassName("user-thum")[0].src; let shopName = shopDom.innerText; if (assetid) { let dom = document.createElement("a"); dom.className = "ctag compare-btn"; dom.setAttribute("assetid", assetid); dom.setAttribute("inspecturl", inspectUrl); dom.setAttribute("price", price); dom.setAttribute("shop_href", shopHref); dom.setAttribute("shop_img", shopImg); dom.setAttribute("shop_name", shopName); dom.innerHTML = `<b><i class="icon"><svg t="1621435629962" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="10682" width="16" height="16"><path d="M896 452.48l-211.2-122.88a32 32 0 0 0-16-4.48 32.64 32.64 0 0 0-16 4.48l-53.76 30.72v-60.16a32 32 0 0 0-16-27.52l-211.2-122.88a31.36 31.36 0 0 0-16-4.48 32 32 0 0 0-16 4.48L128 272a32 32 0 0 0-16 27.52V544a32 32 0 0 0 16 27.52l211.2 122.88a32 32 0 0 0 16 4.48 32.64 32.64 0 0 0 16-4.48l21.76-12.16V608l-37.76 21.76-179.84-104.32V320l180.48-105.6L535.68 320V526.08l-46.08 26.88v-55.04l14.08-8.32V416l-64 35.84a32 32 0 0 0-16 27.52V723.84a32 32 0 0 0 16 27.52l211.84 122.88a32 32 0 0 0 32 0l212.48-121.6a32 32 0 0 0 16-27.52V480a32 32 0 0 0-16-27.52z m-48.64 256l-179.84 103.68L488.32 704V626.56l94.08-54.4a32 32 0 0 0 16-27.52V434.56l69.76-40.32 179.84 104.32z" fill="#040c32" p-id="10683"></path></svg></i></b>加入对比`; parentDom.appendChild(dom); } } } function initFunc() { let domList = document.getElementsByClassName("compare-btn"); for (let i = 0; i < domList.length; i++) { domList[i].addEventListener("click", () => { let assetid = domList[i].getAttribute("assetid"); let inspectUrl = domList[i].getAttribute("inspecturl"); let price = domList[i].getAttribute("price"); let shopHref = domList[i].getAttribute("shop_href"); let shopImg = domList[i].getAttribute("shop_img"); let shopName = domList[i].getAttribute("shop_name"); onClickAddButton({ assetid: assetid, inspectUrl: inspectUrl, price: price, shopHref: shopHref, shopImg: shopImg, shopName: shopName }); }) } } function onClickAddButton(info) { // GM_deleteValue("CompareList"); // return getAssetIdInfo(info.assetid).then(res => { return res.text(); }).then(ret => { if (ret.indexOf("not found") !== -1 || ret.indexOf("不支持3D") !== -1) { showMessage("解析该饰品失败", "error"); return; } let doc = (new DOMParser()).parseFromString(ret, 'text/html'); let scripts = doc.scripts; let data = JSON.parse(getStrMiddle(scripts[scripts.length - 1].innerHTML, "var data = ", ";")); if (!data) { showMessage("解析失败 原因:未登录", "error"); return; } let obj = getSkinData(data); obj.assetid = info.assetid; obj.price = info.price; obj.inspectUrl = info.inspectUrl; obj.shopHref = info.shopHref; obj.shopImg = info.shopImg; obj.shopName = info.shopName; if (obj) { if (saveData2CompareList(obj)) { showMessage("加入对比列表成功", "success"); } else { showMessage("该饰品已存在于对比列表", "error"); } } else { showMessage("加入对比列表失败", "error"); } }).catch(err => { console.log(err); }) } function getSkinData(data) { // 构造对比列表里的饰品对象信息 let ret = data; if (data) { let i = 1; let textureList = []; while (`texture_${i}` in data.texture_url) { if (i > 1000) { // 熔断 break; } textureList.push({ id: `texture_${i}`, url: data.texture_url[`texture_${i}`] }); i++; } ret.textures = textureList; ret.name = skinName; ret.img_url = skinImg; ret.update_time = new Date().getTime(); } return ret; } function getSkinImg() { let ret = ""; let parent = document.getElementsByClassName("t_Center"); if (parent) { let imgDom = parent[0].getElementsByTagName("img"); if (imgDom) { ret = imgDom[0].src; } } return ret; } function getSkinName() { let ret = ""; let parent = document.getElementsByClassName("cru-goods"); for (let i = 0; i < parent.length; i++) { let item = parent[i]; ret += item.innerText; } return ret; } function saveData2CompareList(data) { let value = GM_getValue("CompareList") || "[]"; let compareList = JSON.parse(value); let isExist = false; for (let i = 0; i < compareList.length; i++) { if (data.assetid == compareList[i].assetid) { isExist = true; break; } } if (isExist) { return false; } if (compareList.length > LIST_MAX) { compareList.pop(); // 删除最后一个 } compareList.unshift(data); // 插入到第一个 let text = JSON.stringify(compareList); GM_setValue("CompareList", text); return true; } /* harmony default export */ var AddButton = ({ init }); // EXTERNAL MODULE: external "Vue" var external_Vue_ = __webpack_require__(0); // CONCATENATED MODULE: ./node_modules/vue-loader/dist/templateLoader.js??ref--5!./node_modules/vue-loader/dist??ref--8-0!./src/pages/buff/packages/CompareList/views/CompareList.vue?vue&type=template&id=8a9384f8&scoped=true const _withId = /*#__PURE__*/ Object(external_Vue_["withScopeId"])("data-v-8a9384f8") Object(external_Vue_["pushScopeId"])("data-v-8a9384f8") const _hoisted_1 = { class: "compare__table" } const _hoisted_2 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("thead", null, [ /*#__PURE__*/ Object(external_Vue_["createVNode"])("tr", null, [ /*#__PURE__*/ Object(external_Vue_["createVNode"])("th", { width: "7%" }), /*#__PURE__*/ Object(external_Vue_["createVNode"])("th", null, "饰品"), /*#__PURE__*/ Object(external_Vue_["createVNode"])("th", { width: "25%" }, "卖家"), /*#__PURE__*/ Object(external_Vue_["createVNode"])("th", { width: "15%" }, "检视") ]) ], -1 /* HOISTED */ ) const _hoisted_3 = { width: "7%" } const _hoisted_4 = { width: "25%", style: { "text-align": "left" } } const _hoisted_5 = { width: "15%" } const _hoisted_6 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("b", null, [ /*#__PURE__*/ Object(external_Vue_["createVNode"])("i", { class: "icon icon_3d" }) ], -1 /* HOISTED */ ) const _hoisted_7 = /*#__PURE__*/ Object(external_Vue_["createTextVNode"])("3D检视") const _hoisted_8 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("b", null, [ /*#__PURE__*/ Object(external_Vue_["createVNode"])("i", { class: "icon icon_game" }) ], -1 /* HOISTED */ ) const _hoisted_9 = /*#__PURE__*/ Object(external_Vue_["createTextVNode"])("社区服检视") const _hoisted_10 = { class: "list-footer" } const _hoisted_11 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "全部删除", -1 /* HOISTED */ ) const _hoisted_12 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "删除选中", -1 /* HOISTED */ ) const _hoisted_13 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "2D对比", -1 /* HOISTED */ ) const _hoisted_14 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "3D对比", -1 /* HOISTED */ ) Object(external_Vue_["popScopeId"])() const render = /*#__PURE__*/ _withId((_ctx, _cache, $props, $setup, $data, $options) => { const _component_skin_info = Object(external_Vue_["resolveComponent"])("skin-info") return (Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("div", null, [ Object(external_Vue_["createVNode"])("table", _hoisted_1, [ _hoisted_2, Object(external_Vue_["createVNode"])("tbody", null, [ (Object(external_Vue_["openBlock"])(true), Object(external_Vue_["createBlock"])(external_Vue_["Fragment"], null, Object(external_Vue_["renderList"])(_ctx.compareList, (item, index) => { return (Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("tr", { key: item.assetid }, [ Object(external_Vue_["createVNode"])("td", _hoisted_3, [ Object(external_Vue_["withDirectives"])(Object(external_Vue_["createVNode"])("input", { type: "checkbox", id: item.assetid, value: item.assetid, "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (_ctx.checkedList = $event)) }, null, 8 /* PROPS */ , ["id", "value"]), [ [external_Vue_["vModelCheckbox"], _ctx.checkedList] ]) ]), Object(external_Vue_["createVNode"])("td", null, [ Object(external_Vue_["createVNode"])(_component_skin_info, { assetid: item.assetid, imgUrl: item.img_url, viewUrl: item.inspectUrl, skinName: item.name, skinSeed: item.asset_info.paintseed, skinWear: item.asset_info.paintwear }, null, 8 /* PROPS */ , ["assetid", "imgUrl", "viewUrl", "skinName", "skinSeed", "skinWear"]) ]), Object(external_Vue_["createVNode"])("td", _hoisted_4, [ Object(external_Vue_["createVNode"])("a", { href: item.shopHref, class: "j_shoptip_handler", target: "_blank" }, [ Object(external_Vue_["createVNode"])("img", { src: item.shopImg, width: "30", height: "30", class: "user-thum" }, null, 8 /* PROPS */ , ["src"]), Object(external_Vue_["createTextVNode"])(" " + Object(external_Vue_["toDisplayString"])(item.shopName), 1 /* TEXT */ ) ], 8 /* PROPS */ , ["href"]) ]), Object(external_Vue_["createVNode"])("td", _hoisted_5, [ Object(external_Vue_["createVNode"])("a", { class: "ctag btn_3d", "data-assetid": item.assetid }, [ _hoisted_6, _hoisted_7 ], 8 /* PROPS */ , ["data-assetid"]), Object(external_Vue_["createVNode"])("a", { class: "ctag btn_game_cms", "data-assetid": item.assetid, target: "_blank" }, [ _hoisted_8, _hoisted_9 ], 8 /* PROPS */ , ["data-assetid"]) ]) ])) }), 128 /* KEYED_FRAGMENT */ )) ]) ]), Object(external_Vue_["createVNode"])("div", _hoisted_10, [ Object(external_Vue_["createVNode"])("button", { onClick: _cache[2] || (_cache[2] = (...args) => (_ctx.onClickClear && _ctx.onClickClear(...args))), type: "button", class: "el-button el-button--danger", style: { "margin-right": "10px", "width": "100px" } }, [ _hoisted_11 ]), Object(external_Vue_["createVNode"])("button", { onClick: _cache[3] || (_cache[3] = (...args) => (_ctx.onClickDelete && _ctx.onClickDelete(...args))), type: "button", class: "el-button el-button--warning", style: { "margin-right": "10px", "width": "100px" } }, [ _hoisted_12 ]), Object(external_Vue_["createVNode"])("button", { onClick: _cache[4] || (_cache[4] = (...args) => (_ctx.onClickCompare2d && _ctx.onClickCompare2d(...args))), type: "button", class: "el-button el-button--primary compare2d-btn", style: { "margin-right": "10px", "width": "100px" } }, [ _hoisted_13 ]), Object(external_Vue_["createVNode"])("button", { onClick: _cache[5] || (_cache[5] = (...args) => (_ctx.onClickCompare3d && _ctx.onClickCompare3d(...args))), type: "button", class: "el-button el-button--success compare3d-btn", style: { "width": "100px" } }, [ _hoisted_14 ]) ]) ])) }) // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/views/CompareList.vue?vue&type=template&id=8a9384f8&scoped=true // EXTERNAL MODULE: ./src/global/styles/index.css var styles = __webpack_require__(10); // CONCATENATED MODULE: ./node_modules/vue-loader/dist/templateLoader.js??ref--5!./node_modules/vue-loader/dist??ref--8-0!./src/pages/buff/packages/CompareList/components/SkinInfo.vue?vue&type=template&id=c03073cc&scoped=true const SkinInfovue_type_template_id_c03073cc_scoped_true_withId = /*#__PURE__*/ Object(external_Vue_["withScopeId"])("data-v-c03073cc") Object(external_Vue_["pushScopeId"])("data-v-c03073cc") const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_1 = { style: { "display": "flex" } } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_2 = { class: "imgWrap" } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_3 = { class: "infoWrap" } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_4 = { style: { "font-weight": "600" } } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_5 = { style: { "font-size": "12px", "color": "#959595" } } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_6 = { style: { "font-size": "12px", "color": "#959595" } } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_7 = { class: "wear" } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_8 = { class: "wear-pointer" } const SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_9 = /*#__PURE__*/ Object(external_Vue_["createStaticVNode"])("<div class=\"progress\" style=\"margin-bottom:5px;\" data-v-c03073cc><div class=\"progress-bar progress-bar-fn\" style=\"width:7%;\" title=\"崭新出厂\" data-v-c03073cc></div><div class=\"progress-bar progress-bar-success\" style=\"width:8%;\" title=\"略有磨损\" data-v-c03073cc></div><div class=\"progress-bar progress-bar-warning\" style=\"width:23%;\" title=\"久经沙场\" data-v-c03073cc></div><div class=\"progress-bar progress-bar-danger\" style=\"width:7%;\" title=\"破损不堪\" data-v-c03073cc></div><div class=\"progress-bar progress-bar-bs\" style=\"width:55%;\" title=\"战痕累累\" data-v-c03073cc></div></div>", 1) Object(external_Vue_["popScopeId"])() const SkinInfovue_type_template_id_c03073cc_scoped_true_render = /*#__PURE__*/ SkinInfovue_type_template_id_c03073cc_scoped_true_withId((_ctx, _cache, $props, $setup, $data, $options) => { return (Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_1, [ Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_2, [ Object(external_Vue_["createVNode"])("img", { src: _ctx.imgUrl }, null, 8 /* PROPS */ , ["src"]), Object(external_Vue_["createVNode"])("a", { href: "javascript:;", class: "shalow-btn shalow-btn-green csgo-inspect-view view-btn", "data-assetid": _ctx.assetid, "data-inspecturl": _ctx.viewUrl, "data-inspectversion": "10", "data-inspectsize": "2560x3538", "data-contextid": "2" }, "检视图", 8 /* PROPS */ , ["data-assetid", "data-inspecturl"]) ]), Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_3, [ Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_4, Object(external_Vue_["toDisplayString"])(_ctx.skinName), 1 /* TEXT */ ), Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_5, "模板:" + Object(external_Vue_["toDisplayString"])(_ctx.skinSeed), 1 /* TEXT */ ), Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_6, "磨损:" + Object(external_Vue_["toDisplayString"])(_ctx.skinWear), 1 /* TEXT */ ), Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_7, [ Object(external_Vue_["createVNode"])("div", SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_8, [ Object(external_Vue_["createVNode"])("div", { class: "wear-pointer-icon", style: `left: ${Number(_ctx.skinWear*100)}%` }, null, 4 /* STYLE */ ) ]), SkinInfovue_type_template_id_c03073cc_scoped_true_hoisted_9 ]) ]) ])) }) // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/components/SkinInfo.vue?vue&type=template&id=c03073cc&scoped=true // CONCATENATED MODULE: ./node_modules/vue-loader/dist??ref--8-0!./src/pages/buff/packages/CompareList/components/SkinInfo.vue?vue&type=script&lang=js /* harmony default export */ var SkinInfovue_type_script_lang_js = (Object(external_Vue_["defineComponent"])({ props: [ "imgUrl", // 图片地址 "viewUrl", // 检视地址 "skinName", // 皮肤名 "skinWear", // 皮肤磨损 "skinSeed", // 皮肤模板 "assetid", // 皮肤id ], setup(props, ctx) { return {}; }, })); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/components/SkinInfo.vue?vue&type=script&lang=js // EXTERNAL MODULE: ./src/pages/buff/packages/CompareList/components/SkinInfo.vue?vue&type=style&index=0&id=c03073cc&scoped=true&lang=css var SkinInfovue_type_style_index_0_id_c03073cc_scoped_true_lang_css = __webpack_require__(12); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/components/SkinInfo.vue SkinInfovue_type_script_lang_js.render = SkinInfovue_type_template_id_c03073cc_scoped_true_render SkinInfovue_type_script_lang_js.__scopeId = "data-v-c03073cc" /* harmony default export */ var SkinInfo = (SkinInfovue_type_script_lang_js); // CONCATENATED MODULE: ./node_modules/vue-loader/dist??ref--8-0!./src/pages/buff/packages/CompareList/views/CompareList.vue?vue&type=script&lang=js /* harmony default export */ var CompareListvue_type_script_lang_js = (Object(external_Vue_["defineComponent"])({ components: { SkinInfo: SkinInfo }, setup(props, ctx) { let compareList = Object(external_Vue_["ref"])([]); let checkedList = Object(external_Vue_["ref"])([]); const updateCompareList = () => { compareList.value = JSON.parse(GM_getValue("CompareList") || "[]") || []; } const onClickDelete = () => { for (let i = 0; i < checkedList.value.length; i++) { let item = checkedList.value[i]; let index = getIndexByAssetId(item); // 删除元素 compareList.value.splice(index, 1); } checkedList.value.length = 0; // 处理完后保存数据 GM_setValue("CompareList", JSON.stringify(compareList.value)); // 刷新列表 updateCompareList(); } const onClickClear = () => { if (confirm("是否全部删除?")) { GM_setValue("CompareList", "[]"); updateCompareList(); showMessage("全部删除成功", "success"); } } const getIndexByAssetId = (assetid) => { let ret = -1; for (let i = 0; i < compareList.value.length; i++) { let item = compareList.value[i]; if (item.assetid == assetid) { ret = i; break; } } return ret; } const onClickCompare2d = () => { if (checkedList.value.length == 2) { // 判断是不是同类饰品 let compare2dData = []; let textureNum = 0; let isSame = true; for (let i = 0; i < checkedList.value.length; i++) { let item = checkedList.value[i]; let index = getIndexByAssetId(item); if (i == 0) { textureNum = compareList.value[index].textures.length; } else if (compareList.value[index].textures.length !== textureNum) { isSame = false; break; } compare2dData.push(compareList.value[index]); } if (isSame) { GM_setValue("CompareList_2D", JSON.stringify(compare2dData)); window.open("https://spect.fp.ps.netease.com/compare2d"); } else { showMessage("【2D对比】请选择同类型的饰品", "error"); } } else { showMessage("【2D对比】请选择2项", "error"); } } const onClickCompare3d = () => { if (checkedList.value.length > 9) { showMessage("【3D对比】最多选择9项", "error"); return; } let compare3dData = []; for (let i = 0; i < checkedList.value.length; i++) { let item = checkedList.value[i]; let index = getIndexByAssetId(item); compare3dData.push(compareList.value[index]); } GM_setValue("CompareList_3D", JSON.stringify(compare3dData)); window.open("https://buff.163.com/compare3d"); } Object(external_Vue_["onMounted"])(() => { updateCompareList(); }) return { compareList, checkedList, onClickDelete, onClickCompare2d, onClickCompare3d, onClickClear } }, })); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/views/CompareList.vue?vue&type=script&lang=js // EXTERNAL MODULE: ./src/pages/buff/packages/CompareList/views/CompareList.vue?vue&type=style&index=0&id=8a9384f8&scoped=true&lang=css var CompareListvue_type_style_index_0_id_8a9384f8_scoped_true_lang_css = __webpack_require__(14); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/views/CompareList.vue CompareListvue_type_script_lang_js.render = render CompareListvue_type_script_lang_js.__scopeId = "data-v-8a9384f8" /* harmony default export */ var CompareList = (CompareListvue_type_script_lang_js); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/views/index.js // EXTERNAL MODULE: ./src/pages/buff/packages/CompareList/styles/index.css var CompareList_styles = __webpack_require__(16); // CONCATENATED MODULE: ./src/pages/buff/packages/CompareList/index.js function CompareList_init() { CompareList_initDom(); CompareList_initFunc(); // createApp(CompareList).mount("#j_mybackpack"); } function CompareList_initDom() { let a = document.createElement("li"); a.className = "j_drop-handler"; a.id = "comparelist" a.innerHTML = `<a href="javascript: void(0);"><strong>对比列表</strong></a> <i class="icon icon_new" style="display: none;"></i>` let b = document.querySelector(".nav > ul"); b.appendChild(a); } function CompareList_initFunc() { let body = document.body; document.getElementById("comparelist").addEventListener("click", () => { onClickCloseCompareList(); let a = document.createElement("div"); a.className = "compare__wrap"; a.style.width = `${body.offsetWidth}px`; a.style.height = `${body.offsetHeight}px`; a.innerHTML = ` <div class="compare__dialog" id="compare__app"> </div> <div class="compare__mask"></div> ` body.insertBefore(a, body.childNodes[0]); document.getElementsByClassName("compare__mask")[0].addEventListener("click", () => { onClickCloseCompareList(); }); let app = Object(external_Vue_["createApp"])(CompareList); app.mount("#compare__app"); // createApp(CompareList).mount("#compare__app"); // createApp(CompareList).mount("#compare__app"); // console.log(JSON.parse(GM_getValue("CompareList") || "[]")) }); } function onClickCloseCompareList() { let lastDom = document.getElementsByClassName("compare__wrap")[0]; if (lastDom) { lastDom.remove(); } } /* harmony default export */ var packages_CompareList = ({ init: CompareList_init }); // EXTERNAL MODULE: ./src/pages/buff/packages/Compare3D/styles/index.css var Compare3D_styles = __webpack_require__(18); // CONCATENATED MODULE: ./src/pages/buff/packages/Compare3D/index.js // 1. 收集所有的模型iframe // 2. 给每个iframe设置拖拽事件 // 3. 将事件传给父页面 // 4. 父页面将事件传递给其他的子页面 function Compare3D_init() { clearDefaultHtml(); Compare3D_initDom(); initMessage(handleMessage); Compare3D_initFunc(); } function clearDefaultHtml() { document.title = "CSGO饰品对比 - 3D"; document.body.innerHTML = ""; document.body.style.background = ""; document.querySelectorAll("link").forEach(item => item.remove()) } function getModelLinks() { let ret = []; let data = JSON.parse(GM_getValue("CompareList_3D") || "[]") || []; for (let i = 0; i < data.length; i++) { let item = data[i]; ret.push("https://buff.163.com/market/csgo_inspect/3d?compare=true&assetid=" + item.assetid); } return ret; } function Compare3D_initDom() { let links = getModelLinks(); let html = ` <div class="compare3d__tips"> <span>使用说明:</span> <br/> <span>1. 尽量以直线轨迹拖动,请勿按住来回拖动否则会不同步</span> <br/> <span>2. 按键盘1~9键可以快速切换模型</span> <br/> <span>3. 按回车键可让所有模型归位</span> <br/> <span>4. 请勿在F12下操作,否则会不同步</span> <br/> <span>5. 模型加载需要时间,请全部加载完再操作</span> </div> <div class="compare3d__watermark"> <span>--By 小淳</span> </div> `; for (let i = 0; i < links.length; i++) { // id用于锚点跳转 html += `<iframe id="model${i+1}" class="compare3d__iframe" src="${links[i]}&index=${i+1}"></iframe>` } let a = document.createElement("div"); a.className = "compare3d__wrap"; a.innerHTML = html; document.body.appendChild(a); } function Compare3D_initFunc() { // 父页面锚点快捷键实现 document.addEventListener("keydown", e => { location.href = "https://buff.163.com/compare3d#model" + e.key; }) document.getElementsByClassName("compare3d__watermark")[0].addEventListener("click", (e) => { e.stopPropagation(); window.open("https://github.com/qianjiachun/csgo-skin-compare"); }) document.getElementsByClassName("compare3d__tips")[0].onclick = (e) => { e.stopPropagation(); } } function initMessage(callback) { window.addEventListener("message", (e) => { callback(e.data); }) } function handleMessage(msg) { let models = document.getElementsByClassName("compare3d__iframe"); switch (msg.cmd) { case "keydown": // iframe按下键盘,用于锚点跳转 if (msg.value == "Enter") { // 重置 for (let i = 0; i < models.length; i++) { postMessage(models[i].contentWindow, { cmd: "reset", value: 0 }); } } else if (!isNaN(msg.value)) { location.href = "https://buff.163.com/compare3d#model" + msg.value; } break; case "rotate": // 得到旋转信息,旋转其他的model for (let i = 0; i < models.length; i++) { if (Number(msg.index) !== i + 1) { // 排除自己 postMessage(models[i].contentWindow, { cmd: "rotate", value: msg.value }); } } break; default: break; } } function postMessage(dom, msg) { dom.postMessage(msg); } /* harmony default export */ var Compare3D = ({ init: Compare3D_init }); // CONCATENATED MODULE: ./src/pages/buff/packages/Inspect3D/index.js // 每个iframe的子页面 let Inspect3D_index; let isMouseDown = false; let mouseDownInfo = {}; let mouseMoveInfo = {}; function Inspect3D_init() { Inspect3D_index = getQueryString("index"); Inspect3D_initMessage(Inspect3D_handleMessage); Inspect3D_initFunc(); } function Inspect3D_initMessage(callback) { window.addEventListener("message", e => { callback(e.data); }) } function Inspect3D_handleMessage(msg) { let dom = document.querySelector("canvas"); switch (msg.cmd) { case "rotate": setMouseMove(dom, msg.value.x, msg.value.y); break; case "reset": buffManager.resetScene(); break; default: break; } } function Inspect3D_initFunc() { let dom = document.querySelector("canvas"); // 锚点切换 window.addEventListener("keydown", e => { Inspect3D_postMessage({ cmd: "keydown", value: e.key }) }) // 鼠标拖拽 dom.addEventListener("mousedown", (e) => { if (e.isMessage) { return; } isMouseDown = true; mouseDownInfo = { x: e.pageX, y: e.pageY } }) dom.addEventListener("mousemove", (e) => { if (e.isMessage) { return; } if (isMouseDown) { mouseMoveInfo = { x: e.pageX - mouseDownInfo.x, y: e.pageY - mouseDownInfo.y } } }) document.body.addEventListener("mouseup", (e) => { if (e.isMessage) { return; } console.log(mouseMoveInfo) isMouseDown = false; Inspect3D_postMessage({ cmd: "rotate", index: Inspect3D_index, value: mouseMoveInfo }); }) document.getElementById("pc").onclick = (e) => { // 阻止操作面板影响 e.stopPropagation(); } } function Inspect3D_postMessage(msg) { window.parent.postMessage(msg); } /* harmony default export */ var Inspect3D = ({ init: Inspect3D_init }); // CONCATENATED MODULE: ./src/pages/buff/packages/index.js function initPkg() { if (location.href.indexOf("goods") !== -1) { let timer = setInterval(() => { if (document.getElementsByClassName("t_Left")) { initMarket(); clearInterval(timer); } }, 300); } else if (location.href.indexOf("compare3d") !== -1) { initCompare3D(); } else if (location.href.indexOf("market/csgo_inspect/3d") !== -1) { initInspect3D(); } } function initMarket() { AddButton.init(); packages_CompareList.init(); } function initCompare3D() { Compare3D.init(); } function initInspect3D() { Inspect3D.init(); } // CONCATENATED MODULE: ./src/pages/buff/index.js function beforeInit() { } function buff_init() { beforeInit(); initPkg(); } /* harmony default export */ var buff = ({ init: buff_init }); // EXTERNAL MODULE: ./src/pages/spect/packages/Compare2D/styles/index.css var Compare2D_styles = __webpack_require__(20); // CONCATENATED MODULE: ./node_modules/vue-loader/dist/templateLoader.js??ref--5!./node_modules/vue-loader/dist??ref--8-0!./src/pages/spect/packages/Compare2D/views/Compare.vue?vue&type=template&id=cc8794de&scoped=true const Comparevue_type_template_id_cc8794de_scoped_true_withId = /*#__PURE__*/ Object(external_Vue_["withScopeId"])("data-v-cc8794de") Object(external_Vue_["pushScopeId"])("data-v-cc8794de") const Comparevue_type_template_id_cc8794de_scoped_true_hoisted_1 = { class: "panel" } const Comparevue_type_template_id_cc8794de_scoped_true_hoisted_2 = { class: "panel__option" } const Comparevue_type_template_id_cc8794de_scoped_true_hoisted_3 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "明亮度:", -1 /* HOISTED */ ) Object(external_Vue_["popScopeId"])() const Comparevue_type_template_id_cc8794de_scoped_true_render = /*#__PURE__*/ Comparevue_type_template_id_cc8794de_scoped_true_withId((_ctx, _cache, $props, $setup, $data, $options) => { const _component_Slider = Object(external_Vue_["resolveComponent"])("Slider") return (Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("div", { class: "ComparisonSlider", style: _ctx.styleWrap }, [ Object(external_Vue_["createVNode"])("div", Comparevue_type_template_id_cc8794de_scoped_true_hoisted_1, [ Object(external_Vue_["createVNode"])("div", Comparevue_type_template_id_cc8794de_scoped_true_hoisted_2, [ Comparevue_type_template_id_cc8794de_scoped_true_hoisted_3, Object(external_Vue_["createVNode"])(_component_Slider, { class: "panel__slider", modelValue: _ctx.brightnessValue, "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (_ctx.brightnessValue = $event)), tooltips: false, max: 20, step: -1, onUpdate: _ctx.onUpdateSliderBrightness }, null, 8 /* PROPS */ , ["modelValue", "onUpdate"]) ]) ]), Object(external_Vue_["createVNode"])("div", { class: "ComparisonSlider__Before", style: _ctx.styleBefore, ref: "before" }, null, 4 /* STYLE */ ), Object(external_Vue_["createVNode"])("div", { class: "ComparisonSlider__After", style: _ctx.styleAfter, ref: "after" }, null, 4 /* STYLE */ ) ], 4 /* STYLE */ )) }) // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Compare.vue?vue&type=template&id=cc8794de&scoped=true // CONCATENATED MODULE: ./node_modules/@vueform/slider/dist/slider.js function slider_l(t) { return -1 !== [null, void 0, !1].indexOf(t) } function slider_c(t) { var e = { exports: {} }; return t(e, e.exports), e.exports } function slider_f(t) { return (slider_f = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t })(t) } var slider_p = slider_c((function (t, e) { t.exports = function () { var t = ["decimals", "thousand", "mark", "prefix", "suffix", "encoder", "decoder", "negativeBefore", "negative", "edit", "undo"]; function e(t) { return t.split("").reverse().join("") } function r(t, e) { return t.substring(0, e.length) === e } function n(t, e) { return t.slice(-1 * e.length) === e } function i(t, e, r) { if ((t[e] || t[r]) && t[e] === t[r]) throw new Error(e) } function o(t) { return "number" == typeof t && isFinite(t) } function a(t, e) { return t = t.toString().split("e"), (+((t = (t = Math.round(+(t[0] + "e" + (t[1] ? +t[1] + e : e)))).toString().split("e"))[0] + "e" + (t[1] ? +t[1] - e : -e))).toFixed(e) } function s(t, r, n, i, s, u, l, c, f, p, d, h) { var m, v, g, b = h, y = "", x = ""; return u && (h = u(h)), !!o(h) && (!1 !== t && 0 === parseFloat(h.toFixed(t)) && (h = 0), h < 0 && (m = !0, h = Math.abs(h)), !1 !== t && (h = a(h, t)), -1 !== (h = h.toString()).indexOf(".") ? (g = (v = h.split("."))[0], n && (y = n + v[1])) : g = h, r && (g = e(g).match(/.{1,3}/g), g = e(g.join(e(r)))), m && c && (x += c), i && (x += i), m && f && (x += f), x += g, x += y, s && (x += s), p && (x = p(x, b)), x) } function u(t, e, i, a, s, u, l, c, f, p, d, h) { var m, v = ""; return d && (h = d(h)), !(!h || "string" != typeof h) && (c && r(h, c) && (h = h.replace(c, ""), m = !0), a && r(h, a) && (h = h.replace(a, "")), f && r(h, f) && (h = h.replace(f, ""), m = !0), s && n(h, s) && (h = h.slice(0, -1 * s.length)), e && (h = h.split(e).join("")), i && (h = h.replace(i, ".")), m && (v += "-"), "" !== (v = (v += h).replace(/[^0-9\.\-.]/g, "")) && (v = Number(v), l && (v = l(v)), !!o(v) && v)) } function l(e) { var r, n, o, a = {}; for (void 0 === e.suffix && (e.suffix = e.postfix), r = 0; r < t.length; r += 1) if (void 0 === (o = e[n = t[r]])) "negative" !== n || a.negativeBefore ? "mark" === n && "." !== a.thousand ? a[n] = "." : a[n] = !1 : a[n] = "-"; else if ("decimals" === n) { if (!(o >= 0 && o < 8)) throw new Error(n); a[n] = o } else if ("encoder" === n || "decoder" === n || "edit" === n || "undo" === n) { if ("function" != typeof o) throw new Error(n); a[n] = o } else { if ("string" != typeof o) throw new Error(n); a[n] = o } return i(a, "mark", "thousand"), i(a, "prefix", "negative"), i(a, "prefix", "negativeBefore"), a } function c(e, r, n) { var i, o = []; for (i = 0; i < t.length; i += 1) o.push(e[t[i]]); return o.push(n), r.apply("", o) } function p(t) { if (!(this instanceof p)) return new p(t); "object" === slider_f(t) && (t = l(t), this.to = function (e) { return c(t, s, e) }, this.from = function (e) { return c(t, u, e) }) } return p }() })); function slider_d(t) { return (slider_d = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (t) { return typeof t } : function (t) { return t && "function" == typeof Symbol && t.constructor === Symbol && t !== Symbol.prototype ? "symbol" : typeof t })(t) } var h = slider_c((function (t, e) { t.exports = function () { var t = "14.6.3"; function e(t) { return "object" === slider_d(t) && "function" == typeof t.to && "function" == typeof t.from } function r(t) { t.parentElement.removeChild(t) } function n(t) { return null != t } function i(t) { t.preventDefault() } function o(t) { return t.filter((function (t) { return !this[t] && (this[t] = !0) }), {}) } function a(t, e) { return Math.round(t / e) * e } function s(t, e) { var r = t.getBoundingClientRect(), n = t.ownerDocument, i = n.documentElement, o = g(n); return /webkit.*Chrome.*Mobile/i.test(navigator.userAgent) && (o.x = 0), e ? r.top + o.y - i.clientTop : r.left + o.x - i.clientLeft } function u(t) { return "number" == typeof t && !isNaN(t) && isFinite(t) } function l(t, e, r) { r > 0 && (h(t, e), setTimeout((function () { m(t, e) }), r)) } function c(t) { return Math.max(Math.min(t, 100), 0) } function f(t) { return Array.isArray(t) ? t : [t] } function p(t) { var e = (t = String(t)).split("."); return e.length > 1 ? e[1].length : 0 } function h(t, e) { t.classList && !/\s/.test(e) ? t.classList.add(e) : t.className += " " + e } function m(t, e) { t.classList && !/\s/.test(e) ? t.classList.remove(e) : t.className = t.className.replace(new RegExp("(^|\\b)" + e.split(" ").join("|") + "(\\b|$)", "gi"), " ") } function v(t, e) { return t.classList ? t.classList.contains(e) : new RegExp("\\b" + e + "\\b").test(t.className) } function g(t) { var e = void 0 !== window.pageXOffset, r = "CSS1Compat" === (t.compatMode || ""); return { x: e ? window.pageXOffset : r ? t.documentElement.scrollLeft : t.body.scrollLeft, y: e ? window.pageYOffset : r ? t.documentElement.scrollTop : t.body.scrollTop } } function b() { return window.navigator.pointerEnabled ? { start: "pointerdown", move: "pointermove", end: "pointerup" } : window.navigator.msPointerEnabled ? { start: "MSPointerDown", move: "MSPointerMove", end: "MSPointerUp" } : { start: "mousedown touchstart", move: "mousemove touchmove", end: "mouseup touchend" } } function y() { var t = !1; try { var e = Object.defineProperty({}, "passive", { get: function () { t = !0 } }); window.addEventListener("test", null, e) } catch (t) {} return t } function x() { return window.CSS && CSS.supports && CSS.supports("touch-action", "none") } function S(t, e) { return 100 / (e - t) } function w(t, e, r) { return 100 * e / (t[r + 1] - t[r]) } function E(t, e) { return w(t, t[0] < 0 ? e + Math.abs(t[0]) : e - t[0], 0) } function C(t, e) { return e * (t[1] - t[0]) / 100 + t[0] } function N(t, e) { for (var r = 1; t >= e[r];) r += 1; return r } function P(t, e, r) { if (r >= t.slice(-1)[0]) return 100; var n = N(r, t), i = t[n - 1], o = t[n], a = e[n - 1], s = e[n]; return a + E([i, o], r) / S(a, s) } function A(t, e, r) { if (r >= 100) return t.slice(-1)[0]; var n = N(r, e), i = t[n - 1], o = t[n], a = e[n - 1]; return C([i, o], (r - a) * S(a, e[n])) } function k(t, e, r, n) { if (100 === n) return n; var i = N(n, t), o = t[i - 1], s = t[i]; return r ? n - o > (s - o) / 2 ? s : o : e[i - 1] ? t[i - 1] + a(n - t[i - 1], e[i - 1]) : n } function U(e, r, n) { var i; if ("number" == typeof r && (r = [r]), !Array.isArray(r)) throw new Error("noUiSlider (" + t + "): 'range' contains invalid value."); if (!u(i = "min" === e ? 0 : "max" === e ? 100 : parseFloat(e)) || !u(r[0])) throw new Error("noUiSlider (" + t + "): 'range' value isn't numeric."); n.xPct.push(i), n.xVal.push(r[0]), i ? n.xSteps.push(!isNaN(r[1]) && r[1]) : isNaN(r[1]) || (n.xSteps[0] = r[1]), n.xHighestCompleteStep.push(0) } function V(t, e, r) { if (e) if (r.xVal[t] !== r.xVal[t + 1]) { r.xSteps[t] = w([r.xVal[t], r.xVal[t + 1]], e, 0) / S(r.xPct[t], r.xPct[t + 1]); var n = (r.xVal[t + 1] - r.xVal[t]) / r.xNumSteps[t], i = Math.ceil(Number(n.toFixed(3)) - 1), o = r.xVal[t] + r.xNumSteps[t] * i; r.xHighestCompleteStep[t] = o } else r.xSteps[t] = r.xHighestCompleteStep[t] = r.xVal[t] } function M(t, e, r) { var n; this.xPct = [], this.xVal = [], this.xSteps = [r || !1], this.xNumSteps = [!1], this.xHighestCompleteStep = [], this.snap = e; var i = []; for (n in t) t.hasOwnProperty(n) && i.push([t[n], n]); for (i.length && "object" === slider_d(i[0][0]) ? i.sort((function (t, e) { return t[0][0] - e[0][0] })) : i.sort((function (t, e) { return t[0] - e[0] })), n = 0; n < i.length; n++) U(i[n][1], i[n][0], this); for (this.xNumSteps = this.xSteps.slice(0), n = 0; n < this.xNumSteps.length; n++) V(n, this.xNumSteps[n], this) } M.prototype.getDistance = function (e) { var r, n = []; for (r = 0; r < this.xNumSteps.length - 1; r++) { var i = this.xNumSteps[r]; if (i && e / i % 1 != 0) throw new Error("noUiSlider (" + t + "): 'limit', 'margin' and 'padding' of " + this.xPct[r] + "% range must be divisible by step."); n[r] = w(this.xVal, e, r) } return n }, M.prototype.getAbsoluteDistance = function (t, e, r) { var n, i = 0; if (t < this.xPct[this.xPct.length - 1]) for (; t > this.xPct[i + 1];) i++; else t === this.xPct[this.xPct.length - 1] && (i = this.xPct.length - 2); r || t !== this.xPct[i + 1] || i++; var o = 1, a = e[i], s = 0, u = 0, l = 0, c = 0; for (n = r ? (t - this.xPct[i]) / (this.xPct[i + 1] - this.xPct[i]) : (this.xPct[i + 1] - t) / (this.xPct[i + 1] - this.xPct[i]); a > 0;) s = this.xPct[i + 1 + c] - this.xPct[i + c], e[i + c] * o + 100 - 100 * n > 100 ? (u = s * n, o = (a - 100 * n) / e[i + c], n = 1) : (u = e[i + c] * s / 100 * o, o = 0), r ? (l -= u, this.xPct.length + c >= 1 && c--) : (l += u, this.xPct.length - c >= 1 && c++), a = e[i + c] * o; return t + l }, M.prototype.toStepping = function (t) { return t = P(this.xVal, this.xPct, t) }, M.prototype.fromStepping = function (t) { return A(this.xVal, this.xPct, t) }, M.prototype.getStep = function (t) { return t = k(this.xPct, this.xSteps, this.snap, t) }, M.prototype.getDefaultStep = function (t, e, r) { var n = N(t, this.xPct); return (100 === t || e && t === this.xPct[n - 1]) && (n = Math.max(n - 1, 1)), (this.xVal[n] - this.xVal[n - 1]) / r }, M.prototype.getNearbySteps = function (t) { var e = N(t, this.xPct); return { stepBefore: { startValue: this.xVal[e - 2], step: this.xNumSteps[e - 2], highestStep: this.xHighestCompleteStep[e - 2] }, thisStep: { startValue: this.xVal[e - 1], step: this.xNumSteps[e - 1], highestStep: this.xHighestCompleteStep[e - 1] }, stepAfter: { startValue: this.xVal[e], step: this.xNumSteps[e], highestStep: this.xHighestCompleteStep[e] } } }, M.prototype.countStepDecimals = function () { var t = this.xNumSteps.map(p); return Math.max.apply(null, t) }, M.prototype.convert = function (t) { return this.getStep(this.toStepping(t)) }; var D = { to: function (t) { return void 0 !== t && t.toFixed(2) }, from: Number }, O = { target: "target", base: "base", origin: "origin", handle: "handle", handleLower: "handle-lower", handleUpper: "handle-upper", touchArea: "touch-area", horizontal: "horizontal", vertical: "vertical", background: "background", connect: "connect", connects: "connects", ltr: "ltr", rtl: "rtl", textDirectionLtr: "txt-dir-ltr", textDirectionRtl: "txt-dir-rtl", draggable: "draggable", drag: "state-drag", tap: "state-tap", active: "active", tooltip: "tooltip", pips: "pips", pipsHorizontal: "pips-horizontal", pipsVertical: "pips-vertical", marker: "marker", markerHorizontal: "marker-horizontal", markerVertical: "marker-vertical", markerNormal: "marker-normal", markerLarge: "marker-large", markerSub: "marker-sub", value: "value", valueHorizontal: "value-horizontal", valueVertical: "value-vertical", valueNormal: "value-normal", valueLarge: "value-large", valueSub: "value-sub" }, F = { tooltips: ".__tooltips", aria: ".__aria" }; function L(r) { if (e(r)) return !0; throw new Error("noUiSlider (" + t + "): 'format' requires 'to' and 'from' methods.") } function j(e, r) { if (!u(r)) throw new Error("noUiSlider (" + t + "): 'step' is not numeric."); e.singleStep = r } function z(e, r) { if (!u(r)) throw new Error("noUiSlider (" + t + "): 'keyboardPageMultiplier' is not numeric."); e.keyboardPageMultiplier = r } function H(e, r) { if (!u(r)) throw new Error("noUiSlider (" + t + "): 'keyboardDefaultStep' is not numeric."); e.keyboardDefaultStep = r } function q(e, r) { if ("object" !== slider_d(r) || Array.isArray(r)) throw new Error("noUiSlider (" + t + "): 'range' is not an object."); if (void 0 === r.min || void 0 === r.max) throw new Error("noUiSlider (" + t + "): Missing 'min' or 'max' in 'range'."); if (r.min === r.max) throw new Error("noUiSlider (" + t + "): 'range' 'min' and 'max' cannot be equal."); e.spectrum = new M(r, e.snap, e.singleStep) } function R(e, r) { if (r = f(r), !Array.isArray(r) || !r.length) throw new Error("noUiSlider (" + t + "): 'start' option is incorrect."); e.handles = r.length, e.start = r } function T(e, r) { if (e.snap = r, "boolean" != typeof r) throw new Error("noUiSlider (" + t + "): 'snap' option must be a boolean.") } function B(e, r) { if (e.animate = r, "boolean" != typeof r) throw new Error("noUiSlider (" + t + "): 'animate' option must be a boolean.") } function _(e, r) { if (e.animationDuration = r, "number" != typeof r) throw new Error("noUiSlider (" + t + "): 'animationDuration' option must be a number.") } function X(e, r) { var n, i = [!1]; if ("lower" === r ? r = [!0, !1] : "upper" === r && (r = [!1, !0]), !0 === r || !1 === r) { for (n = 1; n < e.handles; n++) i.push(r); i.push(!1) } else { if (!Array.isArray(r) || !r.length || r.length !== e.handles + 1) throw new Error("noUiSlider (" + t + "): 'connect' option doesn't match handle count."); i = r } e.connect = i } function Y(e, r) { switch (r) { case "horizontal": e.ort = 0; break; case "vertical": e.ort = 1; break; default: throw new Error("noUiSlider (" + t + "): 'orientation' option is invalid.") } } function I(e, r) { if (!u(r)) throw new Error("noUiSlider (" + t + "): 'margin' option must be numeric."); 0 !== r && (e.margin = e.spectrum.getDistance(r)) } function $(e, r) { if (!u(r)) throw new Error("noUiSlider (" + t + "): 'limit' option must be numeric."); if (e.limit = e.spectrum.getDistance(r), !e.limit || e.handles < 2) throw new Error("noUiSlider (" + t + "): 'limit' option is only supported on linear sliders with 2 or more handles.") } function W(e, r) { var n; if (!u(r) && !Array.isArray(r)) throw new Error("noUiSlider (" + t + "): 'padding' option must be numeric or array of exactly 2 numbers."); if (Array.isArray(r) && 2 !== r.length && !u(r[0]) && !u(r[1])) throw new Error("noUiSlider (" + t + "): 'padding' option must be numeric or array of exactly 2 numbers."); if (0 !== r) { for (Array.isArray(r) || (r = [r, r]), e.padding = [e.spectrum.getDistance(r[0]), e.spectrum.getDistance(r[1])], n = 0; n < e.spectrum.xNumSteps.length - 1; n++) if (e.padding[0][n] < 0 || e.padding[1][n] < 0) throw new Error("noUiSlider (" + t + "): 'padding' option must be a positive number(s)."); var i = r[0] + r[1], o = e.spectrum.xVal[0]; if (i / (e.spectrum.xVal[e.spectrum.xVal.length - 1] - o) > 1) throw new Error("noUiSlider (" + t + "): 'padding' option must not exceed 100% of the range.") } } function G(e, r) { switch (r) { case "ltr": e.dir = 0; break; case "rtl": e.dir = 1; break; default: throw new Error("noUiSlider (" + t + "): 'direction' option was not recognized.") } } function J(e, r) { if ("string" != typeof r) throw new Error("noUiSlider (" + t + "): 'behaviour' must be a string containing options."); var n = r.indexOf("tap") >= 0, i = r.indexOf("drag") >= 0, o = r.indexOf("fixed") >= 0, a = r.indexOf("snap") >= 0, s = r.indexOf("hover") >= 0, u = r.indexOf("unconstrained") >= 0; if (o) { if (2 !== e.handles) throw new Error("noUiSlider (" + t + "): 'fixed' behaviour must be used with 2 handles"); I(e, e.start[1] - e.start[0]) } if (u && (e.margin || e.limit)) throw new Error("noUiSlider (" + t + "): 'unconstrained' behaviour cannot be used with margin or limit"); e.events = { tap: n || a, drag: i, fixed: o, snap: a, hover: s, unconstrained: u } } function K(e, r) { if (!1 !== r) if (!0 === r) { e.tooltips = []; for (var n = 0; n < e.handles; n++) e.tooltips.push(!0) } else { if (e.tooltips = f(r), e.tooltips.length !== e.handles) throw new Error("noUiSlider (" + t + "): must pass a formatter for all handles."); e.tooltips.forEach((function (e) { if ("boolean" != typeof e && ("object" !== slider_d(e) || "function" != typeof e.to)) throw new Error("noUiSlider (" + t + "): 'tooltips' must be passed a formatter or 'false'.") })) } } function Q(t, e) { t.ariaFormat = e, L(e) } function Z(t, e) { t.format = e, L(e) } function tt(e, r) { if (e.keyboardSupport = r, "boolean" != typeof r) throw new Error("noUiSlider (" + t + "): 'keyboardSupport' option must be a boolean.") } function et(t, e) { t.documentElement = e } function rt(e, r) { if ("string" != typeof r && !1 !== r) throw new Error("noUiSlider (" + t + "): 'cssPrefix' must be a string or `false`."); e.cssPrefix = r } function nt(e, r) { if ("object" !== slider_d(r)) throw new Error("noUiSlider (" + t + "): 'cssClasses' must be an object."); if ("string" == typeof e.cssPrefix) for (var n in e.cssClasses = {}, r) r.hasOwnProperty(n) && (e.cssClasses[n] = e.cssPrefix + r[n]); else e.cssClasses = r } function it(e) { var r = { margin: 0, limit: 0, padding: 0, animate: !0, animationDuration: 300, ariaFormat: D, format: D }, i = { step: { r: !1, t: j }, keyboardPageMultiplier: { r: !1, t: z }, keyboardDefaultStep: { r: !1, t: H }, start: { r: !0, t: R }, connect: { r: !0, t: X }, direction: { r: !0, t: G }, snap: { r: !1, t: T }, animate: { r: !1, t: B }, animationDuration: { r: !1, t: _ }, range: { r: !0, t: q }, orientation: { r: !1, t: Y }, margin: { r: !1, t: I }, limit: { r: !1, t: $ }, padding: { r: !1, t: W }, behaviour: { r: !0, t: J }, ariaFormat: { r: !1, t: Q }, format: { r: !1, t: Z }, tooltips: { r: !1, t: K }, keyboardSupport: { r: !0, t: tt }, documentElement: { r: !1, t: et }, cssPrefix: { r: !0, t: rt }, cssClasses: { r: !0, t: nt } }, o = { connect: !1, direction: "ltr", behaviour: "tap", orientation: "horizontal", keyboardSupport: !0, cssPrefix: "noUi-", cssClasses: O, keyboardPageMultiplier: 5, keyboardDefaultStep: 10 }; e.format && !e.ariaFormat && (e.ariaFormat = e.format), Object.keys(i).forEach((function (a) { if (!n(e[a]) && void 0 === o[a]) { if (i[a].r) throw new Error("noUiSlider (" + t + "): '" + a + "' is required."); return !0 } i[a].t(r, n(e[a]) ? e[a] : o[a]) })), r.pips = e.pips; var a = document.createElement("div"), s = void 0 !== a.style.msTransform, u = void 0 !== a.style.transform; r.transformRule = u ? "transform" : s ? "msTransform" : "webkitTransform"; var l = [ ["left", "top"], ["right", "bottom"] ]; return r.style = l[r.dir][r.ort], r } function ot(e, n, a) { var u, p, d, S, w, E, C = b(), N = x() && y(), P = e, A = n.spectrum, k = [], U = [], V = [], M = 0, D = {}, O = e.ownerDocument, L = n.documentElement || O.documentElement, j = O.body, z = -1, H = 0, q = 1, R = 2, T = "rtl" === O.dir || 1 === n.ort ? 0 : 100; function B(t, e) { var r = O.createElement("div"); return e && h(r, e), t.appendChild(r), r } function _(t, e) { var r = B(t, n.cssClasses.origin), i = B(r, n.cssClasses.handle); return B(i, n.cssClasses.touchArea), i.setAttribute("data-handle", e), n.keyboardSupport && (i.setAttribute("tabindex", "0"), i.addEventListener("keydown", (function (t) { return vt(t, e) }))), i.setAttribute("role", "slider"), i.setAttribute("aria-orientation", n.ort ? "vertical" : "horizontal"), 0 === e ? h(i, n.cssClasses.handleLower) : e === n.handles - 1 && h(i, n.cssClasses.handleUpper), r } function X(t, e) { return !!e && B(t, n.cssClasses.connect) } function Y(t, e) { var r = B(e, n.cssClasses.connects); p = [], (d = []).push(X(r, t[0])); for (var i = 0; i < n.handles; i++) p.push(_(e, i)), V[i] = i, d.push(X(r, t[i + 1])) } function I(t) { return h(t, n.cssClasses.target), 0 === n.dir ? h(t, n.cssClasses.ltr) : h(t, n.cssClasses.rtl), 0 === n.ort ? h(t, n.cssClasses.horizontal) : h(t, n.cssClasses.vertical), h(t, "rtl" === getComputedStyle(t).direction ? n.cssClasses.textDirectionRtl : n.cssClasses.textDirectionLtr), B(t, n.cssClasses.base) } function $(t, e) { return !!n.tooltips[e] && B(t.firstChild, n.cssClasses.tooltip) } function W() { return P.hasAttribute("disabled") } function G(t) { return p[t].hasAttribute("disabled") } function J() { w && (xt("update" + F.tooltips), w.forEach((function (t) { t && r(t) })), w = null) } function K() { J(), w = p.map($), bt("update" + F.tooltips, (function (t, e, r) { if (w[e]) { var i = t[e]; !0 !== n.tooltips[e] && (i = n.tooltips[e].to(r[e])), w[e].innerHTML = i } })) } function Q() { xt("update" + F.aria), bt("update" + F.aria, (function (t, e, r, i, o) { V.forEach((function (t) { var e = p[t], i = wt(U, t, 0, !0, !0, !0), a = wt(U, t, 100, !0, !0, !0), s = o[t], u = n.ariaFormat.to(r[t]); i = A.fromStepping(i).toFixed(1), a = A.fromStepping(a).toFixed(1), s = A.fromStepping(s).toFixed(1), e.children[0].setAttribute("aria-valuemin", i), e.children[0].setAttribute("aria-valuemax", a), e.children[0].setAttribute("aria-valuenow", s), e.children[0].setAttribute("aria-valuetext", u) })) })) } function Z(e, r, n) { if ("range" === e || "steps" === e) return A.xVal; if ("count" === e) { if (r < 2) throw new Error("noUiSlider (" + t + "): 'values' (>= 2) required for mode 'count'."); var i = r - 1, o = 100 / i; for (r = []; i--;) r[i] = i * o; r.push(100), e = "positions" } return "positions" === e ? r.map((function (t) { return A.fromStepping(n ? A.getStep(t) : t) })) : "values" === e ? n ? r.map((function (t) { return A.fromStepping(A.getStep(A.toStepping(t))) })) : r : void 0 } function tt(t, e, r) { function n(t, e) { return (t + e).toFixed(7) / 1 } var i = {}, a = A.xVal[0], s = A.xVal[A.xVal.length - 1], u = !1, l = !1, c = 0; return (r = o(r.slice().sort((function (t, e) { return t - e }))))[0] !== a && (r.unshift(a), u = !0), r[r.length - 1] !== s && (r.push(s), l = !0), r.forEach((function (o, a) { var s, f, p, d, h, m, v, g, b, y, x = o, S = r[a + 1], w = "steps" === e; if (w && (s = A.xNumSteps[a]), s || (s = S - x), !1 !== x) for (void 0 === S && (S = x), s = Math.max(s, 1e-7), f = x; f <= S; f = n(f, s)) { for (g = (h = (d = A.toStepping(f)) - c) / t, y = h / (b = Math.round(g)), p = 1; p <= b; p += 1) i[(m = c + p * y).toFixed(5)] = [A.fromStepping(m), 0]; v = r.indexOf(f) > -1 ? q : w ? R : H, !a && u && f !== S && (v = 0), f === S && l || (i[d.toFixed(5)] = [f, v]), c = d } })), i } function et(t, e, r) { var i = O.createElement("div"), o = []; o[H] = n.cssClasses.valueNormal, o[q] = n.cssClasses.valueLarge, o[R] = n.cssClasses.valueSub; var a = []; a[H] = n.cssClasses.markerNormal, a[q] = n.cssClasses.markerLarge, a[R] = n.cssClasses.markerSub; var s = [n.cssClasses.valueHorizontal, n.cssClasses.valueVertical], u = [n.cssClasses.markerHorizontal, n.cssClasses.markerVertical]; function l(t, e) { var r = e === n.cssClasses.value, i = r ? o : a; return e + " " + (r ? s : u)[n.ort] + " " + i[t] } function c(t, o, a) { if ((a = e ? e(o, a) : a) !== z) { var s = B(i, !1); s.className = l(a, n.cssClasses.marker), s.style[n.style] = t + "%", a > H && ((s = B(i, !1)).className = l(a, n.cssClasses.value), s.setAttribute("data-value", o), s.style[n.style] = t + "%", s.innerHTML = r.to(o)) } } return h(i, n.cssClasses.pips), h(i, 0 === n.ort ? n.cssClasses.pipsHorizontal : n.cssClasses.pipsVertical), Object.keys(t).forEach((function (e) { c(e, t[e][0], t[e][1]) })), i } function rt() { S && (r(S), S = null) } function nt(t) { rt(); var e = t.mode, r = t.density || 1, n = t.filter || !1, i = tt(r, e, Z(e, t.values || !1, t.stepped || !1)), o = t.format || { to: Math.round }; return S = P.appendChild(et(i, n, o)) } function ot() { var t = u.getBoundingClientRect(), e = "offset" + ["Width", "Height"][n.ort]; return 0 === n.ort ? t.width || u[e] : t.height || u[e] } function at(t, e, r, i) { var o = function (o) { return !!(o = st(o, i.pageOffset, i.target || e)) && !(W() && !i.doNotReject) && !(v(P, n.cssClasses.tap) && !i.doNotReject) && !(t === C.start && void 0 !== o.buttons && o.buttons > 1) && (!i.hover || !o.buttons) && (N || o.preventDefault(), o.calcPoint = o.points[n.ort], void r(o, i)) }, a = []; return t.split(" ").forEach((function (t) { e.addEventListener(t, o, !!N && { passive: !0 }), a.push([t, o]) })), a } function st(t, e, r) { var n, i, o = 0 === t.type.indexOf("touch"), a = 0 === t.type.indexOf("mouse"), s = 0 === t.type.indexOf("pointer"); if (0 === t.type.indexOf("MSPointer") && (s = !0), "mousedown" === t.type && !t.buttons && !t.touches) return !1; if (o) { var u = function (t) { return t.target === r || r.contains(t.target) || t.target.shadowRoot && t.target.shadowRoot.contains(r) }; if ("touchstart" === t.type) { var l = Array.prototype.filter.call(t.touches, u); if (l.length > 1) return !1; n = l[0].pageX, i = l[0].pageY } else { var c = Array.prototype.find.call(t.changedTouches, u); if (!c) return !1; n = c.pageX, i = c.pageY } } return e = e || g(O), (a || s) && (n = t.clientX + e.x, i = t.clientY + e.y), t.pageOffset = e, t.points = [n, i], t.cursor = a || s, t } function ut(t) { var e = 100 * (t - s(u, n.ort)) / ot(); return e = c(e), n.dir ? 100 - e : e } function lt(t) { var e = 100, r = !1; return p.forEach((function (n, i) { if (!G(i)) { var o = U[i], a = Math.abs(o - t); (a < e || a <= e && t > o || 100 === a && 100 === e) && (r = i, e = a) } })), r } function ct(t, e) { "mouseout" === t.type && "HTML" === t.target.nodeName && null === t.relatedTarget && pt(t, e) } function ft(t, e) { if (-1 === navigator.appVersion.indexOf("MSIE 9") && 0 === t.buttons && 0 !== e.buttonsProperty) return pt(t, e); var r = (n.dir ? -1 : 1) * (t.calcPoint - e.startCalcPoint); Ct(r > 0, 100 * r / e.baseSize, e.locations, e.handleNumbers) } function pt(t, e) { e.handle && (m(e.handle, n.cssClasses.active), M -= 1), e.listeners.forEach((function (t) { L.removeEventListener(t[0], t[1]) })), 0 === M && (m(P, n.cssClasses.drag), At(), t.cursor && (j.style.cursor = "", j.removeEventListener("selectstart", i))), e.handleNumbers.forEach((function (t) { St("change", t), St("set", t), St("end", t) })) } function dt(t, e) { if (e.handleNumbers.some(G)) return !1; var r; 1 === e.handleNumbers.length && (r = p[e.handleNumbers[0]].children[0], M += 1, h(r, n.cssClasses.active)), t.stopPropagation(); var o = [], a = at(C.move, L, ft, { target: t.target, handle: r, listeners: o, startCalcPoint: t.calcPoint, baseSize: ot(), pageOffset: t.pageOffset, handleNumbers: e.handleNumbers, buttonsProperty: t.buttons, locations: U.slice() }), s = at(C.end, L, pt, { target: t.target, handle: r, listeners: o, doNotReject: !0, handleNumbers: e.handleNumbers }), u = at("mouseout", L, ct, { target: t.target, handle: r, listeners: o, doNotReject: !0, handleNumbers: e.handleNumbers }); o.push.apply(o, a.concat(s, u)), t.cursor && (j.style.cursor = getComputedStyle(t.target).cursor, p.length > 1 && h(P, n.cssClasses.drag), j.addEventListener("selectstart", i, !1)), e.handleNumbers.forEach((function (t) { St("start", t) })) } function ht(t) { t.stopPropagation(); var e = ut(t.calcPoint), r = lt(e); if (!1 === r) return !1; n.events.snap || l(P, n.cssClasses.tap, n.animationDuration), kt(r, e, !0, !0), At(), St("slide", r, !0), St("update", r, !0), St("change", r, !0), St("set", r, !0), n.events.snap && dt(t, { handleNumbers: [r] }) } function mt(t) { var e = ut(t.calcPoint), r = A.getStep(e), n = A.fromStepping(r); Object.keys(D).forEach((function (t) { "hover" === t.split(".")[0] && D[t].forEach((function (t) { t.call(E, n) })) })) } function vt(t, e) { if (W() || G(e)) return !1; var r = ["Left", "Right"], i = ["Down", "Up"], o = ["PageDown", "PageUp"], a = ["Home", "End"]; n.dir && !n.ort ? r.reverse() : n.ort && !n.dir && (i.reverse(), o.reverse()); var s, u = t.key.replace("Arrow", ""), l = u === o[0], c = u === o[1], f = u === i[0] || u === r[0] || l, p = u === i[1] || u === r[1] || c, d = u === a[0], h = u === a[1]; if (!(f || p || d || h)) return !0; if (t.preventDefault(), p || f) { var m = n.keyboardPageMultiplier, v = f ? 0 : 1, g = jt(e)[v]; if (null === g) return !1; !1 === g && (g = A.getDefaultStep(U[e], f, n.keyboardDefaultStep)), (c || l) && (g *= m), g = Math.max(g, 1e-7), g *= f ? -1 : 1, s = k[e] + g } else s = h ? n.spectrum.xVal[n.spectrum.xVal.length - 1] : n.spectrum.xVal[0]; return kt(e, A.toStepping(s), !0, !0), St("slide", e), St("update", e), St("change", e), St("set", e), !1 } function gt(t) { t.fixed || p.forEach((function (t, e) { at(C.start, t.children[0], dt, { handleNumbers: [e] }) })), t.tap && at(C.start, u, ht, {}), t.hover && at(C.move, u, mt, { hover: !0 }), t.drag && d.forEach((function (e, r) { if (!1 !== e && 0 !== r && r !== d.length - 1) { var i = p[r - 1], o = p[r], a = [e]; h(e, n.cssClasses.draggable), t.fixed && (a.push(i.children[0]), a.push(o.children[0])), a.forEach((function (t) { at(C.start, t, dt, { handles: [i, o], handleNumbers: [r - 1, r] }) })) } })) } function bt(t, e) { D[t] = D[t] || [], D[t].push(e), "update" === t.split(".")[0] && p.forEach((function (t, e) { St("update", e) })) } function yt(t) { return t === F.aria || t === F.tooltips } function xt(t) { var e = t && t.split(".")[0], r = e ? t.substring(e.length) : t; Object.keys(D).forEach((function (t) { var n = t.split(".")[0], i = t.substring(n.length); e && e !== n || r && r !== i || yt(i) && r !== i || delete D[t] })) } function St(t, e, r) { Object.keys(D).forEach((function (i) { var o = i.split(".")[0]; t === o && D[i].forEach((function (t) { t.call(E, k.map(n.format.to), e, k.slice(), r || !1, U.slice(), E) })) })) } function wt(t, e, r, i, o, a) { var s; return p.length > 1 && !n.events.unconstrained && (i && e > 0 && (s = A.getAbsoluteDistance(t[e - 1], n.margin, 0), r = Math.max(r, s)), o && e < p.length - 1 && (s = A.getAbsoluteDistance(t[e + 1], n.margin, 1), r = Math.min(r, s))), p.length > 1 && n.limit && (i && e > 0 && (s = A.getAbsoluteDistance(t[e - 1], n.limit, 0), r = Math.min(r, s)), o && e < p.length - 1 && (s = A.getAbsoluteDistance(t[e + 1], n.limit, 1), r = Math.max(r, s))), n.padding && (0 === e && (s = A.getAbsoluteDistance(0, n.padding[0], 0), r = Math.max(r, s)), e === p.length - 1 && (s = A.getAbsoluteDistance(100, n.padding[1], 1), r = Math.min(r, s))), !((r = c(r = A.getStep(r))) === t[e] && !a) && r } function Et(t, e) { var r = n.ort; return (r ? e : t) + ", " + (r ? t : e) } function Ct(t, e, r, n) { var i = r.slice(), o = [!t, t], a = [t, !t]; n = n.slice(), t && n.reverse(), n.length > 1 ? n.forEach((function (t, r) { var n = wt(i, t, i[t] + e, o[r], a[r], !1); !1 === n ? e = 0 : (e = n - i[t], i[t] = n) })) : o = a = [!0]; var s = !1; n.forEach((function (t, n) { s = kt(t, r[t] + e, o[n], a[n]) || s })), s && n.forEach((function (t) { St("update", t), St("slide", t) })) } function Nt(t, e) { return n.dir ? 100 - t - e : t } function Pt(t, e) { U[t] = e, k[t] = A.fromStepping(e); var r = "translate(" + Et(10 * (Nt(e, 0) - T) + "%", "0") + ")"; p[t].style[n.transformRule] = r, Ut(t), Ut(t + 1) } function At() { V.forEach((function (t) { var e = U[t] > 50 ? -1 : 1, r = 3 + (p.length + e * t); p[t].style.zIndex = r })) } function kt(t, e, r, n, i) { return i || (e = wt(U, t, e, r, n, !1)), !1 !== e && (Pt(t, e), !0) } function Ut(t) { if (d[t]) { var e = 0, r = 100; 0 !== t && (e = U[t - 1]), t !== d.length - 1 && (r = U[t]); var i = r - e, o = "translate(" + Et(Nt(e, i) + "%", "0") + ")", a = "scale(" + Et(i / 100, "1") + ")"; d[t].style[n.transformRule] = o + " " + a } } function Vt(t, e) { return null === t || !1 === t || void 0 === t ? U[e] : ("number" == typeof t && (t = String(t)), t = n.format.from(t), !1 === (t = A.toStepping(t)) || isNaN(t) ? U[e] : t) } function Mt(t, e, r) { var i = f(t), o = void 0 === U[0]; e = void 0 === e || !!e, n.animate && !o && l(P, n.cssClasses.tap, n.animationDuration), V.forEach((function (t) { kt(t, Vt(i[t], t), !0, !1, r) })); for (var a = 1 === V.length ? 0 : 1; a < V.length; ++a) V.forEach((function (t) { kt(t, U[t], !0, !0, r) })); At(), V.forEach((function (t) { St("update", t), null !== i[t] && e && St("set", t) })) } function Dt(t) { Mt(n.start, t) } function Ot(e, r, n, i) { if (!((e = Number(e)) >= 0 && e < V.length)) throw new Error("noUiSlider (" + t + "): invalid handle number, got: " + e); kt(e, Vt(r, e), !0, !0, i), St("update", e), n && St("set", e) } function Ft() { var t = k.map(n.format.to); return 1 === t.length ? t[0] : t } function Lt() { for (var t in xt(F.aria), xt(F.tooltips), n.cssClasses) n.cssClasses.hasOwnProperty(t) && m(P, n.cssClasses[t]); for (; P.firstChild;) P.removeChild(P.firstChild); delete P.noUiSlider } function jt(t) { var e = U[t], r = A.getNearbySteps(e), i = k[t], o = r.thisStep.step, a = null; if (n.snap) return [i - r.stepBefore.startValue || null, r.stepAfter.startValue - i || null]; !1 !== o && i + o > r.stepAfter.startValue && (o = r.stepAfter.startValue - i), a = i > r.thisStep.startValue ? r.thisStep.step : !1 !== r.stepBefore.step && i - r.stepBefore.highestStep, 100 === e ? o = null : 0 === e && (a = null); var s = A.countStepDecimals(); return null !== o && !1 !== o && (o = Number(o.toFixed(s))), null !== a && !1 !== a && (a = Number(a.toFixed(s))), [a, o] } function zt() { return V.map(jt) } function Ht(t, e) { var r = Ft(), i = ["margin", "limit", "padding", "range", "animate", "snap", "step", "format", "pips", "tooltips"]; i.forEach((function (e) { void 0 !== t[e] && (a[e] = t[e]) })); var o = it(a); i.forEach((function (e) { void 0 !== t[e] && (n[e] = o[e]) })), A = o.spectrum, n.margin = o.margin, n.limit = o.limit, n.padding = o.padding, n.pips ? nt(n.pips) : rt(), n.tooltips ? K() : J(), U = [], Mt(t.start || r, e) } function qt() { u = I(P), Y(n.connect, u), gt(n.events), Mt(n.start), n.pips && nt(n.pips), n.tooltips && K(), Q() } return qt(), E = { destroy: Lt, steps: zt, on: bt, off: xt, get: Ft, set: Mt, setHandle: Ot, reset: Dt, __moveHandles: function (t, e, r) { Ct(t, e, U, r) }, options: a, updateOptions: Ht, target: P, removePips: rt, removeTooltips: J, getTooltips: function () { return w }, getOrigins: function () { return p }, pips: nt } } function at(e, r) { if (!e || !e.nodeName) throw new Error("noUiSlider (" + t + "): create requires a single element, got: " + e); if (e.noUiSlider) throw new Error("noUiSlider (" + t + "): Slider was already initialized."); var n = ot(e, it(r), r); return e.noUiSlider = n, n } return { __spectrum: M, version: t, cssClasses: O, create: at } }() })); var slider_m = { name: "Slider", emits: ["input", "update:modelValue", "update", "change"], props: { ...{ value: { validator: function (t) { return t => "number" == typeof t || t instanceof Array || null == t || !1 === t }, required: !1 }, modelValue: { validator: function (t) { return t => "number" == typeof t || t instanceof Array || null == t || !1 === t }, required: !1 } }, id: { type: [String, Number], required: !1, default: "slider" }, disabled: { type: Boolean, required: !1, default: !1 }, min: { type: Number, required: !1, default: 0 }, max: { type: Number, required: !1, default: 100 }, step: { type: Number, required: !1, default: 1 }, orientation: { type: String, required: !1, default: "horizontal" }, direction: { type: String, required: !1, default: "ltr" }, tooltips: { type: Boolean, required: !1, default: !0 }, options: { type: Object, required: !1, default: () => ({}) }, merge: { type: Number, required: !1, default: -1 }, height: { type: String, required: !1, default: "300px" }, format: { type: [Object, Function, Boolean], required: !1, default: null } }, setup(a, s) { const u = function (r, n, i) { var o = Object(external_Vue_["toRefs"])(r), a = o.value, s = o.modelValue, u = void 0 !== n.expose ? s : a, c = Object(external_Vue_["ref"])(u.value); if (slider_l(u.value)) throw new Error("Slider v-model must be a Number or Array"); if (Array.isArray(u.value) && 0 == u.value.length) throw new Error("Slider v-model must not be an empty array"); return { value: u, initialValue: c } }(a, s), c = function (e, n, i) { var o = Object(external_Vue_["toRefs"])(e), a = o.orientation, s = o.height; return { style: Object(external_Vue_["computed"])((function () { return "vertical" == a.value ? { height: s.value } : [] })) } }(a), f = function (e, n, i) { var o = Object(external_Vue_["toRefs"])(e), a = o.format, s = o.step, u = i.value, l = Object(external_Vue_["computed"])((function () { return a && a.value ? "function" == typeof a.value ? { to: a.value } : slider_p(Object.assign({}, a.value)) : slider_p({ decimals: s.value >= 0 ? 0 : 2 }) })); return { tooltipsFormat: Object(external_Vue_["computed"])((function () { return Array.isArray(u.value) ? u.value.map((function (t) { return l.value })) : l.value })), tooltipsMerge: function (t, e, r) { var n = "rtl" === getComputedStyle(t).direction, i = "rtl" === t.noUiSlider.options.direction, o = "vertical" === t.noUiSlider.options.orientation, a = t.noUiSlider.getTooltips(), s = t.noUiSlider.getOrigins(); a.forEach((function (t, e) { t && s[e].appendChild(t) })), t.noUiSlider.on("update", (function (t, s, u, c, f) { var p = [ [] ], d = [ [] ], h = [ [] ], m = 0; a[0] && (p[0][0] = 0, d[0][0] = f[0], h[0][0] = l.value.to(parseFloat(t[0]))); for (var v = 1; v < f.length; v++)(!a[v] || f[v] - f[v - 1] > e) && (p[++m] = [], h[m] = [], d[m] = []), a[v] && (p[m].push(v), h[m].push(l.value.to(parseFloat(t[v]))), d[m].push(f[v])); p.forEach((function (t, e) { for (var s = t.length, u = 0; u < s; u++) { var l = t[u]; if (u === s - 1) { var c = 0; d[e].forEach((function (t) { c += 1e3 - 10 * t })); var f = o ? "bottom" : "right", p = i ? 0 : s - 1, m = 1e3 - 10 * d[e][p]; c = (n && !o ? 100 : 0) + c / s - m, a[l].innerHTML = h[e].join(r), a[l].style.display = "block", a[l].style[f] = c + "%" } else a[l].style.display = "none" } })) })) } } }(a, 0, { value: u.value }), d = function (a, s, u) { var c = Object(external_Vue_["toRefs"])(a), f = c.options, p = c.orientation, d = c.direction, m = c.tooltips, v = c.step, g = c.min, b = c.max, y = c.merge, x = c.format, S = c.id, w = c.disabled, E = u.value, C = u.initialValue, N = u.tooltipsFormat, P = u.tooltipsMerge, A = u.style, k = Object(external_Vue_["ref"])(null), U = Object(external_Vue_["ref"])(null), V = Object(external_Vue_["ref"])(!1), M = Object(external_Vue_["computed"])((function () { var t = { cssPrefix: "slider-", orientation: p.value, direction: d.value, tooltips: !!m.value && N.value, connect: "lower", start: slider_l(E.value) ? g.value : E.value, range: { min: g.value, max: b.value } }; return v.value > 0 && (t.step = v.value), Array.isArray(E.value) && (t.connect = !0), t })), D = Object(external_Vue_["computed"])((function () { var t = { id: S.value, style: A.value }; return w.value && (t.disabled = !0), t })), O = Object(external_Vue_["computed"])((function () { return Array.isArray(E.value) })), F = function () { var t = U.value.get(); return Array.isArray(t) ? t.map((function (t) { return parseFloat(t) })) : parseFloat(t) }, L = function (t) { var e = !(arguments.length > 1 && void 0 !== arguments[1]) || arguments[1]; U.value.set(t, e) }, j = function (t) { s.emit("input", t), s.emit("update:modelValue", t), s.emit("update", t) }, z = function () { U.value = h.create(k.value, Object.assign({}, M.value, f.value)), m.value && O.value && y.value >= 0 && P(k.value, y.value, " - "), U.value.on("set", (function (t) { s.emit("change", F()) })), U.value.on("update", (function (t) { V.value && j(F()) })), V.value = !0 }, H = function () { U.value.off(), U.value.destroy(), U.value = null }, q = function () { V.value = !1, H(), z() }; return Object(external_Vue_["onMounted"])(z), Object(external_Vue_["onUnmounted"])(H), Object(external_Vue_["watch"])(O, q, { immediate: !1 }), Object(external_Vue_["watch"])(g, q, { immediate: !1 }), Object(external_Vue_["watch"])(b, q, { immediate: !1 }), Object(external_Vue_["watch"])(v, q, { immediate: !1 }), Object(external_Vue_["watch"])(p, q, { immediate: !1 }), Object(external_Vue_["watch"])(d, q, { immediate: !1 }), Object(external_Vue_["watch"])(m, q, { immediate: !1 }), Object(external_Vue_["watch"])(x, q, { immediate: !1, deep: !0 }), Object(external_Vue_["watch"])(y, q, { immediate: !1 }), Object(external_Vue_["watch"])(f, q, { immediate: !1, deep: !0 }), Object(external_Vue_["watch"])(E, (function (t) { var e, r, n; slider_l(t) ? L(g.value, !1) : (O.value && (e = t, r = F(), n = r.slice().sort(), e.length !== r.length || !e.slice().sort().every((function (t, e) { return t === n[e] }))) || !O.value && t != F()) && L(t, !1) }), { deep: !0 }), { slider: k, slider$: U, isRange: O, sliderProps: D, init: z, destroy: H, refresh: q, update: L, reset: function () { j(C.value) } } }(a, s, { value: u.value, initialValue: u.initialValue, tooltipsFormat: f.tooltipsFormat, tooltipsMerge: f.tooltipsMerge, style: c.style }); return { ...c, ...f, ...d } } }; slider_m.render = function (t, e, r, n, i, o) { return Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("div", Object(external_Vue_["mergeProps"])(t.sliderProps, { ref: "slider" }), null, 16) }, slider_m.__file = "src/Slider.vue"; /* harmony default export */ var slider = (slider_m); // CONCATENATED MODULE: ./node_modules/vue-loader/dist??ref--8-0!./src/pages/spect/packages/Compare2D/views/Compare.vue?vue&type=script&lang=js /* harmony default export */ var Comparevue_type_script_lang_js = (Object(external_Vue_["defineComponent"])({ components: { Slider: slider }, setup(props, ctx) { let brightnessValue = Object(external_Vue_["ref"])(1); let { proxy } = Object(external_Vue_["getCurrentInstance"])(); let img1 = proxy.img1; let img2 = proxy.img2; let styleBefore = Object(external_Vue_["ref"])(""); let styleAfter = Object(external_Vue_["ref"])(""); let styleWrap = Object(external_Vue_["ref"])(""); let before = Object(external_Vue_["ref"])(null); let after = Object(external_Vue_["ref"])(null); const onUpdateSliderBrightness = (v) => { before.value.style.filter = `brightness(${v})`; after.value.style.filter = `brightness(${v})`; } Object(external_Vue_["onMounted"])(() => { let img = new Image(); img.src = img1 img.onload = () => { let ratio = img.height / img.width; let width = document.getElementById("app").clientWidth; let height = width * ratio; document.getElementsByClassName("menu")[0].style.height = height; styleWrap.value = `width:${width};height:${height};` styleBefore.value = `background-image: url(${img1})`; styleAfter.value = `background-image: url(${img2})`; Object(external_Vue_["nextTick"])(() => { const comparisonSlider = new ComparisonSlider(); }) } }) return { before, after, onUpdateSliderBrightness, styleBefore, styleAfter, styleWrap, brightnessValue }; }, })); // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Compare.vue?vue&type=script&lang=js // EXTERNAL MODULE: ./src/pages/spect/packages/Compare2D/views/Compare.vue?vue&type=style&index=0&id=cc8794de&scoped=true&lang=css var Comparevue_type_style_index_0_id_cc8794de_scoped_true_lang_css = __webpack_require__(22); // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Compare.vue Comparevue_type_script_lang_js.render = Comparevue_type_template_id_cc8794de_scoped_true_render Comparevue_type_script_lang_js.__scopeId = "data-v-cc8794de" /* harmony default export */ var Compare = (Comparevue_type_script_lang_js); // CONCATENATED MODULE: ./node_modules/vue-loader/dist/templateLoader.js??ref--5!./node_modules/vue-loader/dist??ref--8-0!./src/pages/spect/packages/Compare2D/views/Diff.vue?vue&type=template&id=990cae7c&scoped=true const Diffvue_type_template_id_990cae7c_scoped_true_withId = /*#__PURE__*/ Object(external_Vue_["withScopeId"])("data-v-990cae7c") Object(external_Vue_["pushScopeId"])("data-v-990cae7c") const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_1 = { class: "panel" } const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_2 = { class: "panel__option" } const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_3 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "明亮度:", -1 /* HOISTED */ ) const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_4 = { class: "panel__option" } const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_5 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", null, "分辨率:", -1 /* HOISTED */ ) const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_6 = { class: "panel__option" } const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_7 = /*#__PURE__*/ Object(external_Vue_["createVNode"])("span", { style: { "margin-right": "16px" } }, "阈值:", -1 /* HOISTED */ ) const Diffvue_type_template_id_990cae7c_scoped_true_hoisted_8 = { style: { "filter": "brightness(10)" }, ref: "canvas1" } Object(external_Vue_["popScopeId"])() const Diffvue_type_template_id_990cae7c_scoped_true_render = /*#__PURE__*/ Diffvue_type_template_id_990cae7c_scoped_true_withId((_ctx, _cache, $props, $setup, $data, $options) => { const _component_Slider = Object(external_Vue_["resolveComponent"])("Slider") return (Object(external_Vue_["openBlock"])(), Object(external_Vue_["createBlock"])("div", null, [ Object(external_Vue_["createVNode"])("div", Diffvue_type_template_id_990cae7c_scoped_true_hoisted_1, [ Object(external_Vue_["createVNode"])("div", Diffvue_type_template_id_990cae7c_scoped_true_hoisted_2, [ Diffvue_type_template_id_990cae7c_scoped_true_hoisted_3, Object(external_Vue_["createVNode"])(_component_Slider, { class: "panel__slider", modelValue: _ctx.brightnessValue, "onUpdate:modelValue": _cache[1] || (_cache[1] = $event => (_ctx.brightnessValue = $event)), tooltips: false, max: 20, step: -1, onUpdate: _ctx.onUpdateSliderBrightness }, null, 8 /* PROPS */ , ["modelValue", "onUpdate"]) ]), Object(external_Vue_["createVNode"])("div", Diffvue_type_template_id_990cae7c_scoped_true_hoisted_4, [ Diffvue_type_template_id_990cae7c_scoped_true_hoisted_5, Object(external_Vue_["createVNode"])(_component_Slider, { class: "panel__slider", modelValue: _ctx.resolutionValue, "onUpdate:modelValue": _cache[2] || (_cache[2] = $event => (_ctx.resolutionValue = $event)), tooltips: false, max: 1, step: -1, onChange: _ctx.onUpdateSliderResolution }, null, 8 /* PROPS */ , ["modelValue", "onChange"]) ]), Object(external_Vue_["createVNode"])("div", Diffvue_type_template_id_990cae7c_scoped_true_hoisted_6, [ Diffvue_type_template_id_990cae7c_scoped_true_hoisted_7, Object(external_Vue_["createVNode"])(_component_Slider, { class: "panel__slider", modelValue: _ctx.thresholdValue, "onUpdate:modelValue": _cache[3] || (_cache[3] = $event => (_ctx.thresholdValue = $event)), tooltips: false, max: 70, onChange: _ctx.onUpdateSliderThreshold }, null, 8 /* PROPS */ , ["modelValue", "onChange"]) ]) ]), Object(external_Vue_["createVNode"])("div", Diffvue_type_template_id_990cae7c_scoped_true_hoisted_8, null, 512 /* NEED_PATCH */ ) ])) }) // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Diff.vue?vue&type=template&id=990cae7c&scoped=true // CONCATENATED MODULE: ./node_modules/vue-loader/dist??ref--8-0!./src/pages/spect/packages/Compare2D/views/Diff.vue?vue&type=script&lang=js /* harmony default export */ var Diffvue_type_script_lang_js = (Object(external_Vue_["defineComponent"])({ components: { Slider: slider }, setup(props, ctx) { let brightnessValue = Object(external_Vue_["ref"])(10); let resolutionValue = Object(external_Vue_["ref"])(1); let thresholdValue = Object(external_Vue_["ref"])(0); let { proxy } = Object(external_Vue_["getCurrentInstance"])(); let img1Url = proxy.img1; let img2Url = proxy.img2; let img1 = Object(external_Vue_["ref"])(null); let img2 = Object(external_Vue_["ref"])(null); let canvas1 = Object(external_Vue_["ref"])(null); let imgDom = null; let ratio = 0; let params = Object(external_Vue_["ref"])({ baseImageUrl: "", targetImageUrl: "", resolution: 1, // 0.01..1, optional, defaults to 1 threshold: 0, // 0..255, optional, defaults to 0 isNormalized: false // Boolean, optional, defaults to false }) const onUpdateSliderBrightness = (v) => { canvas1.value.style.filter = `brightness(${v})`; } const onUpdateSliderResolution = (v) => { let obj = params.value; obj.resolution = v; updateDiffImg(obj); } const onUpdateSliderThreshold = (v) => { let obj = params.value; obj.threshold = v; updateDiffImg(obj); } const updateDiffImg = (option) => { showMessage("图片加载中...", "info"); params.value = option; const promiseCompare = canvasCompare(params.value); promiseCompare.then(function (result) { // Do things with result if (imgDom) { canvas1.value.removeChild(imgDom); } imgDom = result.producePreview(); imgDom.width = document.getElementById("app").clientWidth; imgDom.height = imgDom.width * ratio; canvas1.value.appendChild(imgDom); }); } const renderDiffImg = () => { let img = new Image(); img.src = img1.value; img.onload = () => { ratio = img.height / img.width; document.getElementsByClassName("menu")[0].style.height = document.getElementById("app").clientWidth * ratio; Object(external_Vue_["nextTick"])(() => { updateDiffImg(params.value); }) } } Object(external_Vue_["onMounted"])(() => { // return let img1Finished = false; let img2Finished = false; getBase64(img1Url, (base64) => { img1.value = base64; params.value.baseImageUrl = img1.value; img1Finished = true; if (img2Finished) { renderDiffImg(); } }) getBase64(img2Url, (base64) => { img2.value = base64; params.value.targetImageUrl = img2.value; img2Finished = true; if (img1Finished) { renderDiffImg(); } }) }) return { canvas1, brightnessValue, resolutionValue, thresholdValue, onUpdateSliderBrightness, onUpdateSliderResolution, onUpdateSliderThreshold }; }, })); // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Diff.vue?vue&type=script&lang=js // EXTERNAL MODULE: ./node_modules/@vueform/slider/themes/default.css?vue&type=style&index=0&lang=css var defaultvue_type_style_index_0_lang_css = __webpack_require__(24); // EXTERNAL MODULE: ./src/pages/spect/packages/Compare2D/views/Diff.vue?vue&type=style&index=1&id=990cae7c&scoped=true&lang=css var Diffvue_type_style_index_1_id_990cae7c_scoped_true_lang_css = __webpack_require__(26); // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/Diff.vue Diffvue_type_script_lang_js.render = Diffvue_type_template_id_990cae7c_scoped_true_render Diffvue_type_script_lang_js.__scopeId = "data-v-990cae7c" /* harmony default export */ var Diff = (Diffvue_type_script_lang_js); // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/views/index.js // CONCATENATED MODULE: ./src/pages/spect/packages/Compare2D/index.js let Compare2D_compareList = JSON.parse(GM_getValue("CompareList_2D") || "[]") || []; let Compare2D_app; function Compare2D_init() { Compare2D_initDom(); initDom_Menu(); Compare2D_initFunc(); } function Compare2D_initDom() { let a = document.createElement("div"); a.className = "wrap"; a.innerHTML = ` <div class="compare2d__watermark"> <span>--By 小淳</span> </div> <div class="skin1-info"> <span>${Compare2D_compareList[0].name}</span> <br/> <span>模板:${Compare2D_compareList[0].asset_info.paintseed}</span> <br/> <span>磨损:${Compare2D_compareList[0].asset_info.paintwear}</span> </div> <div class="skin2-info"> <span>${Compare2D_compareList[1].name}</span> <br/> <span>模板:${Compare2D_compareList[1].asset_info.paintseed}</span> <br/> <span>磨损:${Compare2D_compareList[1].asset_info.paintwear}</span> </div> <div class="menu"> <div class="menu__title">饰品2D对比</div> <div class="menu__sub"> <div class="sub__view"> <div class="view__title pdl-10">检视图</div> <div class="view__content"> <div class="view__item pdl-20" id="view__compare">【检视图】对比</div> <div class="view__item pdl-20" id="view__diff">【检视图】差异</div> </div> </div> <div class="sub__texture"> <div class="texture__title pdl-10">纹理图</div> <div class="texture__content"> </div> </div> </div> </div> <div class="view" id="app"> </div> ` let b = document.body; b.appendChild(a); } function initDom_Menu() { let html_texture = ""; // 纹理图html let dom = document.getElementsByClassName("texture__content")[0]; for (let i = 0; i < Compare2D_compareList[0].textures.length; i++) { // 纹理图 html_texture += ` <div class="texture__item pdl-20 texture__compare" id="texture__compare${i}">【纹理图${i+1}】对比</div> <div class="texture__item pdl-20 texture__diff" id="texture__diff${i}">【纹理图${i+1}】差异</div> ` } dom.innerHTML = html_texture; } function Compare2D_initFunc() { let views = document.getElementsByClassName("view__item"); let textures = document.getElementsByClassName("texture__item"); // active事件 for (let i = 0; i < views.length; i++) { views[i].addEventListener("click", () => { for (let j = 0; j < views.length; j++) { views[j].className = views[j].className.replace(" is-active", ""); } for (let j = 0; j < textures.length; j++) { textures[j].className = textures[j].className.replace(" is-active", ""); } views[i].className += " is-active"; }) } for (let i = 0; i < textures.length; i++) { textures[i].addEventListener("click", () => { for (let j = 0; j < views.length; j++) { views[j].className = views[j].className.replace(" is-active", ""); } for (let j = 0; j < textures.length; j++) { textures[j].className = textures[j].className.replace(" is-active", ""); } textures[i].className += " is-active"; }) } // 业务事件 document.getElementById("view__compare").addEventListener("click", () => { // 检视图对比 if (Compare2D_app) Compare2D_app.unmount(); let img1 = Compare2D_compareList[0].inspectUrl; let img2 = Compare2D_compareList[1].inspectUrl; Compare2D_app = Object(external_Vue_["createApp"])(Compare); Compare2D_app.config.globalProperties.img1 = img1; Compare2D_app.config.globalProperties.img2 = img2; Compare2D_app.mount("#app"); }) document.getElementById("view__diff").addEventListener("click", () => { // 检视图差异 if (Compare2D_app) Compare2D_app.unmount(); let img1 = Compare2D_compareList[0].inspectUrl; let img2 = Compare2D_compareList[1].inspectUrl; Compare2D_app = Object(external_Vue_["createApp"])(Diff); Compare2D_app.config.globalProperties.img1 = img1; Compare2D_app.config.globalProperties.img2 = img2; Compare2D_app.mount("#app"); }) let texture_compare = document.getElementsByClassName("texture__compare"); let texture_diff = document.getElementsByClassName("texture__diff"); for (let i = 0; i < texture_compare.length; i++) { let item = texture_compare[i]; item.addEventListener("click", () => { // 纹理图对比 if (Compare2D_app) Compare2D_app.unmount(); let img1 = Compare2D_compareList[0].textures[i].url; let img2 = Compare2D_compareList[1].textures[i].url; Compare2D_app = Object(external_Vue_["createApp"])(Compare); Compare2D_app.config.globalProperties.img1 = img1; Compare2D_app.config.globalProperties.img2 = img2; Compare2D_app.mount("#app"); }) } for (let i = 0; i < texture_diff.length; i++) { let item = texture_diff[i]; item.addEventListener("click", () => { // 纹理图差异 if (Compare2D_app) Compare2D_app.unmount(); let img1 = Compare2D_compareList[0].textures[i].url; let img2 = Compare2D_compareList[1].textures[i].url; Compare2D_app = Object(external_Vue_["createApp"])(Diff); Compare2D_app.config.globalProperties.img1 = img1; Compare2D_app.config.globalProperties.img2 = img2; Compare2D_app.mount("#app"); }) } document.getElementsByClassName("compare2d__watermark")[0].addEventListener("click", () => { window.open("https://github.com/qianjiachun/csgo-skin-compare"); }) } /* harmony default export */ var Compare2D = ({ init: Compare2D_init }); // CONCATENATED MODULE: ./src/pages/spect/packages/index.js function packages_initPkg() { Compare2D.init(); } // CONCATENATED MODULE: ./src/pages/spect/index.js function spect_beforeInit() { // 清除页面默认数据 document.title = "CSGO饰品对比 - 2D"; document.body.innerHTML = ""; } function spect_init() { spect_beforeInit(); packages_initPkg(); } /* harmony default export */ var spect = ({ init: spect_init }); // CONCATENATED MODULE: ./src/pages/index.js // import www from "./www" /* harmony default export */ var pages = ({ // www buff: buff, spect: spect }); // CONCATENATED MODULE: ./src/router.js function initRouter() { // 根据需求判断location对象的值,来选择使用哪个page if (location.href.indexOf("buff") !== -1) { pages.buff.init(); } if (location.href.indexOf("spect") !== -1) { if (location.href.indexOf("compare2d") !== -1) { pages.spect.init(); } } } // CONCATENATED MODULE: ./src/main.js initRouter(); /***/ }) /******/ ]); //# sourceMappingURL=main.js.map