@moquyun/proxy
Version:
Multi-user & multi-env web debugging proxy based on whistle
1,266 lines (1,032 loc) • 342 kB
JavaScript
/******/ (function(modules) { // webpackBootstrap
/******/ // The module cache
/******/ var installedModules = {};
/******/
/******/ // The require function
/******/ function __webpack_require__(moduleId) {
/******/
/******/ // Check if module is in cache
/******/ if(installedModules[moduleId]) {
/******/ return installedModules[moduleId].exports;
/******/ }
/******/ // Create a new module (and put it into the cache)
/******/ var module = installedModules[moduleId] = {
/******/ i: moduleId,
/******/ l: false,
/******/ exports: {}
/******/ };
/******/
/******/ // Execute the module function
/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
/******/
/******/ // Flag the module as loaded
/******/ module.l = true;
/******/
/******/ // Return the exports of the module
/******/ return module.exports;
/******/ }
/******/
/******/
/******/ // expose the modules object (__webpack_modules__)
/******/ __webpack_require__.m = modules;
/******/
/******/ // expose the module cache
/******/ __webpack_require__.c = installedModules;
/******/
/******/ // define getter function for harmony exports
/******/ __webpack_require__.d = function(exports, name, getter) {
/******/ if(!__webpack_require__.o(exports, name)) {
/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
/******/ }
/******/ };
/******/
/******/ // define __esModule on exports
/******/ __webpack_require__.r = function(exports) {
/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
/******/ }
/******/ Object.defineProperty(exports, '__esModule', { value: true });
/******/ };
/******/
/******/ // create a fake namespace object
/******/ // mode & 1: value is a module id, require it
/******/ // mode & 2: merge all properties of value into the ns
/******/ // mode & 4: return value when already ns object
/******/ // mode & 8|1: behave like require
/******/ __webpack_require__.t = function(value, mode) {
/******/ if(mode & 1) value = __webpack_require__(value);
/******/ if(mode & 8) return value;
/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
/******/ var ns = Object.create(null);
/******/ __webpack_require__.r(ns);
/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
/******/ return ns;
/******/ };
/******/
/******/ // getDefaultExport function for compatibility with non-harmony modules
/******/ __webpack_require__.n = function(module) {
/******/ var getter = module && module.__esModule ?
/******/ function getDefault() { return module['default']; } :
/******/ function getModuleExports() { return module; };
/******/ __webpack_require__.d(getter, 'a', getter);
/******/ return getter;
/******/ };
/******/
/******/ // Object.prototype.hasOwnProperty.call
/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
/******/
/******/ // __webpack_public_path__
/******/ __webpack_require__.p = "";
/******/
/******/
/******/ // Load entry module and return exports
/******/ return __webpack_require__(__webpack_require__.s = "./src/button/index.js");
/******/ })
/************************************************************************/
/******/ ({
/***/ "./node_modules/_clipboard@2.0.8@clipboard/dist/clipboard.js":
/*!*******************************************************************!*\
!*** ./node_modules/_clipboard@2.0.8@clipboard/dist/clipboard.js ***!
\*******************************************************************/
/*! no static exports found */
/***/ (function(module, exports) {
throw new Error("Module build failed (from ./node_modules/_babel-loader@7.1.5@babel-loader/lib/index.js):\nError: Couldn't find preset \"@babel/env\" relative to directory \"/Users/daibaoguang/code/github/nohost-master/node_modules/_clipboard@2.0.8@clipboard\"\n at /Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/options/option-manager.js:293:19\n at Array.map (<anonymous>)\n at OptionManager.resolvePresets (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/options/option-manager.js:275:20)\n at OptionManager.mergePresets (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/options/option-manager.js:264:10)\n at OptionManager.mergeOptions (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/options/option-manager.js:249:14)\n at OptionManager.init (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/options/option-manager.js:368:12)\n at File.initOptions (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/index.js:212:65)\n at new File (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/file/index.js:135:24)\n at Pipeline.transform (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-core@6.26.3@babel-core/lib/transformation/pipeline.js:46:16)\n at transpile (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-loader@7.1.5@babel-loader/lib/index.js:50:20)\n at Object.module.exports (/Users/daibaoguang/code/github/nohost-master/node_modules/_babel-loader@7.1.5@babel-loader/lib/index.js:173:20)");
/***/ }),
/***/ "./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js!./src/button/index.css":
/*!**************************************************************************************!*\
!*** ./node_modules/_css-loader@3.6.0@css-loader/dist/cjs.js!./src/button/index.css ***!
\**************************************************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
// Imports
var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../../node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js */ "./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js");
exports = ___CSS_LOADER_API_IMPORT___(false);
// Module
exports.push([module.i, ".w-nohost-modal {\n display: none;\n position: fixed !important;\n z-index: 999997 !important;\n left: 0 !important;\n top: 0 !important;\n box-sizing: border-box !important;\n width: 100% !important;\n height: 100% !important;\n overflow: hidden !important;\n background-color: rgba(0, 0, 0, 0.6) !important;\n font-family: \"Helvetica Neue\", Helvetica, Arial, \"Hiragino Sans GB\",\n \"Hiragino Sans GB W3\", \"WenQuanYi Micro Hei\", sans-serif;\n}\n\n.w-nohost-modal * {\n box-sizing: border-box !important;\n}\n\n#w-nohost-operations,\n#w-nohost-custom-menu {\n max-height: 80%;\n overflow-y: scroll;\n width: 250px !important;\n margin-left: auto !important;\n margin-right: auto !important;\n background: rgba(255, 255, 255, 0.9) !important;\n padding: 10px !important;\n transition: 0.3s !important;\n font-size: 12px !important;\n line-height: 14px !important;\n border-radius: 5px !important;\n user-select: none !important;\n}\n\n#w-nohost-operation-modal h4,\n#w-nohost-custom-context-modal h4 {\n font-weight: bold !important;\n text-align: center !important;\n margin: 5px !important;\n font-size: 14px !important;\n position: relative !important;\n}\n\n#w-nohost-close-modal,\n#w-nohost-close-custom-modal {\n cursor: pointer !important;\n color: #aaa !important;\n position: absolute !important;\n right: -12px !important;\n top: -12px !important;\n padding: 6px !important;\n}\n\n.w-nohost-operation {\n display: block !important;\n border: none !important;\n color: white !important;\n cursor: pointer !important;\n background: #6cafe7 !important;\n text-align: center !important;\n border-radius: 3px !important;\n padding: 10px 8px !important;\n margin: 15px 0 !important;\n width: 100% !important;\n font-size: 16px;\n box-sizing: border-box !important;\n}\n\n#w-nohost-list {\n box-sizing: border-box !important;\n max-width: 420px !important;\n width: 88% !important;\n margin-left: auto !important;\n margin-right: auto !important;\n}\n\n#w-nohost-toolbar {\n position: relative !important;\n font-size: 16px !important;\n transition: background-color 0.6s !important;\n}\n\n#w-nohost-toolbar input {\n width: 100% !important;\n box-sizing: border-box !important;\n height: 40px !important;\n padding: 10px !important;\n border: 1px solid white !important;\n background: black !important;\n color: white !important;\n font-weight: bold !important;\n font-size: 14px !important;\n}\n\n#w-nohost-toolbar .tool-item {\n cursor: pointer !important;\n}\n#w-nohost-user-ul,\n#w-nohost-env-ul,\n#w-nohost-env-filter {\n display: none;\n list-style-type: none !important;\n padding: 0 !important;\n margin: 0 !important;\n overflow-x: hidden !important;\n overflow-y: auto !important;\n position: relative !important;\n}\n\n#w-nohost-list li {\n float: none !important;\n border: 1px solid #ccc !important;\n border-left: none !important;\n border-right: none !important;\n margin: -1px 0 0 0 !important;\n text-decoration: none !important;\n font-size: 16px !important;\n color: black !important;\n padding: 10px 16px !important;\n display: block !important;\n background: white !important;\n cursor: pointer !important;\n transition: background-color 0.3s;\n position: relative !important;\n}\n\n#w-nohost-user-ul li:first-child {\n position: sticky !important;\n top: 0 !important;\n z-index: 1000 !important;\n}\n\n#w-nohost-list .liWithSub:after {\n content: \" \" !important;\n position: absolute !important;\n top: 16px !important;\n right: 24px !important;\n width: 12px !important;\n height: 12px !important;\n border: 1px solid #aaaaaa !important;\n transform: rotate(45deg) !important;\n border-left: none !important;\n border-bottom: none !important;\n}\n#w-nohost-list .envSelected.liWithSub:after {\n border-color: #000 !important;\n}\n\n#w-nohost-list li:hover:not(.envSelected) {\n background-color: #e5eaf0 !important;\n}\n#w-nohost-list li.w-nohost-choosed:not(.envSelected) {\n background-color: #e5eaf0 !important;\n}\n#w-nohost-list .envSelected {\n background-color: #bdbdbd !important;\n}\n\n#w-nohost-list #w-nohost-user-ul #w-nohost-error-hint,\n#w-nohost-list #w-nohost-env-ul #w-nohost-error-hint {\n border: 1px solid #f6f6f6 !important;\n text-decoration: none !important;\n color: black !important;\n padding: 8px 12px 8px 36px !important;\n display: block !important;\n background: white !important;\n cursor: pointer;\n}\n\n#w-nohost-btn--top {\n position: relative !important;\n width: 100% !important;\n line-height: 38px !important;\n background-color: #6cafe7 !important;\n outline: none !important;\n border: none !important;\n font-size: 16px !important;\n cursor: pointer !important;\n transition: background-color 0.6s !important;\n color: white !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 5px 20px !important;\n}\n\n#w-nohost-btn--top.w-nohost-disabled {\n cursor: not-allowed !important;\n}\n\n#w-nohost-btn--top.back::after {\n content: \" \" !important;\n position: absolute !important;\n top: 16px !important;\n left: 24px !important;\n width: 12px !important;\n height: 12px !important;\n border: 2px solid #fff !important;\n transform: rotate(45deg) !important;\n border-top: none !important;\n border-right: none !important;\n}\n\n#w-nohost-list #w-nohost-btn--back:hover,\n#w-nohost-list #w-nohost-btn--back:focus {\n background-color: #4097e0 !important;\n}\n\n#w-nohost-list #w-nohost-btn--back:before {\n content: \" \" !important;\n position: absolute !important;\n top: 17px !important;\n left: 12px !important;\n width: 12px !important;\n height: 12px !important;\n border: 2px solid #fff !important;\n transform: rotate(45deg) !important;\n border-right: none !important;\n border-top: none !important;\n}\n\n#w-nohost-circle {\n user-select: none !important;\n position: fixed !important;\n z-index: 999999999 !important;\n padding-right: 5px !important;\n padding-top: 20px !important;\n}\n\n#w-nohost-circle-context {\n position: absolute !important;\n top: 61px !important;\n left: 41px !important;\n transform: translate(0, -100%) !important;\n font-size: 14px !important;\n white-space: nowrap !important;\n background: #fff !important;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5) !important;\n line-height: 30px !important;\n border-radius: 5px !important;\n display: none;\n user-select: none !important;\n}\n.w-nohost-circle-envs {\n border-bottom-left-radius: 5px !important;\n border-bottom-right-radius: 5px !important;\n}\n\n#w-nohost-circle-env {\n padding: 0 8px !important;\n color: #5bc0de !important;\n border-bottom: 1px solid #ddd !important;\n max-width: 250px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n cursor: pointer !important;\n}\n\n.w-nohost-circle-item {\n padding: 0 8px !important;\n white-space: nowrap !important;\n cursor: pointer !important;\n color: #000 !important;\n}\n\n.w-nohost-circle-item:hover {\n background: #f5f5f5 !important;\n color: #000 !important;\n}\n\n.w-nohost-circle-item:last-child {\n border-radius: 0 0 5px 5px;\n}\n\n#w-nohost-circle-icon {\n cursor: pointer !important;\n user-select: none !important;\n box-sizing: border-box !important;\n width: 40px !important;\n height: 40px !important;\n border-radius: 50% !important;\n background-color: #5bc0de !important;\n background-color: rgba(91, 192, 222, 0.3) !important;\n color: #008cba !important;\n white-space: nowrap;\n overflow: hidden;\n font-size: 12px !important;\n display: flex !important;\n align-items: center !important;\n white-space: nowrap;\n overflow: hidden;\n}\n\n.w-nohost-loading-circle {\n border-top: 5px solid rgba(84, 189, 221, 0.3) !important;\n animation: spin 1.6s linear infinite;\n}\n\n.w-nohost-loaded-circle {\n border: 4px solid rgba(84, 189, 221, 0.3) !important;\n}\n\n#w-nohost-circle-icon.w-nohost-active {\n background-color: #008cba !important;\n color: white !important;\n}\n\n#w-nohost-loader {\n box-sizing: border-box !important;\n display: none;\n position: fixed !important;\n z-index: 9999998 !important;\n top: 25% !important;\n left: 0 !important;\n right: 0 !important;\n width: 50px !important;\n height: 50px !important;\n margin: auto !important;\n border: 8px solid #eee !important;\n border-top: 8px solid #008cba !important;\n border-radius: 50% !important;\n animation: spin 1.6s linear infinite;\n}\n\n@keyframes spin {\n 0% {\n transform: rotate(0deg);\n }\n 100% {\n transform: rotate(360deg);\n }\n}\n\n.w-nohost-toast {\n display: none;\n z-index: 999999999 !important;\n position: fixed !important;\n top: 15px !important;\n left: 0 !important;\n right: 0 !important;\n margin: auto !important;\n width: 400px !important;\n max-width: 90% !important;\n background-color: #13ce66;\n color: white !important;\n text-align: center !important;\n padding: 10px !important;\n transition: 0.3s !important;\n font-size: 16px !important;\n border-radius: 3px !important;\n line-height: 20px !important;\n}\n\n.w-nohost-toast.w-nohost-toast-error {\n background-color: #e80808 !important;\n}\n\n.w-nohost-toast.w-nohost-toast-countdown {\n width: 40px !important;\n border-radius: 20px !important;\n}\n\n.w-nohost-toast-close:hover {\n color: #fff;\n}\n\n.w-nohost-has-second {\n display: none;\n position: relative;\n}\n\n.w-nohost-has-second::after {\n content: \" \" !important;\n position: absolute !important;\n top: 12px !important;\n right: 12px !important;\n width: 6px !important;\n height: 6px !important;\n border: 1px solid #aaaaaa !important;\n transform: rotate(45deg) !important;\n border-left: none !important;\n border-bottom: none !important;\n}\n\n.w-nohost-second-content-wrap {\n position: absolute !important;\n left: 100% !important;\n display: none;\n transform: translate(0, -100%) !important;\n}\n\n#w-nohost-circle-history .w-nohost-second-content-wrap {\n transform: translate(0, -30px) !important;\n}\n\n.w-nohost-second-content-content {\n margin-left: 3px;\n min-width: 130px !important;\n font-size: 14px !important;\n white-space: nowrap !important;\n background: #fff !important;\n box-shadow: 0 0 5px rgba(0, 0, 0, 0.5) !important;\n line-height: 30px !important;\n border-radius: 5px !important;\n user-select: none !important;\n}\n\n.w-nohost-second-item {\n max-width: 250px !important;\n overflow: hidden !important;\n text-overflow: ellipsis !important;\n white-space: nowrap !important;\n padding: 0 8px !important;\n cursor: pointer !important;\n}\n\n.w-nohost-second-item:hover {\n background: #f5f5f5 !important;\n}\n\n.w-nohost-second-item:nth-child(1) {\n border-top-left-radius: 5px !important;\n border-top-right-radius: 5px !important;\n}\n\n.w-nohost-second-item:last-child {\n border-bottom-right-radius: 5px !important;\n border-bottom-left-radius: 5px !important;\n}\n\n.w-nohost-has-second:hover .w-nohost-second-content-wrap {\n display: block !important;\n}\n\n.w-nohost-custom-btn-hide {\n display: none !important;\n}\n", ""]);
// Exports
module.exports = exports;
/***/ }),
/***/ "./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js":
/*!***********************************************************************!*\
!*** ./node_modules/_css-loader@3.6.0@css-loader/dist/runtime/api.js ***!
\***********************************************************************/
/*! no static exports found */
/***/ (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, " */");
}
/***/ }),
/***/ "./node_modules/_jquery@3.3.1@jquery/dist/jquery.js":
/*!**********************************************************!*\
!*** ./node_modules/_jquery@3.3.1@jquery/dist/jquery.js ***!
\**********************************************************/
/*! no static exports found */
/***/ (function(module, exports, __webpack_require__) {
"use strict";
/* WEBPACK VAR INJECTION */(function(module) {var __WEBPACK_AMD_DEFINE_ARRAY__, __WEBPACK_AMD_DEFINE_RESULT__;
var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; };
/*!
* jQuery JavaScript Library v3.3.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2018-01-20T17:24Z
*/
(function (global, factory) {
"use strict";
if (( false ? undefined : _typeof(module)) === "object" && _typeof(module.exports) === "object") {
// For CommonJS and CommonJS-like environments where a proper `window`
// is present, execute the factory and get jQuery.
// For environments that do not have a `window` with a `document`
// (such as Node.js), expose a factory as module.exports.
// This accentuates the need for the creation of a real `window`.
// e.g. var jQuery = require("jquery")(window);
// See ticket #14549 for more info.
module.exports = global.document ? factory(global, true) : function (w) {
if (!w.document) {
throw new Error("jQuery requires a window with a document");
}
return factory(w);
};
} else {
factory(global);
}
// Pass this if window is not defined yet
})(typeof window !== "undefined" ? window : undefined, function (window, noGlobal) {
// Edge <= 12 - 13+, Firefox <=18 - 45+, IE 10 - 11, Safari 5.1 - 9+, iOS 6 - 9.1
// throw exceptions when non-strict code (e.g., ASP.NET 4.5) accesses strict mode
// arguments.callee.caller (trac-13335). But as of jQuery 3.0 (2016), strict mode should be common
// enough that all such attempts are guarded in a try block.
"use strict";
var arr = [];
var document = window.document;
var getProto = Object.getPrototypeOf;
var _slice = arr.slice;
var concat = arr.concat;
var push = arr.push;
var indexOf = arr.indexOf;
var class2type = {};
var toString = class2type.toString;
var hasOwn = class2type.hasOwnProperty;
var fnToString = hasOwn.toString;
var ObjectFunctionString = fnToString.call(Object);
var support = {};
var isFunction = function isFunction(obj) {
// Support: Chrome <=57, Firefox <=52
// In some browsers, typeof returns "function" for HTML <object> elements
// (i.e., `typeof document.createElement( "object" ) === "function"`).
// We don't want to classify *any* DOM node as a function.
return typeof obj === "function" && typeof obj.nodeType !== "number";
};
var isWindow = function isWindow(obj) {
return obj != null && obj === obj.window;
};
var preservedScriptAttributes = {
type: true,
src: true,
noModule: true
};
function DOMEval(code, doc, node) {
doc = doc || document;
var i,
script = doc.createElement("script");
script.text = code;
if (node) {
for (i in preservedScriptAttributes) {
if (node[i]) {
script[i] = node[i];
}
}
}
doc.head.appendChild(script).parentNode.removeChild(script);
}
function toType(obj) {
if (obj == null) {
return obj + "";
}
// Support: Android <=2.3 only (functionish RegExp)
return (typeof obj === "undefined" ? "undefined" : _typeof(obj)) === "object" || typeof obj === "function" ? class2type[toString.call(obj)] || "object" : typeof obj === "undefined" ? "undefined" : _typeof(obj);
}
/* global Symbol */
// Defining this global in .eslintrc.json would create a danger of using the global
// unguarded in another place, it seems safer to define global only for this module
var version = "3.3.1",
// Define a local copy of jQuery
jQuery = function jQuery(selector, context) {
// The jQuery object is actually just the init constructor 'enhanced'
// Need init if jQuery is called (just allow error to be thrown if not included)
return new jQuery.fn.init(selector, context);
},
// Support: Android <=4.0 only
// Make sure we trim BOM and NBSP
rtrim = /^[\s\uFEFF\xA0]+|[\s\uFEFF\xA0]+$/g;
jQuery.fn = jQuery.prototype = {
// The current version of jQuery being used
jquery: version,
constructor: jQuery,
// The default length of a jQuery object is 0
length: 0,
toArray: function toArray() {
return _slice.call(this);
},
// Get the Nth element in the matched element set OR
// Get the whole matched element set as a clean array
get: function get(num) {
// Return all the elements in a clean array
if (num == null) {
return _slice.call(this);
}
// Return just the one element from the set
return num < 0 ? this[num + this.length] : this[num];
},
// Take an array of elements and push it onto the stack
// (returning the new matched element set)
pushStack: function pushStack(elems) {
// Build a new jQuery matched element set
var ret = jQuery.merge(this.constructor(), elems);
// Add the old object onto the stack (as a reference)
ret.prevObject = this;
// Return the newly-formed element set
return ret;
},
// Execute a callback for every element in the matched set.
each: function each(callback) {
return jQuery.each(this, callback);
},
map: function map(callback) {
return this.pushStack(jQuery.map(this, function (elem, i) {
return callback.call(elem, i, elem);
}));
},
slice: function slice() {
return this.pushStack(_slice.apply(this, arguments));
},
first: function first() {
return this.eq(0);
},
last: function last() {
return this.eq(-1);
},
eq: function eq(i) {
var len = this.length,
j = +i + (i < 0 ? len : 0);
return this.pushStack(j >= 0 && j < len ? [this[j]] : []);
},
end: function end() {
return this.prevObject || this.constructor();
},
// For internal use only.
// Behaves like an Array's method, not like a jQuery method.
push: push,
sort: arr.sort,
splice: arr.splice
};
jQuery.extend = jQuery.fn.extend = function () {
var options,
name,
src,
copy,
copyIsArray,
clone,
target = arguments[0] || {},
i = 1,
length = arguments.length,
deep = false;
// Handle a deep copy situation
if (typeof target === "boolean") {
deep = target;
// Skip the boolean and the target
target = arguments[i] || {};
i++;
}
// Handle case when target is a string or something (possible in deep copy)
if ((typeof target === "undefined" ? "undefined" : _typeof(target)) !== "object" && !isFunction(target)) {
target = {};
}
// Extend jQuery itself if only one argument is passed
if (i === length) {
target = this;
i--;
}
for (; i < length; i++) {
// Only deal with non-null/undefined values
if ((options = arguments[i]) != null) {
// Extend the base object
for (name in options) {
src = target[name];
copy = options[name];
// Prevent never-ending loop
if (target === copy) {
continue;
}
// Recurse if we're merging plain objects or arrays
if (deep && copy && (jQuery.isPlainObject(copy) || (copyIsArray = Array.isArray(copy)))) {
if (copyIsArray) {
copyIsArray = false;
clone = src && Array.isArray(src) ? src : [];
} else {
clone = src && jQuery.isPlainObject(src) ? src : {};
}
// Never move original objects, clone them
target[name] = jQuery.extend(deep, clone, copy);
// Don't bring in undefined values
} else if (copy !== undefined) {
target[name] = copy;
}
}
}
}
// Return the modified object
return target;
};
jQuery.extend({
// Unique for each copy of jQuery on the page
expando: "jQuery" + (version + Math.random()).replace(/\D/g, ""),
// Assume jQuery is ready without the ready module
isReady: true,
error: function error(msg) {
throw new Error(msg);
},
noop: function noop() {},
isPlainObject: function isPlainObject(obj) {
var proto, Ctor;
// Detect obvious negatives
// Use toString instead of jQuery.type to catch host objects
if (!obj || toString.call(obj) !== "[object Object]") {
return false;
}
proto = getProto(obj);
// Objects with no prototype (e.g., `Object.create( null )`) are plain
if (!proto) {
return true;
}
// Objects with prototype are plain iff they were constructed by a global Object function
Ctor = hasOwn.call(proto, "constructor") && proto.constructor;
return typeof Ctor === "function" && fnToString.call(Ctor) === ObjectFunctionString;
},
isEmptyObject: function isEmptyObject(obj) {
/* eslint-disable no-unused-vars */
// See https://github.com/eslint/eslint/issues/6125
var name;
for (name in obj) {
return false;
}
return true;
},
// Evaluates a script in a global context
globalEval: function globalEval(code) {
DOMEval(code);
},
each: function each(obj, callback) {
var length,
i = 0;
if (isArrayLike(obj)) {
length = obj.length;
for (; i < length; i++) {
if (callback.call(obj[i], i, obj[i]) === false) {
break;
}
}
} else {
for (i in obj) {
if (callback.call(obj[i], i, obj[i]) === false) {
break;
}
}
}
return obj;
},
// Support: Android <=4.0 only
trim: function trim(text) {
return text == null ? "" : (text + "").replace(rtrim, "");
},
// results is for internal usage only
makeArray: function makeArray(arr, results) {
var ret = results || [];
if (arr != null) {
if (isArrayLike(Object(arr))) {
jQuery.merge(ret, typeof arr === "string" ? [arr] : arr);
} else {
push.call(ret, arr);
}
}
return ret;
},
inArray: function inArray(elem, arr, i) {
return arr == null ? -1 : indexOf.call(arr, elem, i);
},
// Support: Android <=4.0 only, PhantomJS 1 only
// push.apply(_, arraylike) throws on ancient WebKit
merge: function merge(first, second) {
var len = +second.length,
j = 0,
i = first.length;
for (; j < len; j++) {
first[i++] = second[j];
}
first.length = i;
return first;
},
grep: function grep(elems, callback, invert) {
var callbackInverse,
matches = [],
i = 0,
length = elems.length,
callbackExpect = !invert;
// Go through the array, only saving the items
// that pass the validator function
for (; i < length; i++) {
callbackInverse = !callback(elems[i], i);
if (callbackInverse !== callbackExpect) {
matches.push(elems[i]);
}
}
return matches;
},
// arg is for internal usage only
map: function map(elems, callback, arg) {
var length,
value,
i = 0,
ret = [];
// Go through the array, translating each of the items to their new values
if (isArrayLike(elems)) {
length = elems.length;
for (; i < length; i++) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
// Go through every key on the object,
} else {
for (i in elems) {
value = callback(elems[i], i, arg);
if (value != null) {
ret.push(value);
}
}
}
// Flatten any nested arrays
return concat.apply([], ret);
},
// A global GUID counter for objects
guid: 1,
// jQuery.support is not used in Core but other projects attach their
// properties to it so it needs to exist.
support: support
});
if (typeof Symbol === "function") {
jQuery.fn[Symbol.iterator] = arr[Symbol.iterator];
}
// Populate the class2type map
jQuery.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "), function (i, name) {
class2type["[object " + name + "]"] = name.toLowerCase();
});
function isArrayLike(obj) {
// Support: real iOS 8.2 only (not reproducible in simulator)
// `in` check used to prevent JIT error (gh-2145)
// hasOwn isn't used here due to false negatives
// regarding Nodelist length in IE
var length = !!obj && "length" in obj && obj.length,
type = toType(obj);
if (isFunction(obj) || isWindow(obj)) {
return false;
}
return type === "array" || length === 0 || typeof length === "number" && length > 0 && length - 1 in obj;
}
var Sizzle =
/*!
* Sizzle CSS Selector Engine v2.3.3
* https://sizzlejs.com/
*
* Copyright jQuery Foundation and other contributors
* Released under the MIT license
* http://jquery.org/license
*
* Date: 2016-08-08
*/
function (window) {
var i,
support,
Expr,
getText,
isXML,
tokenize,
compile,
select,
outermostContext,
sortInput,
hasDuplicate,
// Local document vars
setDocument,
document,
docElem,
documentIsHTML,
rbuggyQSA,
rbuggyMatches,
matches,
contains,
// Instance-specific data
expando = "sizzle" + 1 * new Date(),
preferredDoc = window.document,
dirruns = 0,
done = 0,
classCache = createCache(),
tokenCache = createCache(),
compilerCache = createCache(),
sortOrder = function sortOrder(a, b) {
if (a === b) {
hasDuplicate = true;
}
return 0;
},
// Instance methods
hasOwn = {}.hasOwnProperty,
arr = [],
pop = arr.pop,
push_native = arr.push,
push = arr.push,
slice = arr.slice,
// Use a stripped-down indexOf as it's faster than native
// https://jsperf.com/thor-indexof-vs-for/5
indexOf = function indexOf(list, elem) {
var i = 0,
len = list.length;
for (; i < len; i++) {
if (list[i] === elem) {
return i;
}
}
return -1;
},
booleans = "checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",
// Regular expressions
// http://www.w3.org/TR/css3-selectors/#whitespace
whitespace = "[\\x20\\t\\r\\n\\f]",
// http://www.w3.org/TR/CSS21/syndata.html#value-def-identifier
identifier = "(?:\\\\.|[\\w-]|[^\0-\\xa0])+",
// Attribute selectors: http://www.w3.org/TR/selectors/#attribute-selectors
attributes = "\\[" + whitespace + "*(" + identifier + ")(?:" + whitespace +
// Operator (capture 2)
"*([*^$|!~]?=)" + whitespace +
// "Attribute values must be CSS identifiers [capture 5] or strings [capture 3 or capture 4]"
"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|(" + identifier + "))|)" + whitespace + "*\\]",
pseudos = ":(" + identifier + ")(?:\\((" +
// To reduce the number of selectors needing tokenize in the preFilter, prefer arguments:
// 1. quoted (capture 3; capture 4 or capture 5)
"('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|" +
// 2. simple (capture 6)
"((?:\\\\.|[^\\\\()[\\]]|" + attributes + ")*)|" +
// 3. anything else (capture 2)
".*" + ")\\)|)",
// Leading and non-escaped trailing whitespace, capturing some non-whitespace characters preceding the latter
rwhitespace = new RegExp(whitespace + "+", "g"),
rtrim = new RegExp("^" + whitespace + "+|((?:^|[^\\\\])(?:\\\\.)*)" + whitespace + "+$", "g"),
rcomma = new RegExp("^" + whitespace + "*," + whitespace + "*"),
rcombinators = new RegExp("^" + whitespace + "*([>+~]|" + whitespace + ")" + whitespace + "*"),
rattributeQuotes = new RegExp("=" + whitespace + "*([^\\]'\"]*?)" + whitespace + "*\\]", "g"),
rpseudo = new RegExp(pseudos),
ridentifier = new RegExp("^" + identifier + "$"),
matchExpr = {
"ID": new RegExp("^#(" + identifier + ")"),
"CLASS": new RegExp("^\\.(" + identifier + ")"),
"TAG": new RegExp("^(" + identifier + "|[*])"),
"ATTR": new RegExp("^" + attributes),
"PSEUDO": new RegExp("^" + pseudos),
"CHILD": new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\(" + whitespace + "*(even|odd|(([+-]|)(\\d*)n|)" + whitespace + "*(?:([+-]|)" + whitespace + "*(\\d+)|))" + whitespace + "*\\)|)", "i"),
"bool": new RegExp("^(?:" + booleans + ")$", "i"),
// For use in libraries implementing .is()
// We use this for POS matching in `select`
"needsContext": new RegExp("^" + whitespace + "*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\(" + whitespace + "*((?:-\\d)?\\d*)" + whitespace + "*\\)|)(?=[^-]|$)", "i")
},
rinputs = /^(?:input|select|textarea|button)$/i,
rheader = /^h\d$/i,
rnative = /^[^{]+\{\s*\[native \w/,
// Easily-parseable/retrievable ID or TAG or CLASS selectors
rquickExpr = /^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,
rsibling = /[+~]/,
// CSS escapes
// http://www.w3.org/TR/CSS21/syndata.html#escaped-characters
runescape = new RegExp("\\\\([\\da-f]{1,6}" + whitespace + "?|(" + whitespace + ")|.)", "ig"),
funescape = function funescape(_, escaped, escapedWhitespace) {
var high = "0x" + escaped - 0x10000;
// NaN means non-codepoint
// Support: Firefox<24
// Workaround erroneous numeric interpretation of +"0x"
return high !== high || escapedWhitespace ? escaped : high < 0 ?
// BMP codepoint
String.fromCharCode(high + 0x10000) :
// Supplemental Plane codepoint (surrogate pair)
String.fromCharCode(high >> 10 | 0xD800, high & 0x3FF | 0xDC00);
},
// CSS string/identifier serialization
// https://drafts.csswg.org/cssom/#common-serializing-idioms
rcssescape = /([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,
fcssescape = function fcssescape(ch, asCodePoint) {
if (asCodePoint) {
// U+0000 NULL becomes U+FFFD REPLACEMENT CHARACTER
if (ch === "\0") {
return "\uFFFD";
}
// Control characters and (dependent upon position) numbers get escaped as code points
return ch.slice(0, -1) + "\\" + ch.charCodeAt(ch.length - 1).toString(16) + " ";
}
// Other potentially-special ASCII characters get backslash-escaped
return "\\" + ch;
},
// Used for iframes
// See setDocument()
// Removing the function wrapper causes a "Permission Denied"
// error in IE
unloadHandler = function unloadHandler() {
setDocument();
},
disabledAncestor = addCombinator(function (elem) {
return elem.disabled === true && ("form" in elem || "label" in elem);
}, { dir: "parentNode", next: "legend" });
// Optimize for push.apply( _, NodeList )
try {
push.apply(arr = slice.call(preferredDoc.childNodes), preferredDoc.childNodes);
// Support: Android<4.0
// Detect silently failing push.apply
arr[preferredDoc.childNodes.length].nodeType;
} catch (e) {
push = { apply: arr.length ?
// Leverage slice if possible
function (target, els) {
push_native.apply(target, slice.call(els));
} :
// Support: IE<9
// Otherwise append directly
function (target, els) {
var j = target.length,
i = 0;
// Can't trust NodeList.length
while (target[j++] = els[i++]) {}
target.length = j - 1;
}
};
}
function Sizzle(selector, context, results, seed) {
var m,
i,
elem,
nid,
match,
groups,
newSelector,
newContext = context && context.ownerDocument,
// nodeType defaults to 9, since context defaults to document
nodeType = context ? context.nodeType : 9;
results = results || [];
// Return early from calls with invalid selector or context
if (typeof selector !== "string" || !selector || nodeType !== 1 && nodeType !== 9 && nodeType !== 11) {
return results;
}
// Try to shortcut find operations (as opposed to filters) in HTML documents
if (!seed) {
if ((context ? context.ownerDocument || context : preferredDoc) !== document) {
setDocument(context);
}
context = context || document;
if (documentIsHTML) {
// If the selector is sufficiently simple, try using a "get*By*" DOM method
// (excepting DocumentFragment context, where the methods don't exist)
if (nodeType !== 11 && (match = rquickExpr.exec(selector))) {
// ID selector
if (m = match[1]) {
// Document context
if (nodeType === 9) {
if (elem = context.getElementById(m)) {
// Support: IE, Opera, Webkit
// TODO: identify versions
// getElementById can match elements by name instead of ID
if (elem.id === m) {
results.push(elem);
return results;
}
} else {
return results;
}
// Element context
} else {
// Support: IE, Opera, Webkit
// TODO: identify versions
// getElementById can match elements by name instead of ID
if (newContext && (elem = newContext.getElementById(m)) && contains(context, elem) && elem.id === m) {
results.push(elem);
return results;
}
}
// Type selector
} else if (match[2]) {
push.apply(results, context.getElementsByTagName(selector));
return results;
// Class selector
} else if ((m = match[3]) && support.getElementsByClassName && context.getElementsByClassName) {
push.apply(results, context.getElementsByClassName(m));
return results;
}
}
// Take advantage of querySelectorAll
if (support.qsa && !compilerCache[selector + " "] && (!rbuggyQSA || !rbuggyQSA.test(selector))) {
if (nodeType !== 1) {
newContext = context;
newSelector = selector;
// qSA looks outside Element context, which is not what we want
// Thanks to Andrew Dupont for this workaround technique
// Support: IE <=8
// Exclude object elements
} else if (context.nodeName.toLowerCase() !== "object") {
// Capture the context ID, setting it first if necessary
if (nid = context.getAttribute("id")) {
nid = nid.replace(rcssescape, fcssescape);
} else {
context.setAttribute("id", nid = expando);
}
// Prefix every selector in the list
groups = tokenize(selector);
i = groups.length;
while (i--) {
groups[i] = "#" + nid + " " + toSelector(groups[i]);
}
newSelector = groups.join(",");
// Expand context for sibling selectors
newContext = rsibling.test(selector) && testContext(context.parentNode) || context;
}
if (newSelector) {
try {
push.apply(results, newContext.querySelectorAll(newSelector));
return results;
} catch (qsaError) {} finally {
if (nid === expando) {
context.removeAttribute("id");
}
}
}
}
}
}
// All others
return select(selector.replace(rtrim, "$1"), context, results, seed);
}
/**
* Create key-value caches of limited size
* @returns {function(string, object)} Returns the Object data after storing it on itself with
* property name the (space-suffixed) string and (if the cache is larger than Expr.cacheLength)
* deleting the oldest entry
*/
function createCache() {
var keys = [];
function cache(key, value) {
// Use (key + " ") to avoid collision with native prototype properties (see Issue #157)
if (keys.push(key + " ") > Expr.cacheLength) {
// Only keep the most recent entries
delete cache[keys.shift()];
}
return cache[key + " "] = value;
}
return cache;
}
/**
* Mark a function for special use by Sizzle
* @param {Function} fn The function to mark
*/
function markFunction(fn) {
fn[expando] = true;
return fn;
}
/**
* Support testing using an element
* @param {Function} fn Passed the created element and returns a boolean result
*/
function assert(fn) {
var el = document.createElement("fieldset");
try {
return !!fn(el);
} catch (e) {
return false;
} finally {
// Remove from its parent by default
if (el.parentNode) {
el.parentNode.removeChild(el);
}
// release memory in IE
el = null;
}
}
/**
* Adds the same handler for all of the specified attrs
* @param {String} attrs Pipe-separated list of attributes
* @param {Function} handler The method that will be applied
*/
function addHandle(attrs, handler) {
var arr = attrs.split("|"),
i = arr.length;
while (i--) {
Expr.attrHandle[arr[i]] = handler;
}
}
/**
* Checks document order of two siblings
* @param {Element} a
* @param {Element} b
* @returns {Number} Returns less than 0 if a precedes b, greater than 0 if a follows b
*/
function siblingCheck(a, b) {
var cur = b && a,
diff = cur && a.nodeType === 1 && b.nodeType === 1 && a.sourceIndex - b.sourceIndex;
// Use IE sourceIndex if available on both nodes
if (diff) {
return diff;
}
// Check if b follows a
if (cur) {
while (cur = cur.nextSibling) {
if (cur === b) {
return -1;
}
}
}
return a ? 1 : -1;
}
/**
* Returns a function to use in pseudos for input types
* @param {String} type
*/
function createInputPseudo(type) {
return function (elem) {
var name = elem.nodeName.toLowerCase();
return name === "input" && elem.type === type;
};
}
/**
* Returns a function to use in pseudos for buttons
* @param {String} type
*/
function createButtonPseudo(type) {
return function (elem) {
var name = elem.nodeName.toLowerCase();
return (name === "input" || name === "button") && elem.type === type;
};
}
/**
* Returns a function to use in pseudos for :enabled/:disabled
* @param {Boolean} disabled true for :disabled; false for :enabled
*/
function createDisabledPseudo(disabled) {
// Known :disabled false positives: fieldset[disabled] > legend:nth-of-type(n+2) :can-disable
return function (elem) {
// Only certain elements can match :enabled or :disabled
// https://html.spec.whatwg.org/multipage/scripting.html#selector-enabled
// https://html.spec.whatwg.org/multipage/scripting.html#selector-disabled
if ("form" in elem) {
// Check for inherited disabledness on relevant non-disabled elements:
// * listed form-associated elements in a disabled fieldset
// https://html.spec.whatwg.org/multipage/forms.html#category-listed
// https://html.spec.whatwg.org/multipage/forms.html#concept-fe-disabled
// * option elements in a disabled optgroup
// https://html.spec.whatwg.org/multipage/forms.html#concept-option-disabled
// All such elements have a "form" property.
if (elem.parentNode && elem.disabled === false) {
// Option elements defer to a parent optgroup if present
if ("label" in elem) {
if ("label" in elem.parentNode) {
return elem.parentNode.disabled === disabled;
} else {
return elem.disabled === disabled;
}
}
// Support: IE 6 - 11
// Use the isDisabled shortcut property to check for disabled fieldset ancestors
return elem.isDisabled === disabled ||
// Where there is no isDisabled, check manually
/* jshint -W018 */
elem.isDisabled !== !disabled && disabledAncestor(elem) === disabled;
}
return elem.disabled === disabled;
// Try to winnow out elements that can't be disabled before trusting the disabled property.
// Some victims get caught in our net (label, legend, menu, track), but it shouldn't
// even exist on them, let alone have a boolean value.
} else if ("label" in elem) {
return elem.disabled === disabled;
}
// Remaining elements are neither :enabled nor :disabled
return false;
};
}
/**
* Returns a function to use in pseudos for positionals
* @param {Function} fn
*/
function createPositionalPseudo(fn) {
return markFunction(function (argument) {
argument = +argument;
return markFunction(function (seed, matches) {
var j,
matchIndexes = fn([], seed.length, argument),
i = matchIndexes.length;
// Match elements found at the specified indexes
while (i--) {
if (seed[j = matchIndexes[i]]) {
seed[j] = !(matches[j] = seed[j]);
}
}
});
});
}
/**
* Checks a node for validity as a Sizzle context
* @param {Element|Object=} context
* @returns {Element|Object|Boolean} The input node if acceptable, otherwise a falsy value
*/
function testContext(context) {
return context && typeof context.getElementsByTagName !== "undefined" && context;
}
// Expose support vars for convenience
support = Sizzle.support = {};
/**
* Detects XML nodes
* @param {Element|Object} elem An element or a document
* @returns {Boolean} True iff elem is a non-HTML XML node
*/
isXML = Sizzle.isXML = function (elem) {
// documentElement is verified for cases where it