1"use strict"; 2 3function ownKeys(object, enumerableOnly) { var keys = Object.keys(object); if (Object.getOwnPropertySymbols) { var symbols = Object.getOwnPropertySymbols(object); enumerableOnly && (symbols = symbols.filter(function (sym) { return Object.getOwnPropertyDescriptor(object, sym).enumerable; })), keys.push.apply(keys, symbols); } return keys; } 4function _objectSpread(target) { for (var i = 1; i < arguments.length; i++) { var source = null != arguments[i] ? arguments[i] : {}; i % 2 ? ownKeys(Object(source), !0).forEach(function (key) { _defineProperty(target, key, source[key]); }) : Object.getOwnPropertyDescriptors ? Object.defineProperties(target, Object.getOwnPropertyDescriptors(source)) : ownKeys(Object(source)).forEach(function (key) { Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key)); }); } return target; } 5function _defineProperty(obj, key, value) { key = _toPropertyKey(key); if (key in obj) { Object.defineProperty(obj, key, { value: value, enumerable: true, configurable: true, writable: true }); } else { obj[key] = value; } return obj; } 6function _toPropertyKey(arg) { var key = _toPrimitive(arg, "string"); return _typeof(key) === "symbol" ? key : String(key); } 7function _toPrimitive(input, hint) { if (_typeof(input) !== "object" || input === null) return input; var prim = input[Symbol.toPrimitive]; if (prim !== undefined) { var res = prim.call(input, hint || "default"); if (_typeof(res) !== "object") return res; throw new TypeError("@@toPrimitive must return a primitive value."); } return (hint === "string" ? String : Number)(input); } 8function _slicedToArray(arr, i) { return _arrayWithHoles(arr) || _iterableToArrayLimit(arr, i) || _unsupportedIterableToArray(arr, i) || _nonIterableRest(); } 9function _nonIterableRest() { throw new TypeError("Invalid attempt to destructure non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 10function _iterableToArrayLimit(arr, i) { var _i = null == arr ? null : "undefined" != typeof Symbol && arr[Symbol.iterator] || arr["@@iterator"]; if (null != _i) { var _s, _e, _x, _r, _arr = [], _n = !0, _d = !1; try { if (_x = (_i = _i.call(arr)).next, 0 === i) { if (Object(_i) !== _i) return; _n = !1; } else for (; !(_n = (_s = _x.call(_i)).done) && (_arr.push(_s.value), _arr.length !== i); _n = !0); } catch (err) { _d = !0, _e = err; } finally { try { if (!_n && null != _i["return"] && (_r = _i["return"](), Object(_r) !== _r)) return; } finally { if (_d) throw _e; } } return _arr; } } 11function _arrayWithHoles(arr) { if (Array.isArray(arr)) return arr; } 12function _typeof(obj) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (obj) { return typeof obj; } : function (obj) { return obj && "function" == typeof Symbol && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }, _typeof(obj); } 13function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _unsupportedIterableToArray(arr) || _nonIterableSpread(); } 14function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method."); } 15function _unsupportedIterableToArray(o, minLen) { if (!o) return; if (typeof o === "string") return _arrayLikeToArray(o, minLen); var n = Object.prototype.toString.call(o).slice(8, -1); if (n === "Object" && o.constructor) n = o.constructor.name; if (n === "Map" || n === "Set") return Array.from(o); if (n === "Arguments" || /^(?:Ui|I)nt(?:8|16|32)(?:Clamped)?Array$/.test(n)) return _arrayLikeToArray(o, minLen); } 16function _iterableToArray(iter) { if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter); } 17function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) return _arrayLikeToArray(arr); } 18function _arrayLikeToArray(arr, len) { if (len == null || len > arr.length) len = arr.length; for (var i = 0, arr2 = new Array(len); i < len; i++) arr2[i] = arr[i]; return arr2; } 19; 20(function (window, undefined) { 21 window.initTry = window.initTry || initTry; 22 function initTry(userCfg) { 23 loadScript("https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.min.js").then(function () { 24 return loadScript("https://cdn.jsdelivr.net/npm/[email protected]/jquery.scrollTo.min.js"); 25 }).then(function () { 26 return loadScript("https://cdn.jsdelivr.net/npm/[email protected]/swagger-ui-bundle.js"); 27 }).then(function () { 28 return loadScript("https://cdn.jsdelivr.net/npm/[email protected]/index.min.js"); 29 }).then(function () { 30 var cfg = cfgHandle(userCfg); 31 window.cfg = cfg; 32 if (cfg.onlySwagger) { 33 initSwagger(cfg.swaggerOptions); 34 $(".swaggerBox").addClass("onlySwagger"); 35 } else { 36 var _Redoc; 37 (_Redoc = Redoc).init.apply(_Redoc, _toConsumableArray(cfg.redocOptions)); 38 } 39 initCss(); 40 })["catch"](function () { 41 console.error('Something went wrong.'); 42 }); 43 } 44 function cfgHandle(userCfg) { 45 if (_typeof(userCfg) === "string") { 46 userCfg = { 47 openApi: userCfg 48 }; 49 } 50 var _userCfg = userCfg, 51 redocOptions = _userCfg.redocOptions; 52 var testOpenApi = "https://httpbin.org/spec.json"; // `https://petstore.swagger.io/v2/swagger.json` 53 var redocOptionsRes = dataType(redocOptions, "object") ? [undefined, redocOptions] : redocOptions || []; 54 var _redocOptionsRes = _slicedToArray(redocOptionsRes, 4), 55 redoc_openApi = _redocOptionsRes[0], 56 redoc_options = _redocOptionsRes[1], 57 redoc_dom = _redocOptionsRes[2], 58 redoc_callBack = _redocOptionsRes[3]; 59 var redocVersion = ( 60 // Read the redoc version number from the label 61 ($("script[src*=\"/redoc@\"]").attr("src") || "").match(/redoc@(.+?)\//) || [])[1]; 62 if (_typeof(userCfg.openApi) === "object") { 63 var _userCfg2 = userCfg, 64 openApi = _userCfg2.openApi; 65 var blob = new Blob([JSON.stringify(openApi)], { 66 type: "application/json" 67 }); 68 var url = URL.createObjectURL(blob); 69 userCfg.openApi = url; 70 userCfg._openApiJSON = openApi; 71 } 72 var cfg = _objectSpread(_objectSpread({ 73 openApi: testOpenApi, 74 onlySwagger: false, 75 // Only render swagger, in some cases redoc will render openApi error
76 tryText: "try", 77 // try button text 78 trySwaggerInApi: true, 79 // Is the swagger debugging window displayed under the api? true: yes, false: displayed after the request, when the request is relatively large, you may not see the debugging window 80 redocVersion: redocVersion, 81 authBtnPosSelector: "h1:eq(0)", 82 authBtnText: "AUTHORIZE", 83 pure: false 84 }, userCfg), {}, { 85 swaggerOptions: _objectSpread({ 86 url: userCfg.openApi || testOpenApi, 87 dom_id: "#swagger-ui", 88 onComplete: function onComplete() { 89 if (Boolean(cfg.onlySwagger) === false) { 90 trySwagger(cfg); 91 } 92 }, 93 tryItOutEnabled: true 94 }, userCfg.swaggerOptions), 95 redocOptions: [redoc_openApi || userCfg._openApiJSON || userCfg.openApi || testOpenApi, redoc_options || { 96 enableConsole: true 97 }, redoc_dom || document.getElementById('redoc-container'), function () { 98 redoc_callBack && redoc_callBack(); 99 initSwagger(cfg.swaggerOptions); 100 $(".swaggerBox").addClass("hide"); 101 cfg.pure && $(".swaggerBox").addClass("pure"); 102 }] 103 }); 104 return cfg; 105 } 106 function initCss() { 107 // reset swagger-ui css 108 $('head').append("\n <style>\n /* Set the position of swaggerBox with body as the relative element */\n body {\n position: relative;\n }\n @media print, screen and (max-width: 85rem) {\n .eIeJha,\n .dtUibw {\n padding: 4px;\n }\n }\n\n .swaggerBox.hide {\n visibility: hidden;\n cursor: none;\n width: 0;\n height: 0;\n }\n .swaggerBox.show {\n visibility: visible;\n cursor: initial;\n }\n\n /* Reset the style of swagger-ui */\n .swaggerBox .swagger-ui .wrapper {\n padding: 0;\n }\n .swaggerBox .swagger-ui .download-contents {\n top: -10px;\n right: 0;\n width: initial;\n }\n\n /* Disable api bar to avoid problems */\n .swaggerBox:not(.onlySwagger) .swagger-ui .opblock .opblock-summary {\n cursor: not-allowed;\n pointer-events: none;\n }\n\n /* Disable the api bar, but exclude the authorization button */\n .swaggerBox .swagger-ui .authorization__btn {\n cursor: initial;\n pointer-events: initial;\n }\n\n .swaggerBox {\n border-radius: 4px;\n background-color: #fff;\n width: 100%;\n height: 100vh;\n position: absolute;\n top: 0;\n left: 0;\n z-index: 1;\n }\n .swaggerBox:not(.onlySwagger) {\n overflow: hidden;\n }\n /* Hide some disturbing elements */\n .swaggerBox.pure:not(.onlySwagger) .swagger-ui .opblock-summary {\n visibility: hidden;\n padding: 0;\n }\n .swaggerBox.pure:not(.onlySwagger) .opblock-section thead,\n .swaggerBox.pure:not(.onlySwagger) .swagger-ui .opblock-summary * {\n display: none;\n }\n\n .swaggerBox:not(.onlySwagger) .swagger-ui .opblock .opblock-section-header,\n .swaggerBox:not(.onlySwagger) .btn.cancel,\n .swaggerBox:not(.onlySwagger) .try-out,\n .swaggerBox:not(.onlySwagger) .responses-inner>div>h4,\n .swaggerBox:not(.onlySwagger) :not(.live-responses-table).responses-table,\n .swaggerBox:not(.onlySwagger) .opblock-body > .opblock-description-wrapper {\n display: none;\n }\n .swaggerBox:not(.onlySwagger) .block div>span:last-child .operation-tag-content>span:last-child {\n display: block;\n margin-bottom: 100vh;\n }\n .swaggerBox .tryBtn {\n margin-right: 10px;\n background-color: #fff;\n }\n </style>\n "); 109 } 110 function initSwagger(swaggerOptions) { 111 // dom 112 $('body').append("\n <div class=\"swaggerBox\">\n <div id=\"swagger-ui\"></div>\n </div>\n "); 113 // swagger-ui.css 114 $('head').append("<link rel=\"stylesheet\" href=\"https://cdn.jsdelivr.net/npm/[email protected]/swagger-ui.css\" />"); 115 SwaggerUIBundle(swaggerOptions); 116 } 117 function trySwagger(cfg) { 118 { 119 // Add a button to set auth to redoc 120 $(cfg.authBtnPosSelector).after($("\n <div class=\"".concat($("a[download]:eq(0)").attr("class"), " btn setAuth\">") + cfg.authBtnText + "</div>\n ")); 121 $(".btn.setAuth").click(function () { 122 // The pop-up window in swaggerBox can be displayed, but the swaggerBox itself is hidden 123 var $swaggerBox = $(".swaggerBox").removeClass("hide").css({ 124 visibility: "hidden", 125 height: "", 126 left: "", 127 top: "", 128 width: "" 129 }); 130 $(".swagger-ui .auth-wrapper .authorize.unlocked").click(); // Open the pop-up window for setting auth 131 var $modal = $(".swagger-ui .dialog-ux .modal-ux"); 132 $modal.css({ 133 visibility: "visible" 134 }); 135 $(".swagger-ui .auth-btn-wrapper .btn-done, .swagger-ui .dialog-ux .modal-ux-header .close-modal").click(function () { 136 $swaggerBox.addClass("hide").css({ 137 visibility: "" 138 }); 139 $modal.css({ 140 visibility: "" 141 }); 142 }); 143 }); 144 } 145 146 // Add try button 147 $(".http-verb").before("\n <button class=\"tryBtn\">".concat(cfg.tryText, "</button>\n ")); 148 $(".tryBtn").click(function (event) { 149 event.stopPropagation(); 150 var $tryBtn = $(this); 151 $(".swaggerShadow").remove(); // First clear all temporary elements 152 var $operation = $tryBtn.parents("[data-section-id]").last(); // Get the outermost api box 153 if ($operation.hasClass("try") === true) { 154 // If the current API is already in the try state, uninstall and exit the function 155 $(".swaggerBox").addClass("hide").removeClass("show"); 156 $operation.removeClass("try"); 157 return false;
158 } 159 $("[data-section-id]").removeClass("try"); // Delete the try class name of all other APIs 160 $operation.addClass("try"); // Add try class name to the currently clicked api 161 162 // The following 3 lines add class names to some necessary elements to facilitate acquisition or identification 163 $(".try>div>div:nth-child(2)").addClass("apiBlock"); 164 $(".try .apiBlock>div:nth-child(1)").addClass("fullApiBox"); 165 if (window.cfg.redocVersion !== 'next' && window.compareVersions.compare(window.cfg.redocVersion, "2.0.0-rc.32", "<=")) { 166 $(".try .apiBlock>div>div:nth-child(1)").addClass("fullApi"); 167 } else { 168 $(".try .apiBlock>div>button").addClass("fullApi"); 169 } 170 var appendSwaggerShadow = function appendSwaggerShadow() { 171 return $(".try .fullApiBox").append("<div class=\"swaggerShadow\"></div>"); 172 }; // Add a swaggerShadow element to synchronize the height of swagger and use it to occupy space 173 // If cfg.trySwaggerInApi === true then swaggerShadow will be added under fullApi, otherwise it may be under reqBox 174 if (cfg.trySwaggerInApi === true) { 175 appendSwaggerShadow(); 176 } else { 177 var requestSel = ".try .apiBlock h3"; 178 $(requestSel).parent().addClass("reqBox"); 179 if ($(requestSel).length && $(requestSel).text().includes("Request")) { 180 $(".try .reqBox").append("<div class=\"swaggerShadow\"></div>"); 181 } else { 182 appendSwaggerShadow(); 183 } 184 } 185 186 // get the click method and api 187 var fullApi = $(".try .fullApi").text().replace(cfg.tryText, '').trim(); 188 var _fullApi$match = fullApi.match(/(\w+)(.*)/), 189 _fullApi$match2 = _slicedToArray(_fullApi$match, 3), 190 method = _fullApi$match2[1], 191 api = _fullApi$match2[2]; 192 193 // Get the position of swaggerShadow 194 var pos = {}; 195 window.getAbsolutePosition = getAbsolutePosition; 196 pos = getAbsolutePosition($(".try .swaggerShadow")[0]); 197 pos = Object.keys(pos).reduce(function (prev, cur, index) { 198 // Add px to the number without unit, undefined when the number is 0 199 var val = pos[cur]; 200 return _objectSpread(_objectSpread({}, prev), {}, _defineProperty({}, cur, _typeof(val) === "number" ? val > 0 ? "".concat(val, "px") : undefined : val)); 201 }, {}); 202 var oldHeight = pos.height ? "".concat(pos.height) : undefined; 203 204 // Move swagger to the position of swaggerShadow 205 var getSwaggerBoxHeight = function getSwaggerBoxHeight() { 206 return getAbsolutePosition($(".swaggerBox")[0]).height + "px"; 207 }; 208 $(".swaggerBox").css({ 209 left: "".concat(pos.left), 210 top: "".concat(pos.top), 211 width: "".concat(pos.width), 212 height: oldHeight 213 }).removeClass("hide").addClass('show'); 214 215 // Synchronize the size of swaggerShadow to make it as big as swaggerBox 216 $(".swaggerShadow").css({ 217 height: getSwaggerBoxHeight() 218 }); 219 220 // scroll the swagger view to the same api position 221 var selStr = ".opblock-summary-".concat(method, " [data-path=\"").concat(api, "\"]"); 222 var $swaggerApiDom = $(selStr); 223 var $opblock = $swaggerApiDom.parents(".opblock"); // Get the currently clicked swagger api, and it is not an expanded element 224 if ($opblock.hasClass("open") === false) { 225 $swaggerApiDom.click(); // turn on 226 } 227 228 $opblock.addClass("open"); 229 console.log("selStr", selStr); 230 $(".swaggerBox").scrollTo($swaggerApiDom.parent()); 231 function changeFn() { 232 var pos = getAbsolutePosition($opblock[0]); 233 if (pos.height === 0) { 234 return false; // The height is 0, no processing 235 } else { 236 var newHeight = "".concat(pos.height, "px"); 237 if (oldHeight !== newHeight) { 238 $(".swaggerBox").scrollTo($swaggerApiDom.parent()); 239 $(".swaggerBox").css({ 240 height: newHeight 241 }); 242 $(".swaggerShadow").css({ 243 height: getSwaggerBoxHeight() 244 }); 245 oldHeight = newHeight; 246 } 247 } 248 } 249 changeFn(); 250 var observer = new MutationObserver(changeFn); 251 observer.disconnect(); 252 observer.observe($opblock[0], { 253 attributes: true, 254 childList: true, 255 subtree: true 256 }); 257 }); 258 259 // When changing the browser window size, reset the state of swaggerBox 260 $(window).resize(debounce(function () { 261 $(".swaggerBox").addClass("hide").removeClass("show").css({ 262 left: 0, 263 top: 0 264 }); 265 $("[data-section-id^=\"operation/\"]").removeClass("try"); 266 }, 500)); 267 } 268 function loadScript(src) { 269 return new Promise(function (resolve, reject) { 270 var script = document.createElement('script'); 271 script.type = 'text/javascript'; 272 script.onload = resolve; 273 script.onerror = reject; 274 script.src = src; 275 document.head.append(script); 276 }); 277 } 278 function debounce(fn, wait) { 279 // anti-shake 280 var timer = null; 281 return function () { 282 if (timer !== null) { 283 clearTimeout(timer); 284 } 285 timer = setTimeout(fn, wait); 286 }; 287 } 288 function getAbsolutePosition(domObj) { 289 // Get element position and size 290 // If the function has no value, the return object is empty 291 if (!domObj) return null; 292 var width = domObj.offsetWidth; 293 var height = domObj.offsetHeight; 294 // Start traversing outward from the target element, accumulate top and left values 295 var top; 296 var left; 297 for (top = domObj.offsetTop, left = domObj.offsetLeft; domObj = domObj.offsetParent;) { 298 top += domObj.offsetTop; 299 left += domObj.offsetLeft; 300 } 301 var right = document.body.offsetWidth - width - left; 302 var bottom = document.body.offsetHeight - height - top; 303 304 // Returns the coordinate set of positioned elements 305 return { 306 width: width, 307 height: height, 308 top: top, 309 left: left, 310 right: right, 311 bottom: bottom 312 }; 313 } 314 function dataType(data, type) { 315 var dataType = Object.prototype.toString.call(data).match(/\s(.+)]/)[1].toLowerCase(); 316 return type ? dataType === type.toLowerCase() : dataType; 317 } 318})(window);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.