Submit
Path:
~
/
/
usr
/
share
/
grafana
/
public
/
build
/
File Content:
1133.cd705902767ed2e9bf55.js.map
{"version":3,"file":"1133.cd705902767ed2e9bf55.js","mappings":"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","sources":["webpack://grafana/./node_modules/angular-bindonce/bindonce.js","webpack://grafana/./node_modules/angular-route/angular-route.js","webpack://grafana/./node_modules/angular-route/index.js","webpack://grafana/./node_modules/angular-sanitize/angular-sanitize.js","webpack://grafana/./node_modules/angular-sanitize/index.js","webpack://grafana/./node_modules/baron/src/autoUpdate.js","webpack://grafana/./node_modules/baron/src/controls.js","webpack://grafana/./node_modules/baron/src/core.js","webpack://grafana/./node_modules/baron/src/fix.js","webpack://grafana/./node_modules/baron/src/log.js","webpack://grafana/./node_modules/baron/src/utils.js","webpack://grafana/./public/app/angular/AngularLocationWrapper.ts","webpack://grafana/./public/app/angular/panel/panel_directive.ts","webpack://grafana/./public/app/angular/panel/panel_editor_tab.ts","webpack://grafana/./public/app/angular/panel/query_editor_row.ts","webpack://grafana/./public/app/angular/filters/filters.ts","webpack://grafana/./public/app/angular/services/alert_srv.ts","webpack://grafana/./public/app/angular/services/dynamic_directive_srv.ts","webpack://grafana/./public/app/angular/services/ng_react.ts","webpack://grafana/./public/app/angular/services/segment_srv.ts","webpack://grafana/./public/app/angular/services/popover_srv.ts","webpack://grafana/./public/app/angular/services/timer.ts","webpack://grafana/./public/app/angular/services/AngularLoader.ts","webpack://grafana/./public/app/angular/jquery_extended.ts","webpack://grafana/./public/app/angular/dropdown_typeahead.ts","webpack://grafana/./public/app/angular/autofill_event_fix.ts","webpack://grafana/./public/app/angular/metric_segment.ts","webpack://grafana/./public/app/angular/misc.ts","webpack://grafana/./public/app/angular/bsTooltip.ts","webpack://grafana/./public/app/angular/bsTypeahead.ts","webpack://grafana/./public/app/angular/ng_model_on_blur.ts","webpack://grafana/./public/app/angular/tags.ts","webpack://grafana/./public/app/angular/rebuild_on_change.ts","webpack://grafana/./public/app/angular/give_focus.ts","webpack://grafana/./public/app/angular/diff-view.ts","webpack://grafana/./public/app/angular/array_join.ts","webpack://grafana/./public/app/angular/react2angular.ts","webpack://grafana/./public/app/core/components/PageHeader/PanelHeaderMenuItem.tsx","webpack://grafana/./public/app/core/components/PageHeader/PageHeader.tsx","webpack://grafana/./public/app/core/components/Select/MetricSelect.tsx","webpack://grafana/./public/app/angular/angular_wrappers.ts","webpack://grafana/./public/app/angular/components/query_part_editor.ts","webpack://grafana/./public/app/angular/components/form_dropdown/form_dropdown.ts","webpack://grafana/./public/app/angular/components/scroll.ts","webpack://grafana/./public/app/angular/components/jsontree.ts","webpack://grafana/./public/app/angular/components/switch.ts","webpack://grafana/./public/app/angular/components/info_popover.ts","webpack://grafana/./public/app/angular/components/spectrum_picker.ts","webpack://grafana/./public/app/angular/components/code_editor/code_editor.ts","webpack://grafana/./public/app/angular/components/sql_part/sql_part_editor.ts","webpack://grafana/./public/app/angular/components/HttpSettingsCtrl.ts","webpack://grafana/./public/app/angular/components/TlsAuthSettingsCtrl.ts","webpack://grafana/./public/app/angular/components/plugin_component.ts","webpack://grafana/./public/app/angular/GrafanaCtrl.ts","webpack://grafana/./public/app/core/navigation/patch/RouteParamsProvider.ts","webpack://grafana/./public/app/core/navigation/patch/RouteProvider.ts","webpack://grafana/./public/app/angular/bridgeReactAngularRouting.ts","webpack://grafana/./public/app/angular/injectorMonkeyPatch.ts","webpack://grafana/./public/app/angular/panel/AngularPanelReactWrapper.tsx","webpack://grafana/./public/app/angular/services/UtilSrv.ts","webpack://grafana/./public/app/angular/services/annotations_srv.ts","webpack://grafana/./public/app/angular/registerComponents.ts","webpack://grafana/./public/app/angular/AngularApp.ts","webpack://grafana/./public/app/angular/panel/metrics_panel_ctrl.ts","webpack://grafana/./public/app/angular/panel/panel_ctrl.ts","webpack://grafana/./public/app/angular/panel/query_ctrl.ts","webpack://grafana/./public/app/angular/partials.ts","webpack://grafana/./public/app/angular/promiseToDigest.ts","webpack://grafana/./public/app/plugins/sdk.ts","webpack://grafana/./public/vendor/tagsinput/bootstrap-tagsinput.js"],"sourcesContent":["(function () {\r\n\t\"use strict\";\r\n\t/**\r\n\t * Bindonce - Zero watches binding for AngularJs\r\n\t * @version v0.3.1\r\n\t * @link https://github.com/Pasvaz/bindonce\r\n\t * @author Pasquale Vazzana <pasqualevazzana@gmail.com>\r\n\t * @license MIT License, http://www.opensource.org/licenses/MIT\r\n\t */\r\n\r\n\tvar bindonceModule = angular.module('pasvaz.bindonce', []);\r\n\r\n\tbindonceModule.directive('bindonce', function ()\r\n\t{\r\n\t\tvar toBoolean = function (value)\r\n\t\t{\r\n\t\t\tif (value && value.length !== 0)\r\n\t\t\t{\r\n\t\t\t\tvar v = angular.lowercase(\"\" + value);\r\n\t\t\t\tvalue = !(v === 'f' || v === '0' || v === 'false' || v === 'no' || v === 'n' || v === '[]');\r\n\t\t\t}\r\n\t\t\telse\r\n\t\t\t{\r\n\t\t\t\tvalue = false;\r\n\t\t\t}\r\n\t\t\treturn value;\r\n\t\t};\r\n\r\n\t\tvar msie = parseInt((/msie (\\d+)/.exec(angular.lowercase(navigator.userAgent)) || [])[1], 10);\r\n\t\tif (isNaN(msie))\r\n\t\t{\r\n\t\t\tmsie = parseInt((/trident\\/.*; rv:(\\d+)/.exec(angular.lowercase(navigator.userAgent)) || [])[1], 10);\r\n\t\t}\r\n\r\n\t\tvar bindonceDirective =\r\n\t\t{\r\n\t\t\trestrict: \"AM\",\r\n\t\t\tcontroller: ['$scope', '$element', '$attrs', '$interpolate', function ($scope, $element, $attrs, $interpolate)\r\n\t\t\t{\r\n\t\t\t\tvar showHideBinder = function (elm, attr, value)\r\n\t\t\t\t{\r\n\t\t\t\t\tvar show = (attr === 'show') ? '' : 'none';\r\n\t\t\t\t\tvar hide = (attr === 'hide') ? '' : 'none';\r\n\t\t\t\t\telm.css('display', toBoolean(value) ? show : hide);\r\n\t\t\t\t};\r\n\t\t\t\tvar classBinder = function (elm, value)\r\n\t\t\t\t{\r\n\t\t\t\t\tif (angular.isObject(value) && !angular.isArray(value))\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar results = [];\r\n\t\t\t\t\t\tangular.forEach(value, function (value, index)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (value) results.push(index);\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t\tvalue = results;\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (value)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\telm.addClass(angular.isArray(value) ? value.join(' ') : value);\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\tvar ctrl =\r\n\t\t\t\t{\r\n\t\t\t\t\twatcherRemover: undefined,\r\n\t\t\t\t\tbinders: [],\r\n\t\t\t\t\tgroup: $attrs.boName,\r\n\t\t\t\t\telement: $element,\r\n\t\t\t\t\tran: false,\r\n\r\n\t\t\t\t\taddBinder: function (binder)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tthis.binders.push(binder);\r\n\r\n\t\t\t\t\t\t// In case of late binding (when using the directive bo-name/bo-parent)\r\n\t\t\t\t\t\t// it happens only when you use nested bindonce, if the bo-children\r\n\t\t\t\t\t\t// are not dom children the linking can follow another order\r\n\t\t\t\t\t\tif (this.ran)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.runBinders();\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tsetupWatcher: function (bindonceValue)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar that = this;\r\n\t\t\t\t\t\tthis.watcherRemover = $scope.$watch(bindonceValue, function (newValue)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tif (newValue === undefined) return;\r\n\t\t\t\t\t\t\tthat.removeWatcher();\r\n\t\t\t\t\t\t\tthat.runBinders();\r\n\t\t\t\t\t\t}, true);\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\tremoveWatcher: function ()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tif (this.watcherRemover !== undefined)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tthis.watcherRemover();\r\n\t\t\t\t\t\t\tthis.watcherRemover = undefined;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t},\r\n\r\n\t\t\t\t\trunBinders: function ()\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\twhile (this.binders.length > 0)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar binder = this.binders.shift();\r\n\t\t\t\t\t\t\tif (this.group && this.group != binder.group) continue;\r\n\t\t\t\t\t\t\tvar value = binder.scope.$eval((binder.interpolate) ? $interpolate(binder.value) : binder.value);\r\n\t\t\t\t\t\t\tswitch (binder.attr)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tcase 'boIf':\r\n\t\t\t\t\t\t\t\t\tif (toBoolean(value))\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tbinder.transclude(binder.scope.$new(), function (clone)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tvar parent = binder.element.parent();\r\n\t\t\t\t\t\t\t\t\t\t\tvar afterNode = binder.element && binder.element[binder.element.length - 1];\r\n\t\t\t\t\t\t\t\t\t\t\tvar parentNode = parent && parent[0] || afterNode && afterNode.parentNode;\r\n\t\t\t\t\t\t\t\t\t\t\tvar afterNextSibling = (afterNode && afterNode.nextSibling) || null;\r\n\t\t\t\t\t\t\t\t\t\t\tangular.forEach(clone, function (node)\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tparentNode.insertBefore(node, afterNextSibling);\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'boSwitch':\r\n\t\t\t\t\t\t\t\t\tvar selectedTranscludes, switchCtrl = binder.controller[0];\r\n\t\t\t\t\t\t\t\t\tif ((selectedTranscludes = switchCtrl.cases['!' + value] || switchCtrl.cases['?']))\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tbinder.scope.$eval(binder.attrs.change);\r\n\t\t\t\t\t\t\t\t\t\tangular.forEach(selectedTranscludes, function (selectedTransclude)\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tselectedTransclude.transclude(binder.scope.$new(), function (clone)\r\n\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar parent = selectedTransclude.element.parent();\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar afterNode = selectedTransclude.element && selectedTransclude.element[selectedTransclude.element.length - 1];\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar parentNode = parent && parent[0] || afterNode && afterNode.parentNode;\r\n\t\t\t\t\t\t\t\t\t\t\t\tvar afterNextSibling = (afterNode && afterNode.nextSibling) || null;\r\n\t\t\t\t\t\t\t\t\t\t\t\tangular.forEach(clone, function (node)\r\n\t\t\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\t\t\tparentNode.insertBefore(node, afterNextSibling);\r\n\t\t\t\t\t\t\t\t\t\t\t\t});\r\n\r\n\t\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'boSwitchWhen':\r\n\t\t\t\t\t\t\t\t\tvar ctrl = binder.controller[0];\r\n\t\t\t\t\t\t\t\t\tctrl.cases['!' + binder.attrs.boSwitchWhen] = (ctrl.cases['!' + binder.attrs.boSwitchWhen] || []);\r\n\t\t\t\t\t\t\t\t\tctrl.cases['!' + binder.attrs.boSwitchWhen].push({ transclude: binder.transclude, element: binder.element });\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'boSwitchDefault':\r\n\t\t\t\t\t\t\t\t\tvar ctrl = binder.controller[0];\r\n\t\t\t\t\t\t\t\t\tctrl.cases['?'] = (ctrl.cases['?'] || []);\r\n\t\t\t\t\t\t\t\t\tctrl.cases['?'].push({ transclude: binder.transclude, element: binder.element });\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'hide':\r\n\t\t\t\t\t\t\t\tcase 'show':\r\n\t\t\t\t\t\t\t\t\tshowHideBinder(binder.element, binder.attr, value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'class':\r\n\t\t\t\t\t\t\t\t\tclassBinder(binder.element, value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'text':\r\n\t\t\t\t\t\t\t\t\tbinder.element.text(value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'html':\r\n\t\t\t\t\t\t\t\t\tbinder.element.html(value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'style':\r\n\t\t\t\t\t\t\t\t\tbinder.element.css(value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'src':\r\n\t\t\t\t\t\t\t\t\tbinder.element.attr(binder.attr, value);\r\n\t\t\t\t\t\t\t\t\tif (msie) binder.element.prop('src', value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'attr':\r\n\t\t\t\t\t\t\t\t\tangular.forEach(binder.attrs, function (attrValue, attrKey)\r\n\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\tvar newAttr, newValue;\r\n\t\t\t\t\t\t\t\t\t\tif (attrKey.match(/^boAttr./) && binder.attrs[attrKey])\r\n\t\t\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\t\t\tnewAttr = attrKey.replace(/^boAttr/, '').replace(/([a-z])([A-Z])/g, '$1-$2').toLowerCase();\r\n\t\t\t\t\t\t\t\t\t\t\tnewValue = binder.scope.$eval(binder.attrs[attrKey]);\r\n\t\t\t\t\t\t\t\t\t\t\tbinder.element.attr(newAttr, newValue);\r\n\t\t\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\t\t});\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\tcase 'href':\r\n\t\t\t\t\t\t\t\tcase 'alt':\r\n\t\t\t\t\t\t\t\tcase 'title':\r\n\t\t\t\t\t\t\t\tcase 'id':\r\n\t\t\t\t\t\t\t\tcase 'value':\r\n\t\t\t\t\t\t\t\t\tbinder.element.attr(binder.attr, value);\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tthis.ran = true;\r\n\t\t\t\t\t}\r\n\t\t\t\t};\r\n\r\n\t\t\t\treturn ctrl;\r\n\t\t\t}],\r\n\r\n\t\t\tlink: function (scope, elm, attrs, bindonceController)\r\n\t\t\t{\r\n\t\t\t\tvar value = (attrs.bindonce) ? scope.$eval(attrs.bindonce) : true;\r\n\t\t\t\tif (value !== undefined)\r\n\t\t\t\t{\r\n\t\t\t\t\tbindonceController.runBinders();\r\n\t\t\t\t}\r\n\t\t\t\telse\r\n\t\t\t\t{\r\n\t\t\t\t\tbindonceController.setupWatcher(attrs.bindonce);\r\n\t\t\t\t\telm.bind(\"$destroy\", bindonceController.removeWatcher);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t};\r\n\r\n\t\treturn bindonceDirective;\r\n\t});\r\n\r\n\tangular.forEach(\r\n\t[\r\n\t\t{ directiveName: 'boShow', attribute: 'show' },\r\n\t\t{ directiveName: 'boHide', attribute: 'hide' },\r\n\t\t{ directiveName: 'boClass', attribute: 'class' },\r\n\t\t{ directiveName: 'boText', attribute: 'text' },\r\n\t\t{ directiveName: 'boBind', attribute: 'text' },\r\n\t\t{ directiveName: 'boHtml', attribute: 'html' },\r\n\t\t{ directiveName: 'boSrcI', attribute: 'src', interpolate: true },\r\n\t\t{ directiveName: 'boSrc', attribute: 'src' },\r\n\t\t{ directiveName: 'boHrefI', attribute: 'href', interpolate: true },\r\n\t\t{ directiveName: 'boHref', attribute: 'href' },\r\n\t\t{ directiveName: 'boAlt', attribute: 'alt' },\r\n\t\t{ directiveName: 'boTitle', attribute: 'title' },\r\n\t\t{ directiveName: 'boId', attribute: 'id' },\r\n\t\t{ directiveName: 'boStyle', attribute: 'style' },\r\n\t\t{ directiveName: 'boValue', attribute: 'value' },\r\n\t\t{ directiveName: 'boAttr', attribute: 'attr' },\r\n\r\n\t\t{ directiveName: 'boIf', transclude: 'element', terminal: true, priority: 1000 },\r\n\t\t{ directiveName: 'boSwitch', require: 'boSwitch', controller: function () { this.cases = {}; } },\r\n\t\t{ directiveName: 'boSwitchWhen', transclude: 'element', priority: 800, require: '^boSwitch', },\r\n\t\t{ directiveName: 'boSwitchDefault', transclude: 'element', priority: 800, require: '^boSwitch', }\r\n\t],\r\n\tfunction (boDirective)\r\n\t{\r\n\t\tvar childPriority = 200;\r\n\t\treturn bindonceModule.directive(boDirective.directiveName, function ()\r\n\t\t{\r\n\t\t\tvar bindonceDirective =\r\n\t\t\t{\r\n\t\t\t\tpriority: boDirective.priority || childPriority,\r\n\t\t\t\ttransclude: boDirective.transclude || false,\r\n\t\t\t\tterminal: boDirective.terminal || false,\r\n\t\t\t\trequire: ['^bindonce'].concat(boDirective.require || []),\r\n\t\t\t\tcontroller: boDirective.controller,\r\n\t\t\t\tcompile: function (tElement, tAttrs, transclude)\r\n\t\t\t\t{\r\n\t\t\t\t\treturn function (scope, elm, attrs, controllers)\r\n\t\t\t\t\t{\r\n\t\t\t\t\t\tvar bindonceController = controllers[0];\r\n\t\t\t\t\t\tvar name = attrs.boParent;\r\n\t\t\t\t\t\tif (name && bindonceController.group !== name)\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\tvar element = bindonceController.element.parent();\r\n\t\t\t\t\t\t\tbindonceController = undefined;\r\n\t\t\t\t\t\t\tvar parentValue;\r\n\r\n\t\t\t\t\t\t\twhile (element[0].nodeType !== 9 && element.length)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tif ((parentValue = element.data('$bindonceController'))\r\n\t\t\t\t\t\t\t\t\t&& parentValue.group === name)\r\n\t\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\t\tbindonceController = parentValue;\r\n\t\t\t\t\t\t\t\t\tbreak;\r\n\t\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\t\telement = element.parent();\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t\tif (!bindonceController)\r\n\t\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\t\tthrow new Error(\"No bindonce controller: \" + name);\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t}\r\n\r\n\t\t\t\t\t\tbindonceController.addBinder(\r\n\t\t\t\t\t\t{\r\n\t\t\t\t\t\t\telement: elm,\r\n\t\t\t\t\t\t\tattr: boDirective.attribute || boDirective.directiveName,\r\n\t\t\t\t\t\t\tattrs: attrs,\r\n\t\t\t\t\t\t\tvalue: attrs[boDirective.directiveName],\r\n\t\t\t\t\t\t\tinterpolate: boDirective.interpolate,\r\n\t\t\t\t\t\t\tgroup: name,\r\n\t\t\t\t\t\t\ttransclude: transclude,\r\n\t\t\t\t\t\t\tcontroller: controllers.slice(1),\r\n\t\t\t\t\t\t\tscope: scope\r\n\t\t\t\t\t\t});\r\n\t\t\t\t\t};\r\n\t\t\t\t}\r\n\t\t\t};\r\n\r\n\t\t\treturn bindonceDirective;\r\n\t\t});\r\n\t})\r\n})();\r\n","/**\n * @license AngularJS v1.8.3\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* global shallowCopy: true */\n\n/**\n * Creates a shallow copy of an object, an array or a primitive.\n *\n * Assumes that there are no proto properties for objects.\n */\nfunction shallowCopy(src, dst) {\n if (isArray(src)) {\n dst = dst || [];\n\n for (var i = 0, ii = src.length; i < ii; i++) {\n dst[i] = src[i];\n }\n } else if (isObject(src)) {\n dst = dst || {};\n\n for (var key in src) {\n if (!(key.charAt(0) === '$' && key.charAt(1) === '$')) {\n dst[key] = src[key];\n }\n }\n }\n\n return dst || src;\n}\n\n/* global routeToRegExp: true */\n\n/**\n * @param {string} path - The path to parse. (It is assumed to have query and hash stripped off.)\n * @param {Object} opts - Options.\n * @return {Object} - An object containing an array of path parameter names (`keys`) and a regular\n * expression (`regexp`) that can be used to identify a matching URL and extract the path\n * parameter values.\n *\n * @description\n * Parses the given path, extracting path parameter names and a regular expression to match URLs.\n *\n * Originally inspired by `pathRexp` in `visionmedia/express/lib/utils.js`.\n */\nfunction routeToRegExp(path, opts) {\n var keys = [];\n\n var pattern = path\n .replace(/([().])/g, '\\\\$1')\n .replace(/(\\/)?:(\\w+)(\\*\\?|[?*])?/g, function(_, slash, key, option) {\n var optional = option === '?' || option === '*?';\n var star = option === '*' || option === '*?';\n keys.push({name: key, optional: optional});\n slash = slash || '';\n return (\n (optional ? '(?:' + slash : slash + '(?:') +\n (star ? '(.+?)' : '([^/]+)') +\n (optional ? '?)?' : ')')\n );\n })\n .replace(/([/$*])/g, '\\\\$1');\n\n if (opts.ignoreTrailingSlashes) {\n pattern = pattern.replace(/\\/+$/, '') + '/*';\n }\n\n return {\n keys: keys,\n regexp: new RegExp(\n '^' + pattern + '(?:[?#]|$)',\n opts.caseInsensitiveMatch ? 'i' : ''\n )\n };\n}\n\n/* global routeToRegExp: false */\n/* global shallowCopy: false */\n\n// `isArray` and `isObject` are necessary for `shallowCopy()` (included via `src/shallowCopy.js`).\n// They are initialized inside the `$RouteProvider`, to ensure `window.angular` is available.\nvar isArray;\nvar isObject;\nvar isDefined;\nvar noop;\n\n/**\n * @ngdoc module\n * @name ngRoute\n * @description\n *\n * The `ngRoute` module provides routing and deeplinking services and directives for AngularJS apps.\n *\n * ## Example\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\n *\n */\n/* global -ngRouteModule */\nvar ngRouteModule = angular.\n module('ngRoute', []).\n info({ angularVersion: '1.8.3' }).\n provider('$route', $RouteProvider).\n // Ensure `$route` will be instantiated in time to capture the initial `$locationChangeSuccess`\n // event (unless explicitly disabled). This is necessary in case `ngView` is included in an\n // asynchronously loaded template.\n run(instantiateRoute);\nvar $routeMinErr = angular.$$minErr('ngRoute');\nvar isEagerInstantiationEnabled;\n\n\n/**\n * @ngdoc provider\n * @name $routeProvider\n * @this\n *\n * @description\n *\n * Used for configuring routes.\n *\n * ## Example\n * See {@link ngRoute.$route#examples $route} for an example of configuring and using `ngRoute`.\n *\n * ## Dependencies\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n */\nfunction $RouteProvider() {\n isArray = angular.isArray;\n isObject = angular.isObject;\n isDefined = angular.isDefined;\n noop = angular.noop;\n\n function inherit(parent, extra) {\n return angular.extend(Object.create(parent), extra);\n }\n\n var routes = {};\n\n /**\n * @ngdoc method\n * @name $routeProvider#when\n *\n * @param {string} path Route path (matched against `$location.path`). If `$location.path`\n * contains redundant trailing slash or is missing one, the route will still match and the\n * `$location.path` will be updated to add or drop the trailing slash to exactly match the\n * route definition.\n *\n * * `path` can contain named groups starting with a colon: e.g. `:name`. All characters up\n * to the next slash are matched and stored in `$routeParams` under the given `name`\n * when the route matches.\n * * `path` can contain named groups starting with a colon and ending with a star:\n * e.g.`:name*`. All characters are eagerly stored in `$routeParams` under the given `name`\n * when the route matches.\n * * `path` can contain optional named groups with a question mark: e.g.`:name?`.\n *\n * For example, routes like `/color/:color/largecode/:largecode*\\/edit` will match\n * `/color/brown/largecode/code/with/slashes/edit` and extract:\n *\n * * `color: brown`\n * * `largecode: code/with/slashes`.\n *\n *\n * @param {Object} route Mapping information to be assigned to `$route.current` on route\n * match.\n *\n * Object properties:\n *\n * - `controller` – `{(string|Function)=}` – Controller fn that should be associated with\n * newly created scope or the name of a {@link angular.Module#controller registered\n * controller} if passed as a string.\n * - `controllerAs` – `{string=}` – An identifier name for a reference to the controller.\n * If present, the controller will be published to scope under the `controllerAs` name.\n * - `template` – `{(string|Function)=}` – html template as a string or a function that\n * returns an html template as a string which should be used by {@link\n * ngRoute.directive:ngView ngView} or {@link ng.directive:ngInclude ngInclude} directives.\n * This property takes precedence over `templateUrl`.\n *\n * If `template` is a function, it will be called with the following parameters:\n *\n * - `{Array.<Object>}` - route parameters extracted from the current\n * `$location.path()` by applying the current route\n *\n * One of `template` or `templateUrl` is required.\n *\n * - `templateUrl` – `{(string|Function)=}` – path or function that returns a path to an html\n * template that should be used by {@link ngRoute.directive:ngView ngView}.\n *\n * If `templateUrl` is a function, it will be called with the following parameters:\n *\n * - `{Array.<Object>}` - route parameters extracted from the current\n * `$location.path()` by applying the current route\n *\n * One of `templateUrl` or `template` is required.\n *\n * - `resolve` - `{Object.<string, Function>=}` - An optional map of dependencies which should\n * be injected into the controller. If any of these dependencies are promises, the router\n * will wait for them all to be resolved or one to be rejected before the controller is\n * instantiated.\n * If all the promises are resolved successfully, the values of the resolved promises are\n * injected and {@link ngRoute.$route#$routeChangeSuccess $routeChangeSuccess} event is\n * fired. If any of the promises are rejected the\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event is fired.\n * For easier access to the resolved dependencies from the template, the `resolve` map will\n * be available on the scope of the route, under `$resolve` (by default) or a custom name\n * specified by the `resolveAs` property (see below). This can be particularly useful, when\n * working with {@link angular.Module#component components} as route templates.<br />\n * <div class=\"alert alert-warning\">\n * **Note:** If your scope already contains a property with this name, it will be hidden\n * or overwritten. Make sure, you specify an appropriate name for this property, that\n * does not collide with other properties on the scope.\n * </div>\n * The map object is:\n *\n * - `key` – `{string}`: a name of a dependency to be injected into the controller.\n * - `factory` - `{string|Function}`: If `string` then it is an alias for a service.\n * Otherwise if function, then it is {@link auto.$injector#invoke injected}\n * and the return value is treated as the dependency. If the result is a promise, it is\n * resolved before its value is injected into the controller. Be aware that\n * `ngRoute.$routeParams` will still refer to the previous route within these resolve\n * functions. Use `$route.current.params` to access the new route parameters, instead.\n *\n * - `resolveAs` - `{string=}` - The name under which the `resolve` map will be available on\n * the scope of the route. If omitted, defaults to `$resolve`.\n *\n * - `redirectTo` – `{(string|Function)=}` – value to update\n * {@link ng.$location $location} path with and trigger route redirection.\n *\n * If `redirectTo` is a function, it will be called with the following parameters:\n *\n * - `{Object.<string>}` - route parameters extracted from the current\n * `$location.path()` by applying the current route templateUrl.\n * - `{string}` - current `$location.path()`\n * - `{Object}` - current `$location.search()`\n *\n * The custom `redirectTo` function is expected to return a string which will be used\n * to update `$location.url()`. If the function throws an error, no further processing will\n * take place and the {@link ngRoute.$route#$routeChangeError $routeChangeError} event will\n * be fired.\n *\n * Routes that specify `redirectTo` will not have their controllers, template functions\n * or resolves called, the `$location` will be changed to the redirect url and route\n * processing will stop. The exception to this is if the `redirectTo` is a function that\n * returns `undefined`. In this case the route transition occurs as though there was no\n * redirection.\n *\n * - `resolveRedirectTo` – `{Function=}` – a function that will (eventually) return the value\n * to update {@link ng.$location $location} URL with and trigger route redirection. In\n * contrast to `redirectTo`, dependencies can be injected into `resolveRedirectTo` and the\n * return value can be either a string or a promise that will be resolved to a string.\n *\n * Similar to `redirectTo`, if the return value is `undefined` (or a promise that gets\n * resolved to `undefined`), no redirection takes place and the route transition occurs as\n * though there was no redirection.\n *\n * If the function throws an error or the returned promise gets rejected, no further\n * processing will take place and the\n * {@link ngRoute.$route#$routeChangeError $routeChangeError} event will be fired.\n *\n * `redirectTo` takes precedence over `resolveRedirectTo`, so specifying both on the same\n * route definition, will cause the latter to be ignored.\n *\n * - `[reloadOnUrl=true]` - `{boolean=}` - reload route when any part of the URL changes\n * (including the path) even if the new URL maps to the same route.\n *\n * If the option is set to `false` and the URL in the browser changes, but the new URL maps\n * to the same route, then a `$routeUpdate` event is broadcasted on the root scope (without\n * reloading the route).\n *\n * - `[reloadOnSearch=true]` - `{boolean=}` - reload route when only `$location.search()`\n * or `$location.hash()` changes.\n *\n * If the option is set to `false` and the URL in the browser changes, then a `$routeUpdate`\n * event is broadcasted on the root scope (without reloading the route).\n *\n * <div class=\"alert alert-warning\">\n * **Note:** This option has no effect if `reloadOnUrl` is set to `false`.\n * </div>\n *\n * - `[caseInsensitiveMatch=false]` - `{boolean=}` - match routes without being case sensitive\n *\n * If the option is set to `true`, then the particular route can be matched without being\n * case sensitive\n *\n * @returns {Object} self\n *\n * @description\n * Adds a new route definition to the `$route` service.\n */\n this.when = function(path, route) {\n //copy original route object to preserve params inherited from proto chain\n var routeCopy = shallowCopy(route);\n if (angular.isUndefined(routeCopy.reloadOnUrl)) {\n routeCopy.reloadOnUrl = true;\n }\n if (angular.isUndefined(routeCopy.reloadOnSearch)) {\n routeCopy.reloadOnSearch = true;\n }\n if (angular.isUndefined(routeCopy.caseInsensitiveMatch)) {\n routeCopy.caseInsensitiveMatch = this.caseInsensitiveMatch;\n }\n routes[path] = angular.extend(\n routeCopy,\n {originalPath: path},\n path && routeToRegExp(path, routeCopy)\n );\n\n // create redirection for trailing slashes\n if (path) {\n var redirectPath = (path[path.length - 1] === '/')\n ? path.substr(0, path.length - 1)\n : path + '/';\n\n routes[redirectPath] = angular.extend(\n {originalPath: path, redirectTo: path},\n routeToRegExp(redirectPath, routeCopy)\n );\n }\n\n return this;\n };\n\n /**\n * @ngdoc property\n * @name $routeProvider#caseInsensitiveMatch\n * @description\n *\n * A boolean property indicating if routes defined\n * using this provider should be matched using a case insensitive\n * algorithm. Defaults to `false`.\n */\n this.caseInsensitiveMatch = false;\n\n /**\n * @ngdoc method\n * @name $routeProvider#otherwise\n *\n * @description\n * Sets route definition that will be used on route change when no other route definition\n * is matched.\n *\n * @param {Object|string} params Mapping information to be assigned to `$route.current`.\n * If called with a string, the value maps to `redirectTo`.\n * @returns {Object} self\n */\n this.otherwise = function(params) {\n if (typeof params === 'string') {\n params = {redirectTo: params};\n }\n this.when(null, params);\n return this;\n };\n\n /**\n * @ngdoc method\n * @name $routeProvider#eagerInstantiationEnabled\n * @kind function\n *\n * @description\n * Call this method as a setter to enable/disable eager instantiation of the\n * {@link ngRoute.$route $route} service upon application bootstrap. You can also call it as a\n * getter (i.e. without any arguments) to get the current value of the\n * `eagerInstantiationEnabled` flag.\n *\n * Instantiating `$route` early is necessary for capturing the initial\n * {@link ng.$location#$locationChangeStart $locationChangeStart} event and navigating to the\n * appropriate route. Usually, `$route` is instantiated in time by the\n * {@link ngRoute.ngView ngView} directive. Yet, in cases where `ngView` is included in an\n * asynchronously loaded template (e.g. in another directive's template), the directive factory\n * might not be called soon enough for `$route` to be instantiated _before_ the initial\n * `$locationChangeSuccess` event is fired. Eager instantiation ensures that `$route` is always\n * instantiated in time, regardless of when `ngView` will be loaded.\n *\n * The default value is true.\n *\n * **Note**:<br />\n * You may want to disable the default behavior when unit-testing modules that depend on\n * `ngRoute`, in order to avoid an unexpected request for the default route's template.\n *\n * @param {boolean=} enabled - If provided, update the internal `eagerInstantiationEnabled` flag.\n *\n * @returns {*} The current value of the `eagerInstantiationEnabled` flag if used as a getter or\n * itself (for chaining) if used as a setter.\n */\n isEagerInstantiationEnabled = true;\n this.eagerInstantiationEnabled = function eagerInstantiationEnabled(enabled) {\n if (isDefined(enabled)) {\n isEagerInstantiationEnabled = enabled;\n return this;\n }\n\n return isEagerInstantiationEnabled;\n };\n\n\n this.$get = ['$rootScope',\n '$location',\n '$routeParams',\n '$q',\n '$injector',\n '$templateRequest',\n '$sce',\n '$browser',\n function($rootScope, $location, $routeParams, $q, $injector, $templateRequest, $sce, $browser) {\n\n /**\n * @ngdoc service\n * @name $route\n * @requires $location\n * @requires $routeParams\n *\n * @property {Object} current Reference to the current route definition.\n * The route definition contains:\n *\n * - `controller`: The controller constructor as defined in the route definition.\n * - `locals`: A map of locals which is used by {@link ng.$controller $controller} service for\n * controller instantiation. The `locals` contain\n * the resolved values of the `resolve` map. Additionally the `locals` also contain:\n *\n * - `$scope` - The current route scope.\n * - `$template` - The current route template HTML.\n *\n * The `locals` will be assigned to the route scope's `$resolve` property. You can override\n * the property name, using `resolveAs` in the route definition. See\n * {@link ngRoute.$routeProvider $routeProvider} for more info.\n *\n * @property {Object} routes Object with all route configuration Objects as its properties.\n *\n * @description\n * `$route` is used for deep-linking URLs to controllers and views (HTML partials).\n * It watches `$location.url()` and tries to map the path to an existing route definition.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * You can define routes through {@link ngRoute.$routeProvider $routeProvider}'s API.\n *\n * The `$route` service is typically used in conjunction with the\n * {@link ngRoute.directive:ngView `ngView`} directive and the\n * {@link ngRoute.$routeParams `$routeParams`} service.\n *\n * @example\n * This example shows how changing the URL hash causes the `$route` to match a route against the\n * URL, and the `ngView` pulls in the partial.\n *\n * <example name=\"$route-service\" module=\"ngRouteExample\"\n * deps=\"angular-route.js\" fixBase=\"true\">\n * <file name=\"index.html\">\n * <div ng-controller=\"MainController\">\n * Choose:\n * <a href=\"Book/Moby\">Moby</a> |\n * <a href=\"Book/Moby/ch/1\">Moby: Ch1</a> |\n * <a href=\"Book/Gatsby\">Gatsby</a> |\n * <a href=\"Book/Gatsby/ch/4?key=value\">Gatsby: Ch4</a> |\n * <a href=\"Book/Scarlet\">Scarlet Letter</a><br/>\n *\n * <div ng-view></div>\n *\n * <hr />\n *\n * <pre>$location.path() = {{$location.path()}}</pre>\n * <pre>$route.current.templateUrl = {{$route.current.templateUrl}}</pre>\n * <pre>$route.current.params = {{$route.current.params}}</pre>\n * <pre>$route.current.scope.name = {{$route.current.scope.name}}</pre>\n * <pre>$routeParams = {{$routeParams}}</pre>\n * </div>\n * </file>\n *\n * <file name=\"book.html\">\n * controller: {{name}}<br />\n * Book Id: {{params.bookId}}<br />\n * </file>\n *\n * <file name=\"chapter.html\">\n * controller: {{name}}<br />\n * Book Id: {{params.bookId}}<br />\n * Chapter Id: {{params.chapterId}}\n * </file>\n *\n * <file name=\"script.js\">\n * angular.module('ngRouteExample', ['ngRoute'])\n *\n * .controller('MainController', function($scope, $route, $routeParams, $location) {\n * $scope.$route = $route;\n * $scope.$location = $location;\n * $scope.$routeParams = $routeParams;\n * })\n *\n * .controller('BookController', function($scope, $routeParams) {\n * $scope.name = 'BookController';\n * $scope.params = $routeParams;\n * })\n *\n * .controller('ChapterController', function($scope, $routeParams) {\n * $scope.name = 'ChapterController';\n * $scope.params = $routeParams;\n * })\n *\n * .config(function($routeProvider, $locationProvider) {\n * $routeProvider\n * .when('/Book/:bookId', {\n * templateUrl: 'book.html',\n * controller: 'BookController',\n * resolve: {\n * // I will cause a 1 second delay\n * delay: function($q, $timeout) {\n * var delay = $q.defer();\n * $timeout(delay.resolve, 1000);\n * return delay.promise;\n * }\n * }\n * })\n * .when('/Book/:bookId/ch/:chapterId', {\n * templateUrl: 'chapter.html',\n * controller: 'ChapterController'\n * });\n *\n * // configure html5 to get links working on jsfiddle\n * $locationProvider.html5Mode(true);\n * });\n *\n * </file>\n *\n * <file name=\"protractor.js\" type=\"protractor\">\n * it('should load and compile correct template', function() {\n * element(by.linkText('Moby: Ch1')).click();\n * var content = element(by.css('[ng-view]')).getText();\n * expect(content).toMatch(/controller: ChapterController/);\n * expect(content).toMatch(/Book Id: Moby/);\n * expect(content).toMatch(/Chapter Id: 1/);\n *\n * element(by.partialLinkText('Scarlet')).click();\n *\n * content = element(by.css('[ng-view]')).getText();\n * expect(content).toMatch(/controller: BookController/);\n * expect(content).toMatch(/Book Id: Scarlet/);\n * });\n * </file>\n * </example>\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeStart\n * @eventType broadcast on root scope\n * @description\n * Broadcasted before a route change. At this point the route services starts\n * resolving all of the dependencies needed for the route change to occur.\n * Typically this involves fetching the view template as well as any dependencies\n * defined in `resolve` route property. Once all of the dependencies are resolved\n * `$routeChangeSuccess` is fired.\n *\n * The route change (and the `$location` change that triggered it) can be prevented\n * by calling `preventDefault` method of the event. See {@link ng.$rootScope.Scope#$on}\n * for more details about event object.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {Route} next Future route information.\n * @param {Route} current Current route information.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeSuccess\n * @eventType broadcast on root scope\n * @description\n * Broadcasted after a route change has happened successfully.\n * The `resolve` dependencies are now available in the `current.locals` property.\n *\n * {@link ngRoute.directive:ngView ngView} listens for the directive\n * to instantiate the controller and render the view.\n *\n * @param {Object} angularEvent Synthetic event object.\n * @param {Route} current Current route information.\n * @param {Route|Undefined} previous Previous route information, or undefined if current is\n * first route entered.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeChangeError\n * @eventType broadcast on root scope\n * @description\n * Broadcasted if a redirection function fails or any redirection or resolve promises are\n * rejected.\n *\n * @param {Object} angularEvent Synthetic event object\n * @param {Route} current Current route information.\n * @param {Route} previous Previous route information.\n * @param {Route} rejection The thrown error or the rejection reason of the promise. Usually\n * the rejection reason is the error that caused the promise to get rejected.\n */\n\n /**\n * @ngdoc event\n * @name $route#$routeUpdate\n * @eventType broadcast on root scope\n * @description\n * Broadcasted if the same instance of a route (including template, controller instance,\n * resolved dependencies, etc.) is being reused. This can happen if either `reloadOnSearch` or\n * `reloadOnUrl` has been set to `false`.\n *\n * @param {Object} angularEvent Synthetic event object\n * @param {Route} current Current/previous route information.\n */\n\n var forceReload = false,\n preparedRoute,\n preparedRouteIsUpdateOnly,\n $route = {\n routes: routes,\n\n /**\n * @ngdoc method\n * @name $route#reload\n *\n * @description\n * Causes `$route` service to reload the current route even if\n * {@link ng.$location $location} hasn't changed.\n *\n * As a result of that, {@link ngRoute.directive:ngView ngView}\n * creates new scope and reinstantiates the controller.\n */\n reload: function() {\n forceReload = true;\n\n var fakeLocationEvent = {\n defaultPrevented: false,\n preventDefault: function fakePreventDefault() {\n this.defaultPrevented = true;\n forceReload = false;\n }\n };\n\n $rootScope.$evalAsync(function() {\n prepareRoute(fakeLocationEvent);\n if (!fakeLocationEvent.defaultPrevented) commitRoute();\n });\n },\n\n /**\n * @ngdoc method\n * @name $route#updateParams\n *\n * @description\n * Causes `$route` service to update the current URL, replacing\n * current route parameters with those specified in `newParams`.\n * Provided property names that match the route's path segment\n * definitions will be interpolated into the location's path, while\n * remaining properties will be treated as query params.\n *\n * @param {!Object<string, string>} newParams mapping of URL parameter names to values\n */\n updateParams: function(newParams) {\n if (this.current && this.current.$$route) {\n newParams = angular.extend({}, this.current.params, newParams);\n $location.path(interpolate(this.current.$$route.originalPath, newParams));\n // interpolate modifies newParams, only query params are left\n $location.search(newParams);\n } else {\n throw $routeMinErr('norout', 'Tried updating route with no current route');\n }\n }\n };\n\n $rootScope.$on('$locationChangeStart', prepareRoute);\n $rootScope.$on('$locationChangeSuccess', commitRoute);\n\n return $route;\n\n /////////////////////////////////////////////////////\n\n /**\n * @param on {string} current url\n * @param route {Object} route regexp to match the url against\n * @return {?Object}\n *\n * @description\n * Check if the route matches the current url.\n *\n * Inspired by match in\n * visionmedia/express/lib/router/router.js.\n */\n function switchRouteMatcher(on, route) {\n var keys = route.keys,\n params = {};\n\n if (!route.regexp) return null;\n\n var m = route.regexp.exec(on);\n if (!m) return null;\n\n for (var i = 1, len = m.length; i < len; ++i) {\n var key = keys[i - 1];\n\n var val = m[i];\n\n if (key && val) {\n params[key.name] = val;\n }\n }\n return params;\n }\n\n function prepareRoute($locationEvent) {\n var lastRoute = $route.current;\n\n preparedRoute = parseRoute();\n preparedRouteIsUpdateOnly = isNavigationUpdateOnly(preparedRoute, lastRoute);\n\n if (!preparedRouteIsUpdateOnly && (lastRoute || preparedRoute)) {\n if ($rootScope.$broadcast('$routeChangeStart', preparedRoute, lastRoute).defaultPrevented) {\n if ($locationEvent) {\n $locationEvent.preventDefault();\n }\n }\n }\n }\n\n function commitRoute() {\n var lastRoute = $route.current;\n var nextRoute = preparedRoute;\n\n if (preparedRouteIsUpdateOnly) {\n lastRoute.params = nextRoute.params;\n angular.copy(lastRoute.params, $routeParams);\n $rootScope.$broadcast('$routeUpdate', lastRoute);\n } else if (nextRoute || lastRoute) {\n forceReload = false;\n $route.current = nextRoute;\n\n var nextRoutePromise = $q.resolve(nextRoute);\n\n $browser.$$incOutstandingRequestCount('$route');\n\n nextRoutePromise.\n then(getRedirectionData).\n then(handlePossibleRedirection).\n then(function(keepProcessingRoute) {\n return keepProcessingRoute && nextRoutePromise.\n then(resolveLocals).\n then(function(locals) {\n // after route change\n if (nextRoute === $route.current) {\n if (nextRoute) {\n nextRoute.locals = locals;\n angular.copy(nextRoute.params, $routeParams);\n }\n $rootScope.$broadcast('$routeChangeSuccess', nextRoute, lastRoute);\n }\n });\n }).catch(function(error) {\n if (nextRoute === $route.current) {\n $rootScope.$broadcast('$routeChangeError', nextRoute, lastRoute, error);\n }\n }).finally(function() {\n // Because `commitRoute()` is called from a `$rootScope.$evalAsync` block (see\n // `$locationWatch`), this `$$completeOutstandingRequest()` call will not cause\n // `outstandingRequestCount` to hit zero. This is important in case we are redirecting\n // to a new route which also requires some asynchronous work.\n\n $browser.$$completeOutstandingRequest(noop, '$route');\n });\n }\n }\n\n function getRedirectionData(route) {\n var data = {\n route: route,\n hasRedirection: false\n };\n\n if (route) {\n if (route.redirectTo) {\n if (angular.isString(route.redirectTo)) {\n data.path = interpolate(route.redirectTo, route.params);\n data.search = route.params;\n data.hasRedirection = true;\n } else {\n var oldPath = $location.path();\n var oldSearch = $location.search();\n var newUrl = route.redirectTo(route.pathParams, oldPath, oldSearch);\n\n if (angular.isDefined(newUrl)) {\n data.url = newUrl;\n data.hasRedirection = true;\n }\n }\n } else if (route.resolveRedirectTo) {\n return $q.\n resolve($injector.invoke(route.resolveRedirectTo)).\n then(function(newUrl) {\n if (angular.isDefined(newUrl)) {\n data.url = newUrl;\n data.hasRedirection = true;\n }\n\n return data;\n });\n }\n }\n\n return data;\n }\n\n function handlePossibleRedirection(data) {\n var keepProcessingRoute = true;\n\n if (data.route !== $route.current) {\n keepProcessingRoute = false;\n } else if (data.hasRedirection) {\n var oldUrl = $location.url();\n var newUrl = data.url;\n\n if (newUrl) {\n $location.\n url(newUrl).\n replace();\n } else {\n newUrl = $location.\n path(data.path).\n search(data.search).\n replace().\n url();\n }\n\n if (newUrl !== oldUrl) {\n // Exit out and don't process current next value,\n // wait for next location change from redirect\n keepProcessingRoute = false;\n }\n }\n\n return keepProcessingRoute;\n }\n\n function resolveLocals(route) {\n if (route) {\n var locals = angular.extend({}, route.resolve);\n angular.forEach(locals, function(value, key) {\n locals[key] = angular.isString(value) ?\n $injector.get(value) :\n $injector.invoke(value, null, null, key);\n });\n var template = getTemplateFor(route);\n if (angular.isDefined(template)) {\n locals['$template'] = template;\n }\n return $q.all(locals);\n }\n }\n\n function getTemplateFor(route) {\n var template, templateUrl;\n if (angular.isDefined(template = route.template)) {\n if (angular.isFunction(template)) {\n template = template(route.params);\n }\n } else if (angular.isDefined(templateUrl = route.templateUrl)) {\n if (angular.isFunction(templateUrl)) {\n templateUrl = templateUrl(route.params);\n }\n if (angular.isDefined(templateUrl)) {\n route.loadedTemplateUrl = $sce.valueOf(templateUrl);\n template = $templateRequest(templateUrl);\n }\n }\n return template;\n }\n\n /**\n * @returns {Object} the current active route, by matching it against the URL\n */\n function parseRoute() {\n // Match a route\n var params, match;\n angular.forEach(routes, function(route, path) {\n if (!match && (params = switchRouteMatcher($location.path(), route))) {\n match = inherit(route, {\n params: angular.extend({}, $location.search(), params),\n pathParams: params});\n match.$$route = route;\n }\n });\n // No route matched; fallback to \"otherwise\" route\n return match || routes[null] && inherit(routes[null], {params: {}, pathParams:{}});\n }\n\n /**\n * @param {Object} newRoute - The new route configuration (as returned by `parseRoute()`).\n * @param {Object} oldRoute - The previous route configuration (as returned by `parseRoute()`).\n * @returns {boolean} Whether this is an \"update-only\" navigation, i.e. the URL maps to the same\n * route and it can be reused (based on the config and the type of change).\n */\n function isNavigationUpdateOnly(newRoute, oldRoute) {\n // IF this is not a forced reload\n return !forceReload\n // AND both `newRoute`/`oldRoute` are defined\n && newRoute && oldRoute\n // AND they map to the same Route Definition Object\n && (newRoute.$$route === oldRoute.$$route)\n // AND `reloadOnUrl` is disabled\n && (!newRoute.reloadOnUrl\n // OR `reloadOnSearch` is disabled\n || (!newRoute.reloadOnSearch\n // AND both routes have the same path params\n && angular.equals(newRoute.pathParams, oldRoute.pathParams)\n )\n );\n }\n\n /**\n * @returns {string} interpolation of the redirect path with the parameters\n */\n function interpolate(string, params) {\n var result = [];\n angular.forEach((string || '').split(':'), function(segment, i) {\n if (i === 0) {\n result.push(segment);\n } else {\n var segmentMatch = segment.match(/(\\w+)(?:[?*])?(.*)/);\n var key = segmentMatch[1];\n result.push(params[key]);\n result.push(segmentMatch[2] || '');\n delete params[key];\n }\n });\n return result.join('');\n }\n }];\n}\n\ninstantiateRoute.$inject = ['$injector'];\nfunction instantiateRoute($injector) {\n if (isEagerInstantiationEnabled) {\n // Instantiate `$route`\n $injector.get('$route');\n }\n}\n\nngRouteModule.provider('$routeParams', $RouteParamsProvider);\n\n\n/**\n * @ngdoc service\n * @name $routeParams\n * @requires $route\n * @this\n *\n * @description\n * The `$routeParams` service allows you to retrieve the current set of route parameters.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * The route parameters are a combination of {@link ng.$location `$location`}'s\n * {@link ng.$location#search `search()`} and {@link ng.$location#path `path()`}.\n * The `path` parameters are extracted when the {@link ngRoute.$route `$route`} path is matched.\n *\n * In case of parameter name collision, `path` params take precedence over `search` params.\n *\n * The service guarantees that the identity of the `$routeParams` object will remain unchanged\n * (but its properties will likely change) even when a route change occurs.\n *\n * Note that the `$routeParams` are only updated *after* a route change completes successfully.\n * This means that you cannot rely on `$routeParams` being correct in route resolve functions.\n * Instead you can use `$route.current.params` to access the new route's parameters.\n *\n * @example\n * ```js\n * // Given:\n * // URL: http://server.com/index.html#/Chapter/1/Section/2?search=moby\n * // Route: /Chapter/:chapterId/Section/:sectionId\n * //\n * // Then\n * $routeParams ==> {chapterId:'1', sectionId:'2', search:'moby'}\n * ```\n */\nfunction $RouteParamsProvider() {\n this.$get = function() { return {}; };\n}\n\nngRouteModule.directive('ngView', ngViewFactory);\nngRouteModule.directive('ngView', ngViewFillContentFactory);\n\n\n/**\n * @ngdoc directive\n * @name ngView\n * @restrict ECA\n *\n * @description\n * `ngView` is a directive that complements the {@link ngRoute.$route $route} service by\n * including the rendered template of the current route into the main layout (`index.html`) file.\n * Every time the current route changes, the included view changes with it according to the\n * configuration of the `$route` service.\n *\n * Requires the {@link ngRoute `ngRoute`} module to be installed.\n *\n * @animations\n * | Animation | Occurs |\n * |----------------------------------|-------------------------------------|\n * | {@link ng.$animate#enter enter} | when the new element is inserted to the DOM |\n * | {@link ng.$animate#leave leave} | when the old element is removed from to the DOM |\n *\n * The enter and leave animation occur concurrently.\n *\n * @scope\n * @priority 400\n * @param {string=} onload Expression to evaluate whenever the view updates.\n *\n * @param {string=} autoscroll Whether `ngView` should call {@link ng.$anchorScroll\n * $anchorScroll} to scroll the viewport after the view is updated.\n *\n * - If the attribute is not set, disable scrolling.\n * - If the attribute is set without value, enable scrolling.\n * - Otherwise enable scrolling only if the `autoscroll` attribute value evaluated\n * as an expression yields a truthy value.\n * @example\n <example name=\"ngView-directive\" module=\"ngViewExample\"\n deps=\"angular-route.js;angular-animate.js\"\n animations=\"true\" fixBase=\"true\">\n <file name=\"index.html\">\n <div ng-controller=\"MainCtrl as main\">\n Choose:\n <a href=\"Book/Moby\">Moby</a> |\n <a href=\"Book/Moby/ch/1\">Moby: Ch1</a> |\n <a href=\"Book/Gatsby\">Gatsby</a> |\n <a href=\"Book/Gatsby/ch/4?key=value\">Gatsby: Ch4</a> |\n <a href=\"Book/Scarlet\">Scarlet Letter</a><br/>\n\n <div class=\"view-animate-container\">\n <div ng-view class=\"view-animate\"></div>\n </div>\n <hr />\n\n <pre>$location.path() = {{main.$location.path()}}</pre>\n <pre>$route.current.templateUrl = {{main.$route.current.templateUrl}}</pre>\n <pre>$route.current.params = {{main.$route.current.params}}</pre>\n <pre>$routeParams = {{main.$routeParams}}</pre>\n </div>\n </file>\n\n <file name=\"book.html\">\n <div>\n controller: {{book.name}}<br />\n Book Id: {{book.params.bookId}}<br />\n </div>\n </file>\n\n <file name=\"chapter.html\">\n <div>\n controller: {{chapter.name}}<br />\n Book Id: {{chapter.params.bookId}}<br />\n Chapter Id: {{chapter.params.chapterId}}\n </div>\n </file>\n\n <file name=\"animations.css\">\n .view-animate-container {\n position:relative;\n height:100px!important;\n background:white;\n border:1px solid black;\n height:40px;\n overflow:hidden;\n }\n\n .view-animate {\n padding:10px;\n }\n\n .view-animate.ng-enter, .view-animate.ng-leave {\n transition:all cubic-bezier(0.250, 0.460, 0.450, 0.940) 1.5s;\n\n display:block;\n width:100%;\n border-left:1px solid black;\n\n position:absolute;\n top:0;\n left:0;\n right:0;\n bottom:0;\n padding:10px;\n }\n\n .view-animate.ng-enter {\n left:100%;\n }\n .view-animate.ng-enter.ng-enter-active {\n left:0;\n }\n .view-animate.ng-leave.ng-leave-active {\n left:-100%;\n }\n </file>\n\n <file name=\"script.js\">\n angular.module('ngViewExample', ['ngRoute', 'ngAnimate'])\n .config(['$routeProvider', '$locationProvider',\n function($routeProvider, $locationProvider) {\n $routeProvider\n .when('/Book/:bookId', {\n templateUrl: 'book.html',\n controller: 'BookCtrl',\n controllerAs: 'book'\n })\n .when('/Book/:bookId/ch/:chapterId', {\n templateUrl: 'chapter.html',\n controller: 'ChapterCtrl',\n controllerAs: 'chapter'\n });\n\n $locationProvider.html5Mode(true);\n }])\n .controller('MainCtrl', ['$route', '$routeParams', '$location',\n function MainCtrl($route, $routeParams, $location) {\n this.$route = $route;\n this.$location = $location;\n this.$routeParams = $routeParams;\n }])\n .controller('BookCtrl', ['$routeParams', function BookCtrl($routeParams) {\n this.name = 'BookCtrl';\n this.params = $routeParams;\n }])\n .controller('ChapterCtrl', ['$routeParams', function ChapterCtrl($routeParams) {\n this.name = 'ChapterCtrl';\n this.params = $routeParams;\n }]);\n\n </file>\n\n <file name=\"protractor.js\" type=\"protractor\">\n it('should load and compile correct template', function() {\n element(by.linkText('Moby: Ch1')).click();\n var content = element(by.css('[ng-view]')).getText();\n expect(content).toMatch(/controller: ChapterCtrl/);\n expect(content).toMatch(/Book Id: Moby/);\n expect(content).toMatch(/Chapter Id: 1/);\n\n element(by.partialLinkText('Scarlet')).click();\n\n content = element(by.css('[ng-view]')).getText();\n expect(content).toMatch(/controller: BookCtrl/);\n expect(content).toMatch(/Book Id: Scarlet/);\n });\n </file>\n </example>\n */\n\n\n/**\n * @ngdoc event\n * @name ngView#$viewContentLoaded\n * @eventType emit on the current ngView scope\n * @description\n * Emitted every time the ngView content is reloaded.\n */\nngViewFactory.$inject = ['$route', '$anchorScroll', '$animate'];\nfunction ngViewFactory($route, $anchorScroll, $animate) {\n return {\n restrict: 'ECA',\n terminal: true,\n priority: 400,\n transclude: 'element',\n link: function(scope, $element, attr, ctrl, $transclude) {\n var currentScope,\n currentElement,\n previousLeaveAnimation,\n autoScrollExp = attr.autoscroll,\n onloadExp = attr.onload || '';\n\n scope.$on('$routeChangeSuccess', update);\n update();\n\n function cleanupLastView() {\n if (previousLeaveAnimation) {\n $animate.cancel(previousLeaveAnimation);\n previousLeaveAnimation = null;\n }\n\n if (currentScope) {\n currentScope.$destroy();\n currentScope = null;\n }\n if (currentElement) {\n previousLeaveAnimation = $animate.leave(currentElement);\n previousLeaveAnimation.done(function(response) {\n if (response !== false) previousLeaveAnimation = null;\n });\n currentElement = null;\n }\n }\n\n function update() {\n var locals = $route.current && $route.current.locals,\n template = locals && locals.$template;\n\n if (angular.isDefined(template)) {\n var newScope = scope.$new();\n var current = $route.current;\n\n // Note: This will also link all children of ng-view that were contained in the original\n // html. If that content contains controllers, ... they could pollute/change the scope.\n // However, using ng-view on an element with additional content does not make sense...\n // Note: We can't remove them in the cloneAttchFn of $transclude as that\n // function is called before linking the content, which would apply child\n // directives to non existing elements.\n var clone = $transclude(newScope, function(clone) {\n $animate.enter(clone, null, currentElement || $element).done(function onNgViewEnter(response) {\n if (response !== false && angular.isDefined(autoScrollExp)\n && (!autoScrollExp || scope.$eval(autoScrollExp))) {\n $anchorScroll();\n }\n });\n cleanupLastView();\n });\n\n currentElement = clone;\n currentScope = current.scope = newScope;\n currentScope.$emit('$viewContentLoaded');\n currentScope.$eval(onloadExp);\n } else {\n cleanupLastView();\n }\n }\n }\n };\n}\n\n// This directive is called during the $transclude call of the first `ngView` directive.\n// It will replace and compile the content of the element with the loaded template.\n// We need this directive so that the element content is already filled when\n// the link function of another directive on the same element as ngView\n// is called.\nngViewFillContentFactory.$inject = ['$compile', '$controller', '$route'];\nfunction ngViewFillContentFactory($compile, $controller, $route) {\n return {\n restrict: 'ECA',\n priority: -400,\n link: function(scope, $element) {\n var current = $route.current,\n locals = current.locals;\n\n $element.html(locals.$template);\n\n var link = $compile($element.contents());\n\n if (current.controller) {\n locals.$scope = scope;\n var controller = $controller(current.controller, locals);\n if (current.controllerAs) {\n scope[current.controllerAs] = controller;\n }\n $element.data('$ngControllerController', controller);\n $element.children().data('$ngControllerController', controller);\n }\n scope[current.resolveAs || '$resolve'] = locals;\n\n link(scope);\n }\n };\n}\n\n\n})(window, window.angular);\n","require('./angular-route');\nmodule.exports = 'ngRoute';\n","/**\n * @license AngularJS v1.8.3\n * (c) 2010-2020 Google LLC. http://angularjs.org\n * License: MIT\n */\n(function(window, angular) {'use strict';\n\n/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *\n * Any commits to this file should be reviewed with security in mind. *\n * Changes to this file can potentially create security vulnerabilities. *\n * An approval from 2 Core members with history of modifying *\n * this file is required. *\n * *\n * Does the change somehow allow for arbitrary javascript to be executed? *\n * Or allows for someone to change the prototype of built-in objects? *\n * Or gives undesired access to variables likes document or window? *\n * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */\n\nvar $sanitizeMinErr = angular.$$minErr('$sanitize');\nvar bind;\nvar extend;\nvar forEach;\nvar isArray;\nvar isDefined;\nvar lowercase;\nvar noop;\nvar nodeContains;\nvar htmlParser;\nvar htmlSanitizeWriter;\n\n/**\n * @ngdoc module\n * @name ngSanitize\n * @description\n *\n * The `ngSanitize` module provides functionality to sanitize HTML.\n *\n * See {@link ngSanitize.$sanitize `$sanitize`} for usage.\n */\n\n/**\n * @ngdoc service\n * @name $sanitize\n * @kind function\n *\n * @description\n * Sanitizes an html string by stripping all potentially dangerous tokens.\n *\n * The input is sanitized by parsing the HTML into tokens. All safe tokens (from a trusted URI list) are\n * then serialized back to a properly escaped HTML string. This means that no unsafe input can make\n * it into the returned string.\n *\n * The trusted URIs for URL sanitization of attribute values is configured using the functions\n * `aHrefSanitizationTrustedUrlList` and `imgSrcSanitizationTrustedUrlList` of {@link $compileProvider}.\n *\n * The input may also contain SVG markup if this is enabled via {@link $sanitizeProvider}.\n *\n * @param {string} html HTML input.\n * @returns {string} Sanitized HTML.\n *\n * @example\n <example module=\"sanitizeExample\" deps=\"angular-sanitize.js\" name=\"sanitize-service\">\n <file name=\"index.html\">\n <script>\n angular.module('sanitizeExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {\n $scope.snippet =\n '<p style=\"color:blue\">an html\\n' +\n '<em onmouseover=\"this.textContent=\\'PWN3D!\\'\">click here</em>\\n' +\n 'snippet</p>';\n $scope.deliberatelyTrustDangerousSnippet = function() {\n return $sce.trustAsHtml($scope.snippet);\n };\n }]);\n </script>\n <div ng-controller=\"ExampleController\">\n Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n <table>\n <tr>\n <td>Directive</td>\n <td>How</td>\n <td>Source</td>\n <td>Rendered</td>\n </tr>\n <tr id=\"bind-html-with-sanitize\">\n <td>ng-bind-html</td>\n <td>Automatically uses $sanitize</td>\n <td><pre><div ng-bind-html=\"snippet\"><br/></div></pre></td>\n <td><div ng-bind-html=\"snippet\"></div></td>\n </tr>\n <tr id=\"bind-html-with-trust\">\n <td>ng-bind-html</td>\n <td>Bypass $sanitize by explicitly trusting the dangerous value</td>\n <td>\n <pre><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\">\n</div></pre>\n </td>\n <td><div ng-bind-html=\"deliberatelyTrustDangerousSnippet()\"></div></td>\n </tr>\n <tr id=\"bind-default\">\n <td>ng-bind</td>\n <td>Automatically escapes</td>\n <td><pre><div ng-bind=\"snippet\"><br/></div></pre></td>\n <td><div ng-bind=\"snippet\"></div></td>\n </tr>\n </table>\n </div>\n </file>\n <file name=\"protractor.js\" type=\"protractor\">\n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('<p>an html\\n<em>click here</em>\\nsnippet</p>');\n });\n\n it('should inline raw snippet if bound to a trusted value', function() {\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should escape snippet without any filter', function() {\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).\n toBe(\"<p style=\\\"color:blue\\\">an html\\n\" +\n \"<em onmouseover=\\\"this.textContent='PWN3D!'\\\">click here</em>\\n\" +\n \"snippet</p>\");\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new <b onclick=\"alert(1)\">text</b>');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new <b>text</b>');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new <b onclick=\"alert(1)\">text</b>');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n </file>\n </example>\n */\n\n\n/**\n * @ngdoc provider\n * @name $sanitizeProvider\n * @this\n *\n * @description\n * Creates and configures {@link $sanitize} instance.\n */\nfunction $SanitizeProvider() {\n var hasBeenInstantiated = false;\n var svgEnabled = false;\n\n this.$get = ['$$sanitizeUri', function($$sanitizeUri) {\n hasBeenInstantiated = true;\n if (svgEnabled) {\n extend(validElements, svgElements);\n }\n return function(html) {\n var buf = [];\n htmlParser(html, htmlSanitizeWriter(buf, function(uri, isImage) {\n return !/^unsafe:/.test($$sanitizeUri(uri, isImage));\n }));\n return buf.join('');\n };\n }];\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#enableSvg\n * @kind function\n *\n * @description\n * Enables a subset of svg to be supported by the sanitizer.\n *\n * <div class=\"alert alert-warning\">\n * <p>By enabling this setting without taking other precautions, you might expose your\n * application to click-hijacking attacks. In these attacks, sanitized svg elements could be positioned\n * outside of the containing element and be rendered over other elements on the page (e.g. a login\n * link). Such behavior can then result in phishing incidents.</p>\n *\n * <p>To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:</p>\n *\n * <br>\n *\n * <pre><code>\n * .rootOfTheIncludedContent svg {\n * overflow: hidden !important;\n * }\n * </code></pre>\n * </div>\n *\n * @param {boolean=} flag Enable or disable SVG support in the sanitizer.\n * @returns {boolean|$sanitizeProvider} Returns the currently configured value if called\n * without an argument or self for chaining otherwise.\n */\n this.enableSvg = function(enableSvg) {\n if (isDefined(enableSvg)) {\n svgEnabled = enableSvg;\n return this;\n } else {\n return svgEnabled;\n }\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidElements\n * @kind function\n *\n * @description\n * Extends the built-in lists of valid HTML/SVG elements, i.e. elements that are considered safe\n * and are not stripped off during sanitization. You can extend the following lists of elements:\n *\n * - `htmlElements`: A list of elements (tag names) to extend the current list of safe HTML\n * elements. HTML elements considered safe will not be removed during sanitization. All other\n * elements will be stripped off.\n *\n * - `htmlVoidElements`: This is similar to `htmlElements`, but marks the elements as\n * \"void elements\" (similar to HTML\n * [void elements](https://rawgit.com/w3c/html/html5.1-2/single-page.html#void-elements)). These\n * elements have no end tag and cannot have content.\n *\n * - `svgElements`: This is similar to `htmlElements`, but for SVG elements. This list is only\n * taken into account if SVG is {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for\n * `$sanitize`.\n *\n * <div class=\"alert alert-info\">\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n * </div>\n *\n * <div class=\"alert alert-warning\">\n * Keep in mind that extending the built-in lists of elements may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the elements you add.\n * </div>\n *\n * @param {Array<String>|Object} elements - A list of valid HTML elements or an object with one or\n * more of the following properties:\n * - **htmlElements** - `{Array<String>}` - A list of elements to extend the current list of\n * HTML elements.\n * - **htmlVoidElements** - `{Array<String>}` - A list of elements to extend the current list of\n * void HTML elements; i.e. elements that do not have an end tag.\n * - **svgElements** - `{Array<String>}` - A list of elements to extend the current list of SVG\n * elements. The list of SVG elements is only taken into account if SVG is\n * {@link ngSanitize.$sanitizeProvider#enableSvg enabled} for `$sanitize`.\n *\n * Passing an array (`[...]`) is equivalent to passing `{htmlElements: [...]}`.\n *\n * @return {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidElements = function(elements) {\n if (!hasBeenInstantiated) {\n if (isArray(elements)) {\n elements = {htmlElements: elements};\n }\n\n addElementsTo(svgElements, elements.svgElements);\n addElementsTo(voidElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlVoidElements);\n addElementsTo(validElements, elements.htmlElements);\n }\n\n return this;\n };\n\n\n /**\n * @ngdoc method\n * @name $sanitizeProvider#addValidAttrs\n * @kind function\n *\n * @description\n * Extends the built-in list of valid attributes, i.e. attributes that are considered safe and are\n * not stripped off during sanitization.\n *\n * **Note**:\n * The new attributes will not be treated as URI attributes, which means their values will not be\n * sanitized as URIs using `$compileProvider`'s\n * {@link ng.$compileProvider#aHrefSanitizationTrustedUrlList aHrefSanitizationTrustedUrlList} and\n * {@link ng.$compileProvider#imgSrcSanitizationTrustedUrlList imgSrcSanitizationTrustedUrlList}.\n *\n * <div class=\"alert alert-info\">\n * This method must be called during the {@link angular.Module#config config} phase. Once the\n * `$sanitize` service has been instantiated, this method has no effect.\n * </div>\n *\n * <div class=\"alert alert-warning\">\n * Keep in mind that extending the built-in list of attributes may expose your app to XSS or\n * other vulnerabilities. Be very mindful of the attributes you add.\n * </div>\n *\n * @param {Array<String>} attrs - A list of valid attributes.\n *\n * @returns {$sanitizeProvider} Returns self for chaining.\n */\n this.addValidAttrs = function(attrs) {\n if (!hasBeenInstantiated) {\n extend(validAttrs, arrayToMap(attrs, true));\n }\n return this;\n };\n\n //////////////////////////////////////////////////////////////////////////////////////////////////\n // Private stuff\n //////////////////////////////////////////////////////////////////////////////////////////////////\n\n bind = angular.bind;\n extend = angular.extend;\n forEach = angular.forEach;\n isArray = angular.isArray;\n isDefined = angular.isDefined;\n lowercase = angular.$$lowercase;\n noop = angular.noop;\n\n htmlParser = htmlParserImpl;\n htmlSanitizeWriter = htmlSanitizeWriterImpl;\n\n nodeContains = window.Node.prototype.contains || /** @this */ function(arg) {\n // eslint-disable-next-line no-bitwise\n return !!(this.compareDocumentPosition(arg) & 16);\n };\n\n // Regular Expressions for parsing tags and attributes\n var SURROGATE_PAIR_REGEXP = /[\\uD800-\\uDBFF][\\uDC00-\\uDFFF]/g,\n // Match everything outside of normal chars and \" (quote character)\n NON_ALPHANUMERIC_REGEXP = /([^#-~ |!])/g;\n\n\n // Good source of info about elements and attributes\n // http://dev.w3.org/html5/spec/Overview.html#semantics\n // http://simon.html5.org/html-elements\n\n // Safe Void Elements - HTML5\n // http://dev.w3.org/html5/spec/Overview.html#void-elements\n var voidElements = stringToMap('area,br,col,hr,img,wbr');\n\n // Elements that you can, intentionally, leave open (and which close themselves)\n // http://dev.w3.org/html5/spec/Overview.html#optional-tags\n var optionalEndTagBlockElements = stringToMap('colgroup,dd,dt,li,p,tbody,td,tfoot,th,thead,tr'),\n optionalEndTagInlineElements = stringToMap('rp,rt'),\n optionalEndTagElements = extend({},\n optionalEndTagInlineElements,\n optionalEndTagBlockElements);\n\n // Safe Block Elements - HTML5\n var blockElements = extend({}, optionalEndTagBlockElements, stringToMap('address,article,' +\n 'aside,blockquote,caption,center,del,dir,div,dl,figure,figcaption,footer,h1,h2,h3,h4,h5,' +\n 'h6,header,hgroup,hr,ins,map,menu,nav,ol,pre,section,table,ul'));\n\n // Inline Elements - HTML5\n var inlineElements = extend({}, optionalEndTagInlineElements, stringToMap('a,abbr,acronym,b,' +\n 'bdi,bdo,big,br,cite,code,del,dfn,em,font,i,img,ins,kbd,label,map,mark,q,ruby,rp,rt,s,' +\n 'samp,small,span,strike,strong,sub,sup,time,tt,u,var'));\n\n // SVG Elements\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Elements\n // Note: the elements animate,animateColor,animateMotion,animateTransform,set are intentionally omitted.\n // They can potentially allow for arbitrary javascript to be executed. See #11290\n var svgElements = stringToMap('circle,defs,desc,ellipse,font-face,font-face-name,font-face-src,g,glyph,' +\n 'hkern,image,linearGradient,line,marker,metadata,missing-glyph,mpath,path,polygon,polyline,' +\n 'radialGradient,rect,stop,svg,switch,text,title,tspan');\n\n // Blocked Elements (will be stripped)\n var blockedElements = stringToMap('script,style');\n\n var validElements = extend({},\n voidElements,\n blockElements,\n inlineElements,\n optionalEndTagElements);\n\n //Attributes that have href and hence need to be sanitized\n var uriAttrs = stringToMap('background,cite,href,longdesc,src,xlink:href,xml:base');\n\n var htmlAttrs = stringToMap('abbr,align,alt,axis,bgcolor,border,cellpadding,cellspacing,class,clear,' +\n 'color,cols,colspan,compact,coords,dir,face,headers,height,hreflang,hspace,' +\n 'ismap,lang,language,nohref,nowrap,rel,rev,rows,rowspan,rules,' +\n 'scope,scrolling,shape,size,span,start,summary,tabindex,target,title,type,' +\n 'valign,value,vspace,width');\n\n // SVG attributes (without \"id\" and \"name\" attributes)\n // https://wiki.whatwg.org/wiki/Sanitization_rules#svg_Attributes\n var svgAttrs = stringToMap('accent-height,accumulate,additive,alphabetic,arabic-form,ascent,' +\n 'baseProfile,bbox,begin,by,calcMode,cap-height,class,color,color-rendering,content,' +\n 'cx,cy,d,dx,dy,descent,display,dur,end,fill,fill-rule,font-family,font-size,font-stretch,' +\n 'font-style,font-variant,font-weight,from,fx,fy,g1,g2,glyph-name,gradientUnits,hanging,' +\n 'height,horiz-adv-x,horiz-origin-x,ideographic,k,keyPoints,keySplines,keyTimes,lang,' +\n 'marker-end,marker-mid,marker-start,markerHeight,markerUnits,markerWidth,mathematical,' +\n 'max,min,offset,opacity,orient,origin,overline-position,overline-thickness,panose-1,' +\n 'path,pathLength,points,preserveAspectRatio,r,refX,refY,repeatCount,repeatDur,' +\n 'requiredExtensions,requiredFeatures,restart,rotate,rx,ry,slope,stemh,stemv,stop-color,' +\n 'stop-opacity,strikethrough-position,strikethrough-thickness,stroke,stroke-dasharray,' +\n 'stroke-dashoffset,stroke-linecap,stroke-linejoin,stroke-miterlimit,stroke-opacity,' +\n 'stroke-width,systemLanguage,target,text-anchor,to,transform,type,u1,u2,underline-position,' +\n 'underline-thickness,unicode,unicode-range,units-per-em,values,version,viewBox,visibility,' +\n 'width,widths,x,x-height,x1,x2,xlink:actuate,xlink:arcrole,xlink:role,xlink:show,xlink:title,' +\n 'xlink:type,xml:base,xml:lang,xml:space,xmlns,xmlns:xlink,y,y1,y2,zoomAndPan', true);\n\n var validAttrs = extend({},\n uriAttrs,\n svgAttrs,\n htmlAttrs);\n\n function stringToMap(str, lowercaseKeys) {\n return arrayToMap(str.split(','), lowercaseKeys);\n }\n\n function arrayToMap(items, lowercaseKeys) {\n var obj = {}, i;\n for (i = 0; i < items.length; i++) {\n obj[lowercaseKeys ? lowercase(items[i]) : items[i]] = true;\n }\n return obj;\n }\n\n function addElementsTo(elementsMap, newElements) {\n if (newElements && newElements.length) {\n extend(elementsMap, arrayToMap(newElements));\n }\n }\n\n /**\n * Create an inert document that contains the dirty HTML that needs sanitizing.\n * We use the DOMParser API by default and fall back to createHTMLDocument if DOMParser is not\n * available.\n */\n var getInertBodyElement /* function(html: string): HTMLBodyElement */ = (function(window, document) {\n if (isDOMParserAvailable()) {\n return getInertBodyElement_DOMParser;\n }\n\n if (!document || !document.implementation) {\n throw $sanitizeMinErr('noinert', 'Can\\'t create an inert html document');\n }\n var inertDocument = document.implementation.createHTMLDocument('inert');\n var inertBodyElement = (inertDocument.documentElement || inertDocument.getDocumentElement()).querySelector('body');\n return getInertBodyElement_InertDocument;\n\n function isDOMParserAvailable() {\n try {\n return !!getInertBodyElement_DOMParser('');\n } catch (e) {\n return false;\n }\n }\n\n function getInertBodyElement_DOMParser(html) {\n // We add this dummy element to ensure that the rest of the content is parsed as expected\n // e.g. leading whitespace is maintained and tags like `<meta>` do not get hoisted to the `<head>` tag.\n html = '<remove></remove>' + html;\n try {\n var body = new window.DOMParser().parseFromString(html, 'text/html').body;\n body.firstChild.remove();\n return body;\n } catch (e) {\n return undefined;\n }\n }\n\n function getInertBodyElement_InertDocument(html) {\n inertBodyElement.innerHTML = html;\n\n // Support: IE 9-11 only\n // strip custom-namespaced attributes on IE<=11\n if (document.documentMode) {\n stripCustomNsAttrs(inertBodyElement);\n }\n\n return inertBodyElement;\n }\n })(window, window.document);\n\n /**\n * @example\n * htmlParser(htmlString, {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * });\n *\n * @param {string} html string\n * @param {object} handler\n */\n function htmlParserImpl(html, handler) {\n if (html === null || html === undefined) {\n html = '';\n } else if (typeof html !== 'string') {\n html = '' + html;\n }\n\n var inertBodyElement = getInertBodyElement(html);\n if (!inertBodyElement) return '';\n\n //mXSS protection\n var mXSSAttempts = 5;\n do {\n if (mXSSAttempts === 0) {\n throw $sanitizeMinErr('uinput', 'Failed to sanitize html because the input is unstable');\n }\n mXSSAttempts--;\n\n // trigger mXSS if it is going to happen by reading and writing the innerHTML\n html = inertBodyElement.innerHTML;\n inertBodyElement = getInertBodyElement(html);\n } while (html !== inertBodyElement.innerHTML);\n\n var node = inertBodyElement.firstChild;\n while (node) {\n switch (node.nodeType) {\n case 1: // ELEMENT_NODE\n handler.start(node.nodeName.toLowerCase(), attrToMap(node.attributes));\n break;\n case 3: // TEXT NODE\n handler.chars(node.textContent);\n break;\n }\n\n var nextNode;\n if (!(nextNode = node.firstChild)) {\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n nextNode = getNonDescendant('nextSibling', node);\n if (!nextNode) {\n while (nextNode == null) {\n node = getNonDescendant('parentNode', node);\n if (node === inertBodyElement) break;\n nextNode = getNonDescendant('nextSibling', node);\n if (node.nodeType === 1) {\n handler.end(node.nodeName.toLowerCase());\n }\n }\n }\n }\n node = nextNode;\n }\n\n while ((node = inertBodyElement.firstChild)) {\n inertBodyElement.removeChild(node);\n }\n }\n\n function attrToMap(attrs) {\n var map = {};\n for (var i = 0, ii = attrs.length; i < ii; i++) {\n var attr = attrs[i];\n map[attr.name] = attr.value;\n }\n return map;\n }\n\n\n /**\n * Escapes all potentially dangerous characters, so that the\n * resulting string can be safely inserted into attribute or\n * element text.\n * @param value\n * @returns {string} escaped text\n */\n function encodeEntities(value) {\n return value.\n replace(/&/g, '&').\n replace(SURROGATE_PAIR_REGEXP, function(value) {\n var hi = value.charCodeAt(0);\n var low = value.charCodeAt(1);\n return '&#' + (((hi - 0xD800) * 0x400) + (low - 0xDC00) + 0x10000) + ';';\n }).\n replace(NON_ALPHANUMERIC_REGEXP, function(value) {\n return '&#' + value.charCodeAt(0) + ';';\n }).\n replace(/</g, '<').\n replace(/>/g, '>');\n }\n\n /**\n * create an HTML/XML writer which writes to buffer\n * @param {Array} buf use buf.join('') to get out sanitized html string\n * @returns {object} in the form of {\n * start: function(tag, attrs) {},\n * end: function(tag) {},\n * chars: function(text) {},\n * comment: function(text) {}\n * }\n */\n function htmlSanitizeWriterImpl(buf, uriValidator) {\n var ignoreCurrentElement = false;\n var out = bind(buf, buf.push);\n return {\n start: function(tag, attrs) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && blockedElements[tag]) {\n ignoreCurrentElement = tag;\n }\n if (!ignoreCurrentElement && validElements[tag] === true) {\n out('<');\n out(tag);\n forEach(attrs, function(value, key) {\n var lkey = lowercase(key);\n var isImage = (tag === 'img' && lkey === 'src') || (lkey === 'background');\n if (validAttrs[lkey] === true &&\n (uriAttrs[lkey] !== true || uriValidator(value, isImage))) {\n out(' ');\n out(key);\n out('=\"');\n out(encodeEntities(value));\n out('\"');\n }\n });\n out('>');\n }\n },\n end: function(tag) {\n tag = lowercase(tag);\n if (!ignoreCurrentElement && validElements[tag] === true && voidElements[tag] !== true) {\n out('</');\n out(tag);\n out('>');\n }\n // eslint-disable-next-line eqeqeq\n if (tag == ignoreCurrentElement) {\n ignoreCurrentElement = false;\n }\n },\n chars: function(chars) {\n if (!ignoreCurrentElement) {\n out(encodeEntities(chars));\n }\n }\n };\n }\n\n\n /**\n * When IE9-11 comes across an unknown namespaced attribute e.g. 'xlink:foo' it adds 'xmlns:ns1' attribute to declare\n * ns1 namespace and prefixes the attribute with 'ns1' (e.g. 'ns1:xlink:foo'). This is undesirable since we don't want\n * to allow any of these custom attributes. This method strips them all.\n *\n * @param node Root element to process\n */\n function stripCustomNsAttrs(node) {\n while (node) {\n if (node.nodeType === window.Node.ELEMENT_NODE) {\n var attrs = node.attributes;\n for (var i = 0, l = attrs.length; i < l; i++) {\n var attrNode = attrs[i];\n var attrName = attrNode.name.toLowerCase();\n if (attrName === 'xmlns:ns1' || attrName.lastIndexOf('ns1:', 0) === 0) {\n node.removeAttributeNode(attrNode);\n i--;\n l--;\n }\n }\n }\n\n var nextNode = node.firstChild;\n if (nextNode) {\n stripCustomNsAttrs(nextNode);\n }\n\n node = getNonDescendant('nextSibling', node);\n }\n }\n\n function getNonDescendant(propName, node) {\n // An element is clobbered if its `propName` property points to one of its descendants\n var nextNode = node[propName];\n if (nextNode && nodeContains.call(node, nextNode)) {\n throw $sanitizeMinErr('elclob', 'Failed to sanitize html because the element is clobbered: {0}', node.outerHTML || node.outerText);\n }\n return nextNode;\n }\n}\n\nfunction sanitizeText(chars) {\n var buf = [];\n var writer = htmlSanitizeWriter(buf, noop);\n writer.chars(chars);\n return buf.join('');\n}\n\n\n// define ngSanitize module and register $sanitize service\nangular.module('ngSanitize', [])\n .provider('$sanitize', $SanitizeProvider)\n .info({ angularVersion: '1.8.3' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n <span ng-bind-html=\"linky_expression | linky\"></span>\n *\n * @example\n <example module=\"linkyExample\" deps=\"angular-sanitize.js\" name=\"linky-filter\">\n <file name=\"index.html\">\n <div ng-controller=\"ExampleController\">\n Snippet: <textarea ng-model=\"snippet\" cols=\"60\" rows=\"3\"></textarea>\n <table>\n <tr>\n <th>Filter</th>\n <th>Source</th>\n <th>Rendered</th>\n </tr>\n <tr id=\"linky-filter\">\n <td>linky filter</td>\n <td>\n <pre><div ng-bind-html=\"snippet | linky\"><br></div></pre>\n </td>\n <td>\n <div ng-bind-html=\"snippet | linky\"></div>\n </td>\n </tr>\n <tr id=\"linky-target\">\n <td>linky target</td>\n <td>\n <pre><div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\"><br></div></pre>\n </td>\n <td>\n <div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\"></div>\n </td>\n </tr>\n <tr id=\"linky-custom-attributes\">\n <td>linky custom attributes</td>\n <td>\n <pre><div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\"><br></div></pre>\n </td>\n <td>\n <div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\"></div>\n </td>\n </tr>\n <tr id=\"escaped-html\">\n <td>no filter</td>\n <td><pre><div ng-bind=\"snippet\"><br></div></pre></td>\n <td><div ng-bind=\"snippet\"></div></td>\n </tr>\n </table>\n </file>\n <file name=\"script.js\">\n angular.module('linkyExample', ['ngSanitize'])\n .controller('ExampleController', ['$scope', function($scope) {\n $scope.snippet =\n 'Pretty text with some links:\\n' +\n 'http://angularjs.org/,\\n' +\n 'mailto:us@somewhere.org,\\n' +\n 'another@somewhere.org,\\n' +\n 'and one more: ftp://127.0.0.1/.';\n $scope.snippetWithSingleURL = 'http://angularjs.org/';\n }]);\n </file>\n <file name=\"protractor.js\" type=\"protractor\">\n it('should linkify the snippet with urls', function() {\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(4);\n });\n\n it('should not linkify snippet without the linky filter', function() {\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText()).\n toBe('Pretty text with some links: http://angularjs.org/, mailto:us@somewhere.org, ' +\n 'another@somewhere.org, and one more: ftp://127.0.0.1/.');\n expect(element.all(by.css('#escaped-html a')).count()).toEqual(0);\n });\n\n it('should update', function() {\n element(by.model('snippet')).clear();\n element(by.model('snippet')).sendKeys('new http://link.');\n expect(element(by.id('linky-filter')).element(by.binding('snippet | linky')).getText()).\n toBe('new http://link.');\n expect(element.all(by.css('#linky-filter a')).count()).toEqual(1);\n expect(element(by.id('escaped-html')).element(by.binding('snippet')).getText())\n .toBe('new http://link.');\n });\n\n it('should work with the target property', function() {\n expect(element(by.id('linky-target')).\n element(by.binding(\"snippetWithSingleURL | linky:'_blank'\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-target a')).getAttribute('target')).toEqual('_blank');\n });\n\n it('should optionally add custom attributes', function() {\n expect(element(by.id('linky-custom-attributes')).\n element(by.binding(\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\")).getText()).\n toBe('http://angularjs.org/');\n expect(element(by.css('#linky-custom-attributes a')).getAttribute('rel')).toEqual('nofollow');\n });\n </file>\n </example>\n */\nangular.module('ngSanitize').filter('linky', ['$sanitize', function($sanitize) {\n var LINKY_URL_REGEXP =\n /((s?ftp|https?):\\/\\/|(www\\.)|(mailto:)?[A-Za-z0-9._%+-]+@)\\S*[^\\s.;,(){}<>\"\\u201d\\u2019]/i,\n MAILTO_REGEXP = /^mailto:/i;\n\n var linkyMinErr = angular.$$minErr('linky');\n var isDefined = angular.isDefined;\n var isFunction = angular.isFunction;\n var isObject = angular.isObject;\n var isString = angular.isString;\n\n return function(text, target, attributes) {\n if (text == null || text === '') return text;\n if (!isString(text)) throw linkyMinErr('notstring', 'Expected string but received: {0}', text);\n\n var attributesFn =\n isFunction(attributes) ? attributes :\n isObject(attributes) ? function getAttributesObject() {return attributes;} :\n function getEmptyAttributesObject() {return {};};\n\n var match;\n var raw = text;\n var html = [];\n var url;\n var i;\n while ((match = raw.match(LINKY_URL_REGEXP))) {\n // We can not end in these as they are sometimes found at the end of the sentence\n url = match[0];\n // if we did not match ftp/http/www/mailto then assume mailto\n if (!match[2] && !match[4]) {\n url = (match[3] ? 'http://' : 'mailto:') + url;\n }\n i = match.index;\n addText(raw.substr(0, i));\n addLink(url, match[0].replace(MAILTO_REGEXP, ''));\n raw = raw.substring(i + match[0].length);\n }\n addText(raw);\n return $sanitize(html.join(''));\n\n function addText(text) {\n if (!text) {\n return;\n }\n html.push(sanitizeText(text));\n }\n\n function addLink(url, text) {\n var key, linkAttributes = attributesFn(url);\n html.push('<a ');\n\n for (key in linkAttributes) {\n html.push(key + '=\"' + linkAttributes[key] + '\" ');\n }\n\n if (isDefined(target) && !('target' in linkAttributes)) {\n html.push('target=\"',\n target,\n '\" ');\n }\n html.push('href=\"',\n url.replace(/\"/g, '"'),\n '\">');\n addText(text);\n html.push('</a>');\n }\n };\n}]);\n\n\n})(window, window.angular);\n","require('./angular-sanitize');\nmodule.exports = 'ngSanitize';\n","'use strict'\n\n/* Autoupdate plugin for baron 0.6+ */\n\nfunction autoUpdateOne(MutationObserver) {\n var self = this\n var watcher\n\n if (this._au) {\n return\n }\n\n function actualizeWatcher() {\n if (!self.root[self.origin.offset]) {\n startWatch()\n } else {\n stopWatch()\n }\n }\n\n // Set interval timeout for watching when root node will be visible\n function startWatch() {\n if (watcher) return\n\n watcher = setInterval(function() {\n if (self.root[self.origin.offset]) {\n stopWatch()\n self.update()\n }\n }, 300) // is it good enought for you?)\n }\n\n function stopWatch() {\n clearInterval(watcher)\n watcher = null\n }\n\n var debouncedUpdater = self._debounce(function() {\n self.update()\n }, 300)\n\n this._observer = new MutationObserver(function() {\n actualizeWatcher()\n self.update()\n debouncedUpdater()\n })\n\n this.on('init', function() {\n self._observer.observe(self.root, {\n childList: true,\n subtree: true,\n characterData: true\n // attributes: true\n // No reasons to set attributes to true\n // The case when root/child node with already properly inited baron toggled to hidden and then back to visible,\n // and the size of parent was changed during that hidden state, is very rare\n // Other cases are covered by watcher, and you still can do .update by yourself\n })\n\n actualizeWatcher()\n })\n\n this.on('dispose', function() {\n self._observer.disconnect()\n stopWatch()\n delete self._observer\n })\n\n this._au = true\n}\n\nmodule.exports = function autoUpdateCreator(win) {\n var MutationObserver = win.MutationObserver || win.WebKitMutationObserver || win.MozMutationObserver || null\n\n return function autoUpdate() {\n if (!MutationObserver) return this\n\n autoUpdateOne.call(this, MutationObserver)\n\n return this\n }\n}\n","'use strict'\n\n/* Controls plugin for baron */\n\nvar qs = require('./utils').qs\n\nmodule.exports = function controls(params) {\n var forward, backward, track, screen,\n self = this,\n event\n\n screen = params.screen || 0.9\n\n if (params.forward) {\n forward = qs(params.forward, this.clipper)\n\n event = {\n element: forward,\n\n handler: function() {\n var y = self.pos() + (params.delta || 30)\n\n self.pos(y)\n },\n\n type: 'click'\n }\n\n this._eventHandlers.push(event) // For auto-dispose\n this.event(event.element, event.type, event.handler, 'on')\n }\n\n if (params.backward) {\n backward = qs(params.backward, this.clipper)\n\n event = {\n element: backward,\n\n handler: function() {\n var y = self.pos() - (params.delta || 30)\n\n self.pos(y)\n },\n\n type: 'click'\n }\n\n this._eventHandlers.push(event) // For auto-dispose\n this.event(event.element, event.type, event.handler, 'on')\n }\n\n if (params.track) {\n if (params.track === true) {\n track = this.track\n } else {\n track = qs(params.track, this.clipper)\n }\n\n if (track) {\n event = {\n element: track,\n\n handler: function(e) {\n // https://github.com/Diokuz/baron/issues/121\n if (e.target != track) return\n\n var x = e['offset' + self.origin.x],\n xBar = self.bar[self.origin.offsetPos],\n sign = 0\n\n if (x < xBar) {\n sign = -1\n } else if (x > xBar + self.bar[self.origin.offset]) {\n sign = 1\n }\n\n var y = self.pos() + sign * screen * self.scroller[self.origin.client]\n\n self.pos(y)\n },\n\n type: 'mousedown'\n }\n\n this._eventHandlers.push(event) // For auto-dispose\n this.event(event.element, event.type, event.handler, 'on')\n }\n }\n}\n","'use strict'\n\nvar g = (function() {\n return this || (1, eval)('this')\n}())\nvar scopedWindow = g && g.window || g\n\nvar event = require('./utils').event\nvar css = require('./utils').css\nvar add = require('./utils').add\nvar has = require('./utils').has\nvar rm = require('./utils').rm\nvar clone = require('./utils').clone\nvar qs = require('./utils').qs\n\nvar _baron = baron // Stored baron value for noConflict usage\n// var Item = {}\nvar pos = ['left', 'top', 'right', 'bottom', 'width', 'height']\n// Global store for all baron instances (to be able to dispose them on html-nodes)\nvar instances = []\nvar origin = {\n v: { // Vertical\n x: 'Y', pos: pos[1], oppos: pos[3], crossPos: pos[0], crossOpPos: pos[2],\n size: pos[5],\n crossSize: pos[4], crossMinSize: 'min-' + pos[4], crossMaxSize: 'max-' + pos[4],\n client: 'clientHeight', crossClient: 'clientWidth',\n scrollEdge: 'scrollLeft',\n offset: 'offsetHeight', crossOffset: 'offsetWidth', offsetPos: 'offsetTop',\n scroll: 'scrollTop', scrollSize: 'scrollHeight'\n },\n h: { // Horizontal\n x: 'X', pos: pos[0], oppos: pos[2], crossPos: pos[1], crossOpPos: pos[3],\n size: pos[4],\n crossSize: pos[5], crossMinSize: 'min-' + pos[5], crossMaxSize: 'max-' + pos[5],\n client: 'clientWidth', crossClient: 'clientHeight',\n scrollEdge: 'scrollTop',\n offset: 'offsetWidth', crossOffset: 'offsetHeight', offsetPos: 'offsetLeft',\n scroll: 'scrollLeft', scrollSize: 'scrollWidth'\n }\n}\n\n// Some ugly vars\nvar opera12maxScrollbarSize = 17\n// I hate you https://github.com/Diokuz/baron/issues/110\nvar macmsxffScrollbarSize = 15\nvar macosxffRe = /[\\s\\S]*Macintosh[\\s\\S]*\\) Gecko[\\s\\S]*/\nvar isMacFF = macosxffRe.test(scopedWindow.navigator && scopedWindow.navigator.userAgent)\n\nvar log, liveBarons, shownErrors\n\nif (process.env.NODE_ENV !== 'production') {\n log = require('./log')\n liveBarons = 0\n shownErrors = {\n liveTooMany: false,\n allTooMany: false\n }\n}\n\n// window.baron and jQuery.fn.baron points to this function\nfunction baron(user) {\n var withParams = !!user\n var tryNode = (user && user[0]) || user\n var isNode = typeof user == 'string' || tryNode instanceof HTMLElement\n var params = isNode ? { root: user } : clone(user)\n var jQueryMode\n var rootNode\n var defaultParams = {\n direction: 'v',\n barOnCls: '_scrollbar',\n resizeDebounce: 0,\n event: event,\n cssGuru: false,\n impact: 'scroller',\n position: 'static'\n }\n\n params = params || {}\n\n // Extending default params by user-defined params\n for (var key in defaultParams) {\n if (params[key] == null) { // eslint-disable-line\n params[key] = defaultParams[key]\n }\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (params.position == 'absolute' && params.impact == 'clipper') {\n log('error', [\n 'Simultaneous use of `absolute` position and `clipper` impact values detected.',\n 'Those values cannot be used together.',\n 'See more https://github.com/Diokuz/baron/issues/138'\n ].join(' '), params)\n }\n }\n\n // `this` could be a jQuery instance\n jQueryMode = this && this instanceof scopedWindow.jQuery\n\n if (params._chain) {\n rootNode = params.root\n } else if (jQueryMode) {\n params.root = rootNode = this[0]\n } else {\n rootNode = qs(params.root || params.scroller)\n }\n\n if (process.env.NODE_ENV !== 'production') {\n if (!rootNode) {\n log('error', [\n 'Baron initialization failed: root node not found.'\n ].join(', '), params)\n\n return // or return baron-shell?\n }\n }\n\n var attr = manageAttr(rootNode, params.direction)\n var id = +attr // Could be NaN\n\n params.index = id\n\n // baron() can return existing instances,\n // @TODO update params on-the-fly\n // https://github.com/Diokuz/baron/issues/124\n if (id == id && attr !== null && instances[id]) {\n if (process.env.NODE_ENV !== 'production') {\n if (withParams) {\n log('error', [\n 'repeated initialization for html-node detected',\n 'https://github.com/Diokuz/baron/blob/master/docs/logs/repeated.md'\n ].join(', '), params.root)\n }\n }\n\n return instances[id]\n }\n\n // root and scroller can be different nodes\n if (params.root && params.scroller) {\n params.scroller = qs(params.scroller, rootNode)\n if (process.env.NODE_ENV !== 'production') {\n if (!params.scroller) {\n log('error', 'Scroller not found!', rootNode, params.scroller)\n }\n }\n } else {\n params.scroller = rootNode\n }\n\n params.root = rootNode\n\n var instance = init(params)\n\n if (instance.autoUpdate) {\n instance.autoUpdate()\n }\n\n return instance\n}\n\nfunction arrayEach(_obj, iterator) {\n var i = 0\n var obj = _obj\n\n if (obj.length === undefined || obj === scopedWindow) obj = [obj]\n\n while (obj[i]) {\n iterator.call(this, obj[i], i)\n i++\n }\n}\n\n// shortcut for getTime\nfunction getTime() {\n return new Date().getTime()\n}\n\nif (process.env.NODE_ENV !== 'production') {\n baron._instances = instances\n}\n\nfunction manageEvents(item, eventManager, mode) {\n // Creating new functions for one baron item only one time\n item._eventHandlers = item._eventHandlers || [\n {\n // onScroll:\n element: item.scroller,\n\n handler: function(e) {\n item.scroll(e)\n },\n\n type: 'scroll'\n }, {\n // css transitions & animations\n element: item.root,\n\n handler: function() {\n item.update()\n },\n\n type: 'transitionend animationend'\n }, {\n // onKeyup (textarea):\n element: item.scroller,\n\n handler: function() {\n item.update()\n },\n\n type: 'keyup'\n }, {\n // onMouseDown:\n element: item.bar,\n\n handler: function(e) {\n e.preventDefault() // Text selection disabling in Opera\n item.selection() // Disable text selection in ie8\n item.drag.now = 1 // Save private byte\n if (item.draggingCls) {\n add(item.root, item.draggingCls)\n }\n },\n\n type: 'touchstart mousedown'\n }, {\n // onMouseUp:\n element: document,\n\n handler: function() {\n item.selection(1) // Enable text selection\n item.drag.now = 0\n if (item.draggingCls) {\n rm(item.root, item.draggingCls)\n }\n },\n\n type: 'mouseup blur touchend'\n }, {\n // onCoordinateReset:\n element: document,\n\n handler: function(e) {\n if (e.button != 2) { // Not RM\n item._pos0(e)\n }\n },\n\n type: 'touchstart mousedown'\n }, {\n // onMouseMove:\n element: document,\n\n handler: function(e) {\n if (item.drag.now) {\n item.drag(e)\n }\n },\n\n type: 'mousemove touchmove'\n }, {\n // @TODO make one global listener\n // onResize:\n element: scopedWindow,\n\n handler: function() {\n item.update()\n },\n\n type: 'resize'\n }, {\n // @todo remove\n // sizeChange:\n element: item.root,\n\n handler: function() {\n item.update()\n },\n\n type: 'sizeChange'\n }, {\n // Clipper onScroll bug https://github.com/Diokuz/baron/issues/116\n element: item.clipper,\n\n handler: function() {\n item.clipperOnScroll()\n },\n\n type: 'scroll'\n }\n ]\n\n arrayEach(item._eventHandlers, function(evt) {\n if (evt.element) {\n // workaround for element-elements in `fix` plugin\n // @todo dispose `fix` in proper way and remove workaround\n if (evt.element.length && evt.element !== scopedWindow) {\n for (var i = 0; i < evt.element.length; i++) {\n eventManager(evt.element[i], evt.type, evt.handler, mode)\n }\n } else {\n eventManager(evt.element, evt.type, evt.handler, mode)\n }\n }\n })\n\n // if (item.scroller) {\n // event(item.scroller, 'scroll', item._eventHandlers.onScroll, mode)\n // }\n // if (item.bar) {\n // event(item.bar, 'touchstart mousedown', item._eventHandlers.onMouseDown, mode)\n // }\n // event(document, 'mouseup blur touchend', item._eventHandlers.onMouseUp, mode)\n // event(document, 'touchstart mousedown', item._eventHandlers.onCoordinateReset, mode)\n // event(document, 'mousemove touchmove', item._eventHandlers.onMouseMove, mode)\n // event(window, 'resize', item._eventHandlers.onResize, mode)\n // if (item.root) {\n // event(item.root, 'sizeChange', item._eventHandlers.onResize, mode)\n // // Custon event for alternate baron update mechanism\n // }\n}\n\n// set, remove or read baron-specific id-attribute\n// @returns {String|null} - id node value, or null, if there is no attr\nfunction manageAttr(node, direction, mode, id) {\n var attrName = 'data-baron-' + direction + '-id'\n\n if (mode == 'on') {\n node.setAttribute(attrName, id)\n } else if (mode == 'off') {\n node.removeAttribute(attrName)\n }\n\n return node.getAttribute(attrName)\n}\n\nfunction init(params) {\n var out = new baron.prototype.constructor(params)\n\n manageEvents(out, params.event, 'on')\n\n manageAttr(out.root, params.direction, 'on', instances.length)\n instances.push(out)\n\n if (process.env.NODE_ENV !== 'production') {\n liveBarons++\n if (liveBarons > 100 && !shownErrors.liveTooMany) {\n log('warn', [\n 'You have too many live baron instances on page (' + liveBarons + ')!',\n 'Are you forget to dispose some of them?',\n 'All baron instances can be found in baron._instances:'\n ].join(' '), instances)\n shownErrors.liveTooMany = true\n }\n if (instances.length > 1000 && !shownErrors.allTooMany) {\n log('warn', [\n 'You have too many inited baron instances on page (' + instances.length + ')!',\n 'Some of them are disposed, and thats good news.',\n 'but baron.init was call too many times, and thats is bad news.',\n 'All baron instances can be found in baron._instances:'\n ].join(' '), instances)\n shownErrors.allTooMany = true\n }\n }\n\n out.update()\n\n return out\n}\n\nfunction fire(eventName) {\n if (this.events && this.events[eventName]) {\n for (var i = 0; i < this.events[eventName].length; i++) {\n var args = Array.prototype.slice.call( arguments, 1 )\n\n this.events[eventName][i].apply(this, args)\n }\n }\n}\n\nbaron.prototype = {\n // underscore.js realization\n // used in autoUpdate plugin\n _debounce: function(func, wait) {\n var self = this,\n timeout,\n // args, // right now there is no need for arguments\n // context, // and for context\n timestamp\n // result // and for result\n\n var later = function() {\n if (self._disposed) {\n clearTimeout(timeout)\n timeout = self = null\n return\n }\n\n var last = getTime() - timestamp\n\n if (last < wait && last >= 0) {\n timeout = setTimeout(later, wait - last)\n } else {\n timeout = null\n // result = func.apply(context, args)\n func()\n // context = args = null\n }\n }\n\n return function() {\n // context = this\n // args = arguments\n timestamp = getTime()\n\n if (!timeout) {\n timeout = setTimeout(later, wait)\n }\n\n // return result\n }\n },\n\n constructor: function(params) {\n var barPos,\n scrollerPos0,\n track,\n resizePauseTimer,\n scrollingTimer,\n resizeLastFire,\n oldBarSize\n\n resizeLastFire = getTime()\n\n this.params = params\n this.event = params.event\n this.events = {}\n\n // DOM elements\n this.root = params.root // Always html node, not just selector\n this.scroller = qs(params.scroller)\n if (process.env.NODE_ENV !== 'production') {\n if (this.scroller.tagName == 'body') {\n log('error', [\n 'Please, do not use BODY as a scroller.',\n 'https://github.com/Diokuz/baron/blob/master/docs/logs/do-not-use-body.md'\n ].join(', '), params)\n }\n }\n this.bar = qs(params.bar, this.root)\n track = this.track = qs(params.track, this.root)\n if (!this.track && this.bar) {\n track = this.bar.parentNode\n }\n this.clipper = this.scroller.parentNode\n\n // Parameters\n this.direction = params.direction\n this.rtl = params.rtl\n this.origin = origin[this.direction]\n this.barOnCls = params.barOnCls\n this.scrollingCls = params.scrollingCls\n this.draggingCls = params.draggingCls\n this.impact = params.impact\n this.position = params.position\n this.rtl = params.rtl\n this.barTopLimit = 0\n this.resizeDebounce = params.resizeDebounce\n\n // Updating height or width of bar\n function setBarSize(_size) {\n var barMinSize = this.barMinSize || 20\n var size = _size\n\n if (size > 0 && size < barMinSize) {\n size = barMinSize\n }\n\n if (this.bar) {\n css(this.bar, this.origin.size, parseInt(size, 10) + 'px')\n }\n }\n\n // Updating top or left bar position\n function posBar(_pos) {\n if (this.bar) {\n var was = css(this.bar, this.origin.pos),\n will = +_pos + 'px'\n\n if (will && will != was) {\n css(this.bar, this.origin.pos, will)\n }\n }\n }\n\n // Free path for bar\n function k() {\n return track[this.origin.client] - this.barTopLimit - this.bar[this.origin.offset]\n }\n\n // Relative content top position to bar top position\n function relToPos(r) {\n return r * k.call(this) + this.barTopLimit\n }\n\n // Bar position to relative content position\n function posToRel(t) {\n return (t - this.barTopLimit) / k.call(this)\n }\n\n // Cursor position in main direction in px // Now with iOs support\n this.cursor = function(e) {\n return e['client' + this.origin.x] ||\n (((e.originalEvent || e).touches || {})[0] || {})['page' + this.origin.x]\n }\n\n // Text selection pos preventing\n function dontPosSelect() {\n return false\n }\n\n this.pos = function(x) { // Absolute scroller position in px\n var ie = 'page' + this.origin.x + 'Offset',\n key = (this.scroller[ie]) ? ie : this.origin.scroll\n\n if (x !== undefined) this.scroller[key] = x\n\n return this.scroller[key]\n }\n\n this.rpos = function(r) { // Relative scroller position (0..1)\n var free = this.scroller[this.origin.scrollSize] - this.scroller[this.origin.client],\n x\n\n if (r) {\n x = this.pos(r * free)\n } else {\n x = this.pos()\n }\n\n return x / (free || 1)\n }\n\n // Switch on the bar by adding user-defined CSS classname to scroller\n this.barOn = function(dispose) {\n if (this.barOnCls) {\n var noScroll = this.scroller[this.origin.client] >= this.scroller[this.origin.scrollSize]\n\n if (dispose || noScroll) {\n if (has(this.root, this.barOnCls)) {\n rm(this.root, this.barOnCls)\n }\n } else if (!has(this.root, this.barOnCls)) {\n add(this.root, this.barOnCls)\n }\n }\n }\n\n this._pos0 = function(e) {\n scrollerPos0 = this.cursor(e) - barPos\n }\n\n this.drag = function(e) {\n var rel = posToRel.call(this, this.cursor(e) - scrollerPos0)\n var sub = (this.scroller[this.origin.scrollSize] - this.scroller[this.origin.client])\n\n this.scroller[this.origin.scroll] = rel * sub\n }\n\n // Text selection preventing on drag\n this.selection = function(enable) {\n this.event(document, 'selectpos selectstart', dontPosSelect, enable ? 'off' : 'on')\n }\n\n // onResize & DOM modified handler\n // also fires on init\n // Note: max/min-size didnt sets if size did not really changed (for example, on init in Chrome)\n this.resize = function() {\n var self = this\n var minPeriod = (self.resizeDebounce === undefined) ? 300 : self.resizeDebounce\n var delay = 0\n\n if (getTime() - resizeLastFire < minPeriod) {\n clearTimeout(resizePauseTimer)\n delay = minPeriod\n }\n\n function upd() {\n var offset = self.scroller[self.origin.crossOffset]\n var client = self.scroller[self.origin.crossClient]\n var padding = 0\n var was, will\n\n // https://github.com/Diokuz/baron/issues/110\n if (isMacFF) {\n padding = macmsxffScrollbarSize\n\n // Opera 12 bug https://github.com/Diokuz/baron/issues/105\n } else if (client > 0 && offset === 0) {\n // Only Opera 12 in some rare nested flexbox cases goes here\n // Sorry guys for magic,\n // but I dont want to create temporary html-nodes set\n // just for measuring scrollbar size in Opera 12.\n // 17px for Windows XP-8.1, 15px for Mac (really rare).\n offset = client + opera12maxScrollbarSize\n }\n\n if (offset) { // if there is no size, css should not be set\n self.barOn()\n\n if (self.impact == 'scroller') { // scroller\n var delta = offset - client + padding\n\n // `static` position works only for `scroller` impact\n if (self.position == 'static') { // static\n was = css(self.scroller, self.origin.crossSize)\n will = self.clipper[self.origin.crossClient] + delta + 'px'\n\n if (was != will) {\n self._setCrossSizes(self.scroller, will)\n }\n } else { // absolute\n var styles = {}\n var key = self.rtl ? 'Left' : 'Right'\n\n if (self.direction == 'h') {\n key = 'Bottom'\n }\n\n styles['padding' + key] = delta + 'px'\n css(self.scroller, styles)\n }\n } else { // clipper\n was = css(self.clipper, self.origin.crossSize)\n will = client + 'px'\n\n if (was != will) {\n self._setCrossSizes(self.clipper, will)\n }\n }\n } else {\n // do nothing (display: none, or something)\n }\n\n Array.prototype.unshift.call(arguments, 'resize')\n fire.apply(self, arguments)\n\n resizeLastFire = getTime()\n }\n\n if (delay) {\n resizePauseTimer = setTimeout(upd, delay)\n } else {\n upd()\n }\n }\n\n this.updatePositions = function(force) {\n var newBarSize,\n self = this\n\n if (self.bar) {\n newBarSize = (track[self.origin.client] - self.barTopLimit) *\n self.scroller[self.origin.client] / self.scroller[self.origin.scrollSize]\n\n // Positioning bar\n if (force || parseInt(oldBarSize, 10) != parseInt(newBarSize, 10)) {\n setBarSize.call(self, newBarSize)\n oldBarSize = newBarSize\n }\n\n barPos = relToPos.call(self, self.rpos())\n\n posBar.call(self, barPos)\n }\n\n Array.prototype.unshift.call( arguments, 'scroll' )\n fire.apply(self, arguments)\n }\n\n // onScroll handler\n this.scroll = function() {\n var self = this\n\n self.updatePositions()\n\n if (self.scrollingCls) {\n if (!scrollingTimer) {\n add(self.root, self.scrollingCls)\n }\n clearTimeout(scrollingTimer)\n scrollingTimer = setTimeout(function() {\n rm(self.root, self.scrollingCls)\n scrollingTimer = undefined\n }, 300)\n }\n }\n\n // https://github.com/Diokuz/baron/issues/116\n this.clipperOnScroll = function() {\n // WTF is this line? https://github.com/Diokuz/baron/issues/134\n // if (this.direction == 'h') return\n\n // assign `initial scroll position` to `clipper.scrollLeft` (0 for ltr, ~20 for rtl)\n if (!this.rtl) {\n this.clipper[this.origin.scrollEdge] = 0\n } else {\n this.clipper[this.origin.scrollEdge] = this.clipper[this.origin.scrollSize]\n }\n }\n\n // Flexbox `align-items: stretch` (default) requires to set min-width for vertical\n // and max-height for horizontal scroll. Just set them all.\n // http://www.w3.org/TR/css-flexbox-1/#valdef-align-items-stretch\n this._setCrossSizes = function(node, size) {\n var styles = {}\n\n styles[this.origin.crossSize] = size\n styles[this.origin.crossMinSize] = size\n styles[this.origin.crossMaxSize] = size\n\n css(node, styles)\n }\n\n // Set common css rules\n this._dumbCss = function(on) {\n if (params.cssGuru) return\n\n var overflow = on ? 'hidden' : null\n var msOverflowStyle = on ? 'none' : null\n\n css(this.clipper, {\n overflow: overflow,\n msOverflowStyle: msOverflowStyle,\n position: this.position == 'static' ? '' : 'relative'\n })\n\n var scroll = on ? 'scroll' : null\n var axis = this.direction == 'v' ? 'y' : 'x'\n var scrollerCss = {}\n\n scrollerCss['overflow-' + axis] = scroll\n scrollerCss['box-sizing'] = 'border-box'\n scrollerCss.margin = '0'\n scrollerCss.border = '0'\n\n if (this.position == 'absolute') {\n scrollerCss.position = 'absolute'\n scrollerCss.top = '0'\n\n if (this.direction == 'h') {\n scrollerCss.left = scrollerCss.right = '0'\n } else {\n scrollerCss.bottom = '0'\n scrollerCss.right = this.rtl ? '0' : ''\n scrollerCss.left = this.rtl ? '' : '0'\n }\n }\n\n css(this.scroller, scrollerCss)\n }\n\n // onInit actions\n this._dumbCss(true)\n\n if (isMacFF) {\n var padding = 'paddingRight'\n var styles = {}\n // getComputedStyle is ie9+, but we here only in f ff\n var paddingWas = scopedWindow.getComputedStyle(this.scroller)[[padding]]\n\n if (params.direction == 'h') {\n padding = 'paddingBottom'\n } else if (params.rtl) {\n padding = 'paddingLeft'\n }\n\n var numWas = parseInt(paddingWas, 10)\n\n if (numWas != numWas) numWas = 0\n styles[padding] = (macmsxffScrollbarSize + numWas) + 'px'\n css(this.scroller, styles)\n }\n\n return this\n },\n\n // fires on any update and on init\n update: function(params) {\n if (process.env.NODE_ENV !== 'production') {\n if (this._disposed) {\n log('error', [\n 'Update on disposed baron instance detected.',\n 'You should clear your stored baron value for this instance:',\n this\n ].join(' '), params)\n }\n }\n\n fire.call(this, 'upd', params) // Update all plugins' params\n\n this.resize(1)\n this.updatePositions(1)\n\n return this\n },\n\n // One instance\n dispose: function() {\n if (process.env.NODE_ENV !== 'production') {\n if (this._disposed) {\n log('error', 'Already disposed:', this)\n }\n\n liveBarons--\n }\n\n manageEvents(this, this.event, 'off')\n manageAttr(this.root, this.params.direction, 'off')\n if (this.params.direction == 'v') {\n this._setCrossSizes(this.scroller, '')\n } else {\n this._setCrossSizes(this.clipper, '')\n }\n this._dumbCss(false)\n this.barOn(true)\n fire.call(this, 'dispose')\n instances[this.params.index] = null\n this.params = null\n this._disposed = true\n },\n\n on: function(eventName, func, arg) {\n var names = eventName.split(' ')\n\n for (var i = 0; i < names.length; i++) {\n if (names[i] == 'init') {\n func.call(this, arg)\n } else {\n this.events[names[i]] = this.events[names[i]] || []\n\n this.events[names[i]].push(function(userArg) {\n func.call(this, userArg || arg)\n })\n }\n }\n },\n\n baron: function(params) {\n params.root = this.params.root\n params.scroller = this.params.scroller\n params.direction = (this.params.direction == 'v') ? 'h' : 'v'\n params._chain = true\n\n return baron(params)\n }\n}\n\n// baron.fn.constructor.prototype = baron.fn\nbaron.prototype.constructor.prototype = baron.prototype\n\n// Use when you need \"baron\" global var for another purposes\nbaron.noConflict = function() {\n scopedWindow.baron = _baron // Restoring original value of \"baron\" global var\n\n return baron\n}\n\nbaron.version = '3.0.1'\n\nbaron.prototype.autoUpdate = require('./autoUpdate')(scopedWindow)\nbaron.prototype.fix = require('./fix')\nbaron.prototype.controls = require('./controls')\n\nmodule.exports = baron\n","'use strict'\n\n/* Fixable elements plugin for baron */\n\nvar log = require('./log')\nvar css = require('./utils').css\nvar add = require('./utils').add\nvar rm = require('./utils').rm\n\nmodule.exports = function fix(userParams) {\n var elements,\n viewPortSize,\n params = { // Default params\n outside: '',\n inside: '',\n before: '',\n after: '',\n past: '',\n future: '',\n radius: 0,\n minView: 0\n },\n topFixHeights = [], // inline style for element\n topRealHeights = [], // ? something related to negative margins for fixable elements\n headerTops = [], // offset positions when not fixed\n scroller = this.scroller,\n eventManager = this.event,\n self = this\n\n if (process.env.NODE_ENV !== 'production') {\n if (this.position != 'static') {\n log('error', [\n 'Fix plugin cannot work properly in non-static baron position.',\n 'See more https://github.com/Diokuz/baron/issues/135'\n ].join(' '), this.params)\n }\n }\n\n // i - number of fixing element, pos - fix-position in px, flag - 1: top, 2: bottom\n // Invocation only in case when fix-state changed\n function fixElement(i, _pos, flag) {\n var pos = _pos\n var ori = flag == 1 ? 'pos' : 'oppos'\n\n if (viewPortSize < (params.minView || 0)) { // No headers fixing when no enought space for viewport\n pos = undefined\n }\n\n // Removing all fixing stuff - we can do this because fixElement triggers only when fixState really changed\n css(elements[i], this.origin.pos, '')\n css(elements[i], this.origin.oppos, '')\n rm(elements[i], params.outside)\n\n // Fixing if needed\n if (pos !== undefined) {\n pos += 'px'\n css(elements[i], this.origin[ori], pos)\n add(elements[i], params.outside)\n }\n }\n\n function bubbleWheel(e) {\n try {\n var i = document.createEvent('WheelEvent') // i - for extra byte\n\n // evt.initWebKitWheelEvent(deltaX, deltaY, window, screenX, screenY, clientX, clientY, ctrlKey, altKey, shiftKey, metaKey)\n i.initWebKitWheelEvent(e.originalEvent.wheelDeltaX, e.originalEvent.wheelDeltaY)\n scroller.dispatchEvent(i)\n e.preventDefault()\n } catch (ex) {\n //\n }\n }\n\n function init(_params) {\n var pos\n\n for (var key in _params) {\n params[key] = _params[key]\n }\n\n if (params.elements instanceof HTMLElement) {\n elements = [params.elements]\n } else if (typeof params.elements == 'string') {\n elements = this.scroller.querySelectorAll(params.elements)\n } else if (params.elements && params.elements[0] instanceof HTMLElement) {\n elements = params.elements\n }\n\n if (elements) {\n viewPortSize = this.scroller[this.origin.client]\n for (var i = 0; i < elements.length; i++) {\n // Variable header heights\n pos = {}\n pos[this.origin.size] = elements[i][this.origin.offset] + 'px'\n if (elements[i].parentNode !== this.scroller) {\n css(elements[i].parentNode, pos)\n }\n pos = {}\n pos[this.origin.crossSize] = elements[i].parentNode[this.origin.crossClient] + 'px'\n css(elements[i], pos)\n\n // Between fixed headers\n viewPortSize -= elements[i][this.origin.offset]\n\n headerTops[i] = elements[i].parentNode[this.origin.offsetPos] // No paddings for parentNode\n\n // Summary elements height above current\n topFixHeights[i] = (topFixHeights[i - 1] || 0) // Not zero because of negative margins\n topRealHeights[i] = (topRealHeights[i - 1] || Math.min(headerTops[i], 0))\n\n if (elements[i - 1]) {\n topFixHeights[i] += elements[i - 1][this.origin.offset]\n topRealHeights[i] += elements[i - 1][this.origin.offset]\n }\n\n if ( !(i == 0 && headerTops[i] == 0)/* && force */) {\n this.event(elements[i], 'mousewheel', bubbleWheel, 'off')\n this.event(elements[i], 'mousewheel', bubbleWheel)\n }\n }\n\n if (params.limiter && elements[0]) { // Bottom edge of first header as top limit for track\n if (this.track && this.track != this.scroller) {\n pos = {}\n pos[this.origin.pos] = elements[0].parentNode[this.origin.offset] + 'px'\n css(this.track, pos)\n } else {\n this.barTopLimit = elements[0].parentNode[this.origin.offset]\n }\n // this.barTopLimit = elements[0].parentNode[this.origin.offset]\n this.scroll()\n }\n\n if (params.limiter === false) { // undefined (in second fix instance) should have no influence on bar limit\n this.barTopLimit = 0\n }\n }\n\n var event = {\n element: elements,\n\n handler: function() {\n var parent = this.parentNode,\n top = parent.offsetTop,\n num\n\n // finding num -> elements[num] === this\n for (var j = 0; j < elements.length; j++ ) {\n if (elements[j] === this) num = j\n }\n\n var locPos = top - topFixHeights[num]\n\n if (params.scroll) { // User defined callback\n params.scroll({\n x1: self.scroller.scrollTop,\n x2: locPos\n })\n } else {\n self.scroller.scrollTop = locPos\n }\n },\n\n type: 'click'\n }\n\n if (params.clickable) {\n this._eventHandlers.push(event) // For auto-dispose\n // eventManager(event.element, event.type, event.handler, 'off')\n for (var j = 0; j < event.element.length; j++) {\n eventManager(event.element[j], event.type, event.handler, 'on')\n }\n }\n }\n\n this.on('init', init, userParams)\n\n var fixFlag = [], // 1 - past, 2 - future, 3 - current (not fixed)\n gradFlag = []\n\n this.on('init scroll', function() {\n var fixState, hTop, gradState\n var i\n\n if (elements) {\n var change\n\n // fixFlag update\n for (i = 0; i < elements.length; i++) {\n fixState = 0\n if (headerTops[i] - this.pos() < topRealHeights[i] + params.radius) {\n // Header trying to go up\n fixState = 1\n hTop = topFixHeights[i]\n } else if (headerTops[i] - this.pos() > topRealHeights[i] + viewPortSize - params.radius) {\n // Header trying to go down\n fixState = 2\n // console.log('topFixHeights[i] + viewPortSize + topRealHeights[i]', topFixHeights[i], this.scroller[this.origin.client], topRealHeights[i])\n hTop = this.scroller[this.origin.client] - elements[i][this.origin.offset] - topFixHeights[i] - viewPortSize\n // console.log('hTop', hTop, viewPortSize, elements[this.origin.offset], topFixHeights[i])\n // (topFixHeights[i] + viewPortSize + elements[this.origin.offset]) - this.scroller[this.origin.client]\n } else {\n // Header in viewport\n fixState = 3\n hTop = undefined\n }\n\n gradState = false\n if (headerTops[i] - this.pos() < topRealHeights[i] || headerTops[i] - this.pos() > topRealHeights[i] + viewPortSize) {\n gradState = true\n }\n\n if (fixState != fixFlag[i] || gradState != gradFlag[i]) {\n fixElement.call(this, i, hTop, fixState)\n fixFlag[i] = fixState\n gradFlag[i] = gradState\n change = true\n }\n }\n\n // Adding positioning classes (on last top and first bottom header)\n if (change) { // At leats one change in elements flag structure occured\n for (i = 0; i < elements.length; i++) {\n if (fixFlag[i] == 1 && params.past) {\n add(elements[i], params.past)\n rm(elements[i], params.future)\n }\n\n if (fixFlag[i] == 2 && params.future) {\n add(elements[i], params.future)\n rm(elements[i], params.past)\n }\n\n if (fixFlag[i] == 3) {\n rm(elements[i], params.past)\n rm(elements[i], params.future)\n add(elements[i], params.inside)\n }\n\n if (fixFlag[i] != fixFlag[i + 1] && fixFlag[i] == 1) {\n add(elements[i], params.before)\n rm(elements[i], params.after) // Last top fixed header\n } else if (fixFlag[i] != fixFlag[i - 1] && fixFlag[i] == 2) {\n add(elements[i], params.after)\n rm(elements[i], params.before) // First bottom fixed header\n } else {\n rm(elements[i], params.before)\n rm(elements[i], params.after)\n }\n\n if (params.grad) {\n if (gradFlag[i]) {\n add(elements[i], params.grad)\n } else {\n rm(elements[i], params.grad)\n }\n }\n }\n }\n }\n })\n\n this.on('resize upd', function(updParams) {\n init.call(this, updParams && updParams.fix)\n })\n\n return this\n}\n","module.exports = function log(level, msg, more) {\n var func = console[level] || console.log\n var args = [\n 'Baron: ' + msg,\n more\n ]\n\n Function.prototype.apply.call(func, console, args)\n}\n","'use strict'\n\n// Test via a getter in the options object to see if the passive property is accessed\n// https://github.com/WICG/EventListenerOptions/blob/gh-pages/explainer.md#feature-detection\nvar supportsPassive = false\n\ntry {\n var opts = Object.defineProperty({}, 'passive', {\n get: function() {\n supportsPassive = true\n }\n })\n\n window.addEventListener('test', null, opts)\n} catch (e) {\n // pass\n}\n\nmodule.exports.event = function event(elem, _eventNames, handler, mode) {\n var eventNames = _eventNames.split(' ')\n var prefix = mode == 'on' ? 'add' : 'remove'\n\n eventNames.forEach(function(eventName) {\n var options = false\n\n if (['scroll', 'touchstart', 'touchmove'].indexOf(eventName) != -1 && supportsPassive) {\n options = { passive: true }\n }\n\n elem[prefix + 'EventListener'](eventName, handler, options)\n })\n}\n\nfunction each(obj, handler) {\n for (var key in obj) {\n if (obj.hasOwnProperty(key)) {\n handler(key, obj[key])\n }\n }\n}\n\nmodule.exports.css = function css(node, key, value) {\n var styles\n\n if (value === undefined) {\n // Getter mode\n if (typeof key == 'string') {\n return node.style[key]\n }\n\n styles = key\n } else {\n styles = {}\n styles[key] = value\n }\n\n each(styles, function(k, val) {\n node.style[k] = val\n })\n}\n\nmodule.exports.add = function add(node, cls) {\n if (!cls) {\n return\n }\n\n node.classList.add(cls)\n}\n\nmodule.exports.rm = function add(node, cls) {\n if (!cls) {\n return\n }\n\n node.classList.remove(cls)\n}\n\nmodule.exports.has = function has(node, cls) {\n if (!cls) {\n return false\n }\n\n return node.classList.contains(cls)\n}\n\nmodule.exports.clone = function clone(_input) {\n var output = {}\n var input = _input || {}\n\n each(input, function(key, value) {\n output[key] = value\n })\n\n return output\n}\n\nmodule.exports.qs = function qs(selector, _ctx) {\n if (selector instanceof HTMLElement) {\n return selector\n }\n\n var ctx = _ctx || document\n\n return ctx.querySelector(selector)\n}\n\nmodule.exports.each = each\n","import { deprecationWarning, urlUtil } from '@grafana/data';\nimport { locationSearchToObject, locationService, navigationLogger } from '@grafana/runtime';\n\n// Ref: https://github.com/angular/angular.js/blob/ae8e903edf88a83fedd116ae02c0628bf72b150c/src/ng/location.js#L5\nconst DEFAULT_PORTS: Record<string, number> = { http: 80, https: 443, ftp: 21 };\n\nexport class AngularLocationWrapper {\n constructor() {\n this.absUrl = this.wrapInDeprecationWarning(this.absUrl);\n this.hash = this.wrapInDeprecationWarning(this.hash);\n this.host = this.wrapInDeprecationWarning(this.host);\n this.path = this.wrapInDeprecationWarning(this.path);\n this.port = this.wrapInDeprecationWarning(this.port, 'window.location');\n this.protocol = this.wrapInDeprecationWarning(this.protocol, 'window.location');\n this.replace = this.wrapInDeprecationWarning(this.replace);\n this.search = this.wrapInDeprecationWarning(this.search);\n this.state = this.wrapInDeprecationWarning(this.state);\n this.url = this.wrapInDeprecationWarning(this.url);\n }\n\n wrapInDeprecationWarning(fn: Function, replacement?: string) {\n let self = this;\n\n return function wrapper() {\n deprecationWarning('$location', fn.name, replacement || 'locationService');\n return fn.apply(self, arguments);\n };\n }\n\n absUrl(): string {\n return `${window.location.origin}${this.url()}`;\n }\n\n hash(newHash?: string | null) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: hash');\n\n if (!newHash) {\n return locationService.getLocation().hash.slice(1);\n } else {\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n }\n\n host(): string {\n return new URL(window.location.href).hostname;\n }\n\n path(pathname?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: path');\n\n const location = locationService.getLocation();\n\n if (pathname !== undefined && pathname !== null) {\n let parsedPath = String(pathname);\n parsedPath = parsedPath.startsWith('/') ? parsedPath : `/${parsedPath}`;\n const url = new URL(`${window.location.origin}${parsedPath}`);\n\n locationService.push({\n pathname: url.pathname,\n search: url.search.length > 0 ? url.search : location.search,\n hash: url.hash.length > 0 ? url.hash : location.hash,\n });\n return this;\n }\n\n if (pathname === null) {\n locationService.push('/');\n return this;\n }\n\n return location.pathname;\n }\n\n port(): number | null {\n const url = new URL(window.location.href);\n return parseInt(url.port, 10) || DEFAULT_PORTS[url.protocol] || null;\n }\n\n protocol(): string {\n return new URL(window.location.href).protocol.slice(0, -1);\n }\n\n replace() {\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n\n search(search?: any, paramValue?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: search');\n if (!search) {\n return locationService.getSearchObject();\n }\n\n if (search && arguments.length > 1) {\n locationService.partial({\n [search]: paramValue,\n });\n\n return this;\n }\n\n if (search) {\n let newQuery;\n\n if (typeof search === 'object') {\n newQuery = { ...search };\n } else {\n newQuery = locationSearchToObject(search);\n }\n\n for (const key of Object.keys(newQuery)) {\n // removing params with null | undefined\n if (newQuery[key] === null || newQuery[key] === undefined) {\n delete newQuery[key];\n }\n }\n\n const updatedUrl = urlUtil.renderUrl(locationService.getLocation().pathname, newQuery);\n locationService.push(updatedUrl);\n }\n\n return this;\n }\n\n state(state?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: state');\n throw new Error('AngularLocationWrapper method not implemented.');\n }\n\n url(newUrl?: any) {\n navigationLogger('AngularLocationWrapper', false, 'Angular compat layer: url');\n\n if (newUrl !== undefined) {\n if (newUrl.startsWith('#')) {\n locationService.push({ ...locationService.getLocation(), hash: newUrl });\n } else if (newUrl.startsWith('?')) {\n locationService.push({ ...locationService.getLocation(), search: newUrl });\n } else if (newUrl.trim().length === 0) {\n locationService.push('/');\n } else {\n locationService.push(newUrl);\n }\n\n return locationService;\n }\n\n const location = locationService.getLocation();\n return `${location.pathname}${location.search}${location.hash}`;\n }\n}\n","// @ts-ignore\nimport baron from 'baron';\nimport { Subscription } from 'rxjs';\n\nimport { PanelEvents } from '@grafana/data';\nimport { RefreshEvent } from '@grafana/runtime';\nimport { coreModule } from 'app/angular/core_module';\nimport { PanelDirectiveReadyEvent, RenderEvent } from 'app/types/events';\n\nimport { PanelModel } from '../../features/dashboard/state';\n\nimport { PanelCtrl } from './panel_ctrl';\n\nconst panelTemplate = `\n <ng-transclude class=\"panel-height-helper\"></ng-transclude>\n`;\n\ncoreModule.directive('grafanaPanel', [\n '$timeout',\n ($timeout) => {\n return {\n restrict: 'E',\n template: panelTemplate,\n transclude: true,\n scope: { ctrl: '=' },\n link: (scope: any, elem) => {\n const ctrl: PanelCtrl = scope.ctrl;\n const panel: PanelModel = scope.ctrl.panel;\n const subs = new Subscription();\n\n let panelScrollbar: any;\n\n function resizeScrollableContent() {\n if (panelScrollbar) {\n panelScrollbar.update();\n }\n }\n\n ctrl.events.on(PanelEvents.componentDidMount, () => {\n if ((ctrl as any).__proto__.constructor.scrollable) {\n const scrollRootClass = 'baron baron__root baron__clipper panel-content--scrollable';\n const scrollerClass = 'baron__scroller';\n const scrollBarHTML = `\n <div class=\"baron__track\">\n <div class=\"baron__bar\"></div>\n </div>\n `;\n\n const scrollRoot = elem;\n const scroller = elem.find(':first').find(':first');\n\n scrollRoot.addClass(scrollRootClass);\n $(scrollBarHTML).appendTo(scrollRoot);\n scroller.addClass(scrollerClass);\n\n panelScrollbar = baron({\n root: scrollRoot[0],\n scroller: scroller[0],\n bar: '.baron__bar',\n barOnCls: '_scrollbar',\n scrollingCls: '_scrolling',\n });\n\n panelScrollbar.scroll();\n }\n });\n\n function updateDimensionsFromParentScope() {\n ctrl.height = scope.$parent.$parent.size.height;\n ctrl.width = scope.$parent.$parent.size.width;\n }\n\n updateDimensionsFromParentScope();\n\n // Pass PanelModel events down to angular controller event emitter\n subs.add(\n panel.events.subscribe(RefreshEvent, () => {\n updateDimensionsFromParentScope();\n ctrl.events.emit('refresh');\n })\n );\n\n subs.add(\n panel.events.subscribe(RenderEvent, (event) => {\n // this event originated from angular so no need to bubble it back\n if (event.payload?.fromAngular) {\n return;\n }\n\n updateDimensionsFromParentScope();\n\n $timeout(() => {\n resizeScrollableContent();\n ctrl.events.emit('render');\n });\n })\n );\n\n subs.add(\n ctrl.events.subscribe(RenderEvent, (event) => {\n // this event originated from angular so bubble it to react so the PanelChromeAngular can update the panel header alert state\n if (event.payload) {\n event.payload.fromAngular = true;\n panel.events.publish(event);\n }\n })\n );\n\n scope.$on('$destroy', () => {\n elem.off();\n\n // Remove PanelModel.event subs\n subs.unsubscribe();\n // Remove Angular controller event subs\n ctrl.events.emit(PanelEvents.panelTeardown);\n ctrl.events.removeAllListeners();\n\n if (panelScrollbar) {\n panelScrollbar.dispose();\n }\n });\n\n panel.events.publish(PanelDirectiveReadyEvent);\n },\n };\n },\n]);\n","import angular from 'angular';\n\nconst directiveModule = angular.module('grafana.directives');\nconst directiveCache: any = {};\n\ndirectiveModule.directive('panelEditorTab', ['dynamicDirectiveSrv', panelEditorTab]);\n\nfunction panelEditorTab(dynamicDirectiveSrv: any) {\n return dynamicDirectiveSrv.create({\n scope: {\n ctrl: '=',\n editorTab: '=',\n },\n directive: (scope: any) => {\n const pluginId = scope.ctrl.pluginId;\n const tabName = scope.editorTab.title\n .toLowerCase()\n .replace(' ', '-')\n .replace('&', '')\n .replace(' ', '')\n .replace(' ', '-');\n\n if (directiveCache[pluginId]) {\n if (directiveCache[pluginId][tabName]) {\n return directiveCache[pluginId][tabName];\n }\n } else {\n directiveCache[pluginId] = [];\n }\n\n const result = {\n fn: () => scope.editorTab.directiveFn(),\n name: `panel-editor-tab-${pluginId}${tabName}`,\n };\n\n directiveCache[pluginId][tabName] = result;\n\n return result;\n },\n });\n}\n","import { coreModule } from 'app/angular/core_module';\n\nexport class QueryRowCtrl {\n target: any;\n queryCtrl: any;\n panelCtrl: any;\n panel: any;\n hasTextEditMode = false;\n\n $onInit() {\n this.panelCtrl = this.queryCtrl.panelCtrl;\n this.target = this.queryCtrl.target;\n this.panel = this.panelCtrl.panel;\n\n if (this.hasTextEditMode && this.queryCtrl.toggleEditorMode) {\n // expose this function to react parent component\n this.panelCtrl.toggleEditorMode = this.queryCtrl.toggleEditorMode.bind(this.queryCtrl);\n }\n\n if (this.queryCtrl.getCollapsedText) {\n // expose this function to react parent component\n this.panelCtrl.getCollapsedText = this.queryCtrl.getCollapsedText.bind(this.queryCtrl);\n }\n }\n}\n\ncoreModule.directive('queryEditorRow', queryEditorRowDirective);\n\nfunction queryEditorRowDirective() {\n return {\n restrict: 'E',\n controller: QueryRowCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n templateUrl: 'public/app/angular/panel/partials/query_editor_row.html',\n transclude: true,\n scope: {\n queryCtrl: '=',\n canCollapse: '=',\n hasTextEditMode: '=',\n },\n };\n}\n","import angular from 'angular';\nimport { isArray, isNull, isObject, isUndefined } from 'lodash';\n\nimport { dateTime } from '@grafana/data';\nimport { getTemplateSrv, TemplateSrv } from 'app/features/templating/template_srv';\n\nimport coreModule from '../core_module';\n\ncoreModule.filter('stringSort', () => {\n return (input: any) => {\n return input.sort();\n };\n});\n\ncoreModule.filter('slice', () => {\n return (arr: any[], start: any, end: any) => {\n if (!isUndefined(arr)) {\n return arr.slice(start, end);\n }\n return arr;\n };\n});\n\ncoreModule.filter('stringify', () => {\n return (arr: any[]) => {\n if (isObject(arr) && !isArray(arr)) {\n return angular.toJson(arr);\n } else {\n return isNull(arr) ? null : arr.toString();\n }\n };\n});\n\ncoreModule.filter('moment', () => {\n return (date: string, mode: string) => {\n switch (mode) {\n case 'ago':\n return dateTime(date).fromNow();\n }\n return dateTime(date).fromNow();\n };\n});\n\nfunction interpolateTemplateVars(templateSrv: TemplateSrv = getTemplateSrv()) {\n const filterFunc: any = (text: string, scope: any) => {\n let scopedVars;\n if (scope.ctrl) {\n scopedVars = (scope.ctrl.panel || scope.ctrl.row).scopedVars;\n } else {\n scopedVars = scope.row.scopedVars;\n }\n\n return templateSrv.replaceWithText(text, scopedVars);\n };\n\n filterFunc.$stateful = true;\n return filterFunc;\n}\n\ncoreModule.filter('interpolateTemplateVars', interpolateTemplateVars);\nexport default {};\n","import coreModule from 'app/angular/core_module';\n\nexport class AlertSrv {\n constructor() {}\n\n set() {\n console.warn('old deprecated alert srv being used');\n }\n}\n\n// this is just added to not break old plugins that might be using it\ncoreModule.service('alertSrv', AlertSrv);\n","import angular from 'angular';\n\nimport coreModule from '../core_module';\n\nclass DynamicDirectiveSrv {\n static $inject = ['$compile'];\n\n constructor(private $compile: angular.ICompileService) {}\n\n addDirective(element: any, name: string, scope: any) {\n const child = angular.element(document.createElement(name));\n this.$compile(child)(scope);\n\n element.empty();\n element.append(child);\n }\n\n link(scope: any, elem: JQLite, attrs: any, options: any) {\n const directiveInfo = options.directive(scope);\n if (!directiveInfo || !directiveInfo.fn) {\n elem.empty();\n return;\n }\n\n if (!directiveInfo.fn.registered) {\n coreModule.directive(attrs.$normalize(directiveInfo.name), directiveInfo.fn);\n directiveInfo.fn.registered = true;\n }\n\n this.addDirective(elem, directiveInfo.name, scope);\n }\n\n create(options: any) {\n const directiveDef = {\n restrict: 'E',\n scope: options.scope,\n link: (scope: any, elem: JQLite, attrs: any) => {\n if (options.watchPath) {\n let childScope: any = null;\n scope.$watch(options.watchPath, () => {\n if (childScope) {\n childScope.$destroy();\n }\n childScope = scope.$new();\n this.link(childScope, elem, attrs, options);\n });\n } else {\n this.link(scope, elem, attrs, options);\n }\n },\n };\n\n return directiveDef;\n }\n}\n\ncoreModule.service('dynamicDirectiveSrv', DynamicDirectiveSrv);\n","//\n// This is using ng-react with this PR applied https://github.com/ngReact/ngReact/pull/199\n//\n\n// # ngReact\n// ### Use React Components inside of your Angular applications\n//\n// Composed of\n// - reactComponent (generic directive for delegating off to React Components)\n// - reactDirective (factory for creating specific directives that correspond to reactComponent directives)\n\nimport angular, { auto } from 'angular';\nimport { kebabCase } from 'lodash';\nimport React, { ComponentType } from 'react';\nimport { createRoot, Root } from 'react-dom/client';\n\n// get a react component from name (components can be an angular injectable e.g. value, factory or\n// available on window\nfunction getReactComponent(\n name: string | Function,\n $injector: auto.IInjectorService\n): ComponentType<React.PropsWithChildren<{}>> {\n // if name is a function assume it is component and return it\n if (angular.isFunction(name)) {\n return name as unknown as ComponentType<React.PropsWithChildren<{}>>;\n }\n\n // a React component name must be specified\n if (!name) {\n throw new Error('ReactComponent name attribute must be specified');\n }\n\n // ensure the specified React component is accessible, and fail fast if it's not\n let reactComponent;\n try {\n reactComponent = $injector.get(name);\n } catch (e) {}\n\n if (!reactComponent) {\n try {\n reactComponent = name.split('.').reduce((current, namePart) => {\n // @ts-ignore\n return current[namePart];\n }, window);\n } catch (e) {}\n }\n\n if (!reactComponent) {\n throw Error('Cannot find react component ' + name);\n }\n\n return reactComponent as unknown as ComponentType<React.PropsWithChildren<{}>>;\n}\n\n// wraps a function with scope.$apply, if already applied just return\nfunction applied(fn: any, scope: any) {\n if (fn.wrappedInApply) {\n return fn;\n }\n // this had the equivalent of `eslint-disable-next-line prefer-arrow/prefer-arrow-functions`\n const wrapped: any = function () {\n const args = arguments;\n const phase = scope.$root.$$phase;\n if (phase === '$apply' || phase === '$digest') {\n return fn.apply(null, args);\n } else {\n return scope.$apply(() => {\n return fn.apply(null, args);\n });\n }\n };\n wrapped.wrappedInApply = true;\n return wrapped;\n}\n\n/**\n * wraps functions on obj in scope.$apply\n *\n * keeps backwards compatibility, as if propsConfig is not passed, it will\n * work as before, wrapping all functions and won't wrap only when specified.\n *\n * @version 0.4.1\n * @param obj react component props\n * @param scope current scope\n * @param propsConfig configuration object for all properties\n * @returns {Object} props with the functions wrapped in scope.$apply\n */\nfunction applyFunctions(obj: any, scope: any, propsConfig?: any): object {\n return Object.keys(obj || {}).reduce((prev, key) => {\n const value = obj[key];\n const config = (propsConfig || {})[key] || {};\n /**\n * wrap functions in a function that ensures they are scope.$applied\n * ensures that when function is called from a React component\n * the Angular digest cycle is run\n */\n // @ts-ignore\n prev[key] = angular.isFunction(value) && config.wrapApply !== false ? applied(value, scope) : value;\n\n return prev;\n }, {});\n}\n\n/**\n *\n * @param watchDepth (value of HTML watch-depth attribute)\n * @param scope (angular scope)\n *\n * Uses the watchDepth attribute to determine how to watch props on scope.\n * If watchDepth attribute is NOT reference or collection, watchDepth defaults to deep watching by value\n */\nfunction watchProps(watchDepth: string, scope: any, watchExpressions: any[], listener: any) {\n const supportsWatchCollection = angular.isFunction(scope.$watchCollection);\n const supportsWatchGroup = angular.isFunction(scope.$watchGroup);\n\n const watchGroupExpressions = [];\n\n for (const expr of watchExpressions) {\n const actualExpr = getPropExpression(expr);\n const exprWatchDepth = getPropWatchDepth(watchDepth, expr);\n\n // ignore empty expressions & expressions with functions\n if (!actualExpr || actualExpr.match(/\\(.*\\)/) || exprWatchDepth === 'one-time') {\n continue;\n }\n\n if (exprWatchDepth === 'collection' && supportsWatchCollection) {\n scope.$watchCollection(actualExpr, listener);\n } else if (exprWatchDepth === 'reference' && supportsWatchGroup) {\n watchGroupExpressions.push(actualExpr);\n } else {\n scope.$watch(actualExpr, listener, exprWatchDepth !== 'reference');\n }\n }\n\n if (watchDepth === 'one-time') {\n listener();\n }\n\n if (watchGroupExpressions.length) {\n scope.$watchGroup(watchGroupExpressions, listener);\n }\n}\n\n// render React component, with scope[attrs.props] being passed in as the component props\nfunction renderComponent(component: any, props: object, scope: any, root: Root) {\n scope.$evalAsync(() => {\n root.render(React.createElement(component, props));\n });\n}\n\n// get prop name from prop (string or array)\nfunction getPropName(prop: any) {\n return Array.isArray(prop) ? prop[0] : prop;\n}\n\n// get prop name from prop (string or array)\nfunction getPropConfig(prop: any) {\n return Array.isArray(prop) ? prop[1] : {};\n}\n\n// get prop expression from prop (string or array)\nfunction getPropExpression(prop: any) {\n return Array.isArray(prop) ? prop[0] : prop;\n}\n\n/**\n * Finds the normalized attribute knowing that React props accept any type of capitalization and it also handles\n * kabab case attributes which can be used in case the attribute would also be a standard html attribute and would be\n * evaluated by the browser as such.\n * @param attrs All attributes of the component.\n * @param propName Name of the prop that react component expects.\n */\nfunction findAttribute(attrs: object, propName: string): string {\n const index = Object.keys(attrs).find((attr: any) => {\n return attr.toLowerCase() === propName.toLowerCase() || kebabCase(attr) === kebabCase(propName);\n });\n // @ts-ignore\n return attrs[index];\n}\n\n// get watch depth of prop (string or array)\nfunction getPropWatchDepth(defaultWatch: string, prop: string | any[]) {\n const customWatchDepth = Array.isArray(prop) && angular.isObject(prop[1]) && prop[1].watchDepth;\n return customWatchDepth || defaultWatch;\n}\n\n// # reactComponent\n// Directive that allows React components to be used in Angular templates.\n//\n// Usage:\n// <react-component name=\"Hello\" props=\"name\"/>\n//\n// This requires that there exists an injectable or globally available 'Hello' React component.\n// The 'props' attribute is optional and is passed to the component.\n//\n// The following would would create and register the component:\n//\n// var module = angular.module('ace.react.components');\n// module.value('Hello', React.createClass({\n// render: function() {\n// return <div>Hello {this.props.name}</div>;\n// }\n// }));\n//\nconst reactComponent = ($injector: any): any => {\n return {\n restrict: 'E',\n replace: true,\n link: function (scope: any, elem: Element[], attrs: any) {\n const reactComponent = getReactComponent(attrs.name, $injector);\n\n const root = createRoot(elem[0]);\n const renderMyComponent = () => {\n const scopeProps = scope.$eval(attrs.props);\n const props = applyFunctions(scopeProps, scope);\n\n renderComponent(reactComponent, props, scope, root);\n };\n\n // If there are props, re-render when they change\n attrs.props ? watchProps(attrs.watchDepth, scope, [attrs.props], renderMyComponent) : renderMyComponent();\n\n // cleanup when scope is destroyed\n scope.$on('$destroy', () => {\n if (!attrs.onScopeDestroy) {\n root.unmount();\n } else {\n scope.$eval(attrs.onScopeDestroy, {\n unmountComponent: root.unmount.bind(this),\n });\n }\n });\n },\n };\n};\n\n// # reactDirective\n// Factory function to create directives for React components.\n//\n// With a component like this:\n//\n// var module = angular.module('ace.react.components');\n// module.value('Hello', React.createClass({\n// render: function() {\n// return <div>Hello {this.props.name}</div>;\n// }\n// }));\n//\n// A directive can be created and registered with:\n//\n// module.directive('hello', function(reactDirective) {\n// return reactDirective('Hello', ['name']);\n// });\n//\n// Where the first argument is the injectable or globally accessible name of the React component\n// and the second argument is an array of property names to be watched and passed to the React component\n// as props.\n//\n// This directive can then be used like this:\n//\n// <hello name=\"name\"/>\n//\nconst reactDirective = ($injector: auto.IInjectorService) => {\n return (reactComponentName: string, props: string[], conf: any, injectableProps: any) => {\n const directive = {\n restrict: 'E',\n replace: true,\n link: function (scope: any, elem: Element[], attrs: any) {\n const reactComponent = getReactComponent(reactComponentName, $injector);\n const root = createRoot(elem[0]);\n\n // if props is not defined, fall back to use the React component's propTypes if present\n props = props || Object.keys(reactComponent.propTypes || {});\n\n // for each of the properties, get their scope value and set it to scope.props\n const renderMyComponent = () => {\n let scopeProps: any = {};\n const config: any = {};\n\n props.forEach((prop) => {\n const propName = getPropName(prop);\n scopeProps[propName] = scope.$eval(findAttribute(attrs, propName));\n config[propName] = getPropConfig(prop);\n });\n\n scopeProps = applyFunctions(scopeProps, scope, config);\n scopeProps = angular.extend({}, scopeProps, injectableProps);\n renderComponent(reactComponent, scopeProps, scope, root);\n };\n\n // watch each property name and trigger an update whenever something changes,\n // to update scope.props with new values\n const propExpressions = props.map((prop) => {\n return Array.isArray(prop)\n ? [findAttribute(attrs, prop[0]), getPropConfig(prop)]\n : findAttribute(attrs, prop);\n });\n\n // If we don't have any props, then our watch statement won't fire.\n props.length ? watchProps(attrs.watchDepth, scope, propExpressions, renderMyComponent) : renderMyComponent();\n\n // cleanup when scope is destroyed\n scope.$on('$destroy', () => {\n if (!attrs.onScopeDestroy) {\n root.unmount();\n } else {\n scope.$eval(attrs.onScopeDestroy, {\n unmountComponent: root.unmount.bind(this),\n });\n }\n });\n },\n };\n return angular.extend(directive, conf);\n };\n};\n\nconst ngModule = angular.module('react', []);\nngModule.directive('reactComponent', ['$injector', reactComponent]);\nngModule.factory('reactDirective', ['$injector', reactDirective]);\n","import { each, isString, map } from 'lodash';\n\nimport coreModule from '../core_module';\n\ncoreModule.service('uiSegmentSrv', ['$sce', 'templateSrv', uiSegmentSrv]);\n\nexport function uiSegmentSrv(this: any, $sce: any, templateSrv: any) {\n const self = this;\n\n class MetricSegment {\n value: string;\n html: any;\n type: any;\n expandable?: boolean;\n text?: string;\n cssClass?: string;\n fake?: boolean;\n custom?: boolean;\n selectMode?: any;\n\n constructor(options: any) {\n if (options === '*' || options.value === '*') {\n this.value = '*';\n this.html = $sce.trustAsHtml('<i class=\"fa fa-asterisk\"><i>');\n this.type = options.type;\n this.expandable = true;\n return;\n }\n\n if (isString(options)) {\n this.value = options;\n this.html = $sce.trustAsHtml(templateSrv.highlightVariablesAsHtml(this.value));\n return;\n }\n\n // temp hack to work around legacy inconsistency in segment model\n this.text = options.value;\n\n this.cssClass = options.cssClass;\n this.custom = options.custom;\n this.type = options.type;\n this.fake = options.fake;\n this.value = options.value;\n this.selectMode = options.selectMode;\n this.expandable = options.expandable;\n this.html = options.html || $sce.trustAsHtml(templateSrv.highlightVariablesAsHtml(this.value));\n }\n }\n\n this.getSegmentForValue = function (value: string, fallbackText: string) {\n if (value) {\n return this.newSegment(value);\n } else {\n return this.newSegment({ value: fallbackText, fake: true });\n }\n };\n\n this.newSelectMeasurement = () => {\n return new MetricSegment({ value: 'select measurement', fake: true });\n };\n\n this.newFake = (text: string, type: string, cssClass: string) => {\n return new MetricSegment({ value: text, fake: true, type: type, cssClass: cssClass });\n };\n\n this.newSegment = (options: any) => {\n return new MetricSegment(options);\n };\n\n this.newKey = (key: string) => {\n return new MetricSegment({ value: key, type: 'key', cssClass: 'query-segment-key' });\n };\n\n this.newKeyValue = (value: string) => {\n return new MetricSegment({ value: value, type: 'value', cssClass: 'query-segment-value' });\n };\n\n this.newCondition = (condition: string) => {\n return new MetricSegment({ value: condition, type: 'condition', cssClass: 'query-keyword' });\n };\n\n this.newOperator = (op: string) => {\n return new MetricSegment({ value: op, type: 'operator', cssClass: 'query-segment-operator' });\n };\n\n this.newOperators = (ops: string[]) => {\n return map(ops, (op) => {\n return new MetricSegment({ value: op, type: 'operator', cssClass: 'query-segment-operator' });\n });\n };\n\n this.transformToSegments = (addTemplateVars: boolean, variableTypeFilter: string) => {\n return (results: any[]) => {\n const segments = map(results, (segment) => {\n return self.newSegment({ value: segment.text, expandable: segment.expandable });\n });\n\n if (addTemplateVars) {\n each(templateSrv.getVariables(), (variable) => {\n if (variableTypeFilter === void 0 || variableTypeFilter === variable.type) {\n segments.unshift(self.newSegment({ type: 'value', value: '$' + variable.name, expandable: true }));\n }\n });\n }\n\n return segments;\n };\n };\n\n this.newSelectMetric = () => {\n return new MetricSegment({ value: 'select metric', fake: true });\n };\n\n this.newPlusButton = () => {\n return new MetricSegment({\n fake: true,\n html: '<i class=\"fa fa-plus \"></i>',\n type: 'plus-button',\n cssClass: 'query-part',\n });\n };\n}\n","import { extend } from 'lodash';\n// @ts-ignore\nimport Drop from 'tether-drop';\n\nimport { GrafanaRootScope } from 'app/angular/GrafanaCtrl';\nimport coreModule from 'app/angular/core_module';\n\ncoreModule.service('popoverSrv', ['$compile', '$rootScope', '$timeout', popoverSrv]);\n\nfunction popoverSrv(this: any, $compile: any, $rootScope: GrafanaRootScope, $timeout: any) {\n let openDrop: any = null;\n\n this.close = () => {\n if (openDrop) {\n openDrop.close();\n }\n };\n\n this.show = (options: any) => {\n if (openDrop) {\n openDrop.close();\n openDrop = null;\n }\n\n const scope = extend($rootScope.$new(true), options.model);\n let drop: any;\n\n const cleanUp = () => {\n setTimeout(() => {\n scope.$destroy();\n\n if (drop.tether) {\n drop.destroy();\n }\n\n if (options.onClose) {\n options.onClose();\n }\n });\n\n openDrop = null;\n };\n\n scope.dismiss = () => {\n drop.close();\n };\n\n const contentElement = document.createElement('div');\n contentElement.innerHTML = options.template;\n\n $compile(contentElement)(scope);\n\n $timeout(() => {\n drop = new Drop({\n target: options.element,\n content: contentElement,\n position: options.position,\n classes: options.classNames || 'drop-popover',\n openOn: options.openOn,\n hoverCloseDelay: 200,\n tetherOptions: {\n constraints: [{ to: 'scrollParent', attachment: 'together' }],\n },\n });\n\n drop.on('close', () => {\n cleanUp();\n });\n\n openDrop = drop;\n openDrop.open();\n }, 100);\n\n // return close function\n return () => {\n if (drop) {\n drop.close();\n }\n };\n };\n}\n","import { ITimeoutService } from 'angular';\nimport { without, each } from 'lodash';\n\nimport coreModule from 'app/angular/core_module';\n\n// This service really just tracks a list of $timeout promises to give us a\n// method for canceling them all when we need to\nexport class Timer {\n timers: Array<angular.IPromise<any>> = [];\n\n static $inject = ['$timeout'];\n\n constructor(private $timeout: ITimeoutService) {}\n\n register(promise: angular.IPromise<any>) {\n this.timers.push(promise);\n return promise;\n }\n\n cancel(promise: angular.IPromise<any>) {\n this.timers = without(this.timers, promise);\n this.$timeout.cancel(promise);\n }\n\n cancelAll() {\n each(this.timers, (t) => {\n this.$timeout.cancel(t);\n });\n this.timers = [];\n }\n}\n\ncoreModule.service('timer', Timer);\n","import angular from 'angular';\nimport { assign } from 'lodash';\n\nimport { AngularComponent, AngularLoader as AngularLoaderInterface } from '@grafana/runtime';\nimport { GrafanaRootScope } from 'app/angular/GrafanaCtrl';\nimport coreModule from 'app/angular/core_module';\n\nexport class AngularLoader implements AngularLoaderInterface {\n static $inject = ['$compile', '$rootScope'];\n\n constructor(\n private $compile: angular.ICompileService,\n private $rootScope: GrafanaRootScope\n ) {}\n\n load(elem: HTMLElement, scopeProps: any, template: string): AngularComponent {\n const scope = this.$rootScope.$new();\n\n assign(scope, scopeProps);\n\n const compiledElem = this.$compile(template)(scope);\n const rootNode = angular.element(elem);\n rootNode.append(compiledElem);\n\n return {\n destroy: () => {\n scope.$destroy();\n compiledElem.remove();\n },\n digest: () => {\n if (!scope.$$phase) {\n scope.$digest();\n }\n },\n getScope: () => {\n return scope;\n },\n };\n }\n}\n\ncoreModule.service('angularLoader', AngularLoader);\n","import angular from 'angular';\nimport $ from 'jquery';\nimport { extend } from 'lodash';\n\nconst $win = $(window);\n\n$.fn.place_tt = (() => {\n const defaults = {\n offset: 5,\n };\n\n return function (this: any, x: number, y: number, opts: any) {\n opts = $.extend(true, {}, defaults, opts);\n\n return this.each(() => {\n const $tooltip = $(this);\n let width, height;\n\n $tooltip.addClass('grafana-tooltip');\n\n $('#tooltip').remove();\n $tooltip.appendTo(document.body);\n\n if (opts.compile) {\n angular\n .element(document)\n .injector()\n .invoke([\n '$compile',\n '$rootScope',\n ($compile, $rootScope) => {\n const tmpScope = $rootScope.$new(true);\n extend(tmpScope, opts.scopeData);\n\n $compile($tooltip)(tmpScope);\n tmpScope.$digest();\n tmpScope.$destroy();\n },\n ]);\n }\n\n width = $tooltip.outerWidth(true)!;\n height = $tooltip.outerHeight(true)!;\n\n const left = x + opts.offset + width > $win.width()! ? x - opts.offset - width : x + opts.offset;\n const top = y + opts.offset + height > $win.height()! ? y - opts.offset - height : y + opts.offset;\n\n $tooltip.css('left', left > 0 ? left : 0);\n $tooltip.css('top', top > 0 ? top : 0);\n });\n };\n})();\n","import $ from 'jquery';\nimport { each, reduce } from 'lodash';\n\nimport coreModule from './core_module';\n\nexport function dropdownTypeahead($compile: any) {\n const inputTemplate =\n '<input type=\"text\"' +\n ' class=\"gf-form-input input-medium tight-form-input\"' +\n ' spellcheck=\"false\" style=\"display:none\"></input>';\n\n const buttonTemplate =\n '<a class=\"gf-form-label tight-form-func dropdown-toggle\"' +\n ' tabindex=\"1\" gf-dropdown=\"menuItems\" data-toggle=\"dropdown\"' +\n ' ><i class=\"fa fa-plus\"></i></a>';\n\n return {\n scope: {\n menuItems: '=dropdownTypeahead',\n dropdownTypeaheadOnSelect: '&dropdownTypeaheadOnSelect',\n model: '=ngModel',\n },\n link: ($scope: any, elem: any, attrs: any) => {\n const $input = $(inputTemplate);\n const $button = $(buttonTemplate);\n $input.appendTo(elem);\n $button.appendTo(elem);\n\n if (attrs.linkText) {\n $button.html(attrs.linkText);\n }\n\n if (attrs.ngModel) {\n $scope.$watch('model', (newValue: any) => {\n each($scope.menuItems, (item) => {\n each(item.submenu, (subItem) => {\n if (subItem.value === newValue) {\n $button.html(subItem.text);\n }\n });\n });\n });\n }\n\n const typeaheadValues = reduce(\n $scope.menuItems,\n (memo: any[], value, index) => {\n if (!value.submenu) {\n value.click = 'menuItemSelected(' + index + ')';\n memo.push(value.text);\n } else {\n each(value.submenu, (item, subIndex) => {\n item.click = 'menuItemSelected(' + index + ',' + subIndex + ')';\n memo.push(value.text + ' ' + item.text);\n });\n }\n return memo;\n },\n []\n );\n\n const closeDropdownMenu = () => {\n $input.hide();\n $input.val('');\n $button.show();\n $button.focus();\n elem.removeClass('open');\n };\n\n $scope.menuItemSelected = (index: number, subIndex: number) => {\n const menuItem = $scope.menuItems[index];\n const payload: any = { $item: menuItem };\n if (menuItem.submenu && subIndex !== void 0) {\n payload.$subItem = menuItem.submenu[subIndex];\n }\n $scope.dropdownTypeaheadOnSelect(payload);\n closeDropdownMenu();\n };\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: typeaheadValues,\n minLength: 1,\n items: 10,\n updater: (value: string) => {\n const result: any = {};\n each($scope.menuItems, (menuItem) => {\n each(menuItem.submenu, (submenuItem) => {\n if (value === menuItem.text + ' ' + submenuItem.text) {\n result.$subItem = submenuItem;\n result.$item = menuItem;\n }\n });\n });\n\n if (result.$item) {\n $scope.$apply(() => {\n $scope.dropdownTypeaheadOnSelect(result);\n });\n }\n\n $input.trigger('blur');\n return '';\n },\n });\n\n $button.click(() => {\n $button.hide();\n $input.show();\n $input.focus();\n });\n\n $input.keyup(() => {\n elem.toggleClass('open', $input.val() === '');\n });\n\n elem.mousedown((evt: Event) => {\n evt.preventDefault();\n });\n\n $input.blur(() => {\n $input.hide();\n $input.val('');\n $button.show();\n $button.focus();\n // clicking the function dropdown menu won't\n // work if you remove class at once\n setTimeout(() => {\n elem.removeClass('open');\n }, 200);\n });\n\n $compile(elem.contents())($scope);\n },\n };\n}\n\nexport function dropdownTypeahead2($compile: any) {\n const inputTemplate =\n '<input type=\"text\"' + ' class=\"gf-form-input\"' + ' spellcheck=\"false\" style=\"display:none\"></input>';\n\n const buttonTemplate =\n '<a class=\"{{buttonTemplateClass}} dropdown-toggle\"' +\n ' tabindex=\"1\" gf-dropdown=\"menuItems\" data-toggle=\"dropdown\"' +\n ' ><i class=\"fa fa-plus\"></i></a>';\n\n return {\n scope: {\n menuItems: '=dropdownTypeahead2',\n dropdownTypeaheadOnSelect: '&dropdownTypeaheadOnSelect',\n model: '=ngModel',\n buttonTemplateClass: '@',\n },\n link: ($scope: any, elem: any, attrs: any) => {\n const $input = $(inputTemplate);\n\n if (!$scope.buttonTemplateClass) {\n $scope.buttonTemplateClass = 'gf-form-input';\n }\n\n const $button = $(buttonTemplate);\n const timeoutId = {\n blur: null as any,\n };\n $input.appendTo(elem);\n $button.appendTo(elem);\n\n if (attrs.linkText) {\n $button.html(attrs.linkText);\n }\n\n if (attrs.ngModel) {\n $scope.$watch('model', (newValue: any) => {\n each($scope.menuItems, (item) => {\n each(item.submenu, (subItem) => {\n if (subItem.value === newValue) {\n $button.html(subItem.text);\n }\n });\n });\n });\n }\n\n const typeaheadValues = reduce(\n $scope.menuItems,\n (memo: any[], value, index) => {\n if (!value.submenu) {\n value.click = 'menuItemSelected(' + index + ')';\n memo.push(value.text);\n } else {\n each(value.submenu, (item, subIndex) => {\n item.click = 'menuItemSelected(' + index + ',' + subIndex + ')';\n memo.push(value.text + ' ' + item.text);\n });\n }\n return memo;\n },\n []\n );\n\n const closeDropdownMenu = () => {\n $input.hide();\n $input.val('');\n $button.show();\n $button.focus();\n elem.removeClass('open');\n };\n\n $scope.menuItemSelected = (index: number, subIndex: number) => {\n const menuItem = $scope.menuItems[index];\n const payload: any = { $item: menuItem };\n if (menuItem.submenu && subIndex !== void 0) {\n payload.$subItem = menuItem.submenu[subIndex];\n }\n $scope.dropdownTypeaheadOnSelect(payload);\n closeDropdownMenu();\n };\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: typeaheadValues,\n minLength: 1,\n items: 10,\n updater: (value: string) => {\n const result: any = {};\n each($scope.menuItems, (menuItem) => {\n each(menuItem.submenu, (submenuItem) => {\n if (value === menuItem.text + ' ' + submenuItem.text) {\n result.$subItem = submenuItem;\n result.$item = menuItem;\n }\n });\n });\n\n if (result.$item) {\n $scope.$apply(() => {\n $scope.dropdownTypeaheadOnSelect(result);\n });\n }\n\n $input.trigger('blur');\n return '';\n },\n });\n\n $button.click(() => {\n $button.hide();\n $input.show();\n $input.focus();\n });\n\n $input.keyup(() => {\n elem.toggleClass('open', $input.val() === '');\n });\n\n elem.mousedown((evt: Event) => {\n evt.preventDefault();\n timeoutId.blur = null;\n });\n\n $input.blur(() => {\n timeoutId.blur = setTimeout(() => {\n closeDropdownMenu();\n }, 1);\n });\n\n $compile(elem.contents())($scope);\n },\n };\n}\n\ncoreModule.directive('dropdownTypeahead', ['$compile', dropdownTypeahead]);\ncoreModule.directive('dropdownTypeahead2', ['$compile', dropdownTypeahead2]);\n","import coreModule from './core_module';\n\nexport function autofillEventFix($compile: any) {\n return {\n link: ($scope: any, elem: any) => {\n const input = elem[0];\n const dispatchChangeEvent = () => {\n const event = new Event('change');\n return input.dispatchEvent(event);\n };\n const onAnimationStart = ({ animationName }: AnimationEvent) => {\n switch (animationName) {\n case 'onAutoFillStart':\n return dispatchChangeEvent();\n case 'onAutoFillCancel':\n return dispatchChangeEvent();\n }\n return null;\n };\n\n // const onChange = (evt: Event) => console.log(evt);\n\n input.addEventListener('animationstart', onAnimationStart);\n // input.addEventListener('change', onChange);\n\n $scope.$on('$destroy', () => {\n input.removeEventListener('animationstart', onAnimationStart);\n // input.removeEventListener('change', onChange);\n });\n },\n };\n}\n\ncoreModule.directive('autofillEventFix', ['$compile', autofillEventFix]);\n","import $ from 'jquery';\nimport { debounce, find, indexOf, map, escape, unescape } from 'lodash';\n\nimport { TemplateSrv } from 'app/features/templating/template_srv';\n\nimport coreModule from './core_module';\n\nexport function metricSegment($compile: any, $sce: any, templateSrv: TemplateSrv) {\n const inputTemplate =\n '<input type=\"text\" data-provide=\"typeahead\" ' +\n ' class=\"gf-form-input input-medium\"' +\n ' spellcheck=\"false\" style=\"display:none\"></input>';\n\n const linkTemplate =\n '<a class=\"gf-form-label\" ng-class=\"segment.cssClass\" ' +\n 'tabindex=\"1\" give-focus=\"segment.focus\" ng-bind-html=\"segment.html\"></a>';\n\n const selectTemplate =\n '<a class=\"gf-form-input gf-form-input--dropdown\" ng-class=\"segment.cssClass\" ' +\n 'tabindex=\"1\" give-focus=\"segment.focus\" ng-bind-html=\"segment.html\"></a>';\n\n return {\n scope: {\n segment: '=',\n getOptions: '&',\n onChange: '&',\n debounce: '@',\n },\n link: ($scope: any, elem: any) => {\n const $input = $(inputTemplate);\n const segment = $scope.segment;\n const $button = $(segment.selectMode ? selectTemplate : linkTemplate);\n let options = null;\n let cancelBlur: any = null;\n let linkMode = true;\n const debounceLookup = $scope.debounce;\n\n $input.appendTo(elem);\n $button.appendTo(elem);\n\n $scope.updateVariableValue = (value: string) => {\n if (value === '' || segment.value === value) {\n return;\n }\n\n $scope.$apply(() => {\n const selected: any = find($scope.altSegments, { value: value });\n if (selected) {\n segment.value = selected.value;\n segment.html = selected.html || $sce.trustAsHtml(templateSrv.highlightVariablesAsHtml(selected.value));\n segment.fake = false;\n segment.expandable = selected.expandable;\n\n if (selected.type) {\n segment.type = selected.type;\n }\n } else if (segment.custom !== 'false') {\n segment.value = value;\n segment.html = $sce.trustAsHtml(templateSrv.highlightVariablesAsHtml(value));\n segment.expandable = true;\n segment.fake = false;\n }\n\n $scope.onChange();\n });\n };\n\n $scope.switchToLink = (fromClick: boolean) => {\n if (linkMode && !fromClick) {\n return;\n }\n\n clearTimeout(cancelBlur);\n cancelBlur = null;\n linkMode = true;\n $input.hide();\n $button.show();\n $scope.updateVariableValue($input.val());\n };\n\n $scope.inputBlur = () => {\n // happens long before the click event on the typeahead options\n // need to have long delay because the blur\n cancelBlur = setTimeout($scope.switchToLink, 200);\n };\n\n $scope.source = (query: string, callback: any) => {\n $scope.$apply(() => {\n $scope.getOptions({ $query: query }).then((altSegments: any) => {\n $scope.altSegments = altSegments;\n options = map($scope.altSegments, (alt) => {\n return escape(alt.value);\n });\n\n // add custom values\n if (segment.custom !== 'false') {\n if (!segment.fake && indexOf(options, segment.value) === -1) {\n options.unshift(escape(segment.value));\n }\n }\n\n callback(options);\n });\n });\n };\n\n $scope.updater = (value: string) => {\n value = unescape(value);\n if (value === segment.value) {\n clearTimeout(cancelBlur);\n $input.focus();\n return value;\n }\n\n $input.val(value);\n $scope.switchToLink(true);\n\n return value;\n };\n\n $scope.matcher = function (item: string) {\n if (linkMode) {\n return false;\n }\n let str = this.query;\n if (str[0] === '/') {\n str = str.substring(1);\n }\n if (str[str.length - 1] === '/') {\n str = str.substring(0, str.length - 1);\n }\n try {\n return item.toLowerCase().match(str.toLowerCase());\n } catch (e) {\n return false;\n }\n };\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: $scope.source,\n minLength: 0,\n items: 10000,\n updater: $scope.updater,\n matcher: $scope.matcher,\n });\n\n const typeahead = $input.data('typeahead');\n typeahead.lookup = function () {\n this.query = this.$element.val() || '';\n const items = this.source(this.query, $.proxy(this.process, this));\n return items ? this.process(items) : items;\n };\n\n if (debounceLookup) {\n typeahead.lookup = debounce(typeahead.lookup, 500, { leading: true });\n }\n\n $button.keydown((evt) => {\n // trigger typeahead on down arrow or enter key\n if (evt.keyCode === 40 || evt.keyCode === 13) {\n $button.click();\n }\n });\n\n $button.click(() => {\n options = null;\n $input.css('width', Math.max($button.width()!, 80) + 16 + 'px');\n\n $button.hide();\n $input.show();\n $input.focus();\n\n linkMode = false;\n\n const typeahead = $input.data('typeahead');\n if (typeahead) {\n $input.val('');\n typeahead.lookup();\n }\n });\n\n $input.blur($scope.inputBlur);\n\n $compile(elem.contents())($scope);\n },\n };\n}\n\nexport function metricSegmentModel(uiSegmentSrv: any) {\n return {\n template:\n '<metric-segment segment=\"segment\" get-options=\"getOptionsInternal()\" on-change=\"onSegmentChange()\"></metric-segment>',\n restrict: 'E',\n scope: {\n property: '=',\n options: '=',\n getOptions: '&',\n onChange: '&',\n },\n link: {\n pre: function postLink($scope: any, elem: any, attrs: any) {\n let cachedOptions: any;\n\n $scope.valueToSegment = (value: any) => {\n const option: any = find($scope.options, { value: value });\n const segment = {\n cssClass: attrs.cssClass,\n custom: attrs.custom,\n value: option ? option.text : value,\n selectMode: attrs.selectMode,\n };\n\n return uiSegmentSrv.newSegment(segment);\n };\n\n $scope.getOptionsInternal = () => {\n if ($scope.options) {\n cachedOptions = $scope.options;\n return Promise.resolve(\n map($scope.options, (option) => {\n return { value: option.text };\n })\n );\n } else {\n return $scope.getOptions().then((options: any) => {\n cachedOptions = options;\n return map(options, (option) => {\n if (option.html) {\n return option;\n }\n return { value: option.text };\n });\n });\n }\n };\n\n $scope.onSegmentChange = () => {\n if (cachedOptions) {\n const option: any = find(cachedOptions, { text: $scope.segment.value });\n if (option && option.value !== $scope.property) {\n $scope.property = option.value;\n } else if (attrs.custom !== 'false') {\n $scope.property = $scope.segment.value;\n }\n } else {\n $scope.property = $scope.segment.value;\n }\n\n // needs to call this after digest so\n // property is synced with outerscope\n $scope.$$postDigest(() => {\n $scope.$apply(() => {\n $scope.onChange();\n });\n });\n };\n\n $scope.segment = $scope.valueToSegment($scope.property);\n },\n },\n };\n}\n\ncoreModule.directive('metricSegment', ['$compile', '$sce', 'templateSrv', metricSegment]);\ncoreModule.directive('metricSegmentModel', ['uiSegmentSrv', metricSegmentModel]);\n","import angular from 'angular';\n\nimport coreModule from './core_module';\n\ncoreModule.directive('tip', ['$compile', tip]);\n\nfunction tip($compile: any) {\n return {\n restrict: 'E',\n link: (scope: any, elem: any, attrs: any) => {\n let _t =\n '<i class=\"grafana-tip fa fa-' +\n (attrs.icon || 'question-circle') +\n '\" bs-tooltip=\"\\'' +\n // here we double-html-encode any special characters in the source string\n // this is needed so that the final html contains the encoded entities as they\n // will be decoded when _t is parsed by angular\n elem.text().replace(/[\\'\\\"\\\\{}<>&]/g, (m: string) => '&#' + m.charCodeAt(0) + ';') +\n '\\'\"></i>';\n elem.replaceWith($compile(angular.element(_t))(scope));\n },\n };\n}\n\ncoreModule.directive('compile', ['$compile', compile]);\n\nfunction compile($compile: any) {\n return {\n restrict: 'A',\n link: (scope: any, element: any, attrs: any) => {\n scope.$watch(\n (scope: any) => {\n return scope.$eval(attrs.compile);\n },\n (value: any) => {\n element.html(value);\n $compile(element.contents())(scope);\n }\n );\n },\n };\n}\n\ncoreModule.directive('watchChange', watchChange);\n\nfunction watchChange() {\n return {\n scope: { onchange: '&watchChange' },\n link: (scope: any, element: any) => {\n element.on('input', () => {\n scope.$apply(() => {\n scope.onchange({ inputValue: element.val() });\n });\n });\n },\n };\n}\n\ncoreModule.directive('editorOptBool', ['$compile', editorOptBool]);\n\nfunction editorOptBool($compile: any) {\n return {\n restrict: 'E',\n link: (scope: any, elem: any, attrs: any) => {\n const ngchange = attrs.change ? ' ng-change=\"' + attrs.change + '\"' : '';\n const tip = attrs.tip ? ' <tip>' + attrs.tip + '</tip>' : '';\n const showIf = attrs.showIf ? ' ng-show=\"' + attrs.showIf + '\" ' : '';\n\n const template =\n '<div class=\"editor-option gf-form-checkbox text-center\"' +\n showIf +\n '>' +\n ' <label for=\"' +\n attrs.model +\n '\" class=\"small\">' +\n attrs.text +\n tip +\n '</label>' +\n '<input class=\"cr1\" id=\"' +\n attrs.model +\n '\" type=\"checkbox\" ' +\n ' ng-model=\"' +\n attrs.model +\n '\"' +\n ngchange +\n ' ng-checked=\"' +\n attrs.model +\n '\"></input>' +\n ' <label for=\"' +\n attrs.model +\n '\" class=\"cr1\"></label>';\n elem.replaceWith($compile(angular.element(template))(scope));\n },\n };\n}\n\ncoreModule.directive('editorCheckbox', ['$compile, $interpolate', editorCheckbox]);\n\nfunction editorCheckbox($compile: any, $interpolate: any) {\n return {\n restrict: 'E',\n link: (scope: any, elem: any, attrs: any) => {\n const text = $interpolate(attrs.text)(scope);\n const model = $interpolate(attrs.model)(scope);\n const ngchange = attrs.change ? ' ng-change=\"' + attrs.change + '\"' : '';\n const tip = attrs.tip ? ' <tip>' + attrs.tip + '</tip>' : '';\n const label = '<label for=\"' + scope.$id + model + '\" class=\"checkbox-label\">' + text + tip + '</label>';\n\n let template =\n '<input class=\"cr1\" id=\"' +\n scope.$id +\n model +\n '\" type=\"checkbox\" ' +\n ' ng-model=\"' +\n model +\n '\"' +\n ngchange +\n ' ng-checked=\"' +\n model +\n '\"></input>' +\n ' <label for=\"' +\n scope.$id +\n model +\n '\" class=\"cr1\"></label>';\n\n template = template + label;\n elem.addClass('gf-form-checkbox');\n elem.html($compile(angular.element(template))(scope));\n },\n };\n}\n\ncoreModule.directive('gfDropdown', ['$parse', '$compile', '$timeout', gfDropdown]);\n\nfunction gfDropdown($parse: any, $compile: any, $timeout: any) {\n function buildTemplate(items: any, placement?: any) {\n const upclass = placement === 'top' ? 'dropup' : '';\n const ul = ['<ul class=\"dropdown-menu ' + upclass + '\" role=\"menu\" aria-labelledby=\"drop1\">', '</ul>'];\n\n for (let index = 0; index < items.length; index++) {\n const item = items[index];\n\n if (item.divider) {\n ul.splice(index + 1, 0, '<li class=\"divider\"></li>');\n continue;\n }\n\n let li =\n '<li' +\n (item.submenu && item.submenu.length ? ' class=\"dropdown-submenu\"' : '') +\n '>' +\n '<a tabindex=\"-1\" ng-href=\"' +\n (item.href || '') +\n '\"' +\n (item.click ? ' ng-click=\"' + item.click + '\"' : '') +\n (item.target ? ' target=\"' + item.target + '\"' : '') +\n (item.method ? ' data-method=\"' + item.method + '\"' : '') +\n '>' +\n (item.text || '') +\n '</a>';\n\n if (item.submenu && item.submenu.length) {\n li += buildTemplate(item.submenu).join('\\n');\n }\n\n li += '</li>';\n ul.splice(index + 1, 0, li);\n }\n\n return ul;\n }\n\n return {\n restrict: 'EA',\n scope: true,\n link: function postLink(scope: any, iElement: any, iAttrs: any) {\n const getter = $parse(iAttrs.gfDropdown),\n items = getter(scope);\n $timeout(() => {\n const placement = iElement.data('placement');\n const dropdown = angular.element(buildTemplate(items, placement).join(''));\n dropdown.insertAfter(iElement);\n $compile(iElement.next('ul.dropdown-menu'))(scope);\n });\n\n iElement.addClass('dropdown-toggle').attr('data-toggle', 'dropdown');\n },\n };\n}\n","import angular from 'angular';\nimport $ from 'jquery';\n\nimport coreModule from './core_module';\n\ncoreModule.directive('bsTooltip', [\n '$parse',\n '$compile',\n function ($parse: any, $compile: any) {\n return {\n restrict: 'A',\n scope: true,\n link: function postLink(scope: any, element: any, attrs: any) {\n let getter = $parse(attrs.bsTooltip),\n value = getter(scope);\n scope.$watch(attrs.bsTooltip, function (newValue: any, oldValue: any) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n // Grafana change, always hide other tooltips\n if (true) {\n element.on('show', function (ev: any) {\n $('.tooltip.in').each(function () {\n const $this = $(this),\n tooltip = $this.data('tooltip');\n if (tooltip && !tooltip.$element.is(element)) {\n $this.tooltip('hide');\n }\n });\n });\n }\n element.tooltip({\n title: function () {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n html: true,\n container: 'body', // Grafana change\n });\n const tooltip = element.data('tooltip');\n tooltip.show = function () {\n const r = $.fn.tooltip.Constructor.prototype.show.apply(this, arguments);\n this.tip().data('tooltip', this);\n return r;\n };\n scope._tooltip = function (event: any) {\n element.tooltip(event);\n };\n scope.hide = function () {\n element.tooltip('hide');\n };\n scope.show = function () {\n element.tooltip('show');\n };\n scope.dismiss = scope.hide;\n },\n };\n },\n]);\n","import angular from 'angular';\nimport $ from 'jquery';\nimport { isFunction } from 'lodash';\n\nimport coreModule from './core_module';\n\ncoreModule.directive('bsTypeahead', [\n '$parse',\n function ($parse: any) {\n return {\n restrict: 'A',\n require: '?ngModel',\n link: function postLink(scope: any, element: any, attrs: any, controller: any) {\n let getter = $parse(attrs.bsTypeahead),\n value = getter(scope);\n scope.$watch(attrs.bsTypeahead, function (newValue: any, oldValue: any) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n element.attr('data-provide', 'typeahead');\n element.typeahead({\n source: function () {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n minLength: attrs.minLength || 1,\n items: attrs.item,\n updater: function (value: any) {\n if (controller) {\n scope.$apply(function () {\n controller.$setViewValue(value);\n });\n }\n scope.$emit('typeahead-updated', value);\n return value;\n },\n });\n const typeahead = element.data('typeahead');\n typeahead.lookup = function () {\n let items;\n this.query = this.$element.val() || '';\n if (this.query.length < this.options.minLength) {\n return this.shown ? this.hide() : this;\n }\n items = isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source;\n return items ? this.process(items) : this;\n };\n if (!!attrs.matchAll) {\n typeahead.matcher = function () {\n return true;\n };\n }\n if (attrs.minLength === '0') {\n setTimeout(function () {\n element.on('focus', function () {\n element.val().length === 0 && setTimeout(element.typeahead.bind(element, 'lookup'), 200);\n });\n });\n }\n },\n };\n },\n]);\n","import { rangeUtil } from '@grafana/data';\n\nimport coreModule from './core_module';\n\nfunction ngModelOnBlur() {\n return {\n restrict: 'A',\n priority: 1,\n require: 'ngModel',\n link: (scope: any, elm: any, attr: any, ngModelCtrl: any) => {\n if (attr.type === 'radio' || attr.type === 'checkbox') {\n return;\n }\n\n elm.off('input keydown change');\n elm.bind('blur', () => {\n scope.$apply(() => {\n ngModelCtrl.$setViewValue(elm.val());\n });\n });\n },\n };\n}\n\nfunction emptyToNull() {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: (scope: any, elm: any, attrs: any, ctrl: any) => {\n ctrl.$parsers.push((viewValue: any) => {\n if (viewValue === '') {\n return null;\n }\n return viewValue;\n });\n },\n };\n}\n\nfunction validTimeSpan() {\n return {\n require: 'ngModel',\n link: (scope: any, elm: any, attrs: any, ctrl: any) => {\n ctrl.$validators.integer = (modelValue: any, viewValue: any) => {\n if (ctrl.$isEmpty(modelValue)) {\n return true;\n }\n if (viewValue.indexOf('$') === 0 || viewValue.indexOf('+$') === 0) {\n return true; // allow template variable\n }\n const info = rangeUtil.describeTextRange(viewValue);\n return info.invalid !== true;\n };\n },\n };\n}\n\ncoreModule.directive('ngModelOnblur', ngModelOnBlur);\ncoreModule.directive('emptyToNull', emptyToNull);\ncoreModule.directive('validTimeSpan', validTimeSpan);\n","import angular from 'angular';\nimport $ from 'jquery';\n\nimport { getTagColorsFromName } from '@grafana/ui';\n\nimport coreModule from './core_module';\nimport 'vendor/tagsinput/bootstrap-tagsinput.js';\n\nfunction setColor(name: string, element: JQuery) {\n const { color, borderColor } = getTagColorsFromName(name);\n element.css('background-color', color);\n element.css('border-color', borderColor);\n}\n\nfunction tagColorFromName() {\n return {\n scope: { tagColorFromName: '=' },\n link: (scope: any, element: any) => {\n setColor(scope.tagColorFromName, element);\n },\n };\n}\n\nfunction bootstrapTagsinput() {\n function getItemProperty(scope: any, property: any) {\n if (!property) {\n return undefined;\n }\n\n if (angular.isFunction(scope.$parent[property])) {\n return scope.$parent[property];\n }\n\n return (item: any) => {\n return item[property];\n };\n }\n\n return {\n restrict: 'EA',\n scope: {\n model: '=ngModel',\n onTagsUpdated: '&',\n },\n template: '<select multiple></select>',\n replace: false,\n link: function (scope: any, element: any, attrs: any) {\n if (!angular.isArray(scope.model)) {\n scope.model = [];\n }\n\n const select = $('select', element);\n\n if (attrs.placeholder) {\n select.attr('placeholder', attrs.placeholder);\n }\n\n select.tagsinput({\n typeahead: {\n source: angular.isFunction(scope.$parent[attrs.typeaheadSource])\n ? scope.$parent[attrs.typeaheadSource]\n : null,\n },\n widthClass: attrs.widthClass,\n itemValue: getItemProperty(scope, attrs.itemvalue),\n itemText: getItemProperty(scope, attrs.itemtext),\n tagClass: angular.isFunction(scope.$parent[attrs.tagclass])\n ? scope.$parent[attrs.tagclass]\n : () => {\n return attrs.tagclass;\n },\n });\n\n select.on('itemAdded', (event: any) => {\n if (scope.model.indexOf(event.item) === -1) {\n scope.model.push(event.item);\n if (scope.onTagsUpdated) {\n scope.onTagsUpdated();\n }\n }\n const tagElement = select\n .next()\n .children('span')\n .filter(() => {\n return $(this).text() === event.item;\n });\n setColor(event.item, tagElement);\n });\n\n select.on('itemRemoved', (event: any) => {\n const idx = scope.model.indexOf(event.item);\n if (idx !== -1) {\n scope.model.splice(idx, 1);\n if (scope.onTagsUpdated) {\n scope.onTagsUpdated();\n }\n }\n });\n\n scope.$watch(\n 'model',\n () => {\n if (!angular.isArray(scope.model)) {\n scope.model = [];\n }\n\n select.tagsinput('removeAll');\n\n for (let i = 0; i < scope.model.length; i++) {\n select.tagsinput('add', scope.model[i]);\n }\n },\n true\n );\n },\n };\n}\n\ncoreModule.directive('tagColorFromName', tagColorFromName);\ncoreModule.directive('bootstrapTagsinput', bootstrapTagsinput);\n","import $ from 'jquery';\n\nimport coreModule from './core_module';\n\nfunction getBlockNodes(nodes: any[]) {\n let node = nodes[0];\n const endNode = nodes[nodes.length - 1];\n let blockNodes: any[] | undefined;\n node = node.nextSibling;\n\n for (let i = 1; node !== endNode && node; i++) {\n if (blockNodes || nodes[i] !== node) {\n if (!blockNodes) {\n blockNodes = $([].slice.call(nodes, 0, i)) as any;\n }\n\n blockNodes!.push(node);\n }\n node = node.nextSibling;\n }\n\n return blockNodes || nodes;\n}\n\ncoreModule.directive('rebuildOnChange', ['$animate', rebuildOnChange]);\n\nfunction rebuildOnChange($animate: any) {\n return {\n multiElement: true,\n terminal: true,\n transclude: true,\n priority: 600,\n restrict: 'E',\n link: (scope: any, elem: any, attrs: any, ctrl: any, transclude: any) => {\n let block: any, childScope: any, previousElements: any;\n\n function cleanUp() {\n if (previousElements) {\n previousElements.remove();\n previousElements = null;\n }\n if (childScope) {\n childScope.$destroy();\n childScope = null;\n }\n if (block) {\n previousElements = getBlockNodes(block.clone);\n $animate.leave(previousElements).then(() => {\n previousElements = null;\n });\n block = null;\n }\n }\n\n scope.$watch(attrs.property, function rebuildOnChangeAction(value: any, oldValue: any) {\n if (childScope && value !== oldValue) {\n cleanUp();\n }\n\n if (!childScope && (value || attrs.showNull)) {\n transclude((clone: any, newScope: any) => {\n childScope = newScope;\n clone[clone.length++] = document.createComment(' end rebuild on change ');\n block = { clone: clone };\n $animate.enter(clone, elem.parent(), elem);\n });\n } else {\n cleanUp();\n }\n });\n },\n };\n}\n","import coreModule from './core_module';\n\ncoreModule.directive('giveFocus', () => {\n return (scope: any, element: any, attrs: any) => {\n element.click((e: any) => {\n e.stopPropagation();\n });\n\n scope.$watch(\n attrs.giveFocus,\n (newValue: any) => {\n if (!newValue) {\n return;\n }\n setTimeout(() => {\n element.focus();\n const domEl: any = element[0];\n if (domEl.setSelectionRange) {\n const pos = element.val().length * 2;\n domEl.setSelectionRange(pos, pos);\n }\n }, 200);\n },\n true\n );\n };\n});\n\nexport default {};\n","import angular from 'angular';\n\nimport { GrafanaRootScope } from 'app/angular/GrafanaCtrl';\n\nimport coreModule from './core_module';\n\nexport class DeltaCtrl {\n observer: any;\n\n constructor() {\n const waitForCompile = () => {};\n\n this.observer = new MutationObserver(waitForCompile);\n\n const observerConfig = {\n attributes: true,\n attributeFilter: ['class'],\n characterData: false,\n childList: true,\n subtree: false,\n };\n\n this.observer.observe(angular.element('.delta-html')[0], observerConfig);\n }\n\n $onDestroy() {\n this.observer.disconnect();\n }\n}\n\nexport function delta() {\n return {\n controller: DeltaCtrl,\n replace: false,\n restrict: 'A',\n };\n}\n\ncoreModule.directive('diffDelta', delta);\n\n// Link to JSON line number\nexport class LinkJSONCtrl {\n static $inject = ['$scope', '$rootScope', '$anchorScroll'];\n\n constructor(\n private $scope: any,\n private $rootScope: GrafanaRootScope,\n private $anchorScroll: any\n ) {}\n\n goToLine(line: number) {\n let unbind: () => void;\n\n const scroll = () => {\n this.$anchorScroll(`l${line}`);\n unbind();\n };\n\n this.$scope.switchView().then(() => {\n unbind = this.$rootScope.$on('json-diff-ready', scroll.bind(this));\n });\n }\n}\n\nexport function linkJson() {\n return {\n controller: LinkJSONCtrl,\n controllerAs: 'ctrl',\n replace: true,\n restrict: 'E',\n scope: {\n line: '@lineDisplay',\n link: '@lineLink',\n switchView: '&',\n },\n template: `<a class=\"diff-linenum btn btn-inverse btn-small\" ng-click=\"ctrl.goToLine(link)\">Line {{ line }}</a>`,\n };\n}\n\ncoreModule.directive('diffLinkJson', linkJson);\n","import { isArray } from 'lodash';\n\nimport coreModule from './core_module';\n\nexport function arrayJoin() {\n 'use strict';\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: (scope: any, element: any, attr: any, ngModel: any) => {\n function split_array(text: string) {\n return (text || '').split(',');\n }\n\n function join_array(text: string) {\n if (isArray(text)) {\n return ((text || '') as any).join(',');\n } else {\n return text;\n }\n }\n\n ngModel.$parsers.push(split_array);\n ngModel.$formatters.push(join_array);\n },\n };\n}\n\ncoreModule.directive('arrayJoin', arrayJoin);\n","import { config } from '@grafana/runtime';\nimport coreModule from 'app/angular/core_module';\nimport { provideTheme } from 'app/core/utils/ConfigProvider';\n\nexport function react2AngularDirective(name: string, component: any, options: any) {\n coreModule.directive(name, [\n 'reactDirective',\n (reactDirective) => {\n return reactDirective(provideTheme(component, config.theme2), options);\n },\n ]);\n}\n","import { css } from '@emotion/css';\nimport React, { useState } from 'react';\n\nimport { PanelMenuItem, GrafanaTheme2 } from '@grafana/data';\nimport { selectors } from '@grafana/e2e-selectors';\nimport { Icon, toIconName, useStyles2 } from '@grafana/ui';\n\ninterface Props {\n children?: React.ReactNode;\n}\n\nexport const PanelHeaderMenuItem = (props: Props & PanelMenuItem) => {\n const [ref, setRef] = useState<HTMLLIElement | null>(null);\n const isSubMenu = props.type === 'submenu';\n const styles = useStyles2(getStyles);\n const icon = props.iconClassName ? toIconName(props.iconClassName) : undefined;\n\n switch (props.type) {\n case 'divider':\n return <li className=\"divider\" />;\n case 'group':\n return (\n <li>\n <span className={styles.groupLabel}>{props.text}</span>\n </li>\n );\n default:\n return (\n <li\n className={isSubMenu ? `dropdown-submenu ${getDropdownLocationCssClass(ref)}` : undefined}\n ref={setRef}\n data-testid={selectors.components.Panels.Panel.menuItems(props.text)}\n >\n <a onClick={props.onClick} href={props.href} role=\"menuitem\">\n {icon && <Icon name={icon} className={styles.menuIconClassName} />}\n <span\n className=\"dropdown-item-text\"\n data-testid={selectors.components.Panels.Panel.headerItems(props.text)}\n >\n {props.text}\n {isSubMenu && <Icon name=\"angle-right\" className={styles.shortcutIconClassName} />}\n </span>\n\n {props.shortcut && (\n <span className=\"dropdown-menu-item-shortcut\">\n <Icon name=\"keyboard\" className={styles.menuIconClassName} /> {props.shortcut}\n </span>\n )}\n </a>\n {props.children}\n </li>\n );\n }\n};\n\nfunction getDropdownLocationCssClass(element: HTMLElement | null) {\n if (!element) {\n return 'invisible';\n }\n\n const wrapperPos = element.parentElement!.getBoundingClientRect();\n const pos = element.getBoundingClientRect();\n\n if (pos.width === 0) {\n return 'invisible';\n }\n\n if (wrapperPos.right + pos.width + 10 > window.innerWidth) {\n return 'pull-left';\n } else {\n return 'pull-right';\n }\n}\n\nfunction getStyles(theme: GrafanaTheme2) {\n return {\n menuIconClassName: css({\n marginRight: theme.spacing(1),\n 'a::after': {\n display: 'none',\n },\n }),\n shortcutIconClassName: css({\n position: 'absolute',\n top: '7px',\n right: theme.spacing(0.5),\n color: theme.colors.text.secondary,\n }),\n groupLabel: css({\n color: theme.colors.text.secondary,\n fontSize: theme.typography.size.sm,\n padding: theme.spacing(0.5, 1),\n }),\n };\n}\n","import { css, cx } from '@emotion/css';\nimport React from 'react';\n\nimport { NavModelItem, GrafanaTheme2 } from '@grafana/data';\nimport { Tab, TabsBar, Icon, useStyles2, toIconName } from '@grafana/ui';\nimport { PanelHeaderMenuItem } from 'app/core/components/PageHeader/PanelHeaderMenuItem';\n\nimport { PageInfoItem } from '../Page/types';\nimport { PageInfo } from '../PageInfo/PageInfo';\nimport { ProBadge } from '../Upgrade/ProBadge';\n\nexport interface Props {\n navItem: NavModelItem;\n renderTitle?: (title: string) => React.ReactNode;\n actions?: React.ReactNode;\n info?: PageInfoItem[];\n subTitle?: React.ReactNode;\n}\n\nconst SelectNav = ({ children, customCss }: { children: NavModelItem[]; customCss: string }) => {\n if (!children || children.length === 0) {\n return null;\n }\n\n const defaultSelectedItem = children.find((navItem) => {\n return navItem.active === true;\n });\n\n return (\n <div className={`gf-form-select-wrapper width-20 ${customCss}`}>\n <div className=\"dropdown\">\n <button\n type=\"button\"\n className=\"gf-form-input dropdown-toggle\"\n data-toggle=\"dropdown\"\n style={{ textAlign: 'left' }}\n >\n {defaultSelectedItem?.text}\n </button>\n <ul role=\"menu\" className=\"dropdown-menu dropdown-menu--menu\">\n {children.map((navItem: NavModelItem) => {\n if (navItem.hideFromTabs) {\n // TODO: Rename hideFromTabs => hideFromNav\n return null;\n }\n return (\n <PanelHeaderMenuItem\n key={navItem.url}\n iconClassName={navItem.icon}\n text={navItem.text}\n href={navItem.url}\n />\n );\n })}\n </ul>\n </div>\n </div>\n );\n};\n\nconst Navigation = ({ children }: { children: NavModelItem[] }) => {\n if (!children || children.length === 0) {\n return null;\n }\n\n return (\n <nav>\n <SelectNav customCss=\"page-header__select-nav\">{children}</SelectNav>\n <TabsBar className=\"page-header__tabs\" hideBorder={true}>\n {children.map((child, index) => {\n return (\n !child.hideFromTabs && (\n <Tab\n label={child.text}\n active={child.active}\n key={`${child.url}-${index}`}\n icon={child.icon}\n href={child.url}\n suffix={child.tabSuffix}\n />\n )\n );\n })}\n </TabsBar>\n </nav>\n );\n};\n\nexport const PageHeader = ({ navItem: model, renderTitle, actions, info, subTitle }: Props) => {\n const styles = useStyles2(getStyles);\n\n if (!model) {\n return null;\n }\n\n const renderHeader = (main: NavModelItem) => {\n const marginTop = main.icon === 'grafana' ? 12 : 14;\n const icon = main.icon && toIconName(main.icon);\n const sub = subTitle ?? main.subTitle;\n\n return (\n <div className=\"page-header__inner\">\n <span className=\"page-header__logo\">\n {icon && <Icon name={icon} size=\"xxxl\" style={{ marginTop }} />}\n {main.img && <img className=\"page-header__img\" src={main.img} alt=\"\" />}\n </span>\n\n <div className={cx('page-header__info-block', styles.headerText)}>\n {renderTitle ? renderTitle(main.text) : renderHeaderTitle(main.text, main.highlightText)}\n {info && <PageInfo info={info} />}\n {sub && <div className=\"page-header__sub-title\">{sub}</div>}\n {actions && <div className={styles.actions}>{actions}</div>}\n </div>\n </div>\n );\n };\n\n return (\n <div className={styles.headerCanvas}>\n <div className=\"page-container\">\n <div className=\"page-header\">\n {renderHeader(model)}\n {model.children && model.children.length > 0 && <Navigation>{model.children}</Navigation>}\n </div>\n </div>\n </div>\n );\n};\n\nfunction renderHeaderTitle(title: string, highlightText: NavModelItem['highlightText']) {\n if (!title) {\n return null;\n }\n\n return (\n <h1 className=\"page-header__title\">\n {title}\n {highlightText && (\n <ProBadge\n text={highlightText}\n className={css`\n vertical-align: middle;\n `}\n />\n )}\n </h1>\n );\n}\n\nconst getStyles = (theme: GrafanaTheme2) => ({\n actions: css({\n display: 'flex',\n flexDirection: 'row',\n gap: theme.spacing(1),\n }),\n headerText: css({\n display: 'flex',\n flexDirection: 'column',\n gap: theme.spacing(1),\n }),\n headerCanvas: css`\n background: ${theme.colors.background.canvas};\n `,\n});\n","import { flatten } from 'lodash';\nimport React, { useCallback, useMemo } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { Select } from '@grafana/ui';\nimport { Variable } from 'app/types/templates';\n\nexport interface Props {\n onChange: (value: string | undefined) => void;\n options: Array<SelectableValue<string>>;\n isSearchable: boolean;\n value: string;\n placeholder?: string;\n className?: string;\n variables?: Variable[];\n}\n\nexport const MetricSelect = (props: Props) => {\n const { value, placeholder, className, isSearchable, onChange } = props;\n const options = useSelectOptions(props);\n const selected = useSelectedOption(options, value);\n const onChangeValue = useCallback((selectable: SelectableValue<string>) => onChange(selectable.value), [onChange]);\n\n return (\n <Select\n className={className}\n isMulti={false}\n isClearable={false}\n backspaceRemovesValue={false}\n onChange={onChangeValue}\n options={options}\n isSearchable={isSearchable}\n maxMenuHeight={500}\n placeholder={placeholder}\n noOptionsMessage=\"No options found\"\n value={selected}\n />\n );\n};\n\nconst useSelectOptions = ({ variables = [], options }: Props): Array<SelectableValue<string>> => {\n return useMemo(() => {\n if (!Array.isArray(variables) || variables.length === 0) {\n return options;\n }\n\n return [\n {\n label: 'Template Variables',\n options: variables.map(({ name }) => ({\n label: `$${name}`,\n value: `$${name}`,\n })),\n },\n ...options,\n ];\n }, [variables, options]);\n};\n\nconst useSelectedOption = (options: Array<SelectableValue<string>>, value: string): SelectableValue<string> => {\n return useMemo(() => {\n const allOptions = options.every((o) => o.options) ? flatten(options.map((o) => o.options)) : options;\n return allOptions.find((option) => option.value === value);\n }, [options, value]);\n};\n","import {\n ClipboardButton,\n ColorPicker,\n DataLinksInlineEditor,\n DataSourceHttpSettings,\n GraphContextMenu,\n Icon,\n LegacyForms,\n SeriesColorPickerPopoverWithTheme,\n Spinner,\n UnitPicker,\n} from '@grafana/ui';\nimport { react2AngularDirective } from 'app/angular/react2angular';\nimport { OldFolderPicker } from 'app/core/components/Select/OldFolderPicker';\nimport { TimePickerSettings } from 'app/features/dashboard/components/DashboardSettings/TimePickerSettings';\nimport { QueryEditor as CloudMonitoringQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/QueryEditor';\n\nimport EmptyListCTA from '../core/components/EmptyListCTA/EmptyListCTA';\nimport { Footer } from '../core/components/Footer/Footer';\nimport { PageHeader } from '../core/components/PageHeader/PageHeader';\nimport { MetricSelect } from '../core/components/Select/MetricSelect';\nimport { TagFilter } from '../core/components/TagFilter/TagFilter';\nimport { HelpModal } from '../core/components/help/HelpModal';\n\nconst { SecretFormField } = LegacyForms;\n\nexport function registerAngularDirectives() {\n react2AngularDirective('footer', Footer, []);\n react2AngularDirective('icon', Icon, [\n 'name',\n 'size',\n 'type',\n ['onClick', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('spinner', Spinner, ['inline']);\n react2AngularDirective('helpModal', HelpModal, []);\n react2AngularDirective('pageHeader', PageHeader, ['model', 'noTabs']);\n react2AngularDirective('emptyListCta', EmptyListCTA, [\n 'title',\n 'buttonIcon',\n 'buttonLink',\n 'buttonTitle',\n ['onClick', { watchDepth: 'reference', wrapApply: true }],\n 'proTip',\n 'proTipLink',\n 'proTipLinkTitle',\n 'proTipTarget',\n 'infoBox',\n 'infoBoxTitle',\n ]);\n react2AngularDirective('tagFilter', TagFilter, [\n 'tags',\n ['onChange', { watchDepth: 'reference' }],\n ['tagOptions', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('colorPicker', ColorPicker, [\n 'color',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('seriesColorPickerPopover', SeriesColorPickerPopoverWithTheme, [\n 'color',\n 'series',\n 'onColorChange',\n 'onToggleAxis',\n ]);\n react2AngularDirective('unitPicker', UnitPicker, [\n 'value',\n 'width',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('metricSelect', MetricSelect, [\n 'options',\n 'onChange',\n 'value',\n 'isSearchable',\n 'className',\n 'placeholder',\n ['variables', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('cloudMonitoringQueryEditor', CloudMonitoringQueryEditor, [\n 'target',\n 'onQueryChange',\n 'onExecuteQuery',\n ['events', { watchDepth: 'reference' }],\n ['datasource', { watchDepth: 'reference' }],\n ['templateSrv', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('secretFormField', SecretFormField, [\n 'value',\n 'isConfigured',\n 'inputWidth',\n 'labelWidth',\n 'aria-label',\n ['onReset', { watchDepth: 'reference', wrapApply: true }],\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('graphContextMenu', GraphContextMenu, [\n 'x',\n 'y',\n 'itemsGroup',\n ['onClose', { watchDepth: 'reference', wrapApply: true }],\n ['getContextMenuSource', { watchDepth: 'reference', wrapApply: true }],\n ['timeZone', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n // We keep the drilldown terminology here because of as using data-* directive\n // being in conflict with HTML data attributes\n react2AngularDirective('drilldownLinksEditor', DataLinksInlineEditor, [\n 'value',\n 'links',\n 'suggestions',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n react2AngularDirective('datasourceHttpSettingsNext', DataSourceHttpSettings, [\n 'defaultUrl',\n 'showAccessOptions',\n 'dataSourceConfig',\n 'showForwardOAuthIdentityOption',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('folderPicker', OldFolderPicker, [\n 'labelClass',\n 'rootName',\n 'enableCreateNew',\n 'enableReset',\n 'initialTitle',\n 'initialFolderId',\n 'dashboardId',\n 'onCreateFolder',\n ['enterFolderCreation', { watchDepth: 'reference', wrapApply: true }],\n ['exitFolderCreation', { watchDepth: 'reference', wrapApply: true }],\n ['onLoad', { watchDepth: 'reference', wrapApply: true }],\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n react2AngularDirective('timePickerSettings', TimePickerSettings, [\n 'renderCount',\n 'refreshIntervals',\n 'timePickerHidden',\n 'nowDelay',\n 'timezone',\n ['onTimeZoneChange', { watchDepth: 'reference', wrapApply: true }],\n ['onRefreshIntervalChange', { watchDepth: 'reference', wrapApply: true }],\n ['onNowDelayChange', { watchDepth: 'reference', wrapApply: true }],\n ['onHideTimePickerChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n react2AngularDirective('clipboardButton', ClipboardButton, [\n ['getText', { watchDepth: 'reference', wrapApply: true }],\n ]);\n}\n","import $ from 'jquery';\nimport { debounce, each, map, partial, escape, unescape } from 'lodash';\n\nimport coreModule from 'app/angular/core_module';\n\nimport { promiseToDigest } from '../promiseToDigest';\n\nconst template = `\n<div class=\"dropdown cascade-open\">\n<a ng-click=\"showActionsMenu()\" class=\"query-part-name pointer dropdown-toggle\" data-toggle=\"dropdown\">{{part.def.type}}</a>\n<span>(</span><span class=\"query-part-parameters\"></span><span>)</span>\n<ul class=\"dropdown-menu\">\n <li ng-repeat=\"action in partActions\">\n <a ng-click=\"triggerPartAction(action)\">{{action.text}}</a>\n </li>\n</ul>\n`;\n\ncoreModule.directive('queryPartEditor', ['templateSrv', queryPartEditorDirective]);\n\nexport function queryPartEditorDirective(templateSrv: any) {\n const paramTemplate = '<input type=\"text\" class=\"hide input-mini tight-form-func-param\"></input>';\n\n return {\n restrict: 'E',\n template: template,\n scope: {\n part: '=',\n handleEvent: '&',\n debounce: '@',\n },\n link: function postLink($scope: any, elem: any) {\n const part = $scope.part;\n const partDef = part.def;\n const $paramsContainer = elem.find('.query-part-parameters');\n const debounceLookup = $scope.debounce;\n\n $scope.partActions = [];\n\n function clickFuncParam(this: any, paramIndex: number) {\n const $link = $(this);\n const $input = $link.next();\n\n $input.val(part.params[paramIndex]);\n $input.css('width', $link.width()! + 16 + 'px');\n\n $link.hide();\n $input.show();\n $input.focus();\n $input.select();\n\n const typeahead = $input.data('typeahead');\n if (typeahead) {\n $input.val('');\n typeahead.lookup();\n }\n }\n\n function inputBlur(this: any, paramIndex: number) {\n const $input = $(this);\n const $link = $input.prev();\n const newValue = $input.val();\n\n if (newValue !== '' || part.def.params[paramIndex].optional) {\n $link.html(templateSrv.highlightVariablesAsHtml(newValue));\n\n part.updateParam($input.val(), paramIndex);\n $scope.$apply(() => {\n $scope.handleEvent({ $event: { name: 'part-param-changed' } });\n });\n }\n\n $input.hide();\n $link.show();\n }\n\n function inputKeyPress(this: any, paramIndex: number, e: any) {\n if (e.which === 13) {\n inputBlur.call(this, paramIndex);\n }\n }\n\n function inputKeyDown(this: any) {\n this.style.width = (3 + this.value.length) * 8 + 'px';\n }\n\n function addTypeahead($input: JQuery, param: any, paramIndex: number) {\n if (!param.options && !param.dynamicLookup) {\n return;\n }\n\n const typeaheadSource = (query: string, callback: any) => {\n if (param.options) {\n let options = param.options;\n if (param.type === 'int') {\n options = map(options, (val) => {\n return val.toString();\n });\n }\n return options;\n }\n\n $scope.$apply(() => {\n $scope.handleEvent({ $event: { name: 'get-param-options' } }).then((result: any) => {\n const dynamicOptions = map(result, (op) => {\n return escape(op.value);\n });\n callback(dynamicOptions);\n });\n });\n };\n\n $input.attr('data-provide', 'typeahead');\n\n $input.typeahead({\n source: typeaheadSource,\n minLength: 0,\n items: 1000,\n updater: (value: string) => {\n value = unescape(value);\n setTimeout(() => {\n inputBlur.call($input[0], paramIndex);\n }, 0);\n return value;\n },\n });\n\n const typeahead = $input.data('typeahead');\n typeahead.lookup = function () {\n this.query = this.$element.val() || '';\n const items = this.source(this.query, $.proxy(this.process, this));\n return items ? this.process(items) : items;\n };\n\n if (debounceLookup) {\n typeahead.lookup = debounce(typeahead.lookup, 500, { leading: true });\n }\n }\n\n $scope.showActionsMenu = () => {\n promiseToDigest($scope)(\n $scope.handleEvent({ $event: { name: 'get-part-actions' } }).then((res: any) => {\n $scope.partActions = res;\n })\n );\n };\n\n $scope.triggerPartAction = (action: string) => {\n $scope.handleEvent({ $event: { name: 'action', action: action } });\n };\n\n function addElementsAndCompile() {\n each(partDef.params, (param: any, index: number) => {\n if (param.optional && part.params.length <= index) {\n return;\n }\n\n if (index > 0) {\n $('<span>, </span>').appendTo($paramsContainer);\n }\n\n const paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);\n const $paramLink = $('<a class=\"graphite-func-param-link pointer\">' + paramValue + '</a>');\n const $input = $(paramTemplate);\n\n $paramLink.appendTo($paramsContainer);\n $input.appendTo($paramsContainer);\n\n $input.blur(partial(inputBlur, index));\n $input.keyup(inputKeyDown);\n $input.keypress(partial(inputKeyPress, index));\n $paramLink.click(partial(clickFuncParam, index));\n\n addTypeahead($input, param, index);\n });\n }\n\n function relink() {\n $paramsContainer.empty();\n addElementsAndCompile();\n }\n\n relink();\n },\n };\n}\n","import { ISCEService } from 'angular';\nimport { debounce, find, indexOf, map, isObject, escape, unescape } from 'lodash';\n\nimport coreModule from '../../core_module';\nimport { promiseToDigest } from '../../promiseToDigest';\n\nfunction typeaheadMatcher(this: any, item: string) {\n let str = this.query;\n if (str === '') {\n return true;\n }\n if (str[0] === '/') {\n str = str.substring(1);\n }\n if (str[str.length - 1] === '/') {\n str = str.substring(0, str.length - 1);\n }\n return item.toLowerCase().match(str.toLowerCase());\n}\n\nexport class FormDropdownCtrl {\n inputElement: JQLite;\n linkElement: JQLite;\n model: any;\n display: any;\n text: any;\n options: any;\n cssClass: any;\n cssClasses: any;\n allowCustom: any;\n labelMode: boolean;\n linkMode: boolean;\n cancelBlur: any;\n onChange: any;\n getOptions: any;\n optionCache: any;\n lookupText: boolean;\n placeholder: any;\n startOpen: any;\n debounce: boolean;\n\n static $inject = ['$scope', '$element', '$sce', 'templateSrv'];\n\n constructor(\n private $scope: any,\n $element: JQLite,\n private $sce: ISCEService,\n private templateSrv: any\n ) {\n this.inputElement = $element.find('input').first();\n this.linkElement = $element.find('a').first();\n this.linkMode = true;\n this.cancelBlur = null;\n this.labelMode = false;\n this.lookupText = false;\n this.debounce = false;\n\n // listen to model changes\n $scope.$watch('ctrl.model', this.modelChanged.bind(this));\n }\n\n $onInit() {\n if (this.labelMode) {\n this.cssClasses = 'gf-form-label ' + this.cssClass;\n } else {\n this.cssClasses = 'gf-form-input gf-form-input--dropdown ' + this.cssClass;\n }\n\n if (this.placeholder) {\n this.inputElement.attr('placeholder', this.placeholder);\n }\n\n this.inputElement.attr('data-provide', 'typeahead');\n this.inputElement.typeahead({\n source: this.typeaheadSource.bind(this),\n minLength: 0,\n items: 10000,\n updater: this.typeaheadUpdater.bind(this),\n matcher: typeaheadMatcher,\n });\n\n // modify typeahead lookup\n // this = typeahead\n const typeahead = this.inputElement.data('typeahead');\n typeahead.lookup = function () {\n this.query = this.$element.val() || '';\n this.source(this.query, this.process.bind(this));\n };\n\n if (this.debounce) {\n typeahead.lookup = debounce(typeahead.lookup, 500, { leading: true });\n }\n\n this.linkElement.keydown((evt) => {\n // trigger typeahead on down arrow or enter key\n if (evt.keyCode === 40 || evt.keyCode === 13) {\n this.linkElement.click();\n }\n });\n\n this.inputElement.keydown((evt) => {\n if (evt.keyCode === 13) {\n setTimeout(() => {\n this.inputElement.blur();\n }, 300);\n }\n });\n\n this.inputElement.blur(this.inputBlur.bind(this));\n\n if (this.startOpen) {\n setTimeout(this.open.bind(this), 0);\n }\n }\n\n getOptionsInternal(query: string) {\n return promiseToDigest(this.$scope)(Promise.resolve(this.getOptions({ $query: query })));\n }\n\n isPromiseLike(obj: any) {\n return obj && typeof obj.then === 'function';\n }\n\n modelChanged() {\n if (isObject(this.model)) {\n this.updateDisplay((this.model as any).text);\n } else {\n // if we have text use it\n if (this.lookupText) {\n this.getOptionsInternal('').then((options: any) => {\n const item: any = find(options, { value: this.model });\n this.updateDisplay(item ? item.text : this.model);\n });\n } else {\n this.updateDisplay(this.model);\n }\n }\n }\n\n typeaheadSource(query: string, callback: (res: any) => void) {\n this.getOptionsInternal(query).then((options: any) => {\n this.optionCache = options;\n\n // extract texts\n const optionTexts = map(options, (op: any) => {\n return escape(op.text);\n });\n\n // add custom values\n if (this.allowCustom && this.text !== '') {\n if (indexOf(optionTexts, this.text) === -1) {\n optionTexts.unshift(this.text);\n }\n }\n\n callback(optionTexts);\n });\n }\n\n typeaheadUpdater(text: string) {\n if (text === this.text) {\n clearTimeout(this.cancelBlur);\n this.inputElement.focus();\n return text;\n }\n\n this.inputElement.val(text);\n this.switchToLink(true);\n return text;\n }\n\n switchToLink(fromClick: boolean) {\n if (this.linkMode && !fromClick) {\n return;\n }\n\n clearTimeout(this.cancelBlur);\n this.cancelBlur = null;\n this.linkMode = true;\n this.inputElement.hide();\n this.linkElement.show();\n this.updateValue(this.inputElement.val() as string);\n }\n\n inputBlur() {\n // happens long before the click event on the typeahead options\n // need to have long delay because the blur\n this.cancelBlur = setTimeout(this.switchToLink.bind(this), 200);\n }\n\n updateValue(text: string) {\n text = unescape(text);\n\n if (text === '' || this.text === text) {\n return;\n }\n\n this.$scope.$apply(() => {\n const option: any = find(this.optionCache, { text: text });\n\n if (option) {\n if (isObject(this.model)) {\n this.model = option;\n } else {\n this.model = option.value;\n }\n this.text = option.text;\n } else if (this.allowCustom) {\n if (isObject(this.model)) {\n (this.model as any).text = (this.model as any).value = text;\n } else {\n this.model = text;\n }\n this.text = text;\n }\n\n // needs to call this after digest so\n // property is synced with outerscope\n this.$scope.$$postDigest(() => {\n this.$scope.$apply(() => {\n this.onChange({ $option: option });\n });\n });\n });\n }\n\n updateDisplay(text: string) {\n this.text = text;\n this.display = this.$sce.trustAsHtml(this.templateSrv.highlightVariablesAsHtml(text));\n }\n\n open() {\n this.inputElement.css('width', Math.max(this.linkElement.width()!, 80) + 16 + 'px');\n\n this.inputElement.show();\n this.inputElement.focus();\n\n this.linkElement.hide();\n this.linkMode = false;\n\n const typeahead = this.inputElement.data('typeahead');\n if (typeahead) {\n this.inputElement.val('');\n typeahead.lookup();\n }\n }\n}\n\nconst template = `\n<input type=\"text\"\n data-provide=\"typeahead\"\n class=\"gf-form-input\"\n spellcheck=\"false\"\n style=\"display:none\">\n</input>\n<a ng-class=\"ctrl.cssClasses\"\n tabindex=\"1\"\n ng-click=\"ctrl.open()\"\n give-focus=\"ctrl.focus\"\n ng-bind-html=\"ctrl.display || ' '\">\n</a>\n`;\n\nexport function formDropdownDirective() {\n return {\n restrict: 'E',\n template: template,\n controller: FormDropdownCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {\n model: '=',\n getOptions: '&',\n onChange: '&',\n cssClass: '@',\n allowCustom: '@',\n labelMode: '@',\n lookupText: '@',\n placeholder: '@',\n startOpen: '@',\n debounce: '@',\n },\n };\n}\n\ncoreModule.directive('gfFormDropdown', formDropdownDirective);\n","// @ts-ignore\nimport baron from 'baron';\nimport $ from 'jquery';\n\nimport coreModule from 'app/angular/core_module';\n\nconst scrollBarHTML = `\n<div class=\"baron__track\">\n <div class=\"baron__bar\"></div>\n</div>\n`;\n\nconst scrollRootClass = 'baron baron__root';\nconst scrollerClass = 'baron__scroller';\n\nexport function geminiScrollbar() {\n return {\n restrict: 'A',\n link: (scope: any, elem: any, attrs: any) => {\n let scrollRoot = elem.parent();\n const scroller = elem;\n\n if (attrs.grafanaScrollbar && attrs.grafanaScrollbar === 'scrollonroot') {\n scrollRoot = scroller;\n }\n\n scrollRoot.addClass(scrollRootClass);\n $(scrollBarHTML).appendTo(scrollRoot);\n elem.addClass(scrollerClass);\n\n const scrollParams = {\n root: scrollRoot[0],\n scroller: scroller[0],\n bar: '.baron__bar',\n barOnCls: '_scrollbar',\n scrollingCls: '_scrolling',\n track: '.baron__track',\n direction: 'v',\n };\n\n const scrollbar = baron(scrollParams);\n\n scope.$on('$destroy', () => {\n scrollbar.dispose();\n });\n },\n };\n}\n\ncoreModule.directive('grafanaScrollbar', geminiScrollbar);\n","import { JsonExplorer } from '@grafana/ui';\nimport coreModule from 'app/angular/core_module';\n\ncoreModule.directive('jsonTree', [\n function jsonTreeDirective() {\n return {\n restrict: 'E',\n scope: {\n object: '=',\n startExpanded: '@',\n rootName: '@',\n },\n link: (scope: any, elem) => {\n let expansionLevel = scope.startExpanded;\n if (scope.startExpanded === 'true') {\n expansionLevel = 2;\n } else if (scope.startExpanded === 'false') {\n expansionLevel = 1;\n }\n const jsonObject = { [scope.rootName]: scope.object };\n const jsonExp = new JsonExplorer(jsonObject, expansionLevel, {\n animateOpen: true,\n });\n const html = jsonExp.render(true);\n elem.append(html);\n },\n };\n },\n]);\n","import coreModule from 'app/angular/core_module';\n\nconst template = `\n<label for=\"check-{{ctrl.id}}\" class=\"gf-form-switch-container\">\n <div class=\"gf-form-label {{ctrl.labelClass}}\" ng-show=\"ctrl.label\">\n {{ctrl.label}}\n <info-popover mode=\"right-normal\" ng-if=\"ctrl.tooltip\" position=\"top center\">\n {{ctrl.tooltip}}\n </info-popover>\n </div>\n <div class=\"gf-form-switch {{ctrl.switchClass}}\" ng-if=\"ctrl.show\">\n <input id=\"check-{{ctrl.id}}\" type=\"checkbox\" ng-model=\"ctrl.checked\" ng-change=\"ctrl.internalOnChange()\">\n <span class=\"gf-form-switch__slider\"></span>\n </div>\n</label>\n`;\n\nconst checkboxTemplate = `\n<label for=\"check-{{ctrl.id}}\" class=\"gf-form-switch-container\">\n <div class=\"gf-form-label {{ctrl.labelClass}}\" ng-show=\"ctrl.label\">\n {{ctrl.label}}\n <info-popover mode=\"right-normal\" ng-if=\"ctrl.tooltip\" position=\"top center\">\n {{ctrl.tooltip}}\n </info-popover>\n </div>\n <div class=\"gf-form-checkbox {{ctrl.switchClass}}\" ng-if=\"ctrl.show\">\n <input id=\"check-{{ctrl.id}}\" type=\"checkbox\" ng-model=\"ctrl.checked\" ng-change=\"ctrl.internalOnChange()\">\n <span class=\"gf-form-switch__checkbox\"></span>\n </div>\n</label>\n`;\n\nexport class SwitchCtrl {\n onChange: any;\n checked: any;\n show: any;\n id: any;\n label?: string;\n\n static $inject = ['$scope', '$timeout'];\n\n constructor(\n $scope: any,\n private $timeout: any\n ) {\n this.show = true;\n this.id = $scope.$id;\n }\n\n internalOnChange() {\n return this.$timeout(() => {\n return this.onChange();\n });\n }\n}\n\nexport function switchDirective() {\n return {\n restrict: 'E',\n controller: SwitchCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n scope: {\n checked: '=',\n label: '@',\n labelClass: '@',\n tooltip: '@',\n switchClass: '@',\n onChange: '&',\n },\n template: template,\n };\n}\n\nexport function checkboxDirective() {\n return {\n restrict: 'E',\n controller: SwitchCtrl,\n controllerAs: 'ctrl',\n bindToController: true,\n scope: {\n checked: '=',\n label: '@',\n labelClass: '@',\n tooltip: '@',\n switchClass: '@',\n onChange: '&',\n },\n template: checkboxTemplate,\n };\n}\n\ncoreModule.directive('gfFormSwitch', switchDirective);\ncoreModule.directive('gfFormCheckbox', checkboxDirective);\n","import { each } from 'lodash';\n// @ts-ignore\nimport Drop from 'tether-drop';\n\nimport coreModule from 'app/angular/core_module';\n\nexport function infoPopover() {\n return {\n restrict: 'E',\n template: `<icon name=\"'info-circle'\" style=\"margin-left: 10px;\" size=\"'xs'\"></icon>`,\n transclude: true,\n link: (scope: any, elem: any, attrs: any, ctrl: any, transclude: any) => {\n const offset = attrs.offset || '0 -10px';\n const position = attrs.position || 'right middle';\n let classes = 'drop-help drop-hide-out-of-bounds';\n const openOn = 'hover';\n\n elem.addClass('gf-form-help-icon');\n\n if (attrs.wide) {\n classes += ' drop-wide';\n }\n\n if (attrs.mode) {\n elem.addClass('gf-form-help-icon--' + attrs.mode);\n }\n\n transclude((clone: any, newScope: any) => {\n const content = document.createElement('div');\n content.className = 'markdown-html';\n\n each(clone, (node) => {\n content.appendChild(node);\n });\n\n const dropOptions = {\n target: elem[0],\n content: content,\n position: position,\n classes: classes,\n openOn: openOn,\n hoverOpenDelay: 400,\n tetherOptions: {\n offset: offset,\n constraints: [\n {\n to: 'window',\n attachment: 'together',\n pin: true,\n },\n ],\n },\n };\n\n // Create drop in next digest after directive content is rendered.\n scope.$applyAsync(() => {\n const drop = new Drop(dropOptions);\n\n const unbind = scope.$on('$destroy', () => {\n drop.destroy();\n unbind();\n });\n });\n });\n },\n };\n}\n\ncoreModule.directive('infoPopover', infoPopover);\n","/**\n * Wrapper for the new ngReact <color-picker> directive for backward compatibility.\n * Allows remaining <spectrum-picker> untouched in outdated plugins.\n * Technically, it's just a wrapper for react component with two-way data binding support.\n */\nimport coreModule from '../core_module';\n\ncoreModule.directive('spectrumPicker', spectrumPicker);\n\nexport function spectrumPicker() {\n return {\n restrict: 'E',\n require: 'ngModel',\n scope: true,\n replace: true,\n template: '<color-picker color=\"ngModel.$viewValue\" on-change=\"onColorChange\"></color-picker>',\n link: (scope: any, element: any, attrs: any, ngModel: any) => {\n scope.ngModel = ngModel;\n scope.onColorChange = (color: string) => {\n ngModel.$setViewValue(color);\n };\n },\n };\n}\n","/**\n * codeEditor directive based on Ace code editor\n * https://github.com/ajaxorg/ace\n *\n * Basic usage:\n * <code-editor content=\"ctrl.target.query\" on-change=\"ctrl.panelCtrl.refresh()\"\n * data-mode=\"sql\" data-show-gutter>\n * </code-editor>\n *\n * Params:\n * content: Editor content.\n * onChange: Function called on content change (invoked on editor blur, ctrl+enter, not on every change).\n * getCompleter: Function returned external completer. Completer is an object implemented getCompletions() method,\n * see Prometheus Data Source implementation for details.\n *\n * Some Ace editor options available via data-* attributes:\n * data-mode - Language mode (text, sql, javascript, etc.). Default is 'text'.\n * data-theme - Editor theme (eg 'solarized_dark').\n * data-max-lines - Max editor height in lines. Editor grows automatically from 1 to maxLines.\n * data-show-gutter - Show gutter (contains line numbers and additional info).\n * data-tab-size - Tab size, default is 2.\n * data-behaviours-enabled - Specifies whether to use behaviors or not. \"Behaviors\" in this case is the auto-pairing of\n * special characters, like quotation marks, parenthesis, or brackets.\n * data-snippets-enabled - Specifies whether to use snippets or not. \"Snippets\" are small pieces of code that can be\n * inserted via the completion box.\n *\n * Keybindings:\n * Ctrl-Enter (Command-Enter): run onChange() function\n */\n\nimport coreModule from 'app/angular/core_module';\nimport config from 'app/core/config';\n\nconst DEFAULT_THEME_DARK = 'ace/theme/grafana-dark';\nconst DEFAULT_THEME_LIGHT = 'ace/theme/textmate';\nconst DEFAULT_MODE = 'text';\nconst DEFAULT_MAX_LINES = 10;\nconst DEFAULT_TAB_SIZE = 2;\nconst DEFAULT_BEHAVIORS = true;\nconst DEFAULT_SNIPPETS = true;\n\nconst editorTemplate = `<div></div>`;\n\nasync function link(scope: any, elem: any, attrs: any) {\n // Options\n const langMode = attrs.mode || DEFAULT_MODE;\n const maxLines = attrs.maxLines || DEFAULT_MAX_LINES;\n const showGutter = attrs.showGutter !== undefined;\n const tabSize = attrs.tabSize || DEFAULT_TAB_SIZE;\n const behavioursEnabled = attrs.behavioursEnabled ? attrs.behavioursEnabled === 'true' : DEFAULT_BEHAVIORS;\n const snippetsEnabled = attrs.snippetsEnabled ? attrs.snippetsEnabled === 'true' : DEFAULT_SNIPPETS;\n\n // Initialize editor\n const aceElem = elem.get(0);\n const { default: ace } = await import(/* webpackChunkName: \"brace\" */ 'brace');\n await import('brace/ext/language_tools');\n await import('brace/theme/textmate');\n await import('brace/mode/text');\n await import('brace/snippets/text');\n await import('brace/mode/sql');\n await import('brace/snippets/sql');\n await import('brace/mode/sqlserver');\n await import('brace/snippets/sqlserver');\n await import('brace/mode/markdown');\n await import('brace/snippets/markdown');\n await import('brace/mode/json');\n await import('brace/snippets/json');\n\n // @ts-ignore\n await import('./theme-grafana-dark');\n\n const codeEditor = ace.edit(aceElem);\n const editorSession = codeEditor.getSession();\n\n const editorOptions = {\n maxLines: maxLines,\n showGutter: showGutter,\n tabSize: tabSize,\n behavioursEnabled: behavioursEnabled,\n highlightActiveLine: false,\n showPrintMargin: false,\n autoScrollEditorIntoView: true, // this is needed if editor is inside scrollable page\n };\n\n // Set options\n codeEditor.setOptions(editorOptions);\n // disable depreacation warning\n codeEditor.$blockScrolling = Infinity;\n // Padding hacks\n (codeEditor.renderer as any).setScrollMargin(10, 10);\n codeEditor.renderer.setPadding(10);\n\n setThemeMode();\n setLangMode(langMode);\n setEditorContent(scope.content);\n\n // Add classes\n elem.addClass('gf-code-editor');\n const textarea = elem.find('textarea');\n textarea.addClass('gf-form-input');\n\n // All aria-label to be set for accessibility\n textarea.attr('aria-label', attrs.textareaLabel);\n\n if (scope.codeEditorFocus) {\n setTimeout(() => {\n textarea.focus();\n const domEl = textarea[0];\n if (domEl.setSelectionRange) {\n const pos = textarea.val().length * 2;\n domEl.setSelectionRange(pos, pos);\n }\n }, 100);\n }\n\n // Event handlers\n editorSession.on('change', (e) => {\n scope.$apply(() => {\n const newValue = codeEditor.getValue();\n scope.content = newValue;\n });\n });\n\n // Sync with outer scope - update editor content if model has been changed from outside of directive.\n scope.$watch('content', (newValue: any, oldValue: any) => {\n const editorValue = codeEditor.getValue();\n if (newValue !== editorValue && newValue !== oldValue) {\n scope.$$postDigest(() => {\n setEditorContent(newValue);\n });\n }\n });\n\n codeEditor.on('blur', () => {\n scope.onChange();\n });\n\n scope.$on('$destroy', () => {\n codeEditor.destroy();\n });\n\n // Keybindings\n codeEditor.commands.addCommand({\n name: 'executeQuery',\n bindKey: { win: 'Ctrl-Enter', mac: 'Command-Enter' },\n exec: () => {\n scope.onChange();\n },\n });\n\n function setLangMode(lang: string) {\n ace.acequire('ace/ext/language_tools');\n codeEditor.setOptions({\n enableBasicAutocompletion: true,\n enableLiveAutocompletion: true,\n enableSnippets: snippetsEnabled,\n });\n\n if (scope.getCompleter()) {\n // make copy of array as ace seems to share completers array between instances\n const anyEditor = codeEditor as any;\n anyEditor.completers = anyEditor.completers.slice();\n anyEditor.completers.push(scope.getCompleter());\n }\n\n const aceModeName = `ace/mode/${lang}`;\n editorSession.setMode(aceModeName);\n }\n\n function setThemeMode() {\n let theme = DEFAULT_THEME_DARK;\n if (config.bootData.user.lightTheme) {\n theme = DEFAULT_THEME_LIGHT;\n }\n\n codeEditor.setTheme(theme);\n }\n\n function setEditorContent(value: string) {\n codeEditor.setValue(value);\n codeEditor.clearSelection();\n }\n}\n\nexport function codeEditorDirective() {\n return {\n restrict: 'E',\n template: editorTemplate,\n scope: {\n content: '=',\n datasource: '=',\n codeEditorFocus: '<',\n onChange: '&',\n getCompleter: '&',\n },\n link: link,\n };\n}\n\ncoreModule.directive('codeEditor', codeEditorDirective);\n","import $ from 'jquery';\nimport { debounce, each, indexOf, map, partial, escape, unescape } from 'lodash';\n\nimport coreModule from 'app/angular/core_module';\n\nconst template = `\n<div class=\"dropdown cascade-open\">\n<a ng-click=\"showActionsMenu()\" class=\"query-part-name pointer dropdown-toggle\" data-toggle=\"dropdown\">{{part.label}}</a>\n<span>{{part.def.wrapOpen}}</span><span class=\"query-part-parameters\"></span><span>{{part.def.wrapClose}}</span>\n<ul class=\"dropdown-menu\">\n <li ng-repeat=\"action in partActions\">\n <a ng-click=\"triggerPartAction(action)\">{{action.text}}</a>\n </li>\n</ul>\n`;\n\ncoreModule.directive('sqlPartEditor', ['templateSrv', sqlPartEditorDirective]);\n\nexport function sqlPartEditorDirective(templateSrv: any) {\n const paramTemplate = '<input type=\"text\" class=\"hide input-mini\"></input>';\n\n return {\n restrict: 'E',\n template: template,\n scope: {\n part: '=',\n handleEvent: '&',\n debounce: '@',\n },\n link: function postLink($scope: any, elem: any) {\n const part = $scope.part;\n const partDef = part.def;\n const $paramsContainer = elem.find('.query-part-parameters');\n const debounceLookup = $scope.debounce;\n let cancelBlur: any = null;\n\n $scope.partActions = [];\n\n function clickFuncParam(this: any, paramIndex: number) {\n const $link = $(this);\n const $input = $link.next();\n\n $input.val(part.params[paramIndex]);\n $input.css('width', $link.width()! + 16 + 'px');\n\n $link.hide();\n $input.show();\n $input.focus();\n $input.select();\n\n const typeahead = $input.data('typeahead');\n if (typeahead) {\n $input.val('');\n typeahead.lookup();\n }\n }\n\n function inputBlur($input: JQuery, paramIndex: number) {\n cancelBlur = setTimeout(() => {\n switchToLink($input, paramIndex);\n }, 200);\n }\n\n function switchToLink($input: JQuery, paramIndex: number) {\n const $link = $input.prev();\n const newValue = $input.val();\n\n if (newValue !== '' || part.def.params[paramIndex].optional) {\n $link.html(templateSrv.highlightVariablesAsHtml(newValue));\n\n part.updateParam($input.val(), paramIndex);\n $scope.$apply(() => {\n $scope.handleEvent({ $event: { name: 'part-param-changed' } });\n });\n }\n\n $input.hide();\n $link.show();\n }\n\n function inputKeyPress(this: any, paramIndex: number, e: any) {\n if (e.which === 13) {\n switchToLink($(this), paramIndex);\n }\n }\n\n function inputKeyDown(this: any) {\n this.style.width = (3 + this.value.length) * 8 + 'px';\n }\n\n function addTypeahead($input: JQuery, param: any, paramIndex: number) {\n if (!param.options && !param.dynamicLookup) {\n return;\n }\n\n const typeaheadSource = (query: string, callback: any) => {\n if (param.options) {\n let options = param.options;\n if (param.type === 'int') {\n options = map(options, (val) => {\n return val.toString();\n });\n }\n return options;\n }\n\n $scope.$apply(() => {\n $scope.handleEvent({ $event: { name: 'get-param-options', param: param } }).then((result: any) => {\n const dynamicOptions = map(result, (op) => {\n return escape(op.value);\n });\n\n // add current value to dropdown if it's not in dynamicOptions\n if (indexOf(dynamicOptions, part.params[paramIndex]) === -1) {\n dynamicOptions.unshift(escape(part.params[paramIndex]));\n }\n\n callback(dynamicOptions);\n });\n });\n };\n\n $input.attr('data-provide', 'typeahead');\n\n $input.typeahead({\n source: typeaheadSource,\n minLength: 0,\n items: 1000,\n updater: (value: string) => {\n value = unescape(value);\n if (value === part.params[paramIndex]) {\n clearTimeout(cancelBlur);\n $input.focus();\n return value;\n }\n return value;\n },\n });\n\n const typeahead = $input.data('typeahead');\n typeahead.lookup = function () {\n this.query = this.$element.val() || '';\n const items = this.source(this.query, $.proxy(this.process, this));\n return items ? this.process(items) : items;\n };\n\n if (debounceLookup) {\n typeahead.lookup = debounce(typeahead.lookup, 500, { leading: true });\n }\n }\n\n $scope.showActionsMenu = () => {\n $scope.handleEvent({ $event: { name: 'get-part-actions' } }).then((res: any) => {\n $scope.partActions = res;\n });\n };\n\n $scope.triggerPartAction = (action: string) => {\n $scope.handleEvent({ $event: { name: 'action', action: action } });\n };\n\n function addElementsAndCompile() {\n each(partDef.params, (param: any, index: number) => {\n if (param.optional && part.params.length <= index) {\n return;\n }\n\n if (index > 0) {\n $('<span>' + partDef.separator + '</span>').appendTo($paramsContainer);\n }\n\n const paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);\n const $paramLink = $('<a class=\"query-part__link\">' + paramValue + '</a>');\n const $input = $(paramTemplate);\n\n $paramLink.appendTo($paramsContainer);\n $input.appendTo($paramsContainer);\n\n $input.blur(partial(inputBlur, $input, index));\n $input.keyup(inputKeyDown);\n $input.keypress(partial(inputKeyPress, index));\n $paramLink.click(partial(clickFuncParam, index));\n\n addTypeahead($input, param, index);\n });\n }\n\n function relink() {\n $paramsContainer.empty();\n addElementsAndCompile();\n }\n\n relink();\n },\n };\n}\n","import { coreModule } from 'app/angular/core_module';\n\ncoreModule.directive('datasourceHttpSettings', () => {\n return {\n scope: {\n current: '=',\n suggestUrl: '@',\n noDirectAccess: '@',\n showForwardOAuthIdentityOption: '@',\n },\n templateUrl: 'public/app/angular/partials/http_settings_next.html',\n link: {\n pre: ($scope: any) => {\n // do not show access option if direct access is disabled\n $scope.showAccessOption = $scope.noDirectAccess !== 'true';\n $scope.onChange = (datasourceSetting: any) => {\n $scope.current = datasourceSetting;\n };\n },\n },\n };\n});\n","import { coreModule } from 'app/angular/core_module';\n\ncoreModule.directive('datasourceTlsAuthSettings', () => {\n return {\n scope: {\n current: '=',\n },\n templateUrl: 'public/app/angular/partials/tls_auth_settings.html',\n };\n});\n","import angular, { ILocationService } from 'angular';\nimport { each } from 'lodash';\n\nimport { DataSourceApi, PanelEvents } from '@grafana/data';\nimport coreModule from 'app/angular/core_module';\nimport config from 'app/core/config';\n\nimport { importPanelPlugin } from '../../features/plugins/importPanelPlugin';\nimport { importDataSourcePlugin, importAppPlugin } from '../../features/plugins/plugin_loader';\n\ncoreModule.directive('pluginComponent', ['$compile', '$http', '$templateCache', '$location', pluginDirectiveLoader]);\n\nfunction pluginDirectiveLoader($compile: any, $http: any, $templateCache: any, $location: ILocationService) {\n function getTemplate(component: { template: any; templateUrl: any }) {\n if (component.template) {\n return Promise.resolve(component.template);\n }\n const cached = $templateCache.get(component.templateUrl);\n if (cached) {\n return Promise.resolve(cached);\n }\n return $http.get(component.templateUrl).then((res: any) => {\n return res.data;\n });\n }\n\n function relativeTemplateUrlToAbs(templateUrl: string, baseUrl: string) {\n if (!templateUrl) {\n return undefined;\n }\n if (templateUrl.indexOf('public') === 0) {\n return templateUrl;\n }\n\n return baseUrl + '/' + templateUrl;\n }\n\n function getPluginComponentDirective(options: any) {\n // handle relative template urls for plugin templates\n options.Component.templateUrl = relativeTemplateUrlToAbs(options.Component.templateUrl, options.baseUrl);\n\n return () => {\n return {\n templateUrl: options.Component.templateUrl,\n template: options.Component.template,\n restrict: 'E',\n controller: options.Component,\n controllerAs: 'ctrl',\n bindToController: true,\n scope: options.bindings,\n link: (scope: any, elem: any, attrs: any, ctrl: any) => {\n if (ctrl.link) {\n ctrl.link(scope, elem, attrs, ctrl);\n }\n if (ctrl.init) {\n ctrl.init();\n }\n },\n };\n };\n }\n\n function loadPanelComponentInfo(scope: any, attrs: any) {\n const componentInfo: any = {\n name: 'panel-plugin-' + scope.panel.type,\n bindings: { dashboard: '=', panel: '=', row: '=' },\n attrs: {\n dashboard: 'dashboard',\n panel: 'panel',\n class: 'panel-height-helper',\n },\n };\n\n const panelInfo = config.panels[scope.panel.type];\n return importPanelPlugin(panelInfo.id).then((panelPlugin) => {\n const PanelCtrl = panelPlugin.angularPanelCtrl;\n componentInfo.Component = PanelCtrl;\n\n if (!PanelCtrl || PanelCtrl.registered) {\n return componentInfo;\n }\n\n if (PanelCtrl.templatePromise) {\n return PanelCtrl.templatePromise.then((res: any) => {\n return componentInfo;\n });\n }\n\n if (panelInfo) {\n PanelCtrl.templateUrl = relativeTemplateUrlToAbs(PanelCtrl.templateUrl, panelInfo.baseUrl);\n }\n\n PanelCtrl.templatePromise = getTemplate(PanelCtrl).then((template: any) => {\n PanelCtrl.templateUrl = null;\n PanelCtrl.template = `<grafana-panel ctrl=\"ctrl\" class=\"panel-height-helper\">${template}</grafana-panel>`;\n return { ...componentInfo, baseUrl: panelInfo.baseUrl };\n });\n\n return PanelCtrl.templatePromise;\n });\n }\n\n function getModule(scope: any, attrs: any): any {\n switch (attrs.type) {\n // QueryCtrl\n case 'query-ctrl': {\n const ds: DataSourceApi = scope.ctrl.datasource as DataSourceApi;\n\n return Promise.resolve({\n baseUrl: ds.meta.baseUrl,\n name: 'query-ctrl-' + ds.meta.id,\n bindings: { target: '=', panelCtrl: '=', datasource: '=' },\n attrs: {\n target: 'ctrl.target',\n 'panel-ctrl': 'ctrl',\n datasource: 'ctrl.datasource',\n },\n Component: ds.components!.QueryCtrl,\n });\n }\n // Annotations\n case 'annotations-query-ctrl': {\n const baseUrl = scope.ctrl.currentDatasource.meta.baseUrl;\n const pluginId = scope.ctrl.currentDatasource.meta.id;\n\n return importDataSourcePlugin(scope.ctrl.currentDatasource.meta).then((dsPlugin) => {\n return {\n baseUrl,\n name: 'annotations-query-ctrl-' + pluginId,\n bindings: { annotation: '=', datasource: '=' },\n attrs: {\n annotation: 'ctrl.currentAnnotation',\n datasource: 'ctrl.currentDatasource',\n },\n Component: dsPlugin.components.AnnotationsQueryCtrl,\n };\n });\n }\n // Datasource ConfigCtrl\n case 'datasource-config-ctrl': {\n const dsMeta = scope.ctrl.datasourceMeta;\n const angularUrl = $location.url();\n return importDataSourcePlugin(dsMeta).then((dsPlugin) => {\n scope.$watch(\n 'ctrl.current',\n () => {\n // This watcher can trigger when we navigate away due to late digests\n // This check is to stop onModelChanged from being called when navigating away\n // as it triggers a redux action which comes before the angular $routeChangeSucces and\n // This makes the bridgeSrv think location changed from redux before detecting it was actually\n // changed from angular.\n if (angularUrl === $location.url()) {\n scope.onModelChanged(scope.ctrl.current);\n }\n },\n true\n );\n\n return {\n baseUrl: dsMeta.baseUrl,\n name: 'ds-config-' + dsMeta.id,\n bindings: { meta: '=', current: '=' },\n attrs: { meta: 'ctrl.datasourceMeta', current: 'ctrl.current' },\n Component: dsPlugin.angularConfigCtrl,\n };\n });\n }\n // AppConfigCtrl\n case 'app-config-ctrl': {\n const model = scope.ctrl.model;\n return importAppPlugin(model).then((appPlugin) => {\n return {\n baseUrl: model.baseUrl,\n name: 'app-config-' + model.id,\n bindings: { appModel: '=', appEditCtrl: '=' },\n attrs: { 'app-model': 'ctrl.model', 'app-edit-ctrl': 'ctrl' },\n Component: appPlugin.angularConfigCtrl,\n };\n });\n }\n // Panel\n case 'panel': {\n return loadPanelComponentInfo(scope, attrs);\n }\n default: {\n return Promise.reject({\n message: 'Could not find component type: ' + attrs.type,\n });\n }\n }\n }\n\n function appendAndCompile(scope: any, elem: JQuery, componentInfo: any) {\n const child = angular.element(document.createElement(componentInfo.name));\n each(componentInfo.attrs, (value, key) => {\n child.attr(key, value);\n });\n\n $compile(child)(scope);\n elem.empty();\n\n // let a binding digest cycle complete before adding to dom\n setTimeout(() => {\n scope.$applyAsync(() => {\n elem.append(child);\n setTimeout(() => {\n scope.$applyAsync(() => {\n scope.$broadcast(PanelEvents.componentDidMount.name);\n });\n });\n });\n });\n }\n\n function registerPluginComponent(scope: any, elem: JQuery, attrs: any, componentInfo: any) {\n if (componentInfo.notFound) {\n elem.empty();\n return;\n }\n\n if (!componentInfo.Component) {\n throw {\n message: 'Failed to find exported plugin component for ' + componentInfo.name,\n };\n }\n\n if (!componentInfo.Component.registered) {\n const directiveName = attrs.$normalize(componentInfo.name);\n const directiveFn = getPluginComponentDirective(componentInfo);\n coreModule.directive(directiveName, directiveFn);\n componentInfo.Component.registered = true;\n }\n\n appendAndCompile(scope, elem, componentInfo);\n }\n\n return {\n restrict: 'E',\n link: (scope: any, elem: JQuery, attrs: any) => {\n getModule(scope, attrs)\n .then((componentInfo: any) => {\n registerPluginComponent(scope, elem, attrs, componentInfo);\n })\n .catch((err: any) => {\n console.error('Plugin component error', err);\n });\n },\n };\n}\n","import { IRootScopeService, IAngularEvent, auto } from 'angular';\nimport $ from 'jquery';\nimport _ from 'lodash'; // eslint-disable-line lodash/import-scope\n\nimport { AppEvent } from '@grafana/data';\nimport { setLegacyAngularInjector, setAngularLoader } from '@grafana/runtime';\nimport { colors } from '@grafana/ui';\nimport coreModule from 'app/angular/core_module';\nimport { AngularLoader } from 'app/angular/services/AngularLoader';\nimport appEvents from 'app/core/app_events';\nimport config from 'app/core/config';\nimport { ContextSrv } from 'app/core/services/context_srv';\nimport { AppEventEmitter, AppEventConsumer } from 'app/types';\n\nimport { UtilSrv } from './services/UtilSrv';\n\nexport type GrafanaRootScope = IRootScopeService & AppEventEmitter & AppEventConsumer & { colors: string[] };\n\nexport class GrafanaCtrl {\n static $inject = ['$scope', 'utilSrv', '$rootScope', 'contextSrv', 'angularLoader', '$injector'];\n\n constructor(\n $scope: any,\n utilSrv: UtilSrv,\n $rootScope: GrafanaRootScope,\n contextSrv: ContextSrv,\n angularLoader: AngularLoader,\n $injector: auto.IInjectorService\n ) {\n // make angular loader service available to react components\n setAngularLoader(angularLoader);\n setLegacyAngularInjector($injector);\n\n $scope.init = () => {\n $scope.contextSrv = contextSrv;\n $scope.appSubUrl = config.appSubUrl;\n $scope._ = _;\n utilSrv.init();\n };\n\n $rootScope.colors = colors;\n\n $rootScope.onAppEvent = function <T>(\n event: AppEvent<T> | string,\n callback: (event: IAngularEvent, ...args: any[]) => void,\n localScope?: any\n ) {\n let unbind;\n if (typeof event === 'string') {\n unbind = $rootScope.$on(event, callback);\n } else {\n unbind = $rootScope.$on(event.name, callback);\n }\n\n let callerScope = this;\n if (callerScope.$id === 1 && !localScope) {\n console.warn('warning rootScope onAppEvent called without localscope');\n }\n if (localScope) {\n callerScope = localScope;\n }\n callerScope.$on('$destroy', unbind);\n };\n\n $rootScope.appEvent = <T>(event: AppEvent<T> | string, payload?: T | any) => {\n if (typeof event === 'string') {\n $rootScope.$emit(event, payload);\n appEvents.emit(event, payload);\n } else {\n $rootScope.$emit(event.name, payload);\n appEvents.emit(event, payload);\n }\n };\n\n $scope.init();\n }\n}\n\nexport function grafanaAppDirective() {\n return {\n restrict: 'E',\n controller: GrafanaCtrl,\n link: (scope: IRootScopeService & AppEventEmitter, elem: JQuery) => {\n const body = $('body');\n // see https://github.com/zenorocha/clipboard.js/issues/155\n $.fn.modal.Constructor.prototype.enforceFocus = () => {};\n\n // handle in active view state class\n let lastActivity = new Date().getTime();\n let activeUser = true;\n const inActiveTimeLimit = 60 * 5000;\n\n function checkForInActiveUser() {\n if (!activeUser) {\n return;\n }\n // only go to activity low mode on dashboard page\n if (!body.hasClass('page-dashboard')) {\n return;\n }\n\n if (new Date().getTime() - lastActivity > inActiveTimeLimit) {\n activeUser = false;\n body.addClass('view-mode--inactive');\n }\n }\n\n function userActivityDetected() {\n lastActivity = new Date().getTime();\n if (!activeUser) {\n activeUser = true;\n body.removeClass('view-mode--inactive');\n }\n }\n\n // mouse and keyboard is user activity\n body.mousemove(userActivityDetected);\n body.keydown(userActivityDetected);\n // set useCapture = true to catch event here\n document.addEventListener('wheel', userActivityDetected, { capture: true, passive: true });\n // treat tab change as activity\n document.addEventListener('visibilitychange', userActivityDetected);\n\n // check every 2 seconds\n setInterval(checkForInActiveUser, 2000);\n\n // handle document clicks that should hide things\n body.click((evt) => {\n const target = $(evt.target);\n if (target.parents().length === 0) {\n return;\n }\n\n // ensure dropdown menu doesn't impact on z-index\n body.find('.dropdown-menu-open').removeClass('dropdown-menu-open');\n\n // for stuff that animates, slides out etc, clicking it needs to\n // hide it right away\n const clickAutoHide = target.closest('[data-click-hide]');\n if (clickAutoHide.length) {\n const clickAutoHideParent = clickAutoHide.parent();\n clickAutoHide.detach();\n setTimeout(() => {\n clickAutoHideParent.append(clickAutoHide);\n }, 100);\n }\n\n // hide popovers\n const popover = elem.find('.popover');\n if (popover.length > 0 && target.parents('.graph-legend').length === 0) {\n popover.hide();\n }\n });\n },\n };\n}\n\ncoreModule.directive('grafanaApp', grafanaAppDirective);\n","// This is empty for now, as I think it's not going to be necessary.\n// This replaces Angular RouteParamsProvider implementation with a dummy one to keep the ball rolling\n\nimport { navigationLogger } from '@grafana/runtime';\n\nexport class RouteParamsProvider {\n constructor() {\n navigationLogger('Patch angular', false, 'RouteParamsProvider');\n }\n $get = () => {\n // throw new Error('TODO: Refactor $routeParams');\n };\n}\n","// This is empty for now, as I think it's not going to be necessary.\n// This replaces Angular RouteProvider implementation with a dummy one to keep the ball rolling\n\nimport { navigationLogger } from '@grafana/runtime';\n\nexport class RouteProvider {\n constructor() {\n navigationLogger('Patch angular', false, 'RouteProvider');\n }\n\n $get() {\n return this;\n }\n}\n","import { ILocationService } from 'angular';\n\nimport { RouteParamsProvider } from '../core/navigation/patch/RouteParamsProvider';\nimport { RouteProvider } from '../core/navigation/patch/RouteProvider';\n\nimport { AngularLocationWrapper } from './AngularLocationWrapper';\nimport { coreModule } from './core_module';\n\n// Neutralizing Angular’s location tampering\n// https://stackoverflow.com/a/19825756\nconst tamperAngularLocation = () => {\n coreModule.config([\n '$provide',\n ($provide: any) => {\n $provide.decorator('$browser', [\n '$delegate',\n ($delegate: any) => {\n $delegate.onUrlChange = () => {};\n $delegate.url = () => '';\n\n return $delegate;\n },\n ]);\n },\n ]);\n};\n\n// Intercepting $location service with implementation based on history\nconst interceptAngularLocation = () => {\n coreModule.config([\n '$provide',\n ($provide: any) => {\n $provide.decorator('$location', [\n '$delegate',\n ($delegate: ILocationService) => {\n $delegate = new AngularLocationWrapper() as unknown as ILocationService;\n return $delegate;\n },\n ]);\n },\n ]);\n coreModule.provider('$route', RouteProvider);\n coreModule.provider('$routeParams', RouteParamsProvider);\n};\n\nexport function initAngularRoutingBridge() {\n tamperAngularLocation();\n interceptAngularLocation();\n}\n","export function monkeyPatchInjectorWithPreAssignedBindings(injector: any) {\n injector.oldInvoke = injector.invoke;\n injector.invoke = (fn: any, self: any, locals: any, serviceName: any) => {\n const parentScope = locals?.$scope?.$parent;\n\n if (parentScope) {\n // PanelCtrl\n if (parentScope.panel) {\n self.panel = parentScope.panel;\n }\n\n // Panels & dashboard SettingsCtrl\n if (parentScope.dashboard) {\n self.dashboard = parentScope.dashboard;\n }\n\n // Query editors\n if (parentScope.ctrl?.target) {\n self.panelCtrl = parentScope.ctrl;\n self.datasource = parentScope.ctrl.datasource;\n self.target = parentScope.ctrl.target;\n }\n\n // Data source ConfigCtrl\n if (parentScope.ctrl?.datasourceMeta) {\n self.meta = parentScope.ctrl.datasourceMeta;\n self.current = parentScope.ctrl.current;\n }\n\n // Data source AnnotationsQueryCtrl\n if (parentScope.ctrl?.currentAnnotation) {\n self.annotation = parentScope.ctrl.currentAnnotation;\n self.datasource = parentScope.ctrl.currentDatasource;\n }\n\n // App config ctrl\n if (parentScope.isAppConfigCtrl) {\n self.appEditCtrl = parentScope.ctrl;\n self.appModel = parentScope.ctrl.model;\n }\n\n // App page ctrl\n if (parentScope.$parent?.$parent?.ctrl?.appModel) {\n self.appModel = parentScope.$parent?.$parent?.ctrl?.appModel;\n }\n }\n\n return injector.oldInvoke(fn, self, locals, serviceName);\n };\n}\n","import React, { ComponentType, useEffect, useRef } from 'react';\nimport { Observable, ReplaySubject } from 'rxjs';\n\nimport { EventBusSrv, PanelData, PanelPlugin, PanelProps, FieldConfigSource } from '@grafana/data';\nimport { AngularComponent, getAngularLoader, RefreshEvent } from '@grafana/runtime';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { DashboardModelCompatibilityWrapper } from 'app/features/dashboard-scene/utils/DashboardModelCompatibilityWrapper';\nimport { GetDataOptions } from 'app/features/query/state/PanelQueryRunner';\nimport { RenderEvent } from 'app/types/events';\n\ninterface AngularScopeProps {\n panel: PanelModelCompatibilityWrapper;\n dashboard: DashboardModelCompatibilityWrapper;\n queryRunner: FakeQueryRunner;\n size: {\n height: number;\n width: number;\n };\n}\n\nexport function getAngularPanelReactWrapper(plugin: PanelPlugin): ComponentType<PanelProps> {\n return function AngularWrapper(props: PanelProps) {\n const divRef = useRef<HTMLDivElement>(null);\n const angularState = useRef<AngularScopeProps | undefined>();\n const angularComponent = useRef<AngularComponent | undefined>();\n\n useEffect(() => {\n if (!divRef.current) {\n return;\n }\n\n const loader = getAngularLoader();\n const template = '<plugin-component type=\"panel\" class=\"panel-height-helper\"></plugin-component>';\n const queryRunner = new FakeQueryRunner();\n const fakePanel = new PanelModelCompatibilityWrapper(plugin, props, queryRunner);\n\n angularState.current = {\n // @ts-ignore\n panel: fakePanel,\n // @ts-ignore\n dashboard: getDashboardSrv().getCurrent(),\n size: { width: props.width, height: props.height },\n queryRunner: queryRunner,\n };\n\n angularComponent.current = loader.load(divRef.current, angularState.current, template);\n\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, []);\n\n // Re-render angular panel when dimensions change\n useEffect(() => {\n if (!angularComponent.current) {\n return;\n }\n\n angularState.current!.size.height = props.height;\n angularState.current!.size.width = props.width;\n angularState.current!.panel.events.publish(new RenderEvent());\n }, [props.width, props.height]);\n\n // Pass new data to angular panel\n useEffect(() => {\n if (!angularState.current?.panel) {\n return;\n }\n\n angularState.current.queryRunner.forwardNewData(props.data);\n }, [props.data]);\n\n return <div ref={divRef} className=\"panel-height-helper\" />;\n };\n}\n\nclass PanelModelCompatibilityWrapper {\n id: number;\n type: string;\n title: string;\n plugin: PanelPlugin;\n events: EventBusSrv;\n queryRunner: FakeQueryRunner;\n fieldConfig: FieldConfigSource;\n options: Record<string, unknown>;\n\n constructor(plugin: PanelPlugin, props: PanelProps, queryRunner: FakeQueryRunner) {\n // Assign legacy \"root\" level options\n if (props.options.angularOptions) {\n Object.assign(this, props.options.angularOptions);\n }\n\n this.id = props.id;\n this.type = plugin.meta.id;\n this.title = props.title;\n this.fieldConfig = props.fieldConfig;\n this.options = props.options;\n\n this.plugin = plugin;\n this.events = new EventBusSrv();\n this.queryRunner = queryRunner;\n }\n\n refresh() {\n this.events.publish(new RefreshEvent());\n }\n\n render() {\n this.events.publish(new RenderEvent());\n }\n\n getQueryRunner() {\n return this.queryRunner;\n }\n}\n\nclass FakeQueryRunner {\n private subject = new ReplaySubject<PanelData>(1);\n\n getData(options: GetDataOptions): Observable<PanelData> {\n return this.subject;\n }\n\n forwardNewData(data: PanelData) {\n this.subject.next(data);\n }\n\n run() {}\n}\n","import { deprecationWarning } from '@grafana/data';\nimport { appEvents } from 'app/core/app_events';\n\nimport { HideModalEvent, ShowModalEvent } from '../../types/events';\n\n/**\n * Old legacy utilSrv exposed to angular services and handles angular modals.\n * Not used by any core or known external plugin.\n */\nexport class UtilSrv {\n modalScope: any;\n\n constructor() {}\n\n init() {\n appEvents.subscribe(ShowModalEvent, (e) => this.showModal(e.payload));\n appEvents.subscribe(HideModalEvent, this.hideModal.bind(this));\n }\n\n /**\n * @deprecated use showModalReact instead that has this capability built in\n */\n hideModal() {\n deprecationWarning('UtilSrv', 'hideModal', '');\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n }\n\n /**\n * @deprecated\n */\n showModal(options: any) {\n deprecationWarning('UtilSrv', 'showModal', 'publish ShowModalReactEvent');\n }\n}\n","import { cloneDeep } from 'lodash';\n\nimport { AnnotationEvent, deprecationWarning } from '@grafana/data';\nimport { deleteAnnotation, saveAnnotation, updateAnnotation } from 'app/features/annotations/api';\nimport { AnnotationQueryOptions } from 'app/features/annotations/types';\n\n/**\n * @deprecated AnnotationsSrv is deprecated in favor of DashboardQueryRunner\n */\nexport class AnnotationsSrv {\n /**\n * @deprecated clearPromiseCaches is deprecated\n */\n clearPromiseCaches() {\n deprecationWarning('annotations_srv.ts', 'clearPromiseCaches', 'DashboardQueryRunner');\n }\n\n /**\n * @deprecated getAnnotations is deprecated in favor of DashboardQueryRunner.getResult\n */\n getAnnotations(options: AnnotationQueryOptions) {\n deprecationWarning('annotations_srv.ts', 'getAnnotations', 'DashboardQueryRunner.getResult');\n return Promise.resolve({ annotations: [], alertState: undefined });\n }\n\n /**\n * @deprecated getAlertStates is deprecated in favor of DashboardQueryRunner.getResult\n */\n getAlertStates(options: any) {\n deprecationWarning('annotations_srv.ts', 'getAlertStates', 'DashboardQueryRunner.getResult');\n return Promise.resolve(undefined);\n }\n\n /**\n * @deprecated getGlobalAnnotations is deprecated in favor of DashboardQueryRunner.getResult\n */\n getGlobalAnnotations(options: AnnotationQueryOptions) {\n deprecationWarning('annotations_srv.ts', 'getGlobalAnnotations', 'DashboardQueryRunner.getResult');\n return Promise.resolve([]);\n }\n\n /**\n * @deprecated saveAnnotationEvent is deprecated\n */\n saveAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'saveAnnotationEvent', 'api/saveAnnotation');\n return saveAnnotation(annotation);\n }\n\n /**\n * @deprecated updateAnnotationEvent is deprecated\n */\n updateAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'updateAnnotationEvent', 'api/updateAnnotation');\n return updateAnnotation(annotation);\n }\n\n /**\n * @deprecated deleteAnnotationEvent is deprecated\n */\n deleteAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'deleteAnnotationEvent', 'api/deleteAnnotation');\n return deleteAnnotation(annotation);\n }\n\n /**\n * @deprecated translateQueryResult is deprecated in favor of DashboardQueryRunner/utils/translateQueryResult\n */\n translateQueryResult(annotation: any, results: any) {\n deprecationWarning('annotations_srv.ts', 'translateQueryResult', 'DashboardQueryRunner/utils/translateQueryResult');\n // if annotation has snapshotData\n // make clone and remove it\n if (annotation.snapshotData) {\n annotation = cloneDeep(annotation);\n delete annotation.snapshotData;\n }\n\n for (const item of results) {\n item.source = annotation;\n item.color = annotation.iconColor;\n item.type = annotation.name;\n item.isRegion = item.timeEnd && item.time !== item.timeEnd;\n }\n\n return results;\n }\n}\n","import { getBackendSrv, getDataSourceSrv } from '@grafana/runtime';\nimport { contextSrv } from 'app/core/core';\nimport { getDashboardSrv } from 'app/features/dashboard/services/DashboardSrv';\nimport { validationSrv } from 'app/features/manage-dashboards/services/ValidationSrv';\nimport { getLinkSrv } from 'app/features/panel/panellinks/link_srv';\n\nimport coreModule from './core_module';\nimport { UtilSrv } from './services/UtilSrv';\nimport { AnnotationsSrv } from './services/annotations_srv';\n\nexport function registerComponents() {\n coreModule.factory('backendSrv', () => getBackendSrv());\n coreModule.factory('contextSrv', () => contextSrv);\n coreModule.factory('dashboardSrv', () => getDashboardSrv());\n coreModule.factory('datasourceSrv', () => getDataSourceSrv());\n coreModule.factory('linkSrv', () => getLinkSrv());\n coreModule.factory('validationSrv', () => validationSrv);\n coreModule.service('annotationsSrv', AnnotationsSrv);\n coreModule.service('utilSrv', UtilSrv);\n}\n","import 'angular';\nimport 'angular-route';\nimport 'angular-sanitize';\nimport 'angular-bindonce';\n\nimport angular from 'angular'; // eslint-disable-line no-duplicate-imports\nimport { extend } from 'lodash';\n\nimport { getTemplateSrv, SystemJS } from '@grafana/runtime';\nimport { coreModule, angularModules } from 'app/angular/core_module';\nimport appEvents from 'app/core/app_events';\nimport { config } from 'app/core/config';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport { DashboardLoaderSrv } from 'app/features/dashboard/services/DashboardLoaderSrv';\nimport { getTimeSrv } from 'app/features/dashboard/services/TimeSrv';\nimport { setAngularPanelReactWrapper } from 'app/features/plugins/importPanelPlugin';\nimport { buildImportMap } from 'app/features/plugins/loader/utils';\nimport * as sdk from 'app/plugins/sdk';\n\nimport { registerAngularDirectives } from './angular_wrappers';\nimport { initAngularRoutingBridge } from './bridgeReactAngularRouting';\nimport { monkeyPatchInjectorWithPreAssignedBindings } from './injectorMonkeyPatch';\nimport { getAngularPanelReactWrapper } from './panel/AngularPanelReactWrapper';\nimport { promiseToDigest } from './promiseToDigest';\nimport { registerComponents } from './registerComponents';\n\n// Angular plugin dependencies map\nconst importMap = {\n angular: {\n ...angular,\n default: angular,\n },\n 'app/core/core_module': {\n default: coreModule,\n __useDefault: true,\n },\n 'app/core/core': {\n appEvents: appEvents,\n contextSrv: contextSrv,\n coreModule: coreModule,\n },\n 'app/plugins/sdk': sdk,\n 'app/core/utils/promiseToDigest': { promiseToDigest },\n} as Record<string, System.Module>;\n\nexport class AngularApp {\n ngModuleDependencies: any[];\n preBootModules: any[];\n registerFunctions: any;\n\n constructor() {\n this.preBootModules = [];\n this.ngModuleDependencies = [];\n this.registerFunctions = {};\n }\n\n init() {\n const app = angular.module('grafana', []);\n\n setAngularPanelReactWrapper(getAngularPanelReactWrapper);\n\n app.config([\n '$controllerProvider',\n '$compileProvider',\n '$filterProvider',\n '$httpProvider',\n '$provide',\n '$sceDelegateProvider',\n (\n $controllerProvider: angular.IControllerProvider,\n $compileProvider: angular.ICompileProvider,\n $filterProvider: angular.IFilterProvider,\n $httpProvider: angular.IHttpProvider,\n $provide: angular.auto.IProvideService,\n $sceDelegateProvider: angular.ISCEDelegateProvider\n ) => {\n if (config.buildInfo.env !== 'development') {\n $compileProvider.debugInfoEnabled(false);\n }\n\n $httpProvider.useApplyAsync(true);\n\n if (Boolean(config.pluginsCDNBaseURL)) {\n $sceDelegateProvider.trustedResourceUrlList(['self', `${config.pluginsCDNBaseURL}/**`]);\n }\n\n this.registerFunctions.controller = $controllerProvider.register;\n this.registerFunctions.directive = $compileProvider.directive;\n this.registerFunctions.factory = $provide.factory;\n this.registerFunctions.service = $provide.service;\n this.registerFunctions.filter = $filterProvider.register;\n\n $provide.decorator('$http', [\n '$delegate',\n '$templateCache',\n ($delegate: any, $templateCache: any) => {\n const get = $delegate.get;\n $delegate.get = (url: string, config: any) => {\n if (url.match(/\\.html$/)) {\n // some template's already exist in the cache\n if (!$templateCache.get(url)) {\n url += '?v=' + new Date().getTime();\n }\n }\n return get(url, config);\n };\n return $delegate;\n },\n ]);\n },\n ]);\n\n this.ngModuleDependencies = ['grafana.core', 'ngSanitize', 'grafana', 'pasvaz.bindonce', 'react'];\n\n // makes it possible to add dynamic stuff\n angularModules.forEach((m: angular.IModule) => {\n this.useModule(m);\n });\n\n // register react angular wrappers\n angular.module('grafana.services').service('dashboardLoaderSrv', DashboardLoaderSrv);\n\n coreModule.factory('timeSrv', () => getTimeSrv());\n coreModule.factory('templateSrv', () => getTemplateSrv());\n\n registerAngularDirectives();\n registerComponents();\n initAngularRoutingBridge();\n\n const imports = buildImportMap(importMap);\n // pass the map of module names so systemjs can resolve them\n SystemJS.addImportMap({ imports });\n\n // disable tool tip animation\n $.fn.tooltip.defaults.animation = false;\n }\n\n useModule(module: angular.IModule) {\n if (this.preBootModules) {\n this.preBootModules.push(module);\n } else {\n extend(module, this.registerFunctions);\n }\n this.ngModuleDependencies.push(module.name);\n return module;\n }\n\n bootstrap() {\n const injector = angular.bootstrap(document.getElementById('ngRoot')!, this.ngModuleDependencies);\n\n monkeyPatchInjectorWithPreAssignedBindings(injector);\n\n injector.invoke(() => {\n this.preBootModules.forEach((module) => {\n extend(module, this.registerFunctions);\n });\n\n // I don't know\n return () => {};\n });\n\n return injector;\n }\n}\n","import { isArray } from 'lodash';\nimport { Unsubscribable } from 'rxjs';\n\nimport {\n DataFrame,\n DataQueryResponse,\n DataSourceApi,\n LegacyResponseData,\n LoadingState,\n PanelData,\n PanelEvents,\n TimeRange,\n toDataFrameDTO,\n toLegacyResponseData,\n} from '@grafana/data';\nimport { PanelCtrl } from 'app/angular/panel/panel_ctrl';\nimport { ContextSrv } from 'app/core/services/context_srv';\nimport { PanelModel } from 'app/features/dashboard/state';\nimport { applyPanelTimeOverrides } from 'app/features/dashboard/utils/panel';\n\nimport { PanelQueryRunner } from '../../features/query/state/PanelQueryRunner';\n\nclass MetricsPanelCtrl extends PanelCtrl {\n declare datasource: DataSourceApi;\n declare range: TimeRange;\n\n contextSrv: ContextSrv;\n datasourceSrv: any;\n timeSrv: any;\n templateSrv: any;\n interval: any;\n intervalMs: any;\n resolution: any;\n timeInfo?: string;\n skipDataOnInit = false;\n dataList: LegacyResponseData[] = [];\n querySubscription?: Unsubscribable | null;\n useDataFrames = false;\n panelData?: PanelData;\n\n constructor($scope: any, $injector: any) {\n super($scope, $injector);\n\n this.contextSrv = $injector.get('contextSrv');\n this.datasourceSrv = $injector.get('datasourceSrv');\n this.timeSrv = $injector.get('timeSrv');\n this.templateSrv = $injector.get('templateSrv');\n this.panel.datasource = this.panel.datasource || null;\n\n this.events.on(PanelEvents.refresh, this.onMetricsPanelRefresh.bind(this));\n this.events.on(PanelEvents.panelTeardown, this.onPanelTearDown.bind(this));\n this.events.on(PanelEvents.componentDidMount, this.onMetricsPanelMounted.bind(this));\n }\n\n private onMetricsPanelMounted() {\n const queryRunner = this.panel.getQueryRunner() as PanelQueryRunner;\n this.querySubscription = queryRunner\n .getData({ withTransforms: true, withFieldConfig: true })\n .subscribe(this.panelDataObserver);\n }\n\n private onPanelTearDown() {\n if (this.querySubscription) {\n this.querySubscription.unsubscribe();\n this.querySubscription = null;\n }\n }\n\n private onMetricsPanelRefresh() {\n // ignore fetching data if another panel is in fullscreen\n if (this.otherPanelInFullscreenMode()) {\n return;\n }\n\n // if we have snapshot data use that\n if (this.panel.snapshotData) {\n this.updateTimeRange();\n let data = this.panel.snapshotData;\n // backward compatibility\n if (!isArray(data)) {\n data = data.data;\n }\n\n this.panelData = {\n state: LoadingState.Done,\n series: data,\n timeRange: this.range,\n };\n\n // Defer panel rendering till the next digest cycle.\n // For some reason snapshot panels don't init at this time, so this helps to avoid rendering issues.\n return this.$timeout(() => {\n this.events.emit(PanelEvents.dataSnapshotLoad, data);\n });\n }\n\n // clear loading/error state\n delete this.error;\n this.loading = true;\n\n // load datasource service\n return this.datasourceSrv\n .get(this.panel.datasource, this.panel.scopedVars)\n .then(this.issueQueries.bind(this))\n .catch((err: any) => {\n this.processDataError(err);\n });\n }\n\n processDataError(err: any) {\n // if canceled keep loading set to true\n if (err.cancelled) {\n console.log('Panel request cancelled', err);\n return;\n }\n\n this.error = err.message || 'Request Error';\n\n if (err.data) {\n if (err.data.message) {\n this.error = err.data.message;\n } else if (err.data.error) {\n this.error = err.data.error;\n }\n }\n\n this.angularDirtyCheck();\n }\n\n angularDirtyCheck() {\n if (!this.$scope.$root.$$phase) {\n this.$scope.$digest();\n }\n }\n\n // Updates the response with information from the stream\n panelDataObserver = {\n next: (data: PanelData) => {\n this.panelData = data;\n\n if (data.state === LoadingState.Error) {\n this.loading = false;\n this.processDataError(data.error);\n }\n\n // Ignore data in loading state\n if (data.state === LoadingState.Loading) {\n this.loading = true;\n this.angularDirtyCheck();\n return;\n }\n\n if (data.request) {\n const { timeInfo } = data.request;\n if (timeInfo) {\n this.timeInfo = timeInfo;\n }\n }\n\n if (data.timeRange) {\n this.range = data.timeRange;\n }\n\n if (this.useDataFrames) {\n this.handleDataFrames(data.series);\n } else {\n // Make the results look as if they came directly from a <6.2 datasource request\n const legacy = data.series.map((v) => toLegacyResponseData(v));\n this.handleQueryResult({ data: legacy });\n }\n\n this.angularDirtyCheck();\n },\n };\n\n updateTimeRange(datasource?: DataSourceApi) {\n this.datasource = datasource || this.datasource;\n this.range = this.timeSrv.timeRange();\n\n const newTimeData = applyPanelTimeOverrides(this.panel, this.range);\n this.timeInfo = newTimeData.timeInfo;\n this.range = newTimeData.timeRange;\n }\n\n issueQueries(datasource: DataSourceApi) {\n this.updateTimeRange(datasource);\n\n this.datasource = datasource;\n\n const panel = this.panel as PanelModel;\n const queryRunner = panel.getQueryRunner();\n\n return queryRunner.run({\n datasource: panel.datasource,\n queries: panel.targets,\n panelId: panel.id,\n dashboardUID: this.dashboard.uid,\n timezone: this.dashboard.getTimezone(),\n timeInfo: this.timeInfo,\n timeRange: this.range,\n maxDataPoints: panel.maxDataPoints || this.width,\n minInterval: panel.interval,\n scopedVars: panel.scopedVars,\n cacheTimeout: panel.cacheTimeout,\n queryCachingTTL: panel.queryCachingTTL,\n transformations: panel.transformations,\n });\n }\n\n handleDataFrames(data: DataFrame[]) {\n this.loading = false;\n\n if (this.dashboard && this.dashboard.snapshot) {\n this.panel.snapshotData = data.map((frame) => toDataFrameDTO(frame));\n }\n\n try {\n this.events.emit(PanelEvents.dataFramesReceived, data);\n } catch (err) {\n this.processDataError(err);\n }\n }\n\n handleQueryResult(result: DataQueryResponse) {\n this.loading = false;\n\n if (this.dashboard.snapshot) {\n this.panel.snapshotData = result.data;\n }\n\n if (!result || !result.data) {\n console.log('Data source query result invalid, missing data field:', result);\n result = { data: [] };\n }\n\n try {\n this.events.emit(PanelEvents.dataReceived, result.data);\n } catch (err) {\n this.processDataError(err);\n }\n }\n}\n\nexport { MetricsPanelCtrl };\n","import { auto } from 'angular';\nimport { isString } from 'lodash';\n\nimport {\n AppEvent,\n PanelEvents,\n PanelPluginMeta,\n AngularPanelMenuItem,\n EventBusExtended,\n EventBusSrv,\n} from '@grafana/data';\nimport { AngularLocationWrapper } from 'app/angular/AngularLocationWrapper';\nimport config from 'app/core/config';\nimport { profiler } from 'app/core/core';\n\nimport { DashboardModel } from '../../features/dashboard/state';\n\nexport class PanelCtrl {\n panel: any;\n error: any;\n declare dashboard: DashboardModel;\n pluginName = '';\n pluginId = '';\n editorTabs: any;\n $scope: any;\n $injector: auto.IInjectorService;\n $timeout: any;\n editModeInitiated = false;\n declare height: number;\n declare width: number;\n containerHeight: any;\n events: EventBusExtended;\n loading = false;\n timing: any;\n $location: AngularLocationWrapper;\n\n constructor($scope: any, $injector: auto.IInjectorService) {\n this.panel = this.panel ?? $scope.$parent.panel;\n this.dashboard = this.dashboard ?? $scope.$parent.dashboard;\n this.$injector = $injector;\n this.$scope = $scope;\n this.$timeout = $injector.get('$timeout');\n this.editorTabs = [];\n this.$location = new AngularLocationWrapper();\n this.events = new EventBusSrv();\n this.timing = {}; // not used but here to not break plugins\n\n const plugin = config.panels[this.panel.type];\n if (plugin) {\n this.pluginId = plugin.id;\n this.pluginName = plugin.name;\n }\n\n $scope.$on(PanelEvents.componentDidMount.name, () => this.panelDidMount());\n }\n\n panelDidMount() {\n this.events.emit(PanelEvents.componentDidMount);\n this.events.emit(PanelEvents.initialized);\n this.dashboard.panelInitialized(this.panel);\n }\n\n renderingCompleted() {\n profiler.renderingCompleted();\n }\n\n refresh() {\n this.panel.refresh();\n }\n\n publishAppEvent<T>(event: AppEvent<T>, payload?: T) {\n this.$scope.$root.appEvent(event, payload);\n }\n\n initEditMode() {\n if (!this.editModeInitiated) {\n this.editModeInitiated = true;\n this.events.emit(PanelEvents.editModeInitialized);\n }\n }\n\n addEditorTab(title: string, directiveFn: any, index?: number, icon?: any) {\n const editorTab = { title, directiveFn, icon };\n\n if (isString(directiveFn)) {\n editorTab.directiveFn = () => {\n return { templateUrl: directiveFn };\n };\n }\n\n if (index) {\n this.editorTabs.splice(index, 0, editorTab);\n } else {\n this.editorTabs.push(editorTab);\n }\n }\n\n getExtendedMenu() {\n const menu: AngularPanelMenuItem[] = [];\n this.events.emit(PanelEvents.initPanelActions, menu);\n return menu;\n }\n\n // Override in sub-class to add items before extended menu\n async getAdditionalMenuItems(): Promise<any[]> {\n return [];\n }\n\n otherPanelInFullscreenMode() {\n return this.dashboard.otherPanelInFullscreen(this.panel);\n }\n\n render(payload?: any) {\n this.events.emit(PanelEvents.render, payload);\n }\n\n // overriden from react\n onPluginTypeChange = (plugin: PanelPluginMeta) => {};\n}\n","import { auto } from 'angular';\nimport { indexOf } from 'lodash';\n\nexport class QueryCtrl<T = any> {\n target!: T;\n datasource!: any;\n panelCtrl!: any;\n panel: any;\n hasRawMode!: boolean;\n error?: string | null;\n isLastQuery: boolean;\n\n constructor(\n public $scope: any,\n public $injector: auto.IInjectorService\n ) {\n this.panelCtrl = this.panelCtrl ?? $scope.ctrl.panelCtrl;\n this.target = this.target ?? $scope.ctrl.target;\n this.datasource = this.datasource ?? $scope.ctrl.datasource;\n this.panel = this.panelCtrl?.panel ?? $scope.ctrl.panelCtrl.panel;\n this.isLastQuery = indexOf(this.panel.targets, this.target) === this.panel.targets.length - 1;\n }\n\n refresh() {\n this.panelCtrl.refresh();\n }\n}\n","let templates = (require as any).context('../', true, /\\.html$/);\ntemplates.keys().forEach((key: string) => {\n templates(key);\n});\n","import { IScope } from 'angular';\n\nexport const promiseToDigest = ($scope: IScope) => (promise: Promise<any>) => promise.finally($scope.$evalAsync);\n","import { makeClassES5Compatible } from '@grafana/data';\nimport { loadPluginCss } from '@grafana/runtime';\nimport { MetricsPanelCtrl as MetricsPanelCtrlES6 } from 'app/angular/panel/metrics_panel_ctrl';\nimport { PanelCtrl as PanelCtrlES6 } from 'app/angular/panel/panel_ctrl';\nimport { QueryCtrl as QueryCtrlES6 } from 'app/angular/panel/query_ctrl';\n\nconst PanelCtrl = makeClassES5Compatible(PanelCtrlES6);\nconst MetricsPanelCtrl = makeClassES5Compatible(MetricsPanelCtrlES6);\nconst QueryCtrl = makeClassES5Compatible(QueryCtrlES6);\n\nexport { PanelCtrl, MetricsPanelCtrl, QueryCtrl, loadPluginCss };\n","(function ($) {\n \"use strict\";\n\n var defaultOptions = {\n tagClass: function(item) {\n return 'label label-info';\n },\n itemValue: function(item) {\n return item ? item.toString() : item;\n },\n itemText: function(item) {\n return this.itemValue(item);\n },\n freeInput: true,\n maxTags: undefined,\n confirmKeys: [13],\n onTagExists: function(item, $tag) {\n $tag.hide().fadeIn();\n }\n };\n\n /**\n * Constructor function\n */\n function TagsInput(element, options) {\n this.itemsArray = [];\n\n this.$element = $(element);\n this.$element.hide();\n\n this.widthClass = options.widthClass || 'width-9';\n this.isSelect = (element.tagName === 'SELECT');\n this.multiple = (this.isSelect && element.hasAttribute('multiple'));\n this.objectItems = options && options.itemValue;\n this.placeholderText = element.hasAttribute('placeholder') ? this.$element.attr('placeholder') : '';\n\n this.$container = $('<div class=\"bootstrap-tagsinput\"></div>');\n this.$input = $('<input class=\"gf-form-input ' + this.widthClass + '\" type=\"text\" placeholder=\"' + this.placeholderText + '\"/>').appendTo(this.$container);\n\n this.$element.after(this.$container);\n\n this.build(options);\n }\n\n TagsInput.prototype = {\n constructor: TagsInput,\n\n /**\n * Adds the given item as a new tag. Pass true to dontPushVal to prevent\n * updating the elements val()\n */\n add: function(item, dontPushVal) {\n var self = this;\n\n if (self.options.maxTags && self.itemsArray.length >= self.options.maxTags)\n return;\n\n // Ignore falsey values, except false\n if (item !== false && !item)\n return;\n\n // Throw an error when trying to add an object while the itemValue option was not set\n if (typeof item === \"object\" && !self.objectItems)\n throw(\"Can't add objects when itemValue option is not set\");\n\n // Ignore strings only containg whitespace\n if (item.toString().match(/^\\s*$/))\n return;\n\n // If SELECT but not multiple, remove current tag\n if (self.isSelect && !self.multiple && self.itemsArray.length > 0)\n self.remove(self.itemsArray[0]);\n\n if (typeof item === \"string\" && this.$element[0].tagName === 'INPUT') {\n var items = item.split(',');\n if (items.length > 1) {\n for (var i = 0; i < items.length; i++) {\n this.add(items[i], true);\n }\n\n if (!dontPushVal)\n self.pushVal();\n return;\n }\n }\n\n var itemValue = self.options.itemValue(item),\n itemText = self.options.itemText(item),\n tagClass = self.options.tagClass(item);\n\n // Ignore items already added\n var existing = $.grep(self.itemsArray, function(item) { return self.options.itemValue(item) === itemValue; } )[0];\n if (existing) {\n // Invoke onTagExists\n if (self.options.onTagExists) {\n var $existingTag = $(\".tag\", self.$container).filter(function() { return $(this).data(\"item\") === existing; });\n self.options.onTagExists(item, $existingTag);\n }\n return;\n }\n\n // register item in internal array and map\n self.itemsArray.push(item);\n\n // add a tag element\n var $tag = $('<span class=\"tag ' + htmlEncode(tagClass) + '\">' + htmlEncode(itemText) + '<span data-role=\"remove\"></span></span>');\n $tag.data('item', item);\n self.findInputWrapper().before($tag);\n $tag.after(' ');\n\n // add <option /> if item represents a value not present in one of the <select />'s options\n if (self.isSelect && !$('option[value=\"' + escape(itemValue) + '\"]',self.$element)[0]) {\n var $option = $('<option selected>' + htmlEncode(itemText) + '</option>');\n $option.data('item', item);\n $option.attr('value', itemValue);\n self.$element.append($option);\n }\n\n if (!dontPushVal)\n self.pushVal();\n\n // Add class when reached maxTags\n if (self.options.maxTags === self.itemsArray.length)\n self.$container.addClass('bootstrap-tagsinput-max');\n\n self.$element.trigger($.Event('itemAdded', { item: item }));\n },\n\n /**\n * Removes the given item. Pass true to dontPushVal to prevent updating the\n * elements val()\n */\n remove: function(item, dontPushVal) {\n var self = this;\n\n if (self.objectItems) {\n if (typeof item === \"object\")\n item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == self.options.itemValue(item); } )[0];\n else\n item = $.grep(self.itemsArray, function(other) { return self.options.itemValue(other) == item; } )[0];\n }\n\n if (item) {\n $('.tag', self.$container).filter(function() { return $(this).data('item') === item; }).remove();\n $('option', self.$element).filter(function() { return $(this).data('item') === item; }).remove();\n self.itemsArray.splice($.inArray(item, self.itemsArray), 1);\n }\n\n if (!dontPushVal)\n self.pushVal();\n\n // Remove class when reached maxTags\n if (self.options.maxTags > self.itemsArray.length)\n self.$container.removeClass('bootstrap-tagsinput-max');\n\n self.$element.trigger($.Event('itemRemoved', { item: item }));\n },\n\n /**\n * Removes all items\n */\n removeAll: function() {\n var self = this;\n\n $('.tag', self.$container).remove();\n $('option', self.$element).remove();\n\n while(self.itemsArray.length > 0)\n self.itemsArray.pop();\n\n self.pushVal();\n\n if (self.options.maxTags && !this.isEnabled())\n this.enable();\n },\n\n /**\n * Refreshes the tags so they match the text/value of their corresponding\n * item.\n */\n refresh: function() {\n var self = this;\n $('.tag', self.$container).each(function() {\n var $tag = $(this),\n item = $tag.data('item'),\n itemValue = self.options.itemValue(item),\n itemText = self.options.itemText(item),\n tagClass = self.options.tagClass(item);\n\n // Update tag's class and inner text\n $tag.attr('class', null);\n $tag.addClass('tag ' + htmlEncode(tagClass));\n $tag.contents().filter(function() {\n return this.nodeType == 3;\n })[0].nodeValue = htmlEncode(itemText);\n\n if (self.isSelect) {\n var option = $('option', self.$element).filter(function() { return $(this).data('item') === item; });\n option.attr('value', itemValue);\n }\n });\n },\n\n /**\n * Returns the items added as tags\n */\n items: function() {\n return this.itemsArray;\n },\n\n /**\n * Assembly value by retrieving the value of each item, and set it on the\n * element.\n */\n pushVal: function() {\n var self = this,\n val = $.map(self.items(), function(item) {\n return self.options.itemValue(item).toString();\n });\n\n self.$element.val(val, true).trigger('change');\n },\n\n /**\n * Initializes the tags input behaviour on the element\n */\n build: function(options) {\n var self = this;\n\n self.options = $.extend({}, defaultOptions, options);\n var typeahead = self.options.typeahead || {};\n\n // When itemValue is set, freeInput should always be false\n if (self.objectItems)\n self.options.freeInput = false;\n\n makeOptionItemFunction(self.options, 'itemValue');\n makeOptionItemFunction(self.options, 'itemText');\n makeOptionItemFunction(self.options, 'tagClass');\n\n // for backwards compatibility, self.options.source is deprecated\n if (self.options.source)\n typeahead.source = self.options.source;\n\n if (typeahead.source && $.fn.typeahead) {\n makeOptionFunction(typeahead, 'source');\n\n self.$input.typeahead({\n source: function (query, process) {\n function processItems(items) {\n var texts = [];\n\n for (var i = 0; i < items.length; i++) {\n var text = self.options.itemText(items[i]);\n map[text] = items[i];\n texts.push(text);\n }\n process(texts);\n }\n\n this.map = {};\n var map = this.map,\n data = typeahead.source(query);\n\n if ($.isFunction(data.success)) {\n // support for Angular promises\n data.success(processItems);\n } else {\n // support for functions and jquery promises\n $.when(data)\n .then(processItems);\n }\n },\n updater: function (text) {\n self.add(this.map[text]);\n },\n matcher: function (text) {\n return (text.toLowerCase().indexOf(this.query.trim().toLowerCase()) !== -1);\n },\n sorter: function (texts) {\n return texts.sort();\n },\n highlighter: function (text) {\n var regex = new RegExp( '(' + this.query + ')', 'gi' );\n return text.replace( regex, \"<strong>$1</strong>\" );\n }\n });\n }\n\n self.$container.on('click', $.proxy(function(event) {\n self.$input.focus();\n }, self));\n\n self.$container.on('blur', 'input', $.proxy(function(event) {\n var $input = $(event.target);\n self.add($input.val());\n $input.val('');\n event.preventDefault();\n }, self));\n\n self.$container.on('keydown', 'input', $.proxy(function(event) {\n var $input = $(event.target),\n $inputWrapper = self.findInputWrapper();\n\n switch (event.which) {\n // BACKSPACE\n case 8:\n if (doGetCaretPosition($input[0]) === 0) {\n var prev = $inputWrapper.prev();\n if (prev) {\n self.remove(prev.data('item'));\n }\n }\n break;\n\n // DELETE\n case 46:\n if (doGetCaretPosition($input[0]) === 0) {\n var next = $inputWrapper.next();\n if (next) {\n self.remove(next.data('item'));\n }\n }\n break;\n\n // LEFT ARROW\n case 37:\n // Try to move the input before the previous tag\n var $prevTag = $inputWrapper.prev();\n if ($input.val().length === 0 && $prevTag[0]) {\n $prevTag.before($inputWrapper);\n $input.focus();\n }\n break;\n // RIGHT ARROW\n case 39:\n // Try to move the input after the next tag\n var $nextTag = $inputWrapper.next();\n if ($input.val().length === 0 && $nextTag[0]) {\n $nextTag.after($inputWrapper);\n $input.focus();\n }\n break;\n default:\n // When key corresponds one of the confirmKeys, add current input\n // as a new tag\n if (self.options.freeInput && $.inArray(event.which, self.options.confirmKeys) >= 0) {\n self.add($input.val());\n $input.val('');\n event.preventDefault();\n }\n }\n\n // Reset internal input's size\n $input.attr('size', Math.max(this.inputSize, $input.val().length));\n }, self));\n\n // Remove icon clicked\n self.$container.on('click', '[data-role=remove]', $.proxy(function(event) {\n self.remove($(event.target).closest('.tag').data('item'));\n // Grafana mod, if tags input used in popover the click event will bubble up and hide popover\n event.stopPropagation();\n }, self));\n\n // Only add existing value as tags when using strings as tags\n if (self.options.itemValue === defaultOptions.itemValue) {\n if (self.$element[0].tagName === 'INPUT') {\n self.add(self.$element.val());\n } else {\n $('option', self.$element).each(function() {\n self.add($(this).attr('value'), true);\n });\n }\n }\n },\n\n /**\n * Removes all tagsinput behaviour and unregsiter all event handlers\n */\n destroy: function() {\n var self = this;\n\n // Unbind events\n self.$container.off('keypress', 'input');\n self.$container.off('click', '[role=remove]');\n\n self.$container.remove();\n self.$element.removeData('tagsinput');\n self.$element.show();\n },\n\n /**\n * Sets focus on the tagsinput\n */\n focus: function() {\n this.$input.focus();\n },\n\n /**\n * Returns the internal input element\n */\n input: function() {\n return this.$input;\n },\n\n /**\n * Returns the element which is wrapped around the internal input. This\n * is normally the $container, but typeahead.js moves the $input element.\n */\n findInputWrapper: function() {\n var elt = this.$input[0],\n container = this.$container[0];\n while(elt && elt.parentNode !== container)\n elt = elt.parentNode;\n\n return $(elt);\n }\n };\n\n /**\n * Register JQuery plugin\n */\n $.fn.tagsinput = function(arg1, arg2) {\n var results = [];\n\n this.each(function() {\n var tagsinput = $(this).data('tagsinput');\n\n // Initialize a new tags input\n if (!tagsinput) {\n tagsinput = new TagsInput(this, arg1);\n $(this).data('tagsinput', tagsinput);\n results.push(tagsinput);\n\n if (this.tagName === 'SELECT') {\n $('option', $(this)).attr('selected', 'selected');\n }\n\n // Init tags from $(this).val()\n $(this).val($(this).val());\n } else {\n // Invoke function on existing tags input\n var retVal = tagsinput[arg1](arg2);\n if (retVal !== undefined)\n results.push(retVal);\n }\n });\n\n if ( typeof arg1 == 'string') {\n // Return the results from the invoked function calls\n return results.length > 1 ? results : results[0];\n } else {\n return results;\n }\n };\n\n $.fn.tagsinput.Constructor = TagsInput;\n\n /**\n * Most options support both a string or number as well as a function as\n * option value. This function makes sure that the option with the given\n * key in the given options is wrapped in a function\n */\n function makeOptionItemFunction(options, key) {\n if (typeof options[key] !== 'function') {\n var propertyName = options[key];\n options[key] = function(item) { return item[propertyName]; };\n }\n }\n function makeOptionFunction(options, key) {\n if (typeof options[key] !== 'function') {\n var value = options[key];\n options[key] = function() { return value; };\n }\n }\n /**\n * HtmlEncodes the given value\n */\n var htmlEncodeContainer = $('<div />');\n function htmlEncode(value) {\n if (value) {\n return htmlEncodeContainer.text(value).html();\n } else {\n return '';\n }\n }\n\n /**\n * Returns the position of the caret in the given input field\n * http://flightschool.acylt.com/devnotes/caret-position-woes/\n */\n function doGetCaretPosition(oField) {\n var iCaretPos = 0;\n if (document.selection) {\n oField.focus ();\n var oSel = document.selection.createRange();\n oSel.moveStart ('character', -oField.value.length);\n iCaretPos = oSel.text.length;\n } else if (oField.selectionStart || oField.selectionStart == '0') {\n iCaretPos = oField.selectionStart;\n }\n return (iCaretPos);\n }\n\n /**\n * Initialize tagsinput behaviour on inputs and selects which have\n * data-role=tagsinput\n */\n $(function() {\n $(\"input[data-role=tagsinput], select[multiple][data-role=tagsinput]\").tagsinput();\n });\n})(window.jQuery);\n"],"names":["bindonceModule","toBoolean","value","v","msie","bindonceDirective","$scope","$element","$attrs","$interpolate","showHideBinder","elm","attr","show","hide","classBinder","results","index","ctrl","binder","bindonceValue","that","newValue","clone","parent","afterNode","parentNode","afterNextSibling","node","selectedTranscludes","switchCtrl","selectedTransclude","attrValue","attrKey","newAttr","scope","attrs","bindonceController","boDirective","childPriority","tElement","tAttrs","transclude","controllers","name","element","parentValue","window","angular","shallowCopy","src","dst","isArray","i","ii","isObject","key","routeToRegExp","path","opts","keys","pattern","_","slash","option","optional","star","isDefined","noop","ngRouteModule","$RouteProvider","instantiateRoute","$routeMinErr","isEagerInstantiationEnabled","inherit","extra","routes","route","routeCopy","redirectPath","params","enabled","$rootScope","$location","$routeParams","$q","$injector","$templateRequest","$sce","$browser","forceReload","preparedRoute","preparedRouteIsUpdateOnly","$route","fakeLocationEvent","prepareRoute","commitRoute","newParams","interpolate","switchRouteMatcher","on","m","len","val","$locationEvent","lastRoute","parseRoute","isNavigationUpdateOnly","nextRoute","nextRoutePromise","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","locals","error","data","oldPath","oldSearch","newUrl","oldUrl","template","getTemplateFor","templateUrl","match","newRoute","oldRoute","string","result","segment","segmentMatch","$RouteParamsProvider","ngViewFactory","ngViewFillContentFactory","$anchorScroll","$animate","$transclude","currentScope","currentElement","previousLeaveAnimation","autoScrollExp","onloadExp","update","cleanupLastView","response","newScope","current","$compile","$controller","link","controller","module","$sanitizeMinErr","bind","extend","forEach","lowercase","nodeContains","htmlParser","htmlSanitizeWriter","$SanitizeProvider","hasBeenInstantiated","svgEnabled","$$sanitizeUri","validElements","svgElements","html","buf","uri","isImage","enableSvg","elements","addElementsTo","voidElements","validAttrs","arrayToMap","htmlParserImpl","htmlSanitizeWriterImpl","arg","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","stringToMap","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","blockedElements","uriAttrs","htmlAttrs","svgAttrs","str","lowercaseKeys","items","obj","elementsMap","newElements","getInertBodyElement","document","isDOMParserAvailable","getInertBodyElement_DOMParser","inertDocument","inertBodyElement","getInertBodyElement_InertDocument","body","stripCustomNsAttrs","handler","mXSSAttempts","attrToMap","nextNode","getNonDescendant","map","encodeEntities","hi","low","uriValidator","ignoreCurrentElement","out","tag","lkey","chars","l","attrNode","attrName","propName","sanitizeText","writer","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","isFunction","isString","text","target","attributes","attributesFn","raw","url","addText","addLink","linkAttributes","autoUpdateOne","MutationObserver","self","watcher","actualizeWatcher","stopWatch","startWatch","debouncedUpdater","win","qs","forward","backward","track","screen","event","y","e","x","xBar","sign","g","scopedWindow","css","add","has","rm","_baron","baron","pos","instances","origin","opera12maxScrollbarSize","macmsxffScrollbarSize","macosxffRe","isMacFF","log","liveBarons","shownErrors","user","withParams","tryNode","isNode","jQueryMode","rootNode","defaultParams","manageAttr","id","instance","init","arrayEach","_obj","iterator","getTime","manageEvents","item","eventManager","mode","evt","direction","fire","eventName","args","func","wait","timeout","timestamp","later","last","barPos","scrollerPos0","resizePauseTimer","scrollingTimer","resizeLastFire","oldBarSize","setBarSize","_size","barMinSize","size","posBar","_pos","was","will","k","relToPos","r","posToRel","t","dontPosSelect","ie","free","dispose","noScroll","rel","sub","enable","minPeriod","delay","upd","offset","client","padding","delta","styles","force","newBarSize","overflow","msOverflowStyle","scroll","axis","scrollerCss","paddingWas","numWas","names","userArg","userParams","viewPortSize","topFixHeights","topRealHeights","headerTops","scroller","fixElement","flag","ori","bubbleWheel","_params","top","num","j","locPos","fixFlag","gradFlag","fixState","hTop","gradState","change","updParams","level","msg","more","supportsPassive","elem","_eventNames","eventNames","prefix","options","each","cls","_input","output","input","selector","_ctx","ctx","DEFAULT_PORTS","AngularLocationWrapper","fn","replacement","newHash","pathname","location","parsedPath","search","paramValue","newQuery","updatedUrl","state","panelTemplate","$timeout","panel","subs","Subscription","panelScrollbar","resizeScrollableContent","scrollRootClass","scrollerClass","scrollBarHTML","scrollRoot","updateDimensionsFromParentScope","directiveModule","directiveCache","panelEditorTab","dynamicDirectiveSrv","pluginId","tabName","QueryRowCtrl","queryEditorRowDirective","arr","start","end","date","interpolateTemplateVars","templateSrv","filterFunc","scopedVars","AlertSrv","DynamicDirectiveSrv","child","directiveInfo","childScope","getReactComponent","reactComponent","namePart","applied","wrapped","phase","applyFunctions","propsConfig","prev","config","watchProps","watchDepth","watchExpressions","listener","supportsWatchCollection","supportsWatchGroup","watchGroupExpressions","expr","actualExpr","getPropExpression","exprWatchDepth","getPropWatchDepth","renderComponent","component","props","root","getPropName","prop","getPropConfig","findAttribute","defaultWatch","renderMyComponent","scopeProps","reactDirective","reactComponentName","conf","injectableProps","directive","propExpressions","ngModule","uiSegmentSrv","MetricSegment","fallbackText","type","cssClass","condition","op","ops","addTemplateVars","variableTypeFilter","segments","variable","popoverSrv","openDrop","drop","cleanUp","contentElement","Timer","promise","AngularLoader","compiledElem","$win","defaults","$tooltip","width","height","tmpScope","left","dropdownTypeahead","inputTemplate","buttonTemplate","$input","$button","subItem","typeaheadValues","memo","subIndex","closeDropdownMenu","menuItem","payload","submenuItem","dropdownTypeahead2","timeoutId","autofillEventFix","dispatchChangeEvent","onAnimationStart","animationName","metricSegment","linkTemplate","selectTemplate","cancelBlur","linkMode","debounceLookup","selected","fromClick","query","callback","altSegments","alt","typeahead","metricSegmentModel","cachedOptions","tip","_t","compile","watchChange","editorOptBool","ngchange","editorCheckbox","model","label","gfDropdown","$parse","buildTemplate","placement","ul","li","iElement","iAttrs","getter","oldValue","ev","$this","tooltip","ngModelOnBlur","ngModelCtrl","emptyToNull","viewValue","validTimeSpan","modelValue","setColor","color","borderColor","tagColorFromName","bootstrapTagsinput","getItemProperty","property","select","tagElement","idx","getBlockNodes","nodes","endNode","blockNodes","rebuildOnChange","block","previousElements","domEl","DeltaCtrl","waitForCompile","observerConfig","LinkJSONCtrl","line","unbind","linkJson","arrayJoin","ngModel","split_array","join_array","react2AngularDirective","PanelHeaderMenuItem","ref","setRef","isSubMenu","getStyles","icon","getDropdownLocationCssClass","selectors","Icon","wrapperPos","theme","SelectNav","children","customCss","defaultSelectedItem","navItem","Navigation","TabsBar","Tab","PageHeader","renderTitle","actions","info","subTitle","renderHeader","main","marginTop","renderHeaderTitle","PageInfo","title","highlightText","ProBadge","MetricSelect","placeholder","className","isSearchable","onChange","useSelectOptions","useSelectedOption","onChangeValue","selectable","Select","variables","o","SecretFormField","registerAngularDirectives","Footer","Spinner","HelpModal","EmptyListCTA","TagFilter","ColorPicker","SeriesColorPickerPopover","UnitPicker","GraphContextMenu","DataLinksInlineEditor","DataSourceHttpSettings","OldFolderPicker","TimePickerSettings","ClipboardButton","queryPartEditorDirective","paramTemplate","part","partDef","$paramsContainer","clickFuncParam","paramIndex","$link","inputBlur","inputKeyPress","inputKeyDown","addTypeahead","param","typeaheadSource","dynamicOptions","promiseToDigest","res","action","addElementsAndCompile","$paramLink","relink","typeaheadMatcher","FormDropdownCtrl","optionTexts","formDropdownDirective","geminiScrollbar","scrollParams","scrollbar","expansionLevel","jsonObject","checkboxTemplate","SwitchCtrl","switchDirective","checkboxDirective","infoPopover","position","classes","openOn","content","dropOptions","spectrumPicker","DEFAULT_THEME_DARK","DEFAULT_THEME_LIGHT","DEFAULT_MODE","DEFAULT_MAX_LINES","DEFAULT_TAB_SIZE","DEFAULT_BEHAVIORS","DEFAULT_SNIPPETS","editorTemplate","langMode","maxLines","showGutter","tabSize","behavioursEnabled","snippetsEnabled","aceElem","ace","codeEditor","editorSession","editorOptions","setThemeMode","setLangMode","setEditorContent","textarea","editorValue","lang","anyEditor","aceModeName","codeEditorDirective","sqlPartEditorDirective","switchToLink","datasourceSetting","pluginDirectiveLoader","$http","$templateCache","getTemplate","cached","relativeTemplateUrlToAbs","baseUrl","getPluginComponentDirective","loadPanelComponentInfo","componentInfo","panelInfo","importPanelPlugin","panelPlugin","PanelCtrl","getModule","ds","dsPlugin","dsMeta","angularUrl","appPlugin","appendAndCompile","registerPluginComponent","directiveName","directiveFn","err","GrafanaCtrl","utilSrv","contextSrv","angularLoader","colors","localScope","callerScope","grafanaAppDirective","lastActivity","activeUser","inActiveTimeLimit","checkForInActiveUser","userActivityDetected","clickAutoHide","clickAutoHideParent","popover","RouteParamsProvider","RouteProvider","tamperAngularLocation","$provide","$delegate","interceptAngularLocation","initAngularRoutingBridge","monkeyPatchInjectorWithPreAssignedBindings","injector","serviceName","parentScope","getAngularPanelReactWrapper","plugin","divRef","angularState","angularComponent","loader","queryRunner","FakeQueryRunner","fakePanel","PanelModelCompatibilityWrapper","EventBus","ReplaySubject","UtilSrv","deprecationWarning","AnnotationsSrv","annotation","registerComponents","importMap","sdk","AngularApp","app","$controllerProvider","$compileProvider","$filterProvider","$httpProvider","$sceDelegateProvider","get","DashboardLoaderSrv","imports","MetricsPanelCtrl","timeInfo","legacy","datasource","newTimeData","frame","editorTab","menu","QueryCtrl","templates","$","defaultOptions","$tag","TagsInput","dontPushVal","itemValue","itemText","tagClass","existing","$existingTag","htmlEncode","$option","other","makeOptionItemFunction","makeOptionFunction","process","processItems","texts","regex","$inputWrapper","doGetCaretPosition","next","$prevTag","$nextTag","elt","container","arg1","arg2","tagsinput","retVal","propertyName","htmlEncodeContainer","oField","iCaretPos","oSel"],"sourceRoot":""}
Edit
Rename
Chmod
Delete
FILE
FOLDER
INFO
Name
Size
Permission
Action
static
---
0755
0.c88fc16b6533c8976681.js
11857 bytes
0644
0.c88fc16b6533c8976681.js.map
46011 bytes
0644
1118.6d1cbbd2070e00a7483d.js
9459 bytes
0644
1118.6d1cbbd2070e00a7483d.js.map
22012 bytes
0644
1121.6c31bf81768d3312b0d4.js
11557 bytes
0644
1121.6c31bf81768d3312b0d4.js.map
40274 bytes
0644
1122.1b3b5a9bdf4a2fc70a83.js
4310 bytes
0644
1122.1b3b5a9bdf4a2fc70a83.js.map
9301 bytes
0644
1133.cd705902767ed2e9bf55.js
107191 bytes
0644
1133.cd705902767ed2e9bf55.js.map
459177 bytes
0644
1216.ddb58ad09e0c4e3f4079.js
12860 bytes
0644
1216.ddb58ad09e0c4e3f4079.js.map
47906 bytes
0644
1282.2347f27d5b3a18a42a1e.js
2965 bytes
0644
1282.2347f27d5b3a18a42a1e.js.map
6699 bytes
0644
1345.8570fef914aafab94513.js
2223 bytes
0644
1345.8570fef914aafab94513.js.map
5201 bytes
0644
1347.8ad23b870a6e21306189.js
32035 bytes
0644
1347.8ad23b870a6e21306189.js.map
89851 bytes
0644
1420.f2553cafc235b7c32261.js
14576 bytes
0644
1420.f2553cafc235b7c32261.js.map
32839 bytes
0644
1438.897db349b7f48a15b9eb.js
2830 bytes
0644
1438.897db349b7f48a15b9eb.js.map
6911 bytes
0644
1446.babd36e7134aac1046c4.js
1832 bytes
0644
1446.babd36e7134aac1046c4.js.map
3282 bytes
0644
1488.ff35935a06f41b02b6cc.js
316 bytes
0644
1488.ff35935a06f41b02b6cc.js.map
1206 bytes
0644
1560.30962127c91e5eae9982.js
8916 bytes
0644
1560.30962127c91e5eae9982.js.map
20515 bytes
0644
1660.e1f66118fb028d12074f.js
21866 bytes
0644
1660.e1f66118fb028d12074f.js.map
71039 bytes
0644
1698.68ff1ef08e94a87836b3.js
12570 bytes
0644
1698.68ff1ef08e94a87836b3.js.map
46006 bytes
0644
1708.f42a783c0f6c7a317d49.js
2249 bytes
0644
1708.f42a783c0f6c7a317d49.js.map
2954 bytes
0644
1710.d96221051fceaf8c89dd.js
10172 bytes
0644
1710.d96221051fceaf8c89dd.js.map
22097 bytes
0644
1740.e57d920c47a11759ade4.js
6204 bytes
0644
1740.e57d920c47a11759ade4.js.map
13740 bytes
0644
1888.0ede69d3190c536744b9.js
6822 bytes
0644
1888.0ede69d3190c536744b9.js.map
15421 bytes
0644
1914.58113477b565d57e8bfe.js
10710 bytes
0644
1914.58113477b565d57e8bfe.js.map
23555 bytes
0644
198.b84c0e4f5759344ae05a.js
8267 bytes
0644
198.b84c0e4f5759344ae05a.js.map
19446 bytes
0644
205.6c51b5e35c8147226738.js
3542 bytes
0644
205.6c51b5e35c8147226738.js.map
8376 bytes
0644
2058.0e5df44647184aaf02e2.js
1252 bytes
0644
2058.0e5df44647184aaf02e2.js.map
4744 bytes
0644
2077.12b2df3682085a92a810.js
34133 bytes
0644
2077.12b2df3682085a92a810.js.map
122011 bytes
0644
2094.259625d8acf28b9c7361.js
16518 bytes
0644
2094.259625d8acf28b9c7361.js.map
41269 bytes
0644
21.afca69f2d336e287a655.js
6172 bytes
0644
21.afca69f2d336e287a655.js.map
17305 bytes
0644
2136.9c8dcd43d3af327f51f5.js
498667 bytes
0644
2136.9c8dcd43d3af327f51f5.js.map
1908011 bytes
0644
2228.cf629cf4a83c5b6c2671.js
269 bytes
0644
2228.cf629cf4a83c5b6c2671.js.map
457 bytes
0644
2244.9324c28eca7d2ffb7568.js
3396 bytes
0644
2244.9324c28eca7d2ffb7568.js.map
7683 bytes
0644
2261.ac6a26854d5acee00776.js
106373 bytes
0644
2261.ac6a26854d5acee00776.js.map
478562 bytes
0644
2278.bdd73b14b6337c6b14e4.js
5754 bytes
0644
2278.bdd73b14b6337c6b14e4.js.map
13399 bytes
0644
2398.3de0e7aa3057b7dcf9da.js
8016 bytes
0644
2398.3de0e7aa3057b7dcf9da.js.map
18383 bytes
0644
2514.c86950e9813e27962050.js
1983 bytes
0644
2514.c86950e9813e27962050.js.map
4863 bytes
0644
2571.345ecfd2b82551018f2e.js
162139 bytes
0644
2571.345ecfd2b82551018f2e.js.map
2046 bytes
0644
2586.972e9a7d564398afee76.js
6385 bytes
0644
2586.972e9a7d564398afee76.js.map
14676 bytes
0644
2658.f4100815829c4d37d35c.js
5432 bytes
0644
2658.f4100815829c4d37d35c.js.map
13650 bytes
0644
2686.2fbaa7db9c01d59cad8d.js
2815 bytes
0644
2686.2fbaa7db9c01d59cad8d.js.map
6564 bytes
0644
2692.20098ad0182743d98d62.js
2282 bytes
0644
2692.20098ad0182743d98d62.js.map
5680 bytes
0644
2694.a31d749361a36eb167da.js
2726 bytes
0644
2694.a31d749361a36eb167da.js.map
3618 bytes
0644
2745.2e5ec1fdf377d2940fb4.js
33584 bytes
0644
2745.2e5ec1fdf377d2940fb4.js.map
120277 bytes
0644
2962.4c3147d8ee365fe296ef.js
7640 bytes
0644
2962.4c3147d8ee365fe296ef.js.map
17621 bytes
0644
3042.248a4194805a8500fd28.js
19010 bytes
0644
3042.248a4194805a8500fd28.js.map
38148 bytes
0644
3062.4e9a427c2a59d53f902e.js
4663 bytes
0644
3062.4e9a427c2a59d53f902e.js.map
10650 bytes
0644
3082.c09cff56c35d736ee8b6.js
52872 bytes
0644
3082.c09cff56c35d736ee8b6.js.map
56822 bytes
0644
3096.8d41728a4f5010bc56a2.js
4378 bytes
0644
3096.8d41728a4f5010bc56a2.js.map
10739 bytes
0644
3098.f22ad6dab13d06477be0.js
31462 bytes
0644
3098.f22ad6dab13d06477be0.js.map
85588 bytes
0644
3182.1d531f28507c00e391fc.js
13817 bytes
0644
3182.1d531f28507c00e391fc.js.map
26653 bytes
0644
3407.666eb88a718e66b93f72.js
34425 bytes
0644
3407.666eb88a718e66b93f72.js.map
103716 bytes
0644
3418.d31d882b87bd5a2ef66f.js
33061 bytes
0644
3418.d31d882b87bd5a2ef66f.js.map
114234 bytes
0644
3541.8d063e3d43d55745d89b.js
20582 bytes
0644
3541.8d063e3d43d55745d89b.js.map
67154 bytes
0644
3543.eecef49ce94da5ee0418.js
136752 bytes
0644
3543.eecef49ce94da5ee0418.js.map
446118 bytes
0644
3622.976b1aef94b333e450b9.js
1260 bytes
0644
3622.976b1aef94b333e450b9.js.map
2819 bytes
0644
3686.102abfc00452299017bb.js
87 bytes
0644
3718.3993946b7a0eb8f64b4d.js
23620 bytes
0644
3718.3993946b7a0eb8f64b4d.js.map
92024 bytes
0644
3726.3adfe210678d2cd26969.js
31765 bytes
0644
3726.3adfe210678d2cd26969.js.map
118227 bytes
0644
398.4e93ffb675609ea7a9c6.js
2990 bytes
0644
398.4e93ffb675609ea7a9c6.js.map
7145 bytes
0644
4114.953b39a9ce57caa0e87a.js
2536 bytes
0644
4114.953b39a9ce57caa0e87a.js.map
6028 bytes
0644
4120.67bf5d203ed4a2eb5f1b.js
3229 bytes
0644
4120.67bf5d203ed4a2eb5f1b.js.map
7533 bytes
0644
4209.c7060d489834063658f5.js
17352 bytes
0644
4209.c7060d489834063658f5.js.map
30980 bytes
0644
4254.c5f4a5512b252e3a5796.js
71716 bytes
0644
4254.c5f4a5512b252e3a5796.js.map
237783 bytes
0644
4289.d5662b0904798ff437e9.js
16496 bytes
0644
4289.d5662b0904798ff437e9.js.map
32015 bytes
0644
4334.bc078c368a20ed3257b6.js
2598 bytes
0644
4334.bc078c368a20ed3257b6.js.map
6308 bytes
0644
4630.b604ea691184ba563d59.js
5585 bytes
0644
4630.b604ea691184ba563d59.js.map
11866 bytes
0644
4680.358dfdd92851f69ecc97.js
4573 bytes
0644
4680.358dfdd92851f69ecc97.js.map
10841 bytes
0644
4698.696713071ff5d9929a11.js
3682 bytes
0644
4698.696713071ff5d9929a11.js.map
8967 bytes
0644
4787.bd938ea7cb58d64ee246.js
738 bytes
0644
4787.bd938ea7cb58d64ee246.js.map
2168 bytes
0644
4839.17a10e0ceca3eb8954b4.js
39585 bytes
0644
4839.17a10e0ceca3eb8954b4.js.map
145699 bytes
0644
494.8cf705bc1ea509187c88.js
3796 bytes
0644
494.8cf705bc1ea509187c88.js.map
8987 bytes
0644
4958.cd447d877778fc5af081.js
4923 bytes
0644
4958.cd447d877778fc5af081.js.map
11000 bytes
0644
4962.0da526ad79f816a15985.js
2242 bytes
0644
4962.0da526ad79f816a15985.js.map
4978 bytes
0644
50.7b1e44d5b9dbbed566be.js
617497 bytes
0644
50.7b1e44d5b9dbbed566be.js.map
2271464 bytes
0644
5017.003cacead1bba1cba035.js
3567142 bytes
0644
5017.003cacead1bba1cba035.js.map
13214665 bytes
0644
5130.4d31108de97088a3b014.js
2850 bytes
0644
5130.4d31108de97088a3b014.js.map
6536 bytes
0644
5196.064b914693b6a5591a48.js
4035 bytes
0644
5196.064b914693b6a5591a48.js.map
10273 bytes
0644
5240.eceb5f73f807ac22d800.js
704 bytes
0644
5240.eceb5f73f807ac22d800.js.map
2618 bytes
0644
5277.ce6608b6f47246e32767.js
269 bytes
0644
5277.ce6608b6f47246e32767.js.map
457 bytes
0644
5280.4348c762594edebf7d0e.js
16657 bytes
0644
5280.4348c762594edebf7d0e.js.map
89146 bytes
0644
5356.eabc0dc2021a3814a65f.js
10156 bytes
0644
5356.eabc0dc2021a3814a65f.js.map
25249 bytes
0644
5358.7c5e9e1b192582f3082d.js
6173 bytes
0644
5358.7c5e9e1b192582f3082d.js.map
19652 bytes
0644
5364.ac21c32fd45a27bc998a.js
3070 bytes
0644
5364.ac21c32fd45a27bc998a.js.map
7368 bytes
0644
5398.d0c11aa7c1232f4afe44.js
81872 bytes
0644
5398.d0c11aa7c1232f4afe44.js.map
769414 bytes
0644
5428.e85b0800b30feca9d7dc.js
330175 bytes
0644
5428.e85b0800b30feca9d7dc.js.map
530929 bytes
0644
5511.93023985e5c5efe49ae2.js
21275 bytes
0644
5511.93023985e5c5efe49ae2.js.map
93188 bytes
0644
5550.9284e42acc3f2bbdfc9d.js
7039 bytes
0644
5550.9284e42acc3f2bbdfc9d.js.map
16382 bytes
0644
558.701e8b4db7b852c4a10d.js
12211 bytes
0644
558.701e8b4db7b852c4a10d.js.map
24505 bytes
0644
5618.638c32d58d896f3f7261.js
3348 bytes
0644
5618.638c32d58d896f3f7261.js.map
8181 bytes
0644
5648.cb3fd92dbbc06f7d45d2.js
57392 bytes
0644
5648.cb3fd92dbbc06f7d45d2.js.map
60585 bytes
0644
5786.db7abc3b8e4f474a8f7b.js
5325 bytes
0644
5786.db7abc3b8e4f474a8f7b.js.map
11885 bytes
0644
5807.f05d997ece5811bbc849.js
2922915 bytes
0644
5807.f05d997ece5811bbc849.js.map
10524334 bytes
0644
5950.30ec6aaa9dcece6c3b3c.js
4616249 bytes
0644
5950.30ec6aaa9dcece6c3b3c.js.map
19277501 bytes
0644
6018.f4de7ac19ac8f0c774e6.js
5861 bytes
0644
6018.f4de7ac19ac8f0c774e6.js.map
13314 bytes
0644
6029.0549a3fcb50e73c4b256.js
409895 bytes
0644
6029.0549a3fcb50e73c4b256.js.map
998408 bytes
0644
6185.883629fcc773b4968b24.js
2258 bytes
0644
6185.883629fcc773b4968b24.js.map
4788 bytes
0644
6263.e4ef9aaa3073ebacc3a5.js
54594 bytes
0644
6263.e4ef9aaa3073ebacc3a5.js.map
242030 bytes
0644
6302.257b2eb06c25ee74090e.js
8440 bytes
0644
6302.257b2eb06c25ee74090e.js.map
19322 bytes
0644
6359.f824c85233ec703f8cea.js
11411 bytes
0644
6359.f824c85233ec703f8cea.js.map
41881 bytes
0644
6377.45d36c143a694fc45bd3.js
20571 bytes
0644
6377.45d36c143a694fc45bd3.js.map
79590 bytes
0644
6378.27b1e6d863a0a3b85962.js
977993 bytes
0644
6378.27b1e6d863a0a3b85962.js.map
3865587 bytes
0644
6414.192cf271de6ecbbbcb11.js
3984 bytes
0644
6414.192cf271de6ecbbbcb11.js.map
9134 bytes
0644
6446.b4b93ee91aa1bb57ea93.js
7731 bytes
0644
6446.b4b93ee91aa1bb57ea93.js.map
17485 bytes
0644
6464.f379e014f9909e621de6.js
34429 bytes
0644
6464.f379e014f9909e621de6.js.map
113303 bytes
0644
6499.9f52e0855fd4782a8b45.js
78297 bytes
0644
6499.9f52e0855fd4782a8b45.js.map
273155 bytes
0644
6587.bfb1ca0c32c6f325b0df.js
135004 bytes
0644
6587.bfb1ca0c32c6f325b0df.js.map
541974 bytes
0644
660.838743295c2108f3492d.js
43101 bytes
0644
660.838743295c2108f3492d.js.map
100340 bytes
0644
6678.a615dbe07b8a3e591e66.js
14725 bytes
0644
6678.a615dbe07b8a3e591e66.js.map
51145 bytes
0644
680.1a328432fae403eacab3.js
53846 bytes
0644
680.1a328432fae403eacab3.js.map
57615 bytes
0644
6830.0c200fec1efc2be388e2.js
5811 bytes
0644
6830.0c200fec1efc2be388e2.js.map
13972 bytes
0644
6934.fa19d392db34411fb300.js
168944 bytes
0644
6934.fa19d392db34411fb300.js.map
540337 bytes
0644
6940.9c5d3a2dcf9d7d58fa2c.js
3408 bytes
0644
6940.9c5d3a2dcf9d7d58fa2c.js.map
8039 bytes
0644
6969.f8f153735314f9426000.js
1119 bytes
0644
6969.f8f153735314f9426000.js.map
4230 bytes
0644
6990.cc2f5674128929a3f870.js
4418 bytes
0644
6990.cc2f5674128929a3f870.js.map
10503 bytes
0644
7048.117de444b1e1cb5a1360.js
4365 bytes
0644
7048.117de444b1e1cb5a1360.js.map
10316 bytes
0644
7166.480da6892ee84ee8bb53.js
593985 bytes
0644
7166.480da6892ee84ee8bb53.js.map
2430098 bytes
0644
7200.dc60128b9d612fc7b5b0.js
3634 bytes
0644
7200.dc60128b9d612fc7b5b0.js.map
8184 bytes
0644
7246.3adf293a34fa2043387b.js
4306 bytes
0644
7246.3adf293a34fa2043387b.js.map
9084 bytes
0644
7400.024c96bd5b99b8b47a63.js
14112 bytes
0644
7400.024c96bd5b99b8b47a63.js.map
64001 bytes
0644
7409.24316c87d08c1053c46a.js
3287 bytes
0644
7409.24316c87d08c1053c46a.js.map
11649 bytes
0644
7455.845968885abe369e6479.js
19801 bytes
0644
7455.845968885abe369e6479.js.map
77213 bytes
0644
7466.09e6e197d2507f62097d.js
11670 bytes
0644
7466.09e6e197d2507f62097d.js.map
24830 bytes
0644
7515.95323f0dfbd0de010e5c.js
1083 bytes
0644
7515.95323f0dfbd0de010e5c.js.map
1321 bytes
0644
7613.6334cff4df12cc157522.js
808779 bytes
0644
7613.6334cff4df12cc157522.js.map
991378 bytes
0644
7836.6a7e4207e70fc2dc235f.js
7192 bytes
0644
7836.6a7e4207e70fc2dc235f.js.map
17613 bytes
0644
7882.1a3cc418752c83396970.js
3743 bytes
0644
7882.1a3cc418752c83396970.js.map
14950 bytes
0644
7886.485c46f14540aa23cf70.js
8668 bytes
0644
7886.485c46f14540aa23cf70.js.map
20124 bytes
0644
7914.2b1a06c504df18e20fe4.js
2390 bytes
0644
7914.2b1a06c504df18e20fe4.js.map
6418 bytes
0644
7982.6761217193d3060dbf0e.js
188973 bytes
0644
7982.6761217193d3060dbf0e.js.map
1737667 bytes
0644
8054.094788468423bb88ee68.js
38124 bytes
0644
8054.094788468423bb88ee68.js.map
132296 bytes
0644
8107.92bd414247a1d05c014f.js
5144 bytes
0644
8107.92bd414247a1d05c014f.js.map
15320 bytes
0644
8230.2eedae6021a4715c6dea.js
2413 bytes
0644
8230.2eedae6021a4715c6dea.js.map
5812 bytes
0644
8332.f4b05d2f028641445650.js
3177 bytes
0644
8332.f4b05d2f028641445650.js.map
7186 bytes
0644
8334.c95ec0eb6900c0cf7e89.js
7803 bytes
0644
8334.c95ec0eb6900c0cf7e89.js.map
17714 bytes
0644
8390.1fd9505094c8cf8830ab.js
2096 bytes
0644
8390.1fd9505094c8cf8830ab.js.map
5157 bytes
0644
84.a6f8658e6a033d642231.js
30608 bytes
0644
84.a6f8658e6a033d642231.js.map
142543 bytes
0644
8494.4470c87b7093ddf70db7.js
2180 bytes
0644
8494.4470c87b7093ddf70db7.js.map
4863 bytes
0644
8542.1391ab96a455b01963a7.js
1514 bytes
0644
8542.1391ab96a455b01963a7.js.map
3249 bytes
0644
8566.e05562713181c6ca30fe.js
3852 bytes
0644
8566.e05562713181c6ca30fe.js.map
8781 bytes
0644
8730.3dcdd8cbf22c63b45d78.js
2109 bytes
0644
8730.3dcdd8cbf22c63b45d78.js.map
2893 bytes
0644
8786.1b0e43b80c82c73e2096.js
1535 bytes
0644
8786.1b0e43b80c82c73e2096.js.map
4055 bytes
0644
8902.37d0b14aa6ef24687b7b.js
2673 bytes
0644
8902.37d0b14aa6ef24687b7b.js.map
5993 bytes
0644
8990.5a822b8788ebf0bdba81.js
3969 bytes
0644
8990.5a822b8788ebf0bdba81.js.map
9161 bytes
0644
9034.200fc7a09b466256c9a9.js
3486 bytes
0644
9034.200fc7a09b466256c9a9.js.map
8180 bytes
0644
9038.7ae2448b9cc5c423aeca.js
4937 bytes
0644
9038.7ae2448b9cc5c423aeca.js.map
11973 bytes
0644
9118.3121c6b96ec7dc211973.js
48311 bytes
0644
9118.3121c6b96ec7dc211973.js.map
62149 bytes
0644
9150.9eb62d45f9b21cb38850.js
10056 bytes
0644
9150.9eb62d45f9b21cb38850.js.map
21143 bytes
0644
9199.9897e268d6d13e834d4c.js
2307 bytes
0644
9199.9897e268d6d13e834d4c.js.map
8853 bytes
0644
9320.c403e78b78aa6df1d0bd.js
336139 bytes
0644
9320.c403e78b78aa6df1d0bd.js.map
1624993 bytes
0644
9355.421530b20c759bb75633.js
22098 bytes
0644
9355.421530b20c759bb75633.js.map
66961 bytes
0644
9384.a0d5fc49f1b15b3e311e.js
2855 bytes
0644
9384.a0d5fc49f1b15b3e311e.js.map
3717 bytes
0644
9390.fa2af7f3d3d9600c08ee.js
4201 bytes
0644
9390.fa2af7f3d3d9600c08ee.js.map
9682 bytes
0644
946.f2494c0c39a9590349b9.js
9194 bytes
0644
946.f2494c0c39a9590349b9.js.map
22193 bytes
0644
9510.4cfa85a51931dc20573a.js
2949 bytes
0644
9510.4cfa85a51931dc20573a.js.map
6939 bytes
0644
9521.de2a74ca5eb365810ca5.js
46306 bytes
0644
9521.de2a74ca5eb365810ca5.js.map
51040 bytes
0644
9538.996ade7a03ccdb01942d.js
64493 bytes
0644
9538.996ade7a03ccdb01942d.js.map
49212 bytes
0644
9569.a8d60b39654a160cb917.js
27965 bytes
0644
9569.a8d60b39654a160cb917.js.map
99160 bytes
0644
9643.b408884004ca73c102bc.js
627 bytes
0644
9643.b408884004ca73c102bc.js.map
2195 bytes
0644
968.22e079d28acb4131d34c.js
4001 bytes
0644
968.22e079d28acb4131d34c.js.map
9740 bytes
0644
970.a61e37b9b897c8098261.js
5239 bytes
0644
970.a61e37b9b897c8098261.js.map
13858 bytes
0644
9711.d6e977bd60f0e5ba673d.js
13555 bytes
0644
9711.d6e977bd60f0e5ba673d.js.map
43973 bytes
0644
9737.3340c89ea96d33307cc7.js
1001 bytes
0644
9737.3340c89ea96d33307cc7.js.map
3504 bytes
0644
9739.5a801055fcf72bf4d06f.js
1147 bytes
0644
9739.5a801055fcf72bf4d06f.js.map
4390 bytes
0644
9772.49e918c9331237552c0b.js
141 bytes
0644
9772.49e918c9331237552c0b.js.map
416 bytes
0644
9838.b8f01dc360f0c2151291.js
4003 bytes
0644
9838.b8f01dc360f0c2151291.js.map
8118 bytes
0644
AdminAuthentication.b7044adf53b669e61a87.js
22504 bytes
0644
AdminAuthentication.b7044adf53b669e61a87.js.map
67352 bytes
0644
AdminEditOrgPage.96fb6c37346641f44246.js
6369 bytes
0644
AdminEditOrgPage.96fb6c37346641f44246.js.map
20602 bytes
0644
AdminFeatureTogglesPage.22157fe31f358f1c4f09.js
4939 bytes
0644
AdminFeatureTogglesPage.22157fe31f358f1c4f09.js.map
16531 bytes
0644
AdminListOrgsPage.f01c8496fd635e20124b.js
2702 bytes
0644
AdminListOrgsPage.f01c8496fd635e20124b.js.map
7735 bytes
0644
AdminSettings.845c6def917892a0c1f9.js
1903 bytes
0644
AdminSettings.845c6def917892a0c1f9.js.map
5580 bytes
0644
AlertAmRoutes.10a0d9a23a082caf12c8.js
54554 bytes
0644
AlertAmRoutes.10a0d9a23a082caf12c8.js.map
208792 bytes
0644
AlertGroups.efd523dc41621f9f7935.js
10088 bytes
0644
AlertGroups.efd523dc41621f9f7935.js.map
39108 bytes
0644
AlertRuleListIndex.f0b17a6119cc5ea575ed.js
44623 bytes
0644
AlertRuleListIndex.f0b17a6119cc5ea575ed.js.map
156842 bytes
0644
AlertRuleListLegacy.8e675db4469232c87308.js
6270 bytes
0644
AlertRuleListLegacy.8e675db4469232c87308.js.map
18086 bytes
0644
AlertSilences.4ff252ad4c0057124d5d.js
24687 bytes
0644
AlertSilences.4ff252ad4c0057124d5d.js.map
83377 bytes
0644
AlertTabCtrl.d3377d127a336a69beb5.js
9844 bytes
0644
AlertTabCtrl.d3377d127a336a69beb5.js.map
27934 bytes
0644
AlertingAdmin.e62f9c73a69abe6a1ac0.js
10523 bytes
0644
AlertingAdmin.e62f9c73a69abe6a1ac0.js.map
37393 bytes
0644
AlertingFeatureTogglePage.f971bb7b2ad4ceb0acbd.js
672 bytes
0644
AlertingFeatureTogglePage.f971bb7b2ad4ceb0acbd.js.map
1220 bytes
0644
AlertingHome.0d6be993ef4a3df37345.js
33492 bytes
0644
AlertingHome.0d6be993ef4a3df37345.js.map
106868 bytes
0644
AlertingRedirectToRule.37a0040f89e20b99b751.js
3648 bytes
0644
AlertingRedirectToRule.37a0040f89e20b99b751.js.map
10875 bytes
0644
AlertingRuleForm.66bb5b2724b31ae6a5a4.js
79931 bytes
0644
AlertingRuleForm.66bb5b2724b31ae6a5a4.js.map
292923 bytes
0644
AlertingUpgrade.c757b99e306db50cdb16.js
31333 bytes
0644
AlertingUpgrade.c757b99e306db50cdb16.js.map
98330 bytes
0644
AngularApp.7e72879caebef22a5217.js
72809 bytes
0644
AngularApp.7e72879caebef22a5217.js.map
102853 bytes
0644
ApiKeysPage.12b0cd511f7b1e9c50dc.js
8422 bytes
0644
ApiKeysPage.12b0cd511f7b1e9c50dc.js.map
23375 bytes
0644
BenchmarksPage.3a183df3d44714f9a96a.js
2941 bytes
0644
BenchmarksPage.3a183df3d44714f9a96a.js.map
9749 bytes
0644
ChangePasswordPage.5e0562f6a9674bd95cfe.js
470 bytes
0644
ChangePasswordPage.5e0562f6a9674bd95cfe.js.map
1195 bytes
0644
Connections.b53c715b9b9a782d8647.js
32448 bytes
0644
Connections.b53c715b9b9a782d8647.js.map
112998 bytes
0644
CorrelationsFeatureToggle.71addced22f59948b708.js
674 bytes
0644
CorrelationsFeatureToggle.71addced22f59948b708.js.map
1149 bytes
0644
CorrelationsPage.4e02feddf752bdf7cfe6.js
22725 bytes
0644
CorrelationsPage.4e02feddf752bdf7cfe6.js.map
69262 bytes
0644
CreateTeam.dbde5b87278cf087cc5e.js
3046 bytes
0644
CreateTeam.dbde5b87278cf087cc5e.js.map
9594 bytes
0644
DashboardImport.06e6c4c03113061aae6c.js
18153 bytes
0644
DashboardImport.06e6c4c03113061aae6c.js.map
58242 bytes
0644
DashboardListPage.dac1fe75fbaa4f9b1c23.js
30967 bytes
0644
DashboardListPage.dac1fe75fbaa4f9b1c23.js.map
108517 bytes
0644
DashboardPage.5e50193556ad6b828f5d.js
2786 bytes
0644
DashboardPage.5e50193556ad6b828f5d.js.map
8754 bytes
0644
DashboardPageProxy.9a6d60e5cac89c11c71c.js
65136 bytes
0644
DashboardPageProxy.9a6d60e5cac89c11c71c.js.map
226791 bytes
0644
DataTrailsPage.aa19ca6750eb3f91ac5d.js
331 bytes
0644
DataTrailsPage.aa19ca6750eb3f91ac5d.js.map
582 bytes
0644
EditNotificationChannelLegacy.75122e6dbfb215d89d81.js
10507 bytes
0644
EditNotificationChannelLegacy.75122e6dbfb215d89d81.js.map
37444 bytes
0644
EmbeddedDashboard.3856404d3d608c739864.js
1768 bytes
0644
EmbeddedDashboard.3856404d3d608c739864.js.map
5917 bytes
0644
FolderAlerting.a0fe69e3574320c8a74a.js
9633 bytes
0644
FolderAlerting.a0fe69e3574320c8a74a.js.map
29985 bytes
0644
FolderLibraryPanelsPage.95dd7bf6735e202a79d2.js
8599 bytes
0644
FolderLibraryPanelsPage.95dd7bf6735e202a79d2.js.map
25919 bytes
0644
LibraryPanelsPage.4a952d4aa9c21984995a.js
2704 bytes
0644
LibraryPanelsPage.4a952d4aa9c21984995a.js.map
7623 bytes
0644
ListPublicDashboardPage.469a693c4011a5193fcd.js
4713 bytes
0644
ListPublicDashboardPage.469a693c4011a5193fcd.js.map
14309 bytes
0644
MuteTimings.cb66b37f52c9ee3ce1da.js
20855 bytes
0644
MuteTimings.cb66b37f52c9ee3ce1da.js.map
58932 bytes
0644
NewNotificationChannelLegacy.1d57814bc534bb1a3681.js
9785 bytes
0644
NewNotificationChannelLegacy.1d57814bc534bb1a3681.js.map
32951 bytes
0644
NewOrgPage.2bb0e1cab09f0cbd0310.js
1325 bytes
0644
NewOrgPage.2bb0e1cab09f0cbd0310.js.map
3158 bytes
0644
NotificationsListLegacyPage.33212668898a6db361a8.js
2547 bytes
0644
NotificationsListLegacyPage.33212668898a6db361a8.js.map
6671 bytes
0644
NotificationsListPage.1eb9cb05bf88eee08291.js
1620 bytes
0644
NotificationsListPage.1eb9cb05bf88eee08291.js.map
3378 bytes
0644
NotificationsPage.d26b90d7348139106351.js
4646 bytes
0644
NotificationsPage.d26b90d7348139106351.js.map
25381 bytes
0644
OrgDetailsPage.2d5c98f188683c2e1d3b.js
6742 bytes
0644
OrgDetailsPage.2d5c98f188683c2e1d3b.js.map
17850 bytes
0644
PlaylistEditPage.d14b3673a1bb03ca0dbb.js
6892 bytes
0644
PlaylistEditPage.d14b3673a1bb03ca0dbb.js.map
19989 bytes
0644
PlaylistNewPage.13696f39b95b8416ede2.js
6583 bytes
0644
PlaylistNewPage.13696f39b95b8416ede2.js.map
19084 bytes
0644
PlaylistPage.8f45dcc09add615f90e8.js
7895 bytes
0644
PlaylistPage.8f45dcc09add615f90e8.js.map
25502 bytes
0644
PlaylistStartPage.8be462b13a24cddee188.js
275 bytes
0644
PlaylistStartPage.8be462b13a24cddee188.js.map
698 bytes
0644
PluginListPage.815b65d32380d0a800f7.js
12167 bytes
0644
PluginListPage.815b65d32380d0a800f7.js.map
43537 bytes
0644
PluginPage.c790de5e17a0b728dd3a.js
314 bytes
0644
PluginPage.c790de5e17a0b728dd3a.js.map
668 bytes
0644
ProfileFeatureTogglePage.a14257ebc5da1e8c85e0.js
552 bytes
0644
ProfileFeatureTogglePage.a14257ebc5da1e8c85e0.js.map
1012 bytes
0644
PublicDashboardPage.51c7c24941781e091898.js
4295 bytes
0644
PublicDashboardPage.51c7c24941781e091898.js.map
14393 bytes
0644
SelectOrgPage.695c19a5101a3a03ee28.js
1124 bytes
0644
SelectOrgPage.695c19a5101a3a03ee28.js.map
2993 bytes
0644
SendResetMailPage.f16b7172a87070f57227.js
1736 bytes
0644
SendResetMailPage.f16b7172a87070f57227.js.map
4350 bytes
0644
ServerStats.3fbd2493deb8f4598755.js
3863 bytes
0644
ServerStats.3fbd2493deb8f4598755.js.map
11534 bytes
0644
ServiceAccountCreatePage.4f989fb6cd2a41193ff0.js
2440 bytes
0644
ServiceAccountCreatePage.4f989fb6cd2a41193ff0.js.map
7939 bytes
0644
ServiceAccountPage.bc7c35b63b03ccc89628.js
14806 bytes
0644
ServiceAccountPage.bc7c35b63b03ccc89628.js.map
51593 bytes
0644
ServiceAccountsPage.baaa08c045390c05e276.js
14565 bytes
0644
ServiceAccountsPage.baaa08c045390c05e276.js.map
46399 bytes
0644
SignupInvited.81ad56aceb8dd1839e15.js
2360 bytes
0644
SignupInvited.81ad56aceb8dd1839e15.js.map
6096 bytes
0644
SnapshotListPage.519c760ed66124a771ff.js
3061 bytes
0644
SnapshotListPage.519c760ed66124a771ff.js.map
9043 bytes
0644
SoloPanelPage.c729750a88c3fa90d1cc.js
3229 bytes
0644
SoloPanelPage.c729750a88c3fa90d1cc.js.map
12316 bytes
0644
SoloPanelPageOld.6518c21ccaf29701fa97.js
1727 bytes
0644
SoloPanelPageOld.6518c21ccaf29701fa97.js.map
5509 bytes
0644
StoragePage.9b93a99e75f7f2842c11.js
14081 bytes
0644
StoragePage.9b93a99e75f7f2842c11.js.map
48740 bytes
0644
SupportBundles.567d512b3f919b8112e4.js
3058 bytes
0644
SupportBundles.567d512b3f919b8112e4.js.map
8751 bytes
0644
SupportBundlesCreate.fc6b6e4cf6366f751081.js
2779 bytes
0644
SupportBundlesCreate.fc6b6e4cf6366f751081.js.map
8882 bytes
0644
TeamList.2e23d37c91734f608f09.js
9019 bytes
0644
TeamList.2e23d37c91734f608f09.js.map
30348 bytes
0644
TeamPages.4f6177b4c6ec769c72d8.js
22839 bytes
0644
TeamPages.4f6177b4c6ec769c72d8.js.map
66001 bytes
0644
TestStuffPage.8ddabdd17d265b771b17.js
2654 bytes
0644
TestStuffPage.8ddabdd17d265b771b17.js.map
8058 bytes
0644
UserCreatePage.72e86cf2c9a3ce50cff3.js
1470 bytes
0644
UserCreatePage.72e86cf2c9a3ce50cff3.js.map
3788 bytes
0644
UserInvitePage.c8243c9cee4b06e10222.js
2576 bytes
0644
UserInvitePage.c8243c9cee4b06e10222.js.map
6594 bytes
0644
UserListPage.acbb5778a782ca90c7ba.js
25463 bytes
0644
UserListPage.acbb5778a782ca90c7ba.js.map
79671 bytes
0644
UserProfileEditPage.7cc4c218d9e4664250e3.js
14593 bytes
0644
UserProfileEditPage.7cc4c218d9e4664250e3.js.map
42901 bytes
0644
UsersListPage.1b61c82d62ca416b6f2f.js
8800 bytes
0644
UsersListPage.1b61c82d62ca416b6f2f.js.map
30059 bytes
0644
alert-rules-drawer-content.1fd9de3b496d077a5f3a.js
957 bytes
0644
alert-rules-drawer-content.1fd9de3b496d077a5f3a.js.map
3199 bytes
0644
alert-rules-toolbar-button.6f275f0d03748b6c297d.js
1429 bytes
0644
alert-rules-toolbar-button.6f275f0d03748b6c297d.js.map
4041 bytes
0644
alertmanagerPlugin.d13ca72afb3f996bb284.js
3810 bytes
0644
alertmanagerPlugin.d13ca72afb3f996bb284.js.map
10753 bytes
0644
app.b11fde05d43f9632a473.js
920821 bytes
0644
app.b11fde05d43f9632a473.js.map
69088 bytes
0644
assets-manifest.json
280835 bytes
0644
azureMonitorPlugin.0bc37a9d4e3bd8421cc0.js
232 bytes
0644
azureMonitorPlugin.0bc37a9d4e3bd8421cc0.js.map
600 bytes
0644
brace.fcd4b1c7e8b9264ab02c.js
371235 bytes
0644
brace.fcd4b1c7e8b9264ab02c.js.map
1132097 bytes
0644
canvasPanel.a46aa5e57d26b1fcc380.js
485254 bytes
0644
canvasPanel.a46aa5e57d26b1fcc380.js.map
2136916 bytes
0644
cloudMonitoringPlugin.c6ea431eae8e9ad2c7b1.js
198 bytes
0644
cloudMonitoringPlugin.c6ea431eae8e9ad2c7b1.js.map
555 bytes
0644
cloudwatchPlugin.06ef34f60000c4f7ea37.js
192 bytes
0644
cloudwatchPlugin.06ef34f60000c4f7ea37.js.map
544 bytes
0644
dark.7fa24d1908c1c96e6fcc.js
134 bytes
0644
elasticsearchPlugin.3f2edb012f5162b48903.js
214 bytes
0644
elasticsearchPlugin.3f2edb012f5162b48903.js.map
583 bytes
0644
explore-feature-toggle-page.897d9f08c342ad4c0702.js
612 bytes
0644
explore-feature-toggle-page.897d9f08c342ad4c0702.js.map
1280 bytes
0644
explore.476912733278e2a99729.js
165810 bytes
0644
explore.476912733278e2a99729.js.map
579148 bytes
0644
geomapPanel.14b9605971a38c51d262.js
417078 bytes
0644
geomapPanel.14b9605971a38c51d262.js.map
540371 bytes
0644
grafana.dark.8c716fbcf630eae84ced.css
209089 bytes
0644
grafana.light.b8b3904788f25480f4a1.css
209047 bytes
0644
grafanaPlugin.1cb208185a89de28dc3a.js
8654 bytes
0644
grafanaPlugin.1cb208185a89de28dc3a.js.map
28174 bytes
0644
graphPlugin.f47f722cdfc0ceb85136.js
70277 bytes
0644
graphPlugin.f47f722cdfc0ceb85136.js.map
243430 bytes
0644
graphitePlugin.d59175976346917781fe.js
75305 bytes
0644
graphitePlugin.d59175976346917781fe.js.map
272016 bytes
0644
heatmapPanel.f6f29a53ed0f682b4404.js
37545 bytes
0644
heatmapPanel.f6f29a53ed0f682b4404.js.map
158066 bytes
0644
influxdbPlugin.140a7777089f9559c11c.js
68843 bytes
0644
influxdbPlugin.140a7777089f9559c11c.js.map
265085 bytes
0644
jaegerPlugin.d254fd4a19ef0cb5b4f5.js
19727 bytes
0644
jaegerPlugin.d254fd4a19ef0cb5b4f5.js.map
65603 bytes
0644
light.af65e5ce03b9ed0aa2b1.js
134 bytes
0644
loki-query-field.a588d587d9d762b18f22.js
191 bytes
0644
loki-query-field.a588d587d9d762b18f22.js.map
548 bytes
0644
lokiPlugin.77364509de280321b6f8.js
185 bytes
0644
lokiPlugin.77364509de280321b6f8.js.map
536 bytes
0644
mixedPlugin.f36bd557a883d9a67538.js
180 bytes
0644
mssqlPlugin.88775f59ced74c2283c5.js
20457 bytes
0644
mssqlPlugin.88775f59ced74c2283c5.js.map
61420 bytes
0644
mysqlPlugin.72fb44411afd8165d201.js
17323 bytes
0644
mysqlPlugin.72fb44411afd8165d201.js.map
45415 bytes
0644
nodeGraphPanel.9a7cdd8efdae281cbe28.js
2107 bytes
0644
nodeGraphPanel.9a7cdd8efdae281cbe28.js.map
7132 bytes
0644
opentsdbPlugin.418b8c8ea0d97ed99edb.js
22866 bytes
0644
opentsdbPlugin.418b8c8ea0d97ed99edb.js.map
82180 bytes
0644
parcaPlugin.7f2e6dde7161b08ceed2.js
11184 bytes
0644
parcaPlugin.7f2e6dde7161b08ceed2.js.map
42340 bytes
0644
postgresPlugin.f88c598bae2653ae177b.js
18902 bytes
0644
postgresPlugin.f88c598bae2653ae177b.js.map
54304 bytes
0644
prom-query-field.ff217c474ea457bdd65e.js
14104 bytes
0644
prom-query-field.ff217c474ea457bdd65e.js.map
76811 bytes
0644
prometheusPlugin.2ba02c28d3f7293e903e.js
224 bytes
0644
prometheusPlugin.2ba02c28d3f7293e903e.js.map
699 bytes
0644
pyroscopePlugin.eb14b78419d619d90dca.js
22269 bytes
0644
pyroscopePlugin.eb14b78419d619d90dca.js.map
86896 bytes
0644
react-monaco-editor.988b1aa5e90b11f9941a.js
15759 bytes
0644
react-monaco-editor.988b1aa5e90b11f9941a.js.map
51544 bytes
0644
runtime.4b7e1b5735d2ed64b824.js
13640 bytes
0644
runtime.4b7e1b5735d2ed64b824.js.map
35122 bytes
0644
tableOldPlugin.8c72b8399d197aeebe16.js
25242 bytes
0644
tableOldPlugin.8c72b8399d197aeebe16.js.map
80497 bytes
0644
tempoPlugin.efa8c2a55984263b4b61.js
182 bytes
0644
tempoPlugin.efa8c2a55984263b4b61.js.map
529 bytes
0644
testDataDSPlugin.9717509b124d754e4f35.js
120550 bytes
0644
testDataDSPlugin.9717509b124d754e4f35.js.map
303302 bytes
0644
visjs-network.d93b3aa71ac24c8cde84.js
459653 bytes
0644
visjs-network.d93b3aa71ac24c8cde84.js.map
1951742 bytes
0644
zipkinPlugin.70f0f24b6d0b6e673ccb.js
13172 bytes
0644
zipkinPlugin.70f0f24b6d0b6e673ccb.js.map
46861 bytes
0644
N4ST4R_ID | Naxtarrr