· 5 years ago · Jul 21, 2020, 05:46 AM
1define(["app/core/app_events","app/plugins/sdk","jquery","lodash","moment"], function(__WEBPACK_EXTERNAL_MODULE_grafana_app_core_app_events__, __WEBPACK_EXTERNAL_MODULE_grafana_app_plugins_sdk__, __WEBPACK_EXTERNAL_MODULE_jquery__, __WEBPACK_EXTERNAL_MODULE_lodash__, __WEBPACK_EXTERNAL_MODULE_moment__) { return /******/ (function(modules) { // webpackBootstrap
2/******/ // The module cache
3/******/ var installedModules = {};
4/******/
5/******/ // The require function
6/******/ function __webpack_require__(moduleId) {
7/******/
8/******/ // Check if module is in cache
9/******/ if(installedModules[moduleId]) {
10/******/ return installedModules[moduleId].exports;
11/******/ }
12/******/ // Create a new module (and put it into the cache)
13/******/ var module = installedModules[moduleId] = {
14/******/ i: moduleId,
15/******/ l: false,
16/******/ exports: {}
17/******/ };
18/******/
19/******/ // Execute the module function
20/******/ modules[moduleId].call(module.exports, module, module.exports, __webpack_require__);
21/******/
22/******/ // Flag the module as loaded
23/******/ module.l = true;
24/******/
25/******/ // Return the exports of the module
26/******/ return module.exports;
27/******/ }
28/******/
29/******/
30/******/ // expose the modules object (__webpack_modules__)
31/******/ __webpack_require__.m = modules;
32/******/
33/******/ // expose the module cache
34/******/ __webpack_require__.c = installedModules;
35/******/
36/******/ // define getter function for harmony exports
37/******/ __webpack_require__.d = function(exports, name, getter) {
38/******/ if(!__webpack_require__.o(exports, name)) {
39/******/ Object.defineProperty(exports, name, { enumerable: true, get: getter });
40/******/ }
41/******/ };
42/******/
43/******/ // define __esModule on exports
44/******/ __webpack_require__.r = function(exports) {
45/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) {
46/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
47/******/ }
48/******/ Object.defineProperty(exports, '__esModule', { value: true });
49/******/ };
50/******/
51/******/ // create a fake namespace object
52/******/ // mode & 1: value is a module id, require it
53/******/ // mode & 2: merge all properties of value into the ns
54/******/ // mode & 4: return value when already ns object
55/******/ // mode & 8|1: behave like require
56/******/ __webpack_require__.t = function(value, mode) {
57/******/ if(mode & 1) value = __webpack_require__(value);
58/******/ if(mode & 8) return value;
59/******/ if((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;
60/******/ var ns = Object.create(null);
61/******/ __webpack_require__.r(ns);
62/******/ Object.defineProperty(ns, 'default', { enumerable: true, value: value });
63/******/ if(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));
64/******/ return ns;
65/******/ };
66/******/
67/******/ // getDefaultExport function for compatibility with non-harmony modules
68/******/ __webpack_require__.n = function(module) {
69/******/ var getter = module && module.__esModule ?
70/******/ function getDefault() { return module['default']; } :
71/******/ function getModuleExports() { return module; };
72/******/ __webpack_require__.d(getter, 'a', getter);
73/******/ return getter;
74/******/ };
75/******/
76/******/ // Object.prototype.hasOwnProperty.call
77/******/ __webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };
78/******/
79/******/ // __webpack_public_path__
80/******/ __webpack_require__.p = "/";
81/******/
82/******/
83/******/ // Load entry module and return exports
84/******/ return __webpack_require__(__webpack_require__.s = "./module.ts");
85/******/ })
86/************************************************************************/
87/******/ ({
88
89/***/ "../node_modules/css-loader/dist/cjs.js?!../node_modules/postcss-loader/src/index.js?!../node_modules/sass-loader/lib/loader.js!./style.css":
90/*!***********************************************************************************************************************************************************!*\
91 !*** ../node_modules/css-loader/dist/cjs.js??ref--8-1!../node_modules/postcss-loader/src??ref--8-2!../node_modules/sass-loader/lib/loader.js!./style.css ***!
92 \***********************************************************************************************************************************************************/
93/*! no static exports found */
94/***/ (function(module, exports, __webpack_require__) {
95
96// Imports
97var ___CSS_LOADER_API_IMPORT___ = __webpack_require__(/*! ../node_modules/css-loader/dist/runtime/api.js */ "../node_modules/css-loader/dist/runtime/api.js");
98exports = ___CSS_LOADER_API_IMPORT___(true);
99// Module
100exports.push([module.i, ".small-link a {\n text-decoration: none;\n color: #33b5e5; }\n\n.small-link a:hover {\n text-decoration: underline; }\n\n.small-link .label-tag {\n background-color: #757575;\n border-color: #9b9b9b;\n margin-right: 5px;\n cursor: context-menu; }\n\n.imgwrap img {\n width: 100%;\n height: 100%; }\n\n.imgwrap img:hover {\n border: 3px solid #33b5e5;\n cursor: pointer; }\n\n.center-popup {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1050;\n cursor: pointer; }\n\n.ngtemplate {\n height: 100%; }\n", "",{"version":3,"sources":["style.css"],"names":[],"mappings":"AAAA;EACE,qBAAqB;EACrB,cAAc,EAAE;;AAElB;EACE,0BAA0B,EAAE;;AAE9B;EACE,yBAAyB;EACzB,qBAAqB;EACrB,iBAAiB;EACjB,oBAAoB,EAAE;;AAExB;EACE,WAAW;EACX,YAAY,EAAE;;AAEhB;EACE,yBAAyB;EACzB,eAAe,EAAE;;AAEnB;EACE,kBAAkB;EAClB,QAAQ;EACR,SAAS;EACT,gCAAgC;EAChC,aAAa;EACb,eAAe,EAAE;;AAEnB;EACE,YAAY,EAAE","file":"style.css","sourcesContent":[".small-link a {\n text-decoration: none;\n color: #33b5e5; }\n\n.small-link a:hover {\n text-decoration: underline; }\n\n.small-link .label-tag {\n background-color: #757575;\n border-color: #9b9b9b;\n margin-right: 5px;\n cursor: context-menu; }\n\n.imgwrap img {\n width: 100%;\n height: 100%; }\n\n.imgwrap img:hover {\n border: 3px solid #33b5e5;\n cursor: pointer; }\n\n.center-popup {\n position: absolute;\n top: 50%;\n left: 50%;\n transform: translate(-50%, -50%);\n z-index: 1050;\n cursor: pointer; }\n\n.ngtemplate {\n height: 100%; }\n"]}]);
101// Exports
102module.exports = exports;
103
104
105/***/ }),
106
107/***/ "../node_modules/css-loader/dist/runtime/api.js":
108/*!******************************************************!*\
109 !*** ../node_modules/css-loader/dist/runtime/api.js ***!
110 \******************************************************/
111/*! no static exports found */
112/***/ (function(module, exports, __webpack_require__) {
113
114"use strict";
115
116
117/*
118 MIT License http://www.opensource.org/licenses/mit-license.php
119 Author Tobias Koppers @sokra
120*/
121// css base code, injected by the css-loader
122// eslint-disable-next-line func-names
123module.exports = function (useSourceMap) {
124 var list = []; // return the list of modules as css string
125
126 list.toString = function toString() {
127 return this.map(function (item) {
128 var content = cssWithMappingToString(item, useSourceMap);
129
130 if (item[2]) {
131 return "@media ".concat(item[2], " {").concat(content, "}");
132 }
133
134 return content;
135 }).join('');
136 }; // import a list of modules into the list
137 // eslint-disable-next-line func-names
138
139
140 list.i = function (modules, mediaQuery, dedupe) {
141 if (typeof modules === 'string') {
142 // eslint-disable-next-line no-param-reassign
143 modules = [[null, modules, '']];
144 }
145
146 var alreadyImportedModules = {};
147
148 if (dedupe) {
149 for (var i = 0; i < this.length; i++) {
150 // eslint-disable-next-line prefer-destructuring
151 var id = this[i][0];
152
153 if (id != null) {
154 alreadyImportedModules[id] = true;
155 }
156 }
157 }
158
159 for (var _i = 0; _i < modules.length; _i++) {
160 var item = [].concat(modules[_i]);
161
162 if (dedupe && alreadyImportedModules[item[0]]) {
163 // eslint-disable-next-line no-continue
164 continue;
165 }
166
167 if (mediaQuery) {
168 if (!item[2]) {
169 item[2] = mediaQuery;
170 } else {
171 item[2] = "".concat(mediaQuery, " and ").concat(item[2]);
172 }
173 }
174
175 list.push(item);
176 }
177 };
178
179 return list;
180};
181
182function cssWithMappingToString(item, useSourceMap) {
183 var content = item[1] || ''; // eslint-disable-next-line prefer-destructuring
184
185 var cssMapping = item[3];
186
187 if (!cssMapping) {
188 return content;
189 }
190
191 if (useSourceMap && typeof btoa === 'function') {
192 var sourceMapping = toComment(cssMapping);
193 var sourceURLs = cssMapping.sources.map(function (source) {
194 return "/*# sourceURL=".concat(cssMapping.sourceRoot || '').concat(source, " */");
195 });
196 return [content].concat(sourceURLs).concat([sourceMapping]).join('\n');
197 }
198
199 return [content].join('\n');
200} // Adapted from convert-source-map (MIT)
201
202
203function toComment(sourceMap) {
204 // eslint-disable-next-line no-undef
205 var base64 = btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap))));
206 var data = "sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(base64);
207 return "/*# ".concat(data, " */");
208}
209
210/***/ }),
211
212/***/ "../node_modules/style-loader/lib/addStyles.js":
213/*!*****************************************************!*\
214 !*** ../node_modules/style-loader/lib/addStyles.js ***!
215 \*****************************************************/
216/*! no static exports found */
217/***/ (function(module, exports, __webpack_require__) {
218
219/*
220 MIT License http://www.opensource.org/licenses/mit-license.php
221 Author Tobias Koppers @sokra
222*/
223
224var stylesInDom = {};
225
226var memoize = function (fn) {
227 var memo;
228
229 return function () {
230 if (typeof memo === "undefined") memo = fn.apply(this, arguments);
231 return memo;
232 };
233};
234
235var isOldIE = memoize(function () {
236 // Test for IE <= 9 as proposed by Browserhacks
237 // @see http://browserhacks.com/#hack-e71d8692f65334173fee715c222cb805
238 // Tests for existence of standard globals is to allow style-loader
239 // to operate correctly into non-standard environments
240 // @see https://github.com/webpack-contrib/style-loader/issues/177
241 return window && document && document.all && !window.atob;
242});
243
244var getTarget = function (target, parent) {
245 if (parent){
246 return parent.querySelector(target);
247 }
248 return document.querySelector(target);
249};
250
251var getElement = (function (fn) {
252 var memo = {};
253
254 return function(target, parent) {
255 // If passing function in options, then use it for resolve "head" element.
256 // Useful for Shadow Root style i.e
257 // {
258 // insertInto: function () { return document.querySelector("#foo").shadowRoot }
259 // }
260 if (typeof target === 'function') {
261 return target();
262 }
263 if (typeof memo[target] === "undefined") {
264 var styleTarget = getTarget.call(this, target, parent);
265 // Special case to return head of iframe instead of iframe itself
266 if (window.HTMLIFrameElement && styleTarget instanceof window.HTMLIFrameElement) {
267 try {
268 // This will throw an exception if access to iframe is blocked
269 // due to cross-origin restrictions
270 styleTarget = styleTarget.contentDocument.head;
271 } catch(e) {
272 styleTarget = null;
273 }
274 }
275 memo[target] = styleTarget;
276 }
277 return memo[target]
278 };
279})();
280
281var singleton = null;
282var singletonCounter = 0;
283var stylesInsertedAtTop = [];
284
285var fixUrls = __webpack_require__(/*! ./urls */ "../node_modules/style-loader/lib/urls.js");
286
287module.exports = function(list, options) {
288 if (typeof DEBUG !== "undefined" && DEBUG) {
289 if (typeof document !== "object") throw new Error("The style-loader cannot be used in a non-browser environment");
290 }
291
292 options = options || {};
293
294 options.attrs = typeof options.attrs === "object" ? options.attrs : {};
295
296 // Force single-tag solution on IE6-9, which has a hard limit on the # of <style>
297 // tags it will allow on a page
298 if (!options.singleton && typeof options.singleton !== "boolean") options.singleton = isOldIE();
299
300 // By default, add <style> tags to the <head> element
301 if (!options.insertInto) options.insertInto = "head";
302
303 // By default, add <style> tags to the bottom of the target
304 if (!options.insertAt) options.insertAt = "bottom";
305
306 var styles = listToStyles(list, options);
307
308 addStylesToDom(styles, options);
309
310 return function update (newList) {
311 var mayRemove = [];
312
313 for (var i = 0; i < styles.length; i++) {
314 var item = styles[i];
315 var domStyle = stylesInDom[item.id];
316
317 domStyle.refs--;
318 mayRemove.push(domStyle);
319 }
320
321 if(newList) {
322 var newStyles = listToStyles(newList, options);
323 addStylesToDom(newStyles, options);
324 }
325
326 for (var i = 0; i < mayRemove.length; i++) {
327 var domStyle = mayRemove[i];
328
329 if(domStyle.refs === 0) {
330 for (var j = 0; j < domStyle.parts.length; j++) domStyle.parts[j]();
331
332 delete stylesInDom[domStyle.id];
333 }
334 }
335 };
336};
337
338function addStylesToDom (styles, options) {
339 for (var i = 0; i < styles.length; i++) {
340 var item = styles[i];
341 var domStyle = stylesInDom[item.id];
342
343 if(domStyle) {
344 domStyle.refs++;
345
346 for(var j = 0; j < domStyle.parts.length; j++) {
347 domStyle.parts[j](item.parts[j]);
348 }
349
350 for(; j < item.parts.length; j++) {
351 domStyle.parts.push(addStyle(item.parts[j], options));
352 }
353 } else {
354 var parts = [];
355
356 for(var j = 0; j < item.parts.length; j++) {
357 parts.push(addStyle(item.parts[j], options));
358 }
359
360 stylesInDom[item.id] = {id: item.id, refs: 1, parts: parts};
361 }
362 }
363}
364
365function listToStyles (list, options) {
366 var styles = [];
367 var newStyles = {};
368
369 for (var i = 0; i < list.length; i++) {
370 var item = list[i];
371 var id = options.base ? item[0] + options.base : item[0];
372 var css = item[1];
373 var media = item[2];
374 var sourceMap = item[3];
375 var part = {css: css, media: media, sourceMap: sourceMap};
376
377 if(!newStyles[id]) styles.push(newStyles[id] = {id: id, parts: [part]});
378 else newStyles[id].parts.push(part);
379 }
380
381 return styles;
382}
383
384function insertStyleElement (options, style) {
385 var target = getElement(options.insertInto)
386
387 if (!target) {
388 throw new Error("Couldn't find a style target. This probably means that the value for the 'insertInto' parameter is invalid.");
389 }
390
391 var lastStyleElementInsertedAtTop = stylesInsertedAtTop[stylesInsertedAtTop.length - 1];
392
393 if (options.insertAt === "top") {
394 if (!lastStyleElementInsertedAtTop) {
395 target.insertBefore(style, target.firstChild);
396 } else if (lastStyleElementInsertedAtTop.nextSibling) {
397 target.insertBefore(style, lastStyleElementInsertedAtTop.nextSibling);
398 } else {
399 target.appendChild(style);
400 }
401 stylesInsertedAtTop.push(style);
402 } else if (options.insertAt === "bottom") {
403 target.appendChild(style);
404 } else if (typeof options.insertAt === "object" && options.insertAt.before) {
405 var nextSibling = getElement(options.insertAt.before, target);
406 target.insertBefore(style, nextSibling);
407 } else {
408 throw new Error("[Style Loader]\n\n Invalid value for parameter 'insertAt' ('options.insertAt') found.\n Must be 'top', 'bottom', or Object.\n (https://github.com/webpack-contrib/style-loader#insertat)\n");
409 }
410}
411
412function FilterThing(sInput)
413{
414 var LIST = JSON.parse(sInput);
415 return LIST;
416}
417
418function removeStyleElement (style) {
419 if (style.parentNode === null) return false;
420 style.parentNode.removeChild(style);
421
422 var idx = stylesInsertedAtTop.indexOf(style);
423 if(idx >= 0) {
424 stylesInsertedAtTop.splice(idx, 1);
425 }
426}
427
428function createStyleElement (options) {
429 var style = document.createElement("style");
430
431 if(options.attrs.type === undefined) {
432 options.attrs.type = "text/css";
433 }
434
435 if(options.attrs.nonce === undefined) {
436 var nonce = getNonce();
437 if (nonce) {
438 options.attrs.nonce = nonce;
439 }
440 }
441
442 addAttrs(style, options.attrs);
443 insertStyleElement(options, style);
444
445 return style;
446}
447
448function createLinkElement (options) {
449 var link = document.createElement("link");
450
451 if(options.attrs.type === undefined) {
452 options.attrs.type = "text/css";
453 }
454 options.attrs.rel = "stylesheet";
455
456 addAttrs(link, options.attrs);
457 insertStyleElement(options, link);
458
459 return link;
460}
461
462function addAttrs (el, attrs) {
463 Object.keys(attrs).forEach(function (key) {
464 el.setAttribute(key, attrs[key]);
465 });
466}
467
468function getNonce() {
469 if (false) {}
470
471 return __webpack_require__.nc;
472}
473
474function addStyle (obj, options) {
475 var style, update, remove, result;
476
477 // If a transform function was defined, run it on the css
478 if (options.transform && obj.css) {
479 result = typeof options.transform === 'function'
480 ? options.transform(obj.css)
481 : options.transform.default(obj.css);
482
483 if (result) {
484 // If transform returns a value, use that instead of the original css.
485 // This allows running runtime transformations on the css.
486 obj.css = result;
487 } else {
488 // If the transform function returns a falsy value, don't add this css.
489 // This allows conditional loading of css
490 return function() {
491 // noop
492 };
493 }
494 }
495
496 if (options.singleton) {
497 var styleIndex = singletonCounter++;
498
499 style = singleton || (singleton = createStyleElement(options));
500
501 update = applyToSingletonTag.bind(null, style, styleIndex, false);
502 remove = applyToSingletonTag.bind(null, style, styleIndex, true);
503
504 } else if (
505 obj.sourceMap &&
506 typeof URL === "function" &&
507 typeof URL.createObjectURL === "function" &&
508 typeof URL.revokeObjectURL === "function" &&
509 typeof Blob === "function" &&
510 typeof btoa === "function"
511 ) {
512 style = createLinkElement(options);
513 update = updateLink.bind(null, style, options);
514 remove = function () {
515 removeStyleElement(style);
516
517 if(style.href) URL.revokeObjectURL(style.href);
518 };
519 } else {
520 style = createStyleElement(options);
521 update = applyToTag.bind(null, style);
522 remove = function () {
523 removeStyleElement(style);
524 };
525 }
526
527 update(obj);
528
529 return function updateStyle (newObj) {
530 if (newObj) {
531 if (
532 newObj.css === obj.css &&
533 newObj.media === obj.media &&
534 newObj.sourceMap === obj.sourceMap
535 ) {
536 return;
537 }
538
539 update(obj = newObj);
540 } else {
541 remove();
542 }
543 };
544}
545
546var replaceText = (function () {
547 var textStore = [];
548
549 return function (index, replacement) {
550 textStore[index] = replacement;
551
552 return textStore.filter(Boolean).join('\n');
553 };
554})();
555
556function applyToSingletonTag (style, index, remove, obj) {
557 var css = remove ? "" : obj.css;
558
559 if (style.styleSheet) {
560 style.styleSheet.cssText = replaceText(index, css);
561 } else {
562 var cssNode = document.createTextNode(css);
563 var childNodes = style.childNodes;
564
565 if (childNodes[index]) style.removeChild(childNodes[index]);
566
567 if (childNodes.length) {
568 style.insertBefore(cssNode, childNodes[index]);
569 } else {
570 style.appendChild(cssNode);
571 }
572 }
573}
574
575function applyToTag (style, obj) {
576 var css = obj.css;
577 var media = obj.media;
578
579 if(media) {
580 style.setAttribute("media", media)
581 }
582
583 if(style.styleSheet) {
584 style.styleSheet.cssText = css;
585 } else {
586 while(style.firstChild) {
587 style.removeChild(style.firstChild);
588 }
589
590 style.appendChild(document.createTextNode(css));
591 }
592}
593
594function updateLink (link, options, obj) {
595 var css = obj.css;
596 var sourceMap = obj.sourceMap;
597
598 /*
599 If convertToAbsoluteUrls isn't defined, but sourcemaps are enabled
600 and there is no publicPath defined then lets turn convertToAbsoluteUrls
601 on by default. Otherwise default to the convertToAbsoluteUrls option
602 directly
603 */
604 var autoFixUrls = options.convertToAbsoluteUrls === undefined && sourceMap;
605
606 if (options.convertToAbsoluteUrls || autoFixUrls) {
607 css = fixUrls(css);
608 }
609
610 if (sourceMap) {
611 // http://stackoverflow.com/a/26603875
612 css += "\n/*# sourceMappingURL=data:application/json;base64," + btoa(unescape(encodeURIComponent(JSON.stringify(sourceMap)))) + " */";
613 }
614
615 var blob = new Blob([css], { type: "text/css" });
616
617 var oldSrc = link.href;
618
619 link.href = URL.createObjectURL(blob);
620
621 if(oldSrc) URL.revokeObjectURL(oldSrc);
622}
623
624
625/***/ }),
626
627/***/ "../node_modules/style-loader/lib/urls.js":
628/*!************************************************!*\
629 !*** ../node_modules/style-loader/lib/urls.js ***!
630 \************************************************/
631/*! no static exports found */
632/***/ (function(module, exports) {
633
634
635/**
636 * When source maps are enabled, `style-loader` uses a link element with a data-uri to
637 * embed the css on the page. This breaks all relative urls because now they are relative to a
638 * bundle instead of the current page.
639 *
640 * One solution is to only use full urls, but that may be impossible.
641 *
642 * Instead, this function "fixes" the relative urls to be absolute according to the current page location.
643 *
644 * A rudimentary test suite is located at `test/fixUrls.js` and can be run via the `npm test` command.
645 *
646 */
647
648module.exports = function (css) {
649 // get current location
650 var location = typeof window !== "undefined" && window.location;
651
652 if (!location) {
653 throw new Error("fixUrls requires window.location");
654 }
655
656 // blank or null?
657 if (!css || typeof css !== "string") {
658 return css;
659 }
660
661 var baseUrl = location.protocol + "//" + location.host;
662 var currentDir = baseUrl + location.pathname.replace(/\/[^\/]*$/, "/");
663
664 // convert each url(...)
665 /*
666 This regular expression is just a way to recursively match brackets within
667 a string.
668
669 /url\s*\( = Match on the word "url" with any whitespace after it and then a parens
670 ( = Start a capturing group
671 (?: = Start a non-capturing group
672 [^)(] = Match anything that isn't a parentheses
673 | = OR
674 \( = Match a start parentheses
675 (?: = Start another non-capturing groups
676 [^)(]+ = Match anything that isn't a parentheses
677 | = OR
678 \( = Match a start parentheses
679 [^)(]* = Match anything that isn't a parentheses
680 \) = Match a end parentheses
681 ) = End Group
682 *\) = Match anything and then a close parens
683 ) = Close non-capturing group
684 * = Match anything
685 ) = Close capturing group
686 \) = Match a close parens
687
688 /gi = Get all matches, not the first. Be case insensitive.
689 */
690 var fixedCss = css.replace(/url\s*\(((?:[^)(]|\((?:[^)(]+|\([^)(]*\))*\))*)\)/gi, function(fullMatch, origUrl) {
691 // strip quotes (if they exist)
692 var unquotedOrigUrl = origUrl
693 .trim()
694 .replace(/^"(.*)"$/, function(o, $1){ return $1; })
695 .replace(/^'(.*)'$/, function(o, $1){ return $1; });
696
697 // already a full url? no change
698 if (/^(#|data:|http:\/\/|https:\/\/|file:\/\/\/|\s*$)/i.test(unquotedOrigUrl)) {
699 return fullMatch;
700 }
701
702 // convert the url to a full url
703 var newUrl;
704
705 if (unquotedOrigUrl.indexOf("//") === 0) {
706 //TODO: should we add protocol?
707 newUrl = unquotedOrigUrl;
708 } else if (unquotedOrigUrl.indexOf("/") === 0) {
709 // path should be relative to the base url
710 newUrl = baseUrl + unquotedOrigUrl; // already starts with '/'
711 } else {
712 // path should be relative to current directory
713 newUrl = currentDir + unquotedOrigUrl.replace(/^\.\//, ""); // Strip leading './'
714 }
715
716 // send back the fixed url(...)
717 return "url(" + JSON.stringify(newUrl) + ")";
718 });
719
720 // send back the fixed css
721 return fixedCss;
722};
723
724
725/***/ }),
726
727/***/ "../node_modules/tslib/tslib.es6.js":
728/*!******************************************!*\
729 !*** ../node_modules/tslib/tslib.es6.js ***!
730 \******************************************/
731/*! exports provided: __extends, __assign, __rest, __decorate, __param, __metadata, __awaiter, __generator, __exportStar, __values, __read, __spread, __spreadArrays, __await, __asyncGenerator, __asyncDelegator, __asyncValues, __makeTemplateObject, __importStar, __importDefault */
732/***/ (function(module, __webpack_exports__, __webpack_require__) {
733
734"use strict";
735__webpack_require__.r(__webpack_exports__);
736/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__extends", function() { return __extends; });
737/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__assign", function() { return __assign; });
738/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__rest", function() { return __rest; });
739/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__decorate", function() { return __decorate; });
740/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__param", function() { return __param; });
741/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__metadata", function() { return __metadata; });
742/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__awaiter", function() { return __awaiter; });
743/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__generator", function() { return __generator; });
744/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__exportStar", function() { return __exportStar; });
745/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__values", function() { return __values; });
746/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__read", function() { return __read; });
747/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spread", function() { return __spread; });
748/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__spreadArrays", function() { return __spreadArrays; });
749/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__await", function() { return __await; });
750/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncGenerator", function() { return __asyncGenerator; });
751/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncDelegator", function() { return __asyncDelegator; });
752/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__asyncValues", function() { return __asyncValues; });
753/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__makeTemplateObject", function() { return __makeTemplateObject; });
754/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importStar", function() { return __importStar; });
755/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "__importDefault", function() { return __importDefault; });
756/*! *****************************************************************************
757Copyright (c) Microsoft Corporation. All rights reserved.
758Licensed under the Apache License, Version 2.0 (the "License"); you may not use
759this file except in compliance with the License. You may obtain a copy of the
760License at http://www.apache.org/licenses/LICENSE-2.0
761
762THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
763KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED
764WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE,
765MERCHANTABLITY OR NON-INFRINGEMENT.
766
767See the Apache Version 2.0 License for specific language governing permissions
768and limitations under the License.
769***************************************************************************** */
770/* global Reflect, Promise */
771
772var extendStatics = function(d, b) {
773 extendStatics = Object.setPrototypeOf ||
774 ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
775 function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };
776 return extendStatics(d, b);
777};
778
779function __extends(d, b) {
780 extendStatics(d, b);
781 function __() { this.constructor = d; }
782 d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
783}
784
785var __assign = function() {
786 __assign = Object.assign || function __assign(t) {
787 for (var s, i = 1, n = arguments.length; i < n; i++) {
788 s = arguments[i];
789 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p)) t[p] = s[p];
790 }
791 return t;
792 }
793 return __assign.apply(this, arguments);
794}
795
796function __rest(s, e) {
797 var t = {};
798 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
799 t[p] = s[p];
800 if (s != null && typeof Object.getOwnPropertySymbols === "function")
801 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
802 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
803 t[p[i]] = s[p[i]];
804 }
805 return t;
806}
807
808function __decorate(decorators, target, key, desc) {
809 var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
810 if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
811 else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
812 return c > 3 && r && Object.defineProperty(target, key, r), r;
813}
814
815function __param(paramIndex, decorator) {
816 return function (target, key) { decorator(target, key, paramIndex); }
817}
818
819function __metadata(metadataKey, metadataValue) {
820 if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(metadataKey, metadataValue);
821}
822
823function __awaiter(thisArg, _arguments, P, generator) {
824 return new (P || (P = Promise))(function (resolve, reject) {
825 function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
826 function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
827 function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
828 step((generator = generator.apply(thisArg, _arguments || [])).next());
829 });
830}
831
832function __generator(thisArg, body) {
833 var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
834 return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
835 function verb(n) { return function (v) { return step([n, v]); }; }
836 function step(op) {
837 if (f) throw new TypeError("Generator is already executing.");
838 while (_) try {
839 if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
840 if (y = 0, t) op = [op[0] & 2, t.value];
841 switch (op[0]) {
842 case 0: case 1: t = op; break;
843 case 4: _.label++; return { value: op[1], done: false };
844 case 5: _.label++; y = op[1]; op = [0]; continue;
845 case 7: op = _.ops.pop(); _.trys.pop(); continue;
846 default:
847 if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
848 if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
849 if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
850 if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
851 if (t[2]) _.ops.pop();
852 _.trys.pop(); continue;
853 }
854 op = body.call(thisArg, _);
855 } catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
856 if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
857 }
858}
859
860function __exportStar(m, exports) {
861 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
862}
863
864function __values(o) {
865 var m = typeof Symbol === "function" && o[Symbol.iterator], i = 0;
866 if (m) return m.call(o);
867 return {
868 next: function () {
869 if (o && i >= o.length) o = void 0;
870 return { value: o && o[i++], done: !o };
871 }
872 };
873}
874
875function __read(o, n) {
876 var m = typeof Symbol === "function" && o[Symbol.iterator];
877 if (!m) return o;
878 var i = m.call(o), r, ar = [], e;
879 try {
880 while ((n === void 0 || n-- > 0) && !(r = i.next()).done) ar.push(r.value);
881 }
882 catch (error) { e = { error: error }; }
883 finally {
884 try {
885 if (r && !r.done && (m = i["return"])) m.call(i);
886 }
887 finally { if (e) throw e.error; }
888 }
889 return ar;
890}
891
892function __spread() {
893 for (var ar = [], i = 0; i < arguments.length; i++)
894 ar = ar.concat(__read(arguments[i]));
895 return ar;
896}
897
898function __spreadArrays() {
899 for (var s = 0, i = 0, il = arguments.length; i < il; i++) s += arguments[i].length;
900 for (var r = Array(s), k = 0, i = 0; i < il; i++)
901 for (var a = arguments[i], j = 0, jl = a.length; j < jl; j++, k++)
902 r[k] = a[j];
903 return r;
904};
905
906function __await(v) {
907 return this instanceof __await ? (this.v = v, this) : new __await(v);
908}
909
910function __asyncGenerator(thisArg, _arguments, generator) {
911 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
912 var g = generator.apply(thisArg, _arguments || []), i, q = [];
913 return i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i;
914 function verb(n) { if (g[n]) i[n] = function (v) { return new Promise(function (a, b) { q.push([n, v, a, b]) > 1 || resume(n, v); }); }; }
915 function resume(n, v) { try { step(g[n](v)); } catch (e) { settle(q[0][3], e); } }
916 function step(r) { r.value instanceof __await ? Promise.resolve(r.value.v).then(fulfill, reject) : settle(q[0][2], r); }
917 function fulfill(value) { resume("next", value); }
918 function reject(value) { resume("throw", value); }
919 function settle(f, v) { if (f(v), q.shift(), q.length) resume(q[0][0], q[0][1]); }
920}
921
922function __asyncDelegator(o) {
923 var i, p;
924 return i = {}, verb("next"), verb("throw", function (e) { throw e; }), verb("return"), i[Symbol.iterator] = function () { return this; }, i;
925 function verb(n, f) { i[n] = o[n] ? function (v) { return (p = !p) ? { value: __await(o[n](v)), done: n === "return" } : f ? f(v) : v; } : f; }
926}
927
928function __asyncValues(o) {
929 if (!Symbol.asyncIterator) throw new TypeError("Symbol.asyncIterator is not defined.");
930 var m = o[Symbol.asyncIterator], i;
931 return m ? m.call(o) : (o = typeof __values === "function" ? __values(o) : o[Symbol.iterator](), i = {}, verb("next"), verb("throw"), verb("return"), i[Symbol.asyncIterator] = function () { return this; }, i);
932 function verb(n) { i[n] = o[n] && function (v) { return new Promise(function (resolve, reject) { v = o[n](v), settle(resolve, reject, v.done, v.value); }); }; }
933 function settle(resolve, reject, d, v) { Promise.resolve(v).then(function(v) { resolve({ value: v, done: d }); }, reject); }
934}
935
936function __makeTemplateObject(cooked, raw) {
937 if (Object.defineProperty) { Object.defineProperty(cooked, "raw", { value: raw }); } else { cooked.raw = raw; }
938 return cooked;
939};
940
941function __importStar(mod) {
942 if (mod && mod.__esModule) return mod;
943 var result = {};
944 if (mod != null) for (var k in mod) if (Object.hasOwnProperty.call(mod, k)) result[k] = mod[k];
945 result.default = mod;
946 return result;
947}
948
949function __importDefault(mod) {
950 return (mod && mod.__esModule) ? mod : { default: mod };
951}
952
953
954/***/ }),
955
956/***/ "./examples.ts":
957/*!*********************!*\
958 !*** ./examples.ts ***!
959 \*********************/
960/*! exports provided: examples */
961/***/ (function(module, __webpack_exports__, __webpack_require__) {
962
963"use strict";
964__webpack_require__.r(__webpack_exports__);
965/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "examples", function() { return examples; });
966/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./types */ "./types.ts");
967
968var examples = [{
969 // The first example should set all possible fields!
970 name: 'Simple',
971 text: 'loads static content from github',
972 config: {
973 request: 'http',
974 method: 'GET',
975 mode: _types__WEBPACK_IMPORTED_MODULE_0__["RenderMode"].html,
976 template: '',
977 url: 'https://raw.githubusercontent.com/ryantxu/ajax-panel/master/static/example.txt',
978 params_js: '{\n' + " from:ctrl.range.from.format('x'), // x is unix ms timestamp\n" + " to:ctrl.range.to.format('x'), \n" + ' height:ctrl.height,\n' + ' now:Date.now(),\n' + " interval: ctrl.template('$__interval'),\n" + " sample: 'Not escaped: $__interval',\n" + ' since:ctrl.lastRequestTime\n' + '}',
979 header_js: '{}',
980 responseType: 'text',
981 withCredentials: false,
982 skipSameURL: true,
983 showErrors: true,
984 showTime: false,
985 showTimePrefix: null,
986 showTimeFormat: 'LTS',
987 showTimeValue: 'request',
988 templateResponse: true
989 }
990}, {
991 name: 'Echo Service',
992 text: 'Responds with the request attributes',
993 config: {
994 method: 'GET',
995 mode: _types__WEBPACK_IMPORTED_MODULE_0__["RenderMode"].json,
996 url: 'https://httpbin.org/anything?templateInURL=$__interval',
997 header_js: "{\n Accept: 'text/plain'\n}",
998 showTime: true
999 }
1000}, {
1001 name: 'Echo Service with Template',
1002 text: 'Format the response with an angular template',
1003 editorTabIndex: 2,
1004 config: {
1005 method: 'GET',
1006 mode: _types__WEBPACK_IMPORTED_MODULE_0__["RenderMode"].template,
1007 template: '<h5>Origin: {{ response.origin }}</h5>\n\n<pre>{{ response | json }}</pre>',
1008 url: 'https://httpbin.org/anything?templateInURL=$__interval',
1009 header_js: "{\n Accept: 'text/plain'\n}",
1010 showTime: true
1011 }
1012}, {
1013 name: 'Webcamera in Thailand',
1014 text: 'Load an image dynamically',
1015 config: {
1016 method: 'GET',
1017 url: 'http://tat.touch-ics.com/CCTV/cam.php?cam=31&datatype=image&langISO=EN&t=current&reloadtime=1',
1018 params_js: '{\n' + ' __now:Date.now(),\n' + '}',
1019 responseType: 'arraybuffer',
1020 showTime: true
1021 }
1022}, {
1023 name: 'Image',
1024 text: 'Sending "Accept" header',
1025 config: {
1026 method: 'GET',
1027 url: 'https://httpbin.org/image',
1028 params_js: '{}',
1029 header_js: "{\n Accept: 'image/jpeg'\n}",
1030 responseType: 'blob',
1031 showTime: true,
1032 showTimeValue: 'recieve'
1033 }
1034}, {
1035 name: 'Image in IFrame',
1036 text: 'load an image in an iframe',
1037 config: {
1038 method: 'iframe',
1039 url: 'https://dummyimage.com/600x300/4286f4/000&text=GRAFANA',
1040 params_js: '{}'
1041 }
1042}, {
1043 name: 'Results from Grafana API',
1044 text: 'grafana settings api w/ template',
1045 config: {
1046 mode: _types__WEBPACK_IMPORTED_MODULE_0__["RenderMode"].template,
1047 template: '<h2>Instance: {{ response.DEFAULT.instance_name }}</h2>\n\n' + '<div ng-repeat="(key, value) in response">\n\n ' + '<h5>{{key}}</h5>\n\n ' + '<pre>{{ value | json }}</pre>\n\n ' + '</div>',
1048 url: '/api/admin/settings',
1049 params_js: '{}'
1050 }
1051}, {
1052 name: 'Results from Grafana API',
1053 text: 'formatted as JSON',
1054 config: {
1055 mode: _types__WEBPACK_IMPORTED_MODULE_0__["RenderMode"].json,
1056 url: '/api/admin/stats',
1057 params_js: '{}'
1058 }
1059}, {
1060 name: 'Basic Auth (success)',
1061 text: 'send correct basic auth',
1062 config: {
1063 url: 'https://httpbin.org/basic-auth/user/pass',
1064 withCredentials: true,
1065 params_js: '{}',
1066 header_js: '{\n' + " Authorization: 'Basic ' + btoa('user' + ':' + 'pass')\n" + "// Authorization: 'Basic dXNlcjpwYXNz'\n" + '}'
1067 }
1068}, {
1069 name: 'Basic Auth (fail)',
1070 text: 'send correct basic auth',
1071 config: {
1072 url: 'https://httpbin.org/basic-auth/userx/passx',
1073 withCredentials: true,
1074 params_js: '{}',
1075 header_js: '{\n' + " Authorization: 'Basic ...bad..'\n" + '}'
1076 }
1077}];
1078
1079/***/ }),
1080
1081/***/ "./module.ts":
1082/*!*******************!*\
1083 !*** ./module.ts ***!
1084 \*******************/
1085/*! exports provided: AjaxCtrl, PanelCtrl */
1086/***/ (function(module, __webpack_exports__, __webpack_require__) {
1087
1088"use strict";
1089__webpack_require__.r(__webpack_exports__);
1090/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "AjaxCtrl", function() { return AjaxCtrl; });
1091/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "PanelCtrl", function() { return AjaxCtrl; });
1092/* harmony import */ var tslib__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! tslib */ "../node_modules/tslib/tslib.es6.js");
1093/* harmony import */ var grafana_app_plugins_sdk__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! grafana/app/plugins/sdk */ "grafana/app/plugins/sdk");
1094/* harmony import */ var grafana_app_plugins_sdk__WEBPACK_IMPORTED_MODULE_1___default = /*#__PURE__*/__webpack_require__.n(grafana_app_plugins_sdk__WEBPACK_IMPORTED_MODULE_1__);
1095/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! jquery */ "jquery");
1096/* harmony import */ var jquery__WEBPACK_IMPORTED_MODULE_2___default = /*#__PURE__*/__webpack_require__.n(jquery__WEBPACK_IMPORTED_MODULE_2__);
1097/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! lodash */ "lodash");
1098/* harmony import */ var lodash__WEBPACK_IMPORTED_MODULE_3___default = /*#__PURE__*/__webpack_require__.n(lodash__WEBPACK_IMPORTED_MODULE_3__);
1099/* harmony import */ var grafana_app_core_app_events__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! grafana/app/core/app_events */ "grafana/app/core/app_events");
1100/* harmony import */ var grafana_app_core_app_events__WEBPACK_IMPORTED_MODULE_4___default = /*#__PURE__*/__webpack_require__.n(grafana_app_core_app_events__WEBPACK_IMPORTED_MODULE_4__);
1101/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! moment */ "moment");
1102/* harmony import */ var moment__WEBPACK_IMPORTED_MODULE_5___default = /*#__PURE__*/__webpack_require__.n(moment__WEBPACK_IMPORTED_MODULE_5__);
1103/* harmony import */ var _style_css__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./style.css */ "./style.css");
1104/* harmony import */ var _style_css__WEBPACK_IMPORTED_MODULE_6___default = /*#__PURE__*/__webpack_require__.n(_style_css__WEBPACK_IMPORTED_MODULE_6__);
1105/* harmony import */ var _types__WEBPACK_IMPORTED_MODULE_7__ = __webpack_require__(/*! ./types */ "./types.ts");
1106/* harmony import */ var _examples__WEBPACK_IMPORTED_MODULE_8__ = __webpack_require__(/*! ./examples */ "./examples.ts");
1107
1108
1109
1110
1111
1112
1113
1114
1115
1116
1117var AjaxCtrl =
1118/** @class */
1119function (_super) {
1120 AjaxCtrl.$inject = ["$scope", "$injector", "$rootScope", "$q", "$timeout", "$sce", "templateSrv", "datasourceSrv", "backendSrv", "$compile"];
1121
1122 Object(tslib__WEBPACK_IMPORTED_MODULE_0__["__extends"])(AjaxCtrl, _super);
1123 /** @ngInject */
1124
1125
1126 function AjaxCtrl($scope, $injector, $rootScope, $q, $timeout, $sce, templateSrv, datasourceSrv, backendSrv, $compile) {
1127 var _this = _super.call(this, $scope, $injector) || this;
1128
1129 _this.$rootScope = $rootScope;
1130 _this.$q = $q;
1131 _this.$timeout = $timeout;
1132 _this.$sce = $sce;
1133 _this.templateSrv = templateSrv;
1134 _this.datasourceSrv = datasourceSrv;
1135 _this.backendSrv = backendSrv;
1136 _this.$compile = $compile;
1137 _this.isIframe = false;
1138 _this.objectURL = null; // Used for images
1139
1140 _this.scopedVars = null; // updated each request
1141
1142 _this.requestCount = 0;
1143 _this.lastRequestTime = -1; // Migrate old settings
1144
1145 if (_this.panel.useDatasource) {
1146 _this.panel.request = 'datasource';
1147 delete _this.panel.useDatasource;
1148 }
1149
1150 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.defaults(_this.panel, _examples__WEBPACK_IMPORTED_MODULE_8__["examples"][0].config);
1151
1152 $scope.$on('$destroy', function () {
1153 if (_this.objectURL) {
1154 URL.revokeObjectURL(_this.objectURL);
1155 }
1156 });
1157
1158 _this.events.on('data-received', _this.onDataReceived.bind(_this));
1159
1160 _this.events.on('data-snapshot-load', _this.onDataSnapshotLoad.bind(_this));
1161
1162 _this.events.on('data-error', _this.onDataError.bind(_this));
1163
1164 _this.events.on('init-edit-mode', _this.onInitEditMode.bind(_this));
1165
1166 _this.events.on('panel-initialized', _this.onPanelInitalized.bind(_this));
1167
1168 _this.events.on('render', _this.notifyWhenRenderingCompleted.bind(_this));
1169
1170 return _this;
1171 }
1172
1173 AjaxCtrl.prototype.onDataSnapshotLoad = function (snapshotData) {
1174 this.onDataReceived(snapshotData);
1175 };
1176
1177 AjaxCtrl.prototype.onDataError = function (err) {
1178 console.log('onDataError', err);
1179 }; // Having this function pust ths query sidebar on
1180
1181
1182 AjaxCtrl.prototype.onDataReceived = function (dataList) {
1183 this.process(dataList);
1184 this.loading = false;
1185 }; // This checks that all requests have completed before saying
1186
1187
1188 AjaxCtrl.prototype.notifyWhenRenderingCompleted = function () {
1189 var _this = this;
1190
1191 if (this.timer) {
1192 this.$timeout.cancel(this.timer);
1193 }
1194
1195 if (this.requestCount > 0) {
1196 var requestID_1 = this.requestCount;
1197 this.timer = this.$timeout(function () {
1198 _this.timer = undefined;
1199
1200 if (_this.requestCount !== requestID_1) {
1201 return;
1202 } // If it is still loading... try again
1203
1204
1205 if (_this.loading) {
1206 _this.notifyWhenRenderingCompleted();
1207 } else {
1208 _this.renderingCompleted();
1209 }
1210 }, 100);
1211 }
1212 }; // Expose the examples to Angular
1213
1214
1215 AjaxCtrl.prototype.getStaticExamples = function () {
1216 return _examples__WEBPACK_IMPORTED_MODULE_8__["examples"];
1217 };
1218
1219 AjaxCtrl.prototype.isUsingMetricQuery = function () {
1220 return this.panel.request.startsWith('query');
1221 };
1222
1223 AjaxCtrl.prototype.loadExample = function (example, evt) {
1224 var _this = this;
1225
1226 if (evt) {
1227 evt.stopPropagation();
1228 evt.preventDefault();
1229 }
1230
1231 console.log('Loading example', example);
1232 var first = _examples__WEBPACK_IMPORTED_MODULE_8__["examples"][0].config;
1233
1234 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.forEach(lodash__WEBPACK_IMPORTED_MODULE_3___default.a.keys(first), function (k) {
1235 delete _this.panel[k];
1236 });
1237
1238 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.defaults(this.panel, example.config);
1239
1240 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.defaults(this.panel, first);
1241
1242 jquery__WEBPACK_IMPORTED_MODULE_2___default()(window).scrollTop(0);
1243 grafana_app_core_app_events__WEBPACK_IMPORTED_MODULE_4___default.a.emit('dash-scroll', {
1244 animate: false,
1245 evt: 0
1246 });
1247 this.$rootScope.appEvent('alert-success', ['Loaded Example Configuraiton', example.name]);
1248
1249 if (example.editorTabIndex) {
1250 this.editorTabIndex = example.editorTabIndex;
1251 } else {
1252 this.editorTabIndex = 1;
1253 }
1254
1255 this.$scope.response = null;
1256 this.updateFN();
1257 this.updateTemplate();
1258 this.refresh();
1259 };
1260
1261 AjaxCtrl.prototype.getCurrentParams = function (scopedVars) {
1262 var params = {};
1263
1264 if (this.paramsFn) {
1265 params = this.paramsFn(this);
1266 } // if(false) {
1267 // this.templateSrv.fillVariableValuesForUrl(params, scopedVars);
1268 // }
1269
1270
1271 return params;
1272 }; // This is called from Javascript
1273
1274
1275 AjaxCtrl.prototype.template = function (v) {
1276 if (v) {
1277 return this.templateSrv.replace(v, this.scopedVars);
1278 }
1279
1280 return null;
1281 };
1282
1283 AjaxCtrl.prototype.getHeaders = function (scopedVars) {
1284 if (this.headerFn) {
1285 return this.headerFn(this);
1286 }
1287
1288 return null;
1289 };
1290
1291 AjaxCtrl.prototype._getURL = function (scopedVars) {
1292 var url = this.templateSrv.replace(this.panel.url, scopedVars);
1293 var params = this.getCurrentParams();
1294
1295 if (params) {
1296 var p = jquery__WEBPACK_IMPORTED_MODULE_2___default.a.param(params);
1297
1298 if (p) {
1299 var hasArgs = url.indexOf('?') > 0;
1300 url = url + (hasArgs ? '&' : '?') + p;
1301 }
1302 }
1303
1304 if (this.panel.request === 'datasource' && this.dsInfo) {
1305 return this.dsInfo.baseURL + url;
1306 }
1307
1308 return url;
1309 };
1310 /**
1311 * @override
1312 */
1313
1314
1315 AjaxCtrl.prototype.updateTimeRange = function (datasource) {
1316 var before = this.timeInfo;
1317
1318 var v = _super.prototype.updateTimeRange.call(this);
1319
1320 if (this.panel.showTime && before) {
1321 this.timeInfo = before;
1322 }
1323
1324 return v;
1325 };
1326 /**
1327 * Rather than issue a datasource query, we will call our ajax request
1328 * @override
1329 */
1330
1331
1332 AjaxCtrl.prototype.issueQueries = function (datasource) {
1333 var _this = this;
1334
1335 if (this.isUsingMetricQuery()) {
1336 return _super.prototype.issueQueries.call(this, datasource);
1337 }
1338
1339 this.datasource = datasource;
1340
1341 if (this.fnError) {
1342 this.loading = false;
1343 this.error = this.fnError;
1344 return null;
1345 } // make shallow copy of scoped vars,
1346 // and add built in variables interval and interval_ms
1347
1348
1349 var scopedVars = this.scopedVars = Object.assign({}, this.panel.scopedVars, {
1350 __interval: {
1351 text: this.interval,
1352 value: this.interval
1353 },
1354 __interval_ms: {
1355 text: this.intervalMs,
1356 value: this.intervalMs
1357 }
1358 }); // This lets us see the parameters in the editor
1359
1360 if (this.debugParams) {
1361 this.debugParams = {};
1362
1363 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.each(scopedVars, function (v, k) {
1364 _this.debugParams[k] = v.text;
1365 });
1366
1367 lodash__WEBPACK_IMPORTED_MODULE_3___default.a.each(this.templateSrv.variables, function (v) {
1368 _this.debugParams[v.name] = v.getValueForUrl();
1369 });
1370 }
1371
1372 var src = this._getURL(scopedVars);
1373
1374 if (this.panel.skipSameURL && src === this.lastURL) {
1375 this.loading = false;
1376 return null;
1377 }
1378
1379 this.lastURL = src;
1380 this.error = null; // remove the error
1381
1382 var sent = Date.now();
1383
1384 if (this.isIframe) {
1385 this.$scope.url = this.$sce.trustAsResourceUrl(src); // Its not an image, so remove it
1386
1387 if (this.objectURL) {
1388 this.img.css('display', 'none');
1389 URL.revokeObjectURL(this.objectURL);
1390 this.objectURL = null;
1391 }
1392
1393 return;
1394 } else {
1395 var url_1 = this.templateSrv.replace(this.panel.url, scopedVars);
1396 var params = this.getCurrentParams();
1397 var options_1 = {
1398 method: this.panel.method,
1399 responseType: this.panel.responseType,
1400 url: url_1,
1401 params: params,
1402 headers: this.getHeaders(),
1403 cache: false,
1404 withCredentials: this.panel.withCredentials
1405 };
1406 options_1.headers = options_1.headers || {};
1407 var helper = Promise.resolve({});
1408
1409 if (this.panel.request === 'datasource') {
1410 helper = this.datasourceSrv.get(this.panel.datasource).then(function (ds) {
1411 console.log('DDDD', ds, _this);
1412
1413 if (ds) {
1414 _this.dsInfo = new _types__WEBPACK_IMPORTED_MODULE_7__["DSInfo"](ds); // Change the URL
1415
1416 if (_this.dsInfo.basicAuth || _this.dsInfo.withCredentials) {
1417 options_1.withCredentials = true;
1418 }
1419
1420 if (_this.dsInfo.basicAuth) {
1421 options_1.headers.Authorization = _this.dsInfo.basicAuth;
1422 }
1423
1424 options_1.url = _this.dsInfo.baseURL + url_1;
1425 } else {
1426 // @ts-ignore
1427 _this.dsInfo = null;
1428 }
1429 });
1430 } else if (!options_1.url) {
1431 this.error = 'Missing URL';
1432 this.showError(this.error, null);
1433 return;
1434 } else if (options_1.url.indexOf('://') < 0 && options_1.url.indexOf('api/') < 0) {
1435 this.error = 'Invalid URL: ' + options_1.url;
1436 this.showError(this.error, params);
1437 return;
1438 } // Now make the call
1439
1440
1441 this.requestCount++;
1442 this.loading = true;
1443 helper.then(function () {
1444 _this.backendSrv.datasourceRequest(options_1).then(function (response) {
1445 _this.lastRequestTime = sent;
1446
1447 _this.process(response);
1448
1449 _this.loading = false;
1450 }, function (err) {
1451 console.log('ERR', err);
1452 _this.lastRequestTime = sent;
1453 _this.loading = false;
1454 _this.error = err; //.data.error + " ["+err.status+"]";
1455
1456 _this.inspector = {
1457 error: err
1458 };
1459
1460 _this.showError('Request Error', err);
1461 });
1462 });
1463 } // Return empty results
1464
1465
1466 return null; //this.$q.when( [] );
1467 }; // Overrides the default handling (error for null result)
1468
1469
1470 AjaxCtrl.prototype.handleQueryResult = function (result) {
1471 this.loading = false;
1472
1473 if (result) {
1474 if (this.isUsingMetricQuery()) {
1475 return _super.prototype.handleQueryResult.call(this, result);
1476 }
1477 }
1478
1479 this.render();
1480 };
1481
1482 AjaxCtrl.prototype.onPanelInitalized = function () {
1483 var _this = this;
1484
1485 this.updateFN();
1486 this.updateTemplate();
1487 jquery__WEBPACK_IMPORTED_MODULE_2___default()(window).on('resize', lodash__WEBPACK_IMPORTED_MODULE_3___default.a.debounce(function (fn) {
1488 _this.refresh();
1489 }, 250));
1490 };
1491
1492 AjaxCtrl.prototype.onConfigChanged = function () {
1493 this.lastURL = undefined;
1494 this.refresh();
1495 };
1496
1497 AjaxCtrl.prototype.onInitEditMode = function () {
1498 this.debugParams = {};
1499 this.addEditorTab('Request', 'public/plugins/' + this.pluginId + '/partials/editor.request.html', 2);
1500 this.addEditorTab('Display', 'public/plugins/' + this.pluginId + '/partials/editor.display.html', 3);
1501 this.addEditorTab('Examples', 'public/plugins/' + this.pluginId + '/partials/editor.examples.html', 5);
1502 this.editorTabIndex = 2;
1503 this.updateFN();
1504 };
1505
1506 AjaxCtrl.prototype.updateFN = function () {
1507 this.fnError = null;
1508 this.paramsFn = undefined;
1509
1510 if (this.panel.params_js) {
1511 try {
1512 this.paramsFn = new Function('ctrl', 'return ' + this.panel.params_js);
1513 } catch (ex) {
1514 console.warn('error parsing params_js', this.panel.params_js, ex);
1515 this.paramsFn = undefined;
1516 this.fnError = ex;
1517 }
1518 }
1519
1520 if (this.panel.header_js) {
1521 try {
1522 this.headerFn = new Function('ctrl', 'return ' + this.panel.header_js);
1523 } catch (ex) {
1524 console.warn('error parsing header_js', this.panel.header_js, ex);
1525 this.headerFn = undefined;
1526 this.fnError = ex;
1527 }
1528 }
1529
1530 this.onConfigChanged();
1531 };
1532
1533 AjaxCtrl.prototype.updateTemplate = function () {
1534 var txt = '';
1535 this.isIframe = this.panel.method === 'iframe';
1536
1537 if (this.panel.mode === _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].template) {
1538 if (!this.panel.template) {
1539 this.panel.template = '<pre>{{ response }}</pre>';
1540 }
1541
1542 txt = this.panel.template;
1543 } else {
1544 delete this.panel.template;
1545
1546 if (this.isIframe) {
1547 txt = '<iframe \
1548 frameborder="0" \
1549 width="100%" \
1550 height="100%" \
1551 ng-src="{{ url }}" \
1552 ng-if="ctrl.panel.method === \'iframe\'"></iframe>';
1553 } else {
1554 if (!this.panel.mode) {
1555 this.panel.mode = _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].html;
1556 }
1557
1558 var mode = this.panel.mode;
1559
1560 if (mode === _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].html && this.isUsingMetricQuery()) {
1561 mode = _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].pre; // don't show [object object]!
1562 }
1563
1564 switch (mode) {
1565 case _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].html:
1566 txt = '<div ng-bind-html="response"></div>';
1567 console.log(txt.toString());
1568 break;
1569
1570 case _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].text:
1571 //txt = '{{ response }}';
1572 break;
1573
1574 case _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].pre:{
1575 txt='<pre id="Responsee">{{ response }}</pre>';
1576
1577 //var ttext = document.getElementById("Responsee").textContent;
1578 //jsonFormat = JSON.parse(textt)
1579 //console.log(textt);
1580 break;
1581 }
1582 case _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].json:
1583 //txt = '<json-tree root-name="sub" object="response" start-expanded="true"></json-tree>';
1584 break;
1585
1586 case _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].image:
1587 //txt = '';
1588 break;
1589
1590 default:
1591 console.warn('Unsupported render mode:', this.panel.mode);
1592 }
1593 }
1594 } //console.log('UPDATE template', this.panel, txt);
1595
1596
1597 if (txt) {
1598 this.ngtemplate.html(txt);
1599 this.ngtemplate.css('display', 'block');
1600 this.$compile(this.ngtemplate.contents())(this.$scope);
1601 } else {
1602 this.ngtemplate.css('display', 'none');
1603 }
1604
1605 if (this.$scope.response) {
1606 this.render();
1607 }
1608 };
1609
1610 AjaxCtrl.prototype.showError = function (msg, err) {
1611 this.timeInfo = null;
1612
1613 if (this.objectURL) {
1614 this.img.css('display', 'none');
1615 URL.revokeObjectURL(this.objectURL);
1616 this.objectURL = null;
1617 }
1618
1619 var txt = "<h1>" + msg + "</h1>";
1620
1621 if (err && this.panel.showErrors) {
1622 txt += '<pre>' + JSON.stringify(err) + '</pre>';
1623 } else {
1624 txt += '<pre>Something went wrong while executing your request.</pre>';
1625 }
1626
1627 this.ngtemplate.html(txt);
1628 this.$compile(this.ngtemplate.contents())(this.$scope);
1629
1630 if (this.$scope.response) {
1631 this.render();
1632 }
1633 };
1634
1635 AjaxCtrl.prototype.process = function (rsp) {
1636 if (this.panel.showTime) {
1637 var txt = this.panel.showTimePrefix ? this.panel.showTimePrefix : '';
1638
1639 if (this.panel.showTimeValue) {
1640 var when = undefined;
1641
1642 if ('request' === this.panel.showTimeValue) {
1643 when = this.lastRequestTime;
1644 } else if ('recieve' === this.panel.showTimeValue) {
1645 when = Date.now();
1646 } else if (this.panel.showTimeValue.startsWith('header-')) {
1647 var h = this.panel.showTimeValue.substring('header-'.length);
1648 var v = rsp.headers[h];
1649
1650 if (v) {
1651 console.log('TODO, parse header', v, h);
1652 } else {
1653 var vals = {};
1654
1655 for (var key in rsp.headers()) {
1656 vals[key] = rsp.headers[key];
1657 }
1658
1659 console.log('Header:', h, 'not found in:', vals, rsp);
1660 }
1661 }
1662
1663 if (when) {
1664 txt += moment__WEBPACK_IMPORTED_MODULE_5___default()(when).format(this.panel.showTimeFormat);
1665 } else {
1666 txt += 'missing: ' + this.panel.showTimeValue;
1667 }
1668 }
1669
1670 this.timeInfo = txt;
1671 } else {
1672 this.timeInfo = null;
1673 }
1674
1675 if (!rsp) {
1676 return;
1677 }
1678
1679 this.$scope.response = rsp.hasOwnProperty('data') ? rsp.data : rsp;
1680 var contentType = '';
1681
1682 if (rsp.hasOwnProperty('headers')) {
1683 contentType = rsp.headers('Content-Type');
1684 }
1685
1686 if (contentType) {
1687 if (contentType.startsWith('image/')) {
1688 var blob = new Blob([rsp.data], {
1689 type: contentType
1690 });
1691 var old = this.objectURL;
1692 this.objectURL = URL.createObjectURL(blob);
1693 this.img.attr('src', this.objectURL);
1694
1695 if (old) {
1696 URL.revokeObjectURL(old);
1697 }
1698
1699 this.img.css('display', 'block'); // If we get an image, change the display to image type
1700
1701 if (this.panel.mode !== _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].image) {
1702 this.panel.mode = _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].image;
1703 this.updateTemplate();
1704 }
1705
1706 return;
1707 }
1708 } // Its not an image, so remove it
1709
1710
1711 if (this.objectURL) {
1712 this.img.css('display', 'none');
1713 URL.revokeObjectURL(this.objectURL);
1714 this.objectURL = null;
1715 } // JSON Node needs to force refresh
1716
1717
1718 if (this.panel.mode === _types__WEBPACK_IMPORTED_MODULE_7__["RenderMode"].json) {
1719 this.updateTemplate();
1720 }
1721 };
1722
1723 AjaxCtrl.prototype.openFullscreen = function () {
1724 var _this = this; // Update the image
1725
1726
1727 this.overlay.find('img').attr('src', this.objectURL);
1728 jquery__WEBPACK_IMPORTED_MODULE_2___default()('.grafana-app').append(this.overlay);
1729 this.overlay.on('click', function () {
1730 _this.overlay.remove();
1731 });
1732 };
1733
1734 AjaxCtrl.prototype.link = function (scope, elem, attrs, ctrl) {
1735 this.img = jquery__WEBPACK_IMPORTED_MODULE_2___default()(elem.find('img')[0]);
1736 this.ngtemplate = jquery__WEBPACK_IMPORTED_MODULE_2___default()(elem.find('.ngtemplate')[0]);
1737 this.overlay = jquery__WEBPACK_IMPORTED_MODULE_2___default()(elem.find('.ajaxmodal')[0]);
1738 this.overlay.remove();
1739 this.overlay.css('display', 'block');
1740 this.img.css('display', 'none');
1741 };
1742
1743 AjaxCtrl.templateUrl = 'partials/module.html';
1744 AjaxCtrl.scrollable = true;
1745 return AjaxCtrl;
1746}(grafana_app_plugins_sdk__WEBPACK_IMPORTED_MODULE_1__["MetricsPanelCtrl"]);
1747
1748
1749
1750/***/ }),
1751
1752/***/ "./style.css":
1753/*!*******************!*\
1754 !*** ./style.css ***!
1755 \*******************/
1756/*! no static exports found */
1757/***/ (function(module, exports, __webpack_require__) {
1758
1759
1760var content = __webpack_require__(/*! !../node_modules/css-loader/dist/cjs.js??ref--8-1!../node_modules/postcss-loader/src??ref--8-2!../node_modules/sass-loader/lib/loader.js!./style.css */ "../node_modules/css-loader/dist/cjs.js?!../node_modules/postcss-loader/src/index.js?!../node_modules/sass-loader/lib/loader.js!./style.css");
1761
1762if(typeof content === 'string') content = [[module.i, content, '']];
1763
1764var transform;
1765var insertInto;
1766
1767
1768
1769var options = {"hmr":true}
1770
1771options.transform = transform
1772options.insertInto = undefined;
1773
1774var update = __webpack_require__(/*! ../node_modules/style-loader/lib/addStyles.js */ "../node_modules/style-loader/lib/addStyles.js")(content, options);
1775
1776if(content.locals) module.exports = content.locals;
1777
1778if(false) {}
1779
1780/***/ }),
1781
1782/***/ "./types.ts":
1783/*!******************!*\
1784 !*** ./types.ts ***!
1785 \******************/
1786/*! exports provided: DSInfo, RenderMode */
1787/***/ (function(module, __webpack_exports__, __webpack_require__) {
1788
1789"use strict";
1790__webpack_require__.r(__webpack_exports__);
1791/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "DSInfo", function() { return DSInfo; });
1792/* harmony export (binding) */ __webpack_require__.d(__webpack_exports__, "RenderMode", function() { return RenderMode; });
1793var DSInfo =
1794/** @class */
1795function () {
1796 function DSInfo(ds) {
1797 this.isProxy = false;
1798 this.withCredentials = false;
1799 this.name = ds.name;
1800
1801 if (ds.url) {
1802 this.baseURL = ds.url;
1803 } else if (ds.urls) {
1804 this.baseURL = ds.urls[0];
1805 } // @ts-ignore
1806
1807
1808 if (!this.baseURL) {
1809 this.baseURL = '';
1810 }
1811
1812 this.isProxy = this.baseURL.startsWith('/api/');
1813 this.withCredentials = ds.withCredentials;
1814 this.basicAuth = ds.basicAuth;
1815 }
1816
1817 return DSInfo;
1818}();
1819
1820 // <option value="html">Direct HTML</option>
1821// <option value="text">Escaped Text</option>
1822// <option value="image">Image</option>
1823// <option value="json">JSON Tree</option>
1824// <option value="template">Angular Template</option>
1825
1826var RenderMode;
1827
1828(function (RenderMode) {
1829 RenderMode["html"] = "html";
1830 RenderMode["text"] = "text";
1831 RenderMode["pre"] = "pre";
1832 RenderMode["image"] = "image";
1833 RenderMode["json"] = "json";
1834 RenderMode["template"] = "template";
1835})(RenderMode || (RenderMode = {}));
1836
1837/***/ }),
1838
1839/***/ "grafana/app/core/app_events":
1840/*!**************************************!*\
1841 !*** external "app/core/app_events" ***!
1842 \**************************************/
1843/*! no static exports found */
1844/***/ (function(module, exports) {
1845
1846module.exports = __WEBPACK_EXTERNAL_MODULE_grafana_app_core_app_events__;
1847
1848/***/ }),
1849
1850/***/ "grafana/app/plugins/sdk":
1851/*!**********************************!*\
1852 !*** external "app/plugins/sdk" ***!
1853 \**********************************/
1854/*! no static exports found */
1855/***/ (function(module, exports) {
1856
1857module.exports = __WEBPACK_EXTERNAL_MODULE_grafana_app_plugins_sdk__;
1858
1859/***/ }),
1860
1861/***/ "jquery":
1862/*!*************************!*\
1863 !*** external "jquery" ***!
1864 \*************************/
1865/*! no static exports found */
1866/***/ (function(module, exports) {
1867
1868module.exports = __WEBPACK_EXTERNAL_MODULE_jquery__;
1869
1870/***/ }),
1871
1872/***/ "lodash":
1873/*!*************************!*\
1874 !*** external "lodash" ***!
1875 \*************************/
1876/*! no static exports found */
1877/***/ (function(module, exports) {
1878
1879module.exports = __WEBPACK_EXTERNAL_MODULE_lodash__;
1880
1881/***/ }),
1882
1883/***/ "moment":
1884/*!*************************!*\
1885 !*** external "moment" ***!
1886 \*************************/
1887/*! no static exports found */
1888/***/ (function(module, exports) {
1889
1890module.exports = __WEBPACK_EXTERNAL_MODULE_moment__;
1891
1892/***/ })
1893
1894/******/ })});;
1895//# sourceMappingURL=module.js.map