{"version":3,"file":"4436.b208037f6b1954dc031d.js","mappings":"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","sources":["webpack://grafana/./public/app/angular/AngularLocationWrapper.ts","webpack://grafana/./public/app/angular/core_module.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/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/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor.tsx","webpack://grafana/./public/app/plugins/datasource/cloudwatch/components/AnnotationQueryEditor.tsx","webpack://grafana/./public/app/core/components/Select/MetricSelect.tsx","webpack://grafana/./public/app/plugins/datasource/loki/components/AnnotationsQueryEditor.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/services/UtilSrv.ts","webpack://grafana/./public/app/angular/services/annotations_srv.ts","webpack://grafana/./public/app/angular/AngularApp.ts","webpack://grafana/./public/app/angular/registerComponents.ts","webpack://grafana/./public/app/angular/injectorMonkeyPatch.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/datasource/loki/components/LokiOptionFields.tsx","webpack://grafana/./public/app/plugins/datasource/loki/types.ts","webpack://grafana/./public/app/plugins/sdk.ts","webpack://grafana/./public/vendor/angular-other/angular-strap.js","webpack://grafana/./public/vendor/bootstrap/bootstrap.js","webpack://grafana/./public/vendor/tagsinput/bootstrap-tagsinput.js","webpack://grafana/../../opt/drone/yarncache/angular-bindonce-npm-0.3.1-63597abd34-6a9adeb527.zip/node_modules/angular-bindonce/bindonce.js","webpack://grafana/../../opt/drone/yarncache/angular-route-npm-1.8.2-11a799fee9-08d84d6a35.zip/node_modules/angular-route/angular-route.js","webpack://grafana/../../opt/drone/yarncache/angular-route-npm-1.8.2-11a799fee9-08d84d6a35.zip/node_modules/angular-route/index.js","webpack://grafana/../../opt/drone/yarncache/angular-sanitize-npm-1.8.2-378e7cdaed-df06ddee2a.zip/node_modules/angular-sanitize/angular-sanitize.js","webpack://grafana/../../opt/drone/yarncache/angular-sanitize-npm-1.8.2-378e7cdaed-df06ddee2a.zip/node_modules/angular-sanitize/index.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/autoUpdate.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/controls.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/core.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/fix.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/log.js","webpack://grafana/../../opt/drone/yarncache/baron-npm-3.0.3-255b365962-5fd57232e2.zip/node_modules/baron/src/utils.js"],"sourcesContent":["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 = { 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","import angular from 'angular';\n\nconst coreModule = angular.module('grafana.core', ['ngRoute']);\n\n// legacy modules\nconst angularModules = [\n coreModule,\n angular.module('grafana.controllers', []),\n angular.module('grafana.directives', []),\n angular.module('grafana.factories', []),\n angular.module('grafana.services', []),\n angular.module('grafana.filters', []),\n angular.module('grafana.routes', []),\n];\n\nexport { angularModules, coreModule };\n\nexport default coreModule;\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 \n`;\n\ncoreModule.directive('grafanaPanel', ($rootScope, $document, $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
\n
\n
\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","import angular from 'angular';\n\nconst directiveModule = angular.module('grafana.directives');\nconst directiveCache: any = {};\n\n/** @ngInject */\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\ndirectiveModule.directive('panelEditorTab', panelEditorTab);\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\n/** @ngInject */\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\ncoreModule.directive('queryEditorRow', queryEditorRowDirective);\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 /** @ngInject */\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 ReactDOM from 'react-dom';\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(name: string | Function, $injector: auto.IInjectorService): ComponentType {\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;\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;\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, elem: Element[]) {\n scope.$evalAsync(() => {\n ReactDOM.render(React.createElement(component, props), elem[0]);\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// \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
Hello {this.props.name}
;\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 renderMyComponent = () => {\n const scopeProps = scope.$eval(attrs.props);\n const props = applyFunctions(scopeProps, scope);\n\n renderComponent(reactComponent, props, scope, elem);\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 ReactDOM.unmountComponentAtNode(elem[0]);\n } else {\n scope.$eval(attrs.onScopeDestroy, {\n unmountComponent: ReactDOM.unmountComponentAtNode.bind(this, elem[0]),\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
Hello {this.props.name}
;\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// \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\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, elem);\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 ReactDOM.unmountComponentAtNode(elem[0]);\n } else {\n scope.$eval(attrs.onScopeDestroy, {\n unmountComponent: ReactDOM.unmountComponentAtNode.bind(this, elem[0]),\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\n/** @ngInject */\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('');\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: '',\n type: 'plus-button',\n cssClass: 'query-part',\n });\n };\n}\n\ncoreModule.service('uiSegmentSrv', uiSegmentSrv);\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\n/** @ngInject */\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\ncoreModule.service('popoverSrv', popoverSrv);\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> = [];\n\n /** @ngInject */\n constructor(private $timeout: ITimeoutService) {}\n\n register(promise: angular.IPromise) {\n this.timers.push(promise);\n return promise;\n }\n\n cancel(promise: angular.IPromise) {\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 /** @ngInject */\n constructor(private $compile: any, private $rootScope: GrafanaRootScope) {}\n\n load(elem: any, 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\n/** @ngInject */\nexport function dropdownTypeahead($compile: any) {\n const inputTemplate =\n '';\n\n const buttonTemplate =\n '';\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\n/** @ngInject */\nexport function dropdownTypeahead2($compile: any) {\n const inputTemplate =\n '';\n\n const buttonTemplate =\n '';\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', dropdownTypeahead);\ncoreModule.directive('dropdownTypeahead2', dropdownTypeahead2);\n","import coreModule from './core_module';\n\n/** @ngInject */\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', 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\n/** @ngInject */\nexport function metricSegment($compile: any, $sce: any, templateSrv: TemplateSrv) {\n const inputTemplate =\n '';\n\n const linkTemplate =\n '';\n\n const selectTemplate =\n '';\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\n/** @ngInject */\nexport function metricSegmentModel(uiSegmentSrv: any) {\n return {\n template:\n '',\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', metricSegment);\ncoreModule.directive('metricSegmentModel', metricSegmentModel);\n","import angular from 'angular';\n\nimport coreModule from './core_module';\n\n/** @ngInject */\nfunction tip($compile: any) {\n return {\n restrict: 'E',\n link: (scope: any, elem: any, attrs: any) => {\n let _t =\n '&]/g, (m: string) => '&#' + m.charCodeAt(0) + ';') +\n '\\'\">';\n elem.replaceWith($compile(angular.element(_t))(scope));\n },\n };\n}\n\n/** @ngInject */\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\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\n/** @ngInject */\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 ? ' ' + attrs.tip + '' : '';\n const showIf = attrs.showIf ? ' ng-show=\"' + attrs.showIf + '\" ' : '';\n\n const template =\n '
' +\n ' ' +\n '' +\n ' ';\n elem.replaceWith($compile(angular.element(template))(scope));\n },\n };\n}\n\n/** @ngInject */\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 ? ' ' + attrs.tip + '' : '';\n const label = '';\n\n let template =\n '' +\n ' ';\n\n template = template + label;\n elem.addClass('gf-form-checkbox');\n elem.html($compile(angular.element(template))(scope));\n },\n };\n}\n\n/** @ngInject */\nfunction gfDropdown($parse: any, $compile: any, $timeout: any) {\n function buildTemplate(items: any, placement?: any) {\n const upclass = placement === 'top' ? 'dropup' : '';\n const 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, '
  • ');\n continue;\n }\n\n let li =\n '' +\n '' +\n (item.text || '') +\n '';\n\n if (item.submenu && item.submenu.length) {\n li += buildTemplate(item.submenu).join('\\n');\n }\n\n 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\ncoreModule.directive('tip', tip);\ncoreModule.directive('compile', compile);\ncoreModule.directive('watchChange', watchChange);\ncoreModule.directive('editorOptBool', editorOptBool);\ncoreModule.directive('editorCheckbox', editorCheckbox);\ncoreModule.directive('gfDropdown', gfDropdown);\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: '',\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\n/** @ngInject */\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\ncoreModule.directive('rebuildOnChange', rebuildOnChange);\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 /** @ngInject */\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}\ncoreModule.directive('diffDelta', delta);\n\n// Link to JSON line number\nexport class LinkJSONCtrl {\n /** @ngInject */\n constructor(private $scope: any, private $rootScope: GrafanaRootScope, private $anchorScroll: any) {}\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: `Line {{ line }}`,\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 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), options);\n },\n ]);\n}\n","import React from 'react';\n\nimport { SelectableValue, toOption } from '@grafana/data';\nimport { TemplateSrv } from '@grafana/runtime';\nimport { LegacyForms } from '@grafana/ui';\n\nimport CloudMonitoringDatasource from '../datasource';\nimport { AnnotationTarget, EditorMode, MetricDescriptor, MetricKind } from '../types';\n\nimport { AnnotationsHelp, LabelFilter, Metrics, Project, QueryEditorRow } from './';\n\nconst { Input } = LegacyForms;\n\nexport interface Props {\n refId: string;\n onQueryChange: (target: AnnotationTarget) => void;\n target: AnnotationTarget;\n datasource: CloudMonitoringDatasource;\n templateSrv: TemplateSrv;\n}\n\ninterface State extends AnnotationTarget {\n variableOptionGroup: SelectableValue;\n variableOptions: Array>;\n labels: any;\n [key: string]: any;\n}\n\nconst DefaultTarget: State = {\n editorMode: EditorMode.Visual,\n projectName: '',\n projects: [],\n metricType: '',\n filters: [],\n metricKind: MetricKind.GAUGE,\n valueType: '',\n refId: 'annotationQuery',\n title: '',\n text: '',\n labels: {},\n variableOptionGroup: {},\n variableOptions: [],\n};\n\nexport class AnnotationQueryEditor extends React.Component {\n state: State = DefaultTarget;\n\n async UNSAFE_componentWillMount() {\n // Unfortunately, migrations like this need to go UNSAFE_componentWillMount. As soon as there's\n // migration hook for this module.ts, we can do the migrations there instead.\n const { target, datasource } = this.props;\n if (!target.projectName) {\n target.projectName = datasource.getDefaultProject();\n }\n\n const variableOptionGroup = {\n label: 'Template Variables',\n options: datasource.getVariables().map(toOption),\n };\n\n const projects = await datasource.getProjects();\n this.setState({\n variableOptionGroup,\n variableOptions: variableOptionGroup.options,\n ...target,\n projects,\n });\n\n datasource\n .getLabels(target.metricType, target.projectName, target.refId)\n .then((labels) => this.setState({ labels }));\n }\n\n onMetricTypeChange = ({ valueType, metricKind, type, unit }: MetricDescriptor) => {\n const { onQueryChange, datasource } = this.props;\n this.setState(\n {\n metricType: type,\n unit,\n valueType,\n metricKind,\n },\n () => {\n onQueryChange(this.state);\n }\n );\n datasource.getLabels(type, this.state.refId, this.state.projectName).then((labels) => this.setState({ labels }));\n };\n\n onChange(prop: string, value: string | string[]) {\n this.setState({ [prop]: value }, () => {\n this.props.onQueryChange(this.state);\n });\n }\n\n render() {\n const { metricType, projectName, filters, title, text, variableOptionGroup, labels, variableOptions } = this.state;\n const { datasource } = this.props;\n\n return (\n <>\n this.onChange('projectName', value)}\n />\n this.onMetricTypeChange(metric)}\n >\n {(metric) => (\n <>\n this.onChange('filters', value)}\n variableOptionGroup={variableOptionGroup}\n />\n \n )}\n \n\n \n this.onChange('title', e.target.value)}\n />\n \n \n this.onChange('text', e.target.value)}\n />\n \n\n \n \n );\n }\n}\n","import React, { ChangeEvent } from 'react';\n\nimport { PanelData } from '@grafana/data';\nimport { EditorField, EditorHeader, EditorRow, InlineSelect, Space } from '@grafana/experimental';\nimport { Input, Switch } from '@grafana/ui';\n\nimport { CloudWatchDatasource } from '../datasource';\nimport { useRegions } from '../hooks';\nimport { CloudWatchAnnotationQuery, CloudWatchMetricsQuery } from '../types';\n\nimport { MetricStatEditor } from './MetricStatEditor';\n\nexport type Props = {\n query: CloudWatchAnnotationQuery;\n datasource: CloudWatchDatasource;\n onChange: (value: CloudWatchAnnotationQuery) => void;\n data?: PanelData;\n};\n\nexport function AnnotationQueryEditor(props: React.PropsWithChildren) {\n const { query, onChange, datasource } = props;\n\n const [regions, regionIsLoading] = useRegions(datasource);\n\n return (\n <>\n \n v.value === query.region)}\n placeholder=\"Select region\"\n allowCustomValue\n onChange={({ value: region }) => region && onChange({ ...query, region })}\n options={regions}\n isLoading={regionIsLoading}\n />\n \n \n onChange({ ...query, ...editorQuery })}\n onRunQuery={() => {}}\n >\n \n \n \n ) => onChange({ ...query, period: event.target.value })}\n />\n \n \n {\n onChange({\n ...query,\n prefixMatching: e.currentTarget.checked,\n });\n }}\n />\n \n \n ) =>\n onChange({ ...query, actionPrefix: event.target.value })\n }\n />\n \n \n ) =>\n onChange({ ...query, alarmNamePrefix: event.target.value })\n }\n />\n \n \n \n );\n}\n","import { flatten } from 'lodash';\nimport React, { useMemo, useCallback, FC } from 'react';\n\nimport { SelectableValue } from '@grafana/data';\nimport { LegacyForms } from '@grafana/ui';\nimport { Variable } from 'app/types/templates';\nconst { Select } = LegacyForms;\n\nexport interface Props {\n onChange: (value: string | undefined) => void;\n options: Array>;\n isSearchable: boolean;\n value: string;\n placeholder?: string;\n className?: string;\n variables?: Variable[];\n}\n\nexport const MetricSelect: FC = (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) => onChange(selectable.value), [onChange]);\n\n return (\n 'No options found'}\n value={selected}\n />\n );\n};\n\nconst useSelectOptions = ({ variables = [], options }: Props): Array> => {\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>, value: string): SelectableValue => {\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","// Libraries\nimport React, { memo } from 'react';\n\n// Types\nimport { LokiDatasource } from '../datasource';\nimport { LokiQuery } from '../types';\n\nimport { LokiOptionFields } from './LokiOptionFields';\nimport { LokiQueryField } from './LokiQueryField';\n\ninterface Props {\n expr: string;\n maxLines?: number;\n instant?: boolean;\n datasource: LokiDatasource;\n onChange: (query: LokiQuery) => void;\n}\n\nexport const LokiAnnotationsQueryEditor = memo(function LokiAnnotationQueryEditor(props: Props) {\n const { expr, maxLines, instant, datasource, onChange } = props;\n\n const queryWithRefId: LokiQuery = {\n refId: '',\n expr,\n maxLines,\n instant,\n };\n return (\n
    \n {}}\n onBlur={() => {}}\n history={[]}\n ExtraFieldElement={\n {}}\n onChange={onChange}\n />\n }\n />\n
    \n );\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 { FolderPicker } from 'app/core/components/Select/FolderPicker';\nimport { TimePickerSettings } from 'app/features/dashboard/components/DashboardSettings/TimePickerSettings';\nimport { AnnotationQueryEditor as CloudMonitoringAnnotationQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/AnnotationQueryEditor';\nimport { QueryEditor as CloudMonitoringQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/QueryEditor';\nimport { AnnotationQueryEditor as CloudWatchAnnotationQueryEditor } from 'app/plugins/datasource/cloudwatch/components/AnnotationQueryEditor';\nimport QueryEditor from 'app/plugins/datasource/grafana-azure-monitor-datasource/components/QueryEditor/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';\nimport { SearchField, SearchResults, SearchResultsFilter } from '../features/search';\nimport { LokiAnnotationsQueryEditor } from '../plugins/datasource/loki/components/AnnotationsQueryEditor';\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 //Search\n react2AngularDirective('searchField', SearchField, [\n 'query',\n 'autoFocus',\n ['onChange', { watchDepth: 'reference' }],\n ['onKeyDown', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('searchResults', SearchResults, [\n 'results',\n 'editable',\n 'selectors',\n ['onSelectionChanged', { watchDepth: 'reference' }],\n ['onTagSelected', { watchDepth: 'reference' }],\n ['onFolderExpanding', { watchDepth: 'reference' }],\n ['onToggleSelection', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('searchFilters', SearchResultsFilter, [\n 'allChecked',\n 'canMove',\n 'canDelete',\n 'tagFilterOptions',\n 'selectedStarredFilter',\n 'selectedTagFilter',\n ['onSelectAllChanged', { watchDepth: 'reference' }],\n ['deleteItem', { watchDepth: 'reference' }],\n ['moveTo', { watchDepth: 'reference' }],\n ['onStarredFilterChange', { watchDepth: 'reference' }],\n ['onTagFilterChange', { watchDepth: 'reference' }],\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('cloudMonitoringAnnotationQueryEditor', CloudMonitoringAnnotationQueryEditor, [\n 'target',\n 'onQueryChange',\n ['datasource', { watchDepth: 'reference' }],\n ['templateSrv', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('cloudwatchAnnotationQueryEditor', CloudWatchAnnotationQueryEditor, [\n 'query',\n 'onChange',\n ['datasource', { 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('lokiAnnotationsQueryEditor', LokiAnnotationsQueryEditor, [\n 'expr',\n 'maxLines',\n 'instant',\n 'onChange',\n ['datasource', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('datasourceHttpSettingsNext', DataSourceHttpSettings, [\n 'defaultUrl',\n 'showAccessOptions',\n 'dataSourceConfig',\n 'showForwardOAuthIdentityOption',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('folderPicker', FolderPicker, [\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('azureMonitorQueryEditor', QueryEditor, [\n 'query',\n ['datasource', { watchDepth: 'reference' }],\n 'onChange',\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
    \n{{part.def.type}}\n()\n\n`;\n\n/** @ngInject */\nexport function queryPartEditorDirective(templateSrv: any) {\n const paramTemplate = '';\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 $(', ').appendTo($paramsContainer);\n }\n\n const paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);\n const $paramLink = $('' + paramValue + '');\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\ncoreModule.directive('queryPartEditor', queryPartEditorDirective);\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 /** @ngInject */\n constructor(private $scope: any, $element: JQLite, private $sce: ISCEService, private templateSrv: any) {\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\n\n\n\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
    \n
    \n
    \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\n`;\n\nconst checkboxTemplate = `\n\n`;\n\nexport class SwitchCtrl {\n onChange: any;\n checked: any;\n show: any;\n id: any;\n label?: string;\n\n /** @ngInject */\n constructor($scope: any, private $timeout: any) {\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: ``,\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 directive for backward compatibility.\n * Allows remaining 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\n/** @ngInject */\nexport function spectrumPicker() {\n return {\n restrict: 'E',\n require: 'ngModel',\n scope: true,\n replace: true,\n template: '',\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}\ncoreModule.directive('spectrumPicker', spectrumPicker);\n","/**\n * codeEditor directive based on Ace code editor\n * https://github.com/ajaxorg/ace\n *\n * Basic usage:\n * \n * \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 = `
    `;\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
    \n{{part.label}}\n{{part.def.wrapOpen}}{{part.def.wrapClose}}\n\n`;\n\n/** @ngInject */\nexport function sqlPartEditorDirective(templateSrv: any) {\n const paramTemplate = '';\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 $('' + partDef.separator + '').appendTo($paramsContainer);\n }\n\n const paramValue = templateSrv.highlightVariablesAsHtml(part.params[index]);\n const $paramLink = $('' + paramValue + '');\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\ncoreModule.directive('sqlPartEditor', sqlPartEditorDirective);\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\n/** @ngInject */\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 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 = `${template}`;\n return componentInfo;\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\ncoreModule.directive('pluginComponent', pluginDirectiveLoader);\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, setAppEvents, 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 { initGrafanaLive } from 'app/features/live';\nimport { CoreEvents, 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 /** @ngInject */\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 setAppEvents(appEvents);\n\n initGrafanaLive();\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 (\n event: AppEvent | 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 = (event: AppEvent | 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\n/** @ngInject */\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 appEvents.on(CoreEvents.toggleSidemenuHidden, () => {\n body.toggleClass('sidemenu-hidden');\n });\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","import { deprecationWarning } from '@grafana/data';\nimport { GrafanaRootScope } from 'app/angular/GrafanaCtrl';\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 /** @ngInject */\n constructor(private $rootScope: GrafanaRootScope, private $modal: any) {}\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', 'showModalReact');\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n }\n\n /**\n * @deprecated use showModalReact instead\n */\n showModal(options: any) {\n deprecationWarning('UtilSrv', 'showModal', 'showModalReact');\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n\n this.modalScope = options.scope;\n\n if (options.model) {\n this.modalScope = this.$rootScope.$new();\n this.modalScope.model = options.model;\n } else if (!this.modalScope) {\n this.modalScope = this.$rootScope.$new();\n }\n\n const modal = this.$modal({\n modalClass: options.modalClass,\n template: options.src,\n templateHtml: options.templateHtml,\n persist: false,\n show: false,\n scope: this.modalScope,\n keyboard: false,\n backdrop: options.backdrop,\n });\n\n Promise.resolve(modal).then((modalEl) => {\n modalEl.modal('show');\n });\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 'angular';\n\nimport 'angular-route';\nimport 'angular-sanitize';\nimport 'angular-bindonce';\nimport 'vendor/bootstrap/bootstrap';\nimport 'vendor/angular-other/angular-strap';\nimport angular from 'angular'; //eslint-disable-line no-duplicate-imports\nimport { extend } from 'lodash';\n\nimport { getTemplateSrv } 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 { exposeToPlugin } from 'app/features/plugins/plugin_loader';\nimport * as sdk from 'app/plugins/sdk';\n\nimport { registerAngularDirectives } from './angular_wrappers';\nimport { initAngularRoutingBridge } from './bridgeReactAngularRouting';\nimport { monkeyPatchInjectorWithPreAssignedBindings } from './injectorMonkeyPatch';\nimport { promiseToDigest } from './promiseToDigest';\nimport { registerComponents } from './registerComponents';\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 app.config(\n (\n $controllerProvider: angular.IControllerProvider,\n $compileProvider: angular.ICompileProvider,\n $filterProvider: angular.IFilterProvider,\n $httpProvider: angular.IHttpProvider,\n $provide: angular.auto.IProvideService\n ) => {\n if (config.buildInfo.env !== 'development') {\n $compileProvider.debugInfoEnabled(false);\n }\n\n $httpProvider.useApplyAsync(true);\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 = [\n 'grafana.core',\n 'ngSanitize',\n '$strap.directives',\n 'grafana',\n 'pasvaz.bindonce',\n 'react',\n ];\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 // Angular plugins import this\n exposeToPlugin('angular', angular);\n exposeToPlugin('app/core/utils/promiseToDigest', { promiseToDigest, __esModule: true });\n exposeToPlugin('app/plugins/sdk', sdk);\n exposeToPlugin('app/core/core_module', coreModule);\n exposeToPlugin('app/core/core', {\n coreModule: coreModule,\n appEvents: appEvents,\n contextSrv: contextSrv,\n __esModule: true,\n });\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 { 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","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 { 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 dashboardId: this.dashboard.id,\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 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(event: AppEvent, 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 {\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 {\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(public $scope: any, public $injector: auto.IInjectorService) {\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) => promise.finally($scope.$evalAsync);\n","// Libraries\nimport { css, cx } from '@emotion/css';\nimport { map } from 'lodash';\nimport React, { memo } from 'react';\n\n// Types\nimport { SelectableValue } from '@grafana/data';\nimport { config } from '@grafana/runtime';\nimport { InlineFormLabel, RadioButtonGroup, InlineField, Input, Select } from '@grafana/ui';\n\nimport { LokiQuery, LokiQueryType } from '../types';\n\nexport interface LokiOptionFieldsProps {\n lineLimitValue: string;\n resolution: number;\n query: LokiQuery;\n onChange: (value: LokiQuery) => void;\n onRunQuery: () => void;\n runOnBlur?: boolean;\n}\n\nexport const queryTypeOptions: Array> = [\n { value: LokiQueryType.Range, label: 'Range', description: 'Run query over a range of time.' },\n {\n value: LokiQueryType.Instant,\n label: 'Instant',\n description: 'Run query against a single point in time. For this query, the \"To\" time is used.',\n },\n];\n\nif (config.featureToggles.lokiLive) {\n queryTypeOptions.push({\n value: LokiQueryType.Stream,\n label: 'Stream',\n description: 'Run a query and keep sending results on an interval',\n });\n}\n\nexport const DEFAULT_RESOLUTION: SelectableValue = {\n value: 1,\n label: '1/1',\n};\n\nexport const RESOLUTION_OPTIONS: Array> = [DEFAULT_RESOLUTION].concat(\n map([2, 3, 4, 5, 10], (value: number) => ({\n value,\n label: '1/' + value,\n }))\n);\n\nexport function LokiOptionFields(props: LokiOptionFieldsProps) {\n const { lineLimitValue, resolution, onRunQuery, runOnBlur, onChange } = props;\n const query = props.query ?? {};\n let queryType = query.queryType ?? (query.instant ? LokiQueryType.Instant : LokiQueryType.Range);\n\n function onChangeQueryLimit(value: string) {\n const nextQuery = { ...query, maxLines: preprocessMaxLines(value) };\n onChange(nextQuery);\n }\n\n function onQueryTypeChange(queryType: LokiQueryType) {\n const { instant, range, ...rest } = query;\n onChange({ ...rest, queryType });\n }\n\n function onMaxLinesChange(e: React.SyntheticEvent) {\n if (query.maxLines !== preprocessMaxLines(e.currentTarget.value)) {\n onChangeQueryLimit(e.currentTarget.value);\n }\n }\n\n function onReturnKeyDown(e: React.KeyboardEvent) {\n if (e.key === 'Enter') {\n onRunQuery();\n }\n }\n\n function onResolutionChange(option: SelectableValue) {\n const nextQuery = { ...query, resolution: option.value };\n onChange(nextQuery);\n }\n\n return (\n
    \n {/*Query type field*/}\n \n Query type\n\n {\n onQueryTypeChange(type);\n if (runOnBlur) {\n onRunQuery();\n }\n }}\n />\n
    \n {/*Line limit field*/}\n \n \n {\n if (runOnBlur) {\n onRunQuery();\n }\n }}\n />\n \n \n \n \n
    \n
    \n );\n}\n\nexport default memo(LokiOptionFields);\n\nexport function preprocessMaxLines(value: string): number {\n if (value.length === 0) {\n // empty input - falls back to dataSource.maxLines limit\n return NaN;\n } else if (value.length > 0 && (isNaN(+value) || +value < 0)) {\n // input with at least 1 character and that is either incorrect (value in the input field is not a number) or negative\n // falls back to the limit of 0 lines\n return 0;\n } else {\n // default case - correct input\n return +value;\n }\n}\n","import { DataQuery, DataSourceJsonData, QueryResultMeta, ScopedVars } from '@grafana/data';\n\nimport { QueryEditorMode } from '../prometheus/querybuilder/shared/types';\n\nimport { LokiVisualQuery } from './querybuilder/types';\n\nexport interface LokiInstantQueryRequest {\n query: string;\n limit?: number;\n time?: string;\n direction?: 'BACKWARD' | 'FORWARD';\n}\n\nexport interface LokiRangeQueryRequest {\n query: string;\n limit?: number;\n start?: number;\n end?: number;\n step?: number;\n direction?: 'BACKWARD' | 'FORWARD';\n}\n\nexport enum LokiResultType {\n Stream = 'streams',\n Vector = 'vector',\n Matrix = 'matrix',\n}\n\nexport enum LokiQueryType {\n Range = 'range',\n Instant = 'instant',\n Stream = 'stream',\n}\n\nexport interface LokiQuery extends DataQuery {\n queryType?: LokiQueryType;\n expr: string;\n query?: string;\n format?: string;\n reverse?: boolean;\n legendFormat?: string;\n valueWithRefId?: boolean;\n maxLines?: number;\n resolution?: number;\n /** Used in range queries */\n volumeQuery?: boolean;\n /* @deprecated now use queryType */\n range?: boolean;\n /* @deprecated now use queryType */\n instant?: boolean;\n editorMode?: QueryEditorMode;\n /** Temporary until we have a parser */\n visualQuery?: LokiVisualQuery;\n}\n\nexport interface LokiOptions extends DataSourceJsonData {\n maxLines?: string;\n derivedFields?: DerivedFieldConfig[];\n alertmanager?: string;\n}\n\nexport interface LokiStats {\n [component: string]: {\n [label: string]: number;\n };\n}\n\nexport interface LokiVectorResult {\n metric: { [label: string]: string };\n value: [number, string];\n}\n\nexport interface LokiVectorResponse {\n status: string;\n data: {\n resultType: LokiResultType.Vector;\n result: LokiVectorResult[];\n stats?: LokiStats;\n };\n}\n\nexport interface LokiMatrixResult {\n metric: Record;\n values: Array<[number, string]>;\n}\n\nexport interface LokiMatrixResponse {\n status: string;\n data: {\n resultType: LokiResultType.Matrix;\n result: LokiMatrixResult[];\n stats?: LokiStats;\n };\n}\n\nexport interface LokiStreamResult {\n stream: Record;\n values: Array<[string, string]>;\n}\n\nexport interface LokiStreamResponse {\n status: string;\n data: {\n resultType: LokiResultType.Stream;\n result: LokiStreamResult[];\n stats?: LokiStats;\n };\n}\n\nexport interface LokiTailResponse {\n streams: LokiStreamResult[];\n dropped_entries?: Array<{\n labels: Record;\n timestamp: string;\n }> | null;\n}\n\nexport type LokiResult = LokiVectorResult | LokiMatrixResult | LokiStreamResult;\nexport type LokiResponse = LokiVectorResponse | LokiMatrixResponse | LokiStreamResponse;\n\nexport interface LokiLogsStreamEntry {\n line: string;\n ts: string;\n}\n\nexport interface LokiExpression {\n regexp: string;\n query: string;\n}\n\nexport type DerivedFieldConfig = {\n matcherRegex: string;\n name: string;\n url?: string;\n urlDisplayLabel?: string;\n datasourceUid?: string;\n};\n\nexport interface TransformerOptions {\n format?: string;\n legendFormat?: string;\n step: number;\n start: number;\n end: number;\n query: string;\n responseListLength: number;\n refId: string;\n scopedVars: ScopedVars;\n meta?: QueryResultMeta;\n valueWithRefId?: boolean;\n}\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","/**\n * AngularStrap - Twitter Bootstrap directives for AngularJS\n * @version v0.7.5 - 2013-07-21\n * @link http://mgcrea.github.com/angular-strap\n * @author Olivier Louvignes \n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\nangular.module('$strap.config', []).value('$strapConfig', {});\nangular.module('$strap.filters', ['$strap.config']);\nangular.module('$strap.directives', ['$strap.config']);\nangular.module('$strap', [\n '$strap.filters',\n '$strap.directives',\n '$strap.config'\n]);\n'use strict';\nangular.module('$strap.directives').factory('$modal', [\n '$rootScope',\n '$compile',\n '$http',\n '$timeout',\n '$q',\n '$templateCache',\n '$strapConfig',\n function ($rootScope, $compile, $http, $timeout, $q, $templateCache, $strapConfig) {\n var ModalFactory = function ModalFactory(config) {\n function Modal(config) {\n var options = angular.extend({ show: true }, $strapConfig.modal, config);\n var scope = options.scope ? options.scope : $rootScope.$new()\n var templateUrl = options.template;\n return $q.when(options.templateHtml || $templateCache.get(templateUrl) || $http.get(templateUrl, { cache: true }).then(function (res) {\n return res.data;\n })).then(function onSuccess(template) {\n var id = scope.$id;\n if (templateUrl) {\n id += templateUrl.replace('.html', '').replace(/[\\/|\\.|:]/g, '-');\n }\n // grafana change, removed fade\n var $modal = $('
    ').attr('id', id).html(template);\n if (options.modalClass)\n $modal.addClass(options.modalClass);\n $('body').append($modal);\n $timeout(function () {\n $compile($modal)(scope);\n });\n scope.$modal = function (name) {\n $modal.modal(name);\n };\n angular.forEach([\n 'show',\n 'hide'\n ], function (name) {\n scope[name] = function () {\n $modal.modal(name);\n };\n });\n scope.dismiss = scope.hide;\n angular.forEach([\n 'show',\n 'shown',\n 'hide',\n 'hidden'\n ], function (name) {\n $modal.on(name, function (ev) {\n scope.$emit('modal-' + name, ev);\n });\n });\n $modal.on('shown', function (ev) {\n $('input[autofocus], textarea[autofocus]', $modal).first().trigger('focus');\n });\n $modal.on('hidden', function (ev) {\n if (!options.persist)\n scope.$destroy();\n });\n scope.$on('$destroy', function () {\n $modal.remove();\n });\n $modal.modal(options);\n return $modal;\n });\n }\n return new Modal(config);\n };\n return ModalFactory;\n }\n])\n\n'use strict';\nangular.module('$strap.directives').directive('bsTooltip', [\n '$parse',\n '$compile',\n function ($parse, $compile) {\n return {\n restrict: 'A',\n scope: true,\n link: function postLink(scope, element, attrs, ctrl) {\n var getter = $parse(attrs.bsTooltip), setter = getter.assign, value = getter(scope);\n scope.$watch(attrs.bsTooltip, function (newValue, oldValue) {\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) {\n $('.tooltip.in').each(function () {\n var $this = $(this), 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 var tooltip = element.data('tooltip');\n tooltip.show = function () {\n var r = $.fn.tooltip.Constructor.prototype.show.apply(this, arguments);\n this.tip().data('tooltip', this);\n return r;\n };\n scope._tooltip = function (event) {\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\n'use strict';\nangular.module('$strap.directives').directive('bsTypeahead', [\n '$parse',\n function ($parse) {\n return {\n restrict: 'A',\n require: '?ngModel',\n link: function postLink(scope, element, attrs, controller) {\n var getter = $parse(attrs.bsTypeahead), setter = getter.assign, value = getter(scope);\n scope.$watch(attrs.bsTypeahead, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n element.attr('data-provide', 'typeahead');\n element.typeahead({\n source: function (query) {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n minLength: attrs.minLength || 1,\n items: attrs.items,\n updater: function (value) {\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 var typeahead = element.data('typeahead');\n typeahead.lookup = function (ev) {\n var 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 (item) {\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","/* ===================================================\n * bootstrap-transition.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#transitions\n * ===================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)\n * ======================================================= */\n\n $(function () {\n\n $.support.transition = (function () {\n\n var transitionEnd = (function () {\n\n var el = document.createElement('bootstrap')\n , transEndEventNames = {\n 'WebkitTransition' : 'webkitTransitionEnd'\n , 'MozTransition' : 'transitionend'\n , 'OTransition' : 'oTransitionEnd otransitionend'\n , 'transition' : 'transitionend'\n }\n , name\n\n for (name in transEndEventNames){\n if (el.style[name] !== undefined) {\n return transEndEventNames[name]\n }\n }\n\n }())\n\n return transitionEnd && {\n end: transitionEnd\n }\n\n })()\n\n })\n\n}(window.jQuery);/* ==========================================================\n * bootstrap-alert.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#alerts\n * ==========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n/* ============================================================\n * bootstrap-dropdown.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#dropdowns\n * ============================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n /* DROPDOWN CLASS DEFINITION\n * ========================= */\n\n var toggle = '[data-toggle=dropdown]'\n , Dropdown = function (element) {\n var $el = $(element).on('click.dropdown.data-api', this.toggle)\n $('html').on('click.dropdown.data-api', function () {\n $el.parent().removeClass('open')\n })\n }\n\n Dropdown.prototype = {\n\n constructor: Dropdown\n\n , toggle: function (e) {\n var $this = $(this)\n , $parent\n , isActive\n\n if ($this.is('.disabled, :disabled')) return\n\n $parent = getParent($this)\n\n isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement) {\n // if mobile we we use a backdrop because click events don't delegate\n $('
    ').insertBefore($(this)).on('click', clearMenus)\n }\n $parent.toggleClass('open')\n }\n\n $this.focus()\n\n return false\n }\n\n , keydown: function (e) {\n var $this\n , $items\n , $active\n , $parent\n , isActive\n , index\n\n if (!/(38|40|27)/.test(e.keyCode)) return\n\n $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n $parent = getParent($this)\n\n isActive = $parent.hasClass('open')\n\n if (!isActive || (isActive && e.keyCode == 27)) {\n if (e.which == 27) $parent.find(toggle).focus()\n return $this.click()\n }\n\n $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n if (!$items.length) return\n\n index = $items.index($items.filter(':focus'))\n\n if (e.keyCode == 38 && index > 0) index-- // up\n if (e.keyCode == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items\n .eq(index)\n .focus()\n }\n\n }\n\n function clearMenus() {\n $('.dropdown-backdrop').remove()\n $(toggle).each(function () {\n getParent($(this)).removeClass('open')\n })\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n , $parent\n\n if (!selector) {\n selector = $this.attr('href')\n // grafana backport fix from bootstrap 3\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n $parent = selector && $(selector)\n\n if (!$parent || !$parent.length) $parent = $this.parent()\n\n return $parent\n }\n\n\n /* DROPDOWN PLUGIN DEFINITION\n * ========================== */\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('dropdown')\n if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n $.fn.dropdown.Constructor = Dropdown\n\n\n /* DROPDOWN NO CONFLICT\n * ==================== */\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n /* APPLY TO STANDARD DROPDOWN ELEMENTS\n * =================================== */\n\n $(document)\n .on('click.dropdown.data-api', clearMenus)\n .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)\n .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n/* =========================================================\n * bootstrap-modal.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#modals\n * =========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* MODAL CLASS DEFINITION\n * ====================== */\n\n var Modal = function (element, options) {\n this.options = options\n this.$element = $(element)\n .delegate('[data-dismiss=\"modal\"]', 'click.dismiss.modal', $.proxy(this.hide, this))\n this.options.remote && this.$element.find('.modal-body').load(this.options.remote)\n }\n\n Modal.prototype = {\n\n constructor: Modal\n\n , toggle: function () {\n return this[!this.isShown ? 'show' : 'hide']()\n }\n\n , show: function () {\n var that = this\n , e = $.Event('show')\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.escape()\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(document.body) //don't move modals dom position\n }\n\n that.$element.show()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element\n .addClass('in')\n .attr('aria-hidden', false)\n\n that.enforceFocus()\n\n transition ?\n that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :\n that.$element.focus().trigger('shown')\n\n })\n }\n\n , hide: function (e) {\n e && e.preventDefault()\n\n var that = this\n\n e = $.Event('hide')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n\n $(document).off('focusin.modal')\n\n this.$element\n .removeClass('in')\n .attr('aria-hidden', true)\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.hideWithTransition() :\n this.hideModal()\n }\n\n , enforceFocus: function () {\n var that = this\n $(document).on('focusin.modal', function (e) {\n if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {\n that.$element.focus()\n }\n })\n }\n\n , escape: function () {\n var that = this\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keyup.dismiss.modal', function ( e ) {\n e.which == 27 && that.hide()\n })\n } else if (!this.isShown) {\n this.$element.off('keyup.dismiss.modal')\n }\n }\n\n , hideWithTransition: function () {\n var that = this\n , timeout = setTimeout(function () {\n that.$element.off($.support.transition.end)\n that.hideModal()\n }, 500)\n\n this.$element.one($.support.transition.end, function () {\n clearTimeout(timeout)\n that.hideModal()\n })\n }\n\n , hideModal: function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.removeBackdrop()\n that.$element.trigger('hidden')\n })\n }\n\n , removeBackdrop: function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n , backdrop: function (callback) {\n var that = this\n , animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $('
    ')\n .appendTo(document.body)\n\n this.$backdrop.click(\n this.options.backdrop == 'static' ?\n $.proxy(this.$element[0].focus, this.$element[0])\n : $.proxy(this.hide, this)\n )\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop.one($.support.transition.end, callback) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n $.support.transition && this.$element.hasClass('fade')?\n this.$backdrop.one($.support.transition.end, callback) :\n callback()\n\n } else if (callback) {\n callback()\n }\n }\n }\n\n\n /* MODAL PLUGIN DEFINITION\n * ======================= */\n\n var old = $.fn.modal\n\n $.fn.modal = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('modal')\n , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)\n if (!data) $this.data('modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option]()\n else if (options.show) data.show()\n })\n }\n\n $.fn.modal.defaults = {\n backdrop: true\n , keyboard: true\n , show: true\n }\n\n $.fn.modal.Constructor = Modal\n\n\n /* MODAL NO CONFLICT\n * ================= */\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n /* MODAL DATA-API\n * ============== */\n\n $(document).on('click.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n , href = $this.attr('href')\n , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())\n\n e.preventDefault()\n\n $target\n .modal(option)\n .one('hide', function () {\n $this.focus()\n })\n })\n\n}(window.jQuery);\n/* ===========================================================\n * bootstrap-tooltip.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#tooltips\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ===========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* TOOLTIP PUBLIC CLASS DEFINITION\n * =============================== */\n\n var Tooltip = function (element, options) {\n this.init('tooltip', element, options)\n }\n\n Tooltip.prototype = {\n\n constructor: Tooltip\n\n , init: function (type, element, options) {\n var eventIn\n , eventOut\n , triggers\n , trigger\n , i\n\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.enabled = true\n\n triggers = this.options.trigger.split(' ')\n\n for (i = triggers.length; i--;) {\n trigger = triggers[i]\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'\n eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n , getOptions: function (options) {\n options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay\n , hide: options.delay\n }\n }\n\n return options\n }\n\n , enter: function (e) {\n var defaults = $.fn[this.type].defaults\n , options = {}\n , self\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n }, this)\n\n self = $(e.currentTarget)[this.type](options).data(this.type)\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n clearTimeout(this.timeout)\n self.hoverState = 'in'\n this.timeout = setTimeout(function() {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n , leave: function (e) {\n var self = $(e.currentTarget)[this.type](this._options).data(this.type)\n\n if (this.timeout) clearTimeout(this.timeout)\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.hoverState = 'out'\n this.timeout = setTimeout(function() {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n , show: function () {\n var $tip\n , pos\n , actualWidth\n , actualHeight\n , placement\n , tp\n , e = $.Event('show')\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n $tip = this.tip()\n this.setContent()\n\n if (this.options.animation) {\n $tip.addClass('fade')\n }\n\n placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n pos = this.getPosition()\n\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n\n switch (placement) {\n case 'bottom':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}\n break\n case 'top':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}\n break\n case 'left':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}\n break\n case 'right':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}\n break\n\n // extend placements (top)\n case 'topLeft':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - (actualWidth * .10)};\n break;\n case 'topRight':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - (actualWidth * .90)};\n break;\n\n // extend placements (right)\n case 'rightTop':\n tp = {top: pos.top + pos.height / 2 - (actualHeight *.10), left: pos.left + pos.width};\n break;\n case 'rightBottom':\n tp = {top: pos.top + pos.height / 2 - (actualHeight * .90), left: pos.left + pos.width};\n break;\n\n // extend placements (bottom)\n case 'bottomLeft':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - (actualWidth * .10)};\n break;\n case 'bottomRight':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - (actualWidth * .90)};\n break;\n\n // extend placements (left)\n case 'leftTop':\n tp = {top: pos.top + pos.height / 2 - (actualHeight *.10), left: pos.left - actualWidth};\n break;\n case 'leftBottom':\n tp = {top: pos.top + pos.height / 2 - (actualHeight * .90), left: pos.left - actualWidth};\n break;\n\n\n }\n\n this.applyPlacement(tp, placement)\n this.$element.trigger('shown')\n }\n }\n\n , applyPlacement: function(offset, placement){\n var $tip = this.tip()\n , width = $tip[0].offsetWidth\n , height = $tip[0].offsetHeight\n , actualWidth\n , actualHeight\n , delta\n , replace\n\n $tip\n .offset(offset)\n .addClass(placement)\n .addClass('in')\n\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n replace = true\n }\n\n if (placement == 'bottom' || placement == 'top') {\n delta = 0\n\n if (offset.left < 0){\n delta = offset.left * -2\n offset.left = 0\n $tip.offset(offset)\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n }\n\n this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n } else {\n this.replaceArrow(actualHeight - height, actualHeight, 'top')\n }\n\n if (replace) $tip.offset(offset)\n }\n\n , replaceArrow: function(delta, dimension, position){\n this\n .arrow()\n .css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n }\n\n , setContent: function () {\n var $tip = this.tip()\n , title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n , hide: function () {\n var that = this\n , $tip = this.tip()\n , e = $.Event('hide')\n\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n function removeWithAnimation() {\n var timeout = setTimeout(function () {\n $tip.off($.support.transition.end).detach()\n }, 500)\n\n $tip.one($.support.transition.end, function () {\n clearTimeout(timeout)\n $tip.detach()\n })\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n removeWithAnimation() :\n $tip.detach()\n\n this.$element.trigger('hidden')\n\n return this\n }\n\n , fixTitle: function () {\n var $e = this.$element\n if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n , hasContent: function () {\n return this.getTitle()\n }\n\n , getPosition: function () {\n var el = this.$element[0]\n return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n width: el.offsetWidth\n , height: el.offsetHeight\n }, this.$element.offset())\n }\n\n , getTitle: function () {\n var title\n , $e = this.$element\n , o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n , tip: function () {\n return this.$tip = this.$tip || $(this.options.template)\n }\n\n , arrow: function(){\n return this.$arrow = this.$arrow || this.tip().find(\".tooltip-arrow\")\n }\n\n , validate: function () {\n if (!this.$element[0].parentNode) {\n this.hide()\n this.$element = null\n this.options = null\n }\n }\n\n , enable: function () {\n this.enabled = true\n }\n\n , disable: function () {\n this.enabled = false\n }\n\n , toggleEnabled: function () {\n this.enabled = !this.enabled\n }\n\n , toggle: function (e) {\n var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this\n self.tip().hasClass('in') ? self.hide() : self.show()\n }\n\n , destroy: function () {\n this.hide().$element.off('.' + this.type).removeData(this.type)\n }\n\n }\n\n\n /* TOOLTIP PLUGIN DEFINITION\n * ========================= */\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = function ( option ) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('tooltip')\n , options = typeof option == 'object' && option\n if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tooltip.Constructor = Tooltip\n\n $.fn.tooltip.defaults = {\n animation: true\n , placement: 'top'\n , selector: false\n , template: '
    '\n , trigger: 'hover focus'\n , title: ''\n , delay: 0\n , html: false\n , container: false\n }\n\n\n /* TOOLTIP NO CONFLICT\n * =================== */\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(window.jQuery);\n\n/* ========================================================\n * bootstrap-tab.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#tabs\n * ========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* TAB CLASS DEFINITION\n * ==================== */\n\n var Tab = function (element) {\n this.element = $(element)\n }\n\n Tab.prototype = {\n\n constructor: Tab\n\n , show: function () {\n var $this = this.element\n , $ul = $this.closest('ul:not(.dropdown-menu)')\n , selector = $this.attr('data-target')\n , previous\n , $target\n , e\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n if ( $this.parent('li').hasClass('active') ) return\n\n previous = $ul.find('.active:last a')[0]\n\n e = $.Event('show', {\n relatedTarget: previous\n })\n\n $this.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $target = $(selector)\n\n this.activate($this.parent('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $this.trigger({\n type: 'shown'\n , relatedTarget: previous\n })\n })\n }\n\n , activate: function ( element, container, callback) {\n var $active = container.find('> .active')\n , transition = callback\n && $.support.transition\n && $active.hasClass('fade')\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n\n element.addClass('active')\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if ( element.parent('.dropdown-menu') ) {\n element.closest('li.dropdown').addClass('active')\n }\n\n callback && callback()\n }\n\n transition ?\n $active.one($.support.transition.end, next) :\n next()\n\n $active.removeClass('in')\n }\n }\n\n\n /* TAB PLUGIN DEFINITION\n * ===================== */\n\n var old = $.fn.tab\n\n $.fn.tab = function ( option ) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('tab')\n if (!data) $this.data('tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tab.Constructor = Tab\n\n\n /* TAB NO CONFLICT\n * =============== */\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n /* TAB DATA-API\n * ============ */\n\n $(document).on('click.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n e.preventDefault()\n $(this).tab('show')\n })\n\n}(window.jQuery);/* =============================================================\n * bootstrap-typeahead.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#typeahead\n * =============================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n!function($){\n\n \"use strict\"; // jshint ;_;\n\n\n /* TYPEAHEAD PUBLIC CLASS DEFINITION\n * ================================= */\n\n var Typeahead = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, $.fn.typeahead.defaults, options)\n this.matcher = this.options.matcher || this.matcher\n this.sorter = this.options.sorter || this.sorter\n this.highlighter = this.options.highlighter || this.highlighter\n this.updater = this.options.updater || this.updater\n this.source = this.options.source\n this.$menu = $(this.options.menu)\n this.shown = false\n this.listen()\n }\n\n Typeahead.prototype = {\n\n constructor: Typeahead\n\n , select: function () {\n // CHANGE (rashidkpc) If nothing is selected, use existing value\n var val = this.$menu.find('.active').attr('data-value') || this.$element.val();\n this.$element\n .val(this.updater(val))\n .change()\n return this.hide()\n }\n\n , updater: function (item) {\n return item\n }\n\n , show: function () {\n var pos = $.extend({}, this.$element.position(), {\n height: this.$element[0].offsetHeight\n })\n\n this.$menu\n .insertAfter(this.$element)\n .css({\n top: pos.top + pos.height\n , left: pos.left\n })\n .show()\n\n this.shown = true\n return this\n }\n\n , hide: function () {\n this.$menu.hide()\n this.shown = false\n return this\n }\n\n , lookup: function (event) {\n var items\n\n this.query = this.$element.val()\n\n if (!this.query || this.query.length < this.options.minLength) {\n return this.shown ? this.hide() : this\n }\n\n items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source\n\n return items ? this.process(items) : this\n }\n\n , process: function (items) {\n var that = this\n\n items = $.grep(items, function (item) {\n return that.matcher(item)\n })\n\n items = this.sorter(items)\n\n if (!items.length) {\n return this.shown ? this.hide() : this\n }\n\n return this.render(items.slice(0, this.options.items)).show()\n }\n\n , matcher: function (item) {\n return ~item.toLowerCase().indexOf(this.query.toLowerCase())\n }\n\n , sorter: function (items) {\n var beginswith = []\n , caseSensitive = []\n , caseInsensitive = []\n , item\n\n while (item = items.shift()) {\n if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)\n else if (~item.indexOf(this.query)) caseSensitive.push(item)\n else caseInsensitive.push(item)\n }\n\n return beginswith.concat(caseSensitive, caseInsensitive)\n }\n\n , highlighter: function (item) {\n var query = this.query.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&')\n if (!query) {\n return item;\n }\n return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {\n return '' + match + ''\n });\n }\n\n , render: function (items) {\n var that = this\n\n items = $(items).map(function (i, item) {\n i = $(that.options.item).attr('data-value', item)\n i.find('a').html(that.highlighter(item))\n return i[0]\n })\n\n // CHANGE (rashidpc) Do not select first element by default\n // items.first().addClass('active')\n this.$menu.html(items)\n return this\n }\n\n , next: function (event) {\n var active = this.$menu.find('.active').removeClass('active')\n , next = active.next()\n\n if (!next.length) {\n next = $(this.$menu.find('li')[0])\n }\n\n next.addClass('active')\n }\n\n , prev: function (event) {\n var active = this.$menu.find('.active').removeClass('active')\n , prev = active.prev()\n\n if (!prev.length) {\n prev = this.$menu.find('li').last()\n }\n\n prev.addClass('active')\n }\n\n , listen: function () {\n this.$element\n .on('focus', $.proxy(this.focus, this))\n .on('blur', $.proxy(this.blur, this))\n .on('keypress', $.proxy(this.keypress, this))\n .on('keyup', $.proxy(this.keyup, this))\n\n if (this.eventSupported('keydown')) {\n this.$element.on('keydown', $.proxy(this.keydown, this))\n }\n\n this.$menu\n .on('click', $.proxy(this.click, this))\n .on('mouseenter', 'li', $.proxy(this.mouseenter, this))\n .on('mouseleave', 'li', $.proxy(this.mouseleave, this))\n },\n\n destroy: function () {\n this.$element.off().removeData('typeahead');\n this.$menu.off();\n }\n\n , eventSupported: function(eventName) {\n var isSupported = eventName in this.$element\n if (!isSupported) {\n this.$element.setAttribute(eventName, 'return;')\n isSupported = typeof this.$element[eventName] === 'function'\n }\n return isSupported\n }\n\n , move: function (e) {\n if (!this.shown) return\n\n // grafana change, shift+left parenthesis\n if (e.shiftKey && e.keyCode === 40) {\n return;\n }\n\n switch(e.keyCode) {\n case 9: // tab\n case 13: // enter\n case 27: // escape\n e.preventDefault()\n break\n\n case 38: // up arrow\n e.preventDefault()\n this.prev()\n break\n\n case 40: // down arrow\n e.preventDefault()\n this.next()\n break\n }\n\n e.stopPropagation()\n }\n\n , keydown: function (e) {\n this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27,57])\n this.move(e)\n }\n\n , keypress: function (e) {\n if (this.suppressKeyPressRepeat) return\n this.move(e)\n }\n\n , keyup: function (e) {\n switch(e.keyCode) {\n case 40: // down arrow\n case 38: // up arrow\n case 16: // shift\n case 17: // ctrl\n case 18: // alt\n break\n\n case 9: // tab\n case 13: // enter\n if (!this.shown) return\n this.select()\n break\n\n case 27: // escape\n if (!this.shown) return\n this.hide()\n break\n\n default:\n this.lookup();\n }\n\n if(e.keyCode === 13 && typeof this.$menu.find('.active').attr('data-value') === 'undefined') {\n // CHANGE (rashidkpc). Enter was hit, nothing was selected from typeahead, submit form\n this.$element.submit();\n } else {\n e.stopPropagation()\n e.preventDefault()\n }\n\n }\n\n , focus: function (e) {\n this.focused = true\n }\n\n , blur: function (e) {\n this.focused = false\n if (!this.mousedover && this.shown) this.hide()\n }\n\n , click: function (e) {\n e.stopPropagation()\n e.preventDefault()\n this.select()\n this.$element.focus()\n }\n\n , mouseenter: function (e) {\n this.mousedover = true\n this.$menu.find('.active').removeClass('active')\n $(e.currentTarget).addClass('active')\n }\n\n , mouseleave: function (e) {\n this.mousedover = false\n if (!this.focused && this.shown) this.hide()\n }\n\n }\n\n\n /* TYPEAHEAD PLUGIN DEFINITION\n * =========================== */\n\n var old = $.fn.typeahead\n\n $.fn.typeahead = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('typeahead')\n , options = typeof option == 'object' && option\n if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.typeahead.defaults = {\n source: []\n , items: 8\n , menu: '
      '\n , item: '
    • '\n , minLength: 1\n }\n\n $.fn.typeahead.Constructor = Typeahead\n\n\n /* TYPEAHEAD NO CONFLICT\n * =================== */\n\n $.fn.typeahead.noConflict = function () {\n $.fn.typeahead = old\n return this\n }\n\n\n /* TYPEAHEAD DATA-API\n * ================== */\n\n $(document).on('focus.typeahead.data-api', '[data-provide=\"typeahead\"]', function (e) {\n var $this = $(this)\n if ($this.data('typeahead')) return\n $this.typeahead($this.data())\n })\n\n}(window.jQuery);\n/* ==========================================================\n * bootstrap-affix.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#affix\n * ==========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* AFFIX CLASS DEFINITION\n * ====================== */\n\n var Affix = function (element, options) {\n this.options = $.extend({}, $.fn.affix.defaults, options)\n this.$window = $(window)\n .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))\n this.$element = $(element)\n this.checkPosition()\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var scrollHeight = $(document).height()\n , scrollTop = this.$window.scrollTop()\n , position = this.$element.offset()\n , offset = this.options.offset\n , offsetBottom = offset.bottom\n , offsetTop = offset.top\n , reset = 'affix affix-top affix-bottom'\n , affix\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top()\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?\n false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?\n 'bottom' : offsetTop != null && scrollTop <= offsetTop ?\n 'top' : false\n\n if (this.affixed === affix) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? position.top - scrollTop : null\n\n this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))\n }\n\n\n /* AFFIX PLUGIN DEFINITION\n * ======================= */\n\n var old = $.fn.affix\n\n $.fn.affix = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('affix')\n , options = typeof option == 'object' && option\n if (!data) $this.data('affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.affix.Constructor = Affix\n\n $.fn.affix.defaults = {\n offset: 0\n }\n\n\n /* AFFIX NO CONFLICT\n * ================= */\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n /* AFFIX DATA-API\n * ============== */\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n , data = $spy.data()\n\n data.offset = data.offset || {}\n\n data.offsetBottom && (data.offset.bottom = data.offsetBottom)\n data.offsetTop && (data.offset.top = data.offsetTop)\n\n $spy.affix(data)\n })\n })\n\n\n}(window.jQuery);\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 = $('
      ');\n this.$input = $('').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 = $('' + htmlEncode(itemText) + '');\n $tag.data('item', item);\n self.findInputWrapper().before($tag);\n $tag.after(' ');\n\n // add
      \n \n \n it('should sanitize the html snippet by default', function() {\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('

      an html\\nclick here\\nsnippet

      ');\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(\"

      an html\\n\" +\n \"click here\\n\" +\n \"snippet

      \");\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 text');\n expect(element(by.css('#bind-html-with-sanitize div')).getAttribute('innerHTML')).\n toBe('new text');\n expect(element(by.css('#bind-html-with-trust div')).getAttribute('innerHTML')).toBe(\n 'new text');\n expect(element(by.css('#bind-default div')).getAttribute('innerHTML')).toBe(\n \"new <b onclick=\\\"alert(1)\\\">text</b>\");\n });\n
      \n \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 *
      \n *

      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.

      \n *\n *

      To protect against these, explicitly setup `overflow: hidden` css rule for all potential svg\n * tags within the sanitized content:

      \n *\n *
      \n *\n *
      \n   *   .rootOfTheIncludedContent svg {\n   *     overflow: hidden !important;\n   *   }\n   *   
      \n *
      \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 *
      \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 *
      \n *\n *
      \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 *
      \n *\n * @param {Array|Object} elements - A list of valid HTML elements or an object with one or\n * more of the following properties:\n * - **htmlElements** - `{Array}` - A list of elements to extend the current list of\n * HTML elements.\n * - **htmlVoidElements** - `{Array}` - 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}` - 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 *
      \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 *
      \n *\n *
      \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 *
      \n *\n * @param {Array} 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 `` do not get hoisted to the `` tag.\n html = '' + 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 }\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 }\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.2' });\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 \n *\n * @example\n \n \n
      \n Snippet: \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n \n
      FilterSourceRendered
      linky filter\n
      <div ng-bind-html=\"snippet | linky\">
      </div>
      \n
      \n
      \n
      linky target\n
      <div ng-bind-html=\"snippetWithSingleURL | linky:'_blank'\">
      </div>
      \n
      \n
      \n
      linky custom attributes\n
      <div ng-bind-html=\"snippetWithSingleURL | linky:'_self':{rel: 'nofollow'}\">
      </div>
      \n
      \n
      \n
      no filter
      <div ng-bind=\"snippet\">
      </div>
      \n \n \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 \n \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 \n \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('');\n addText(text);\n html.push('');\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"],"names":["DEFAULT_PORTS","http","https","ftp","AngularLocationWrapper","constructor","this","absUrl","wrapInDeprecationWarning","hash","host","path","port","protocol","replace","search","state","url","fn","replacement","self","deprecationWarning","name","apply","arguments","window","location","origin","newHash","navigationLogger","Error","locationService","slice","URL","href","hostname","pathname","parsedPath","String","startsWith","length","parseInt","paramValue","newQuery","locationSearchToObject","key","Object","keys","undefined","updatedUrl","urlUtil","newUrl","trim","coreModule","angular","angularModules","$rootScope","$document","$timeout","restrict","template","transclude","scope","ctrl","link","elem","panel","subs","Subscription","panelScrollbar","updateDimensionsFromParentScope","height","$parent","size","width","events","on","PanelEvents","__proto__","scrollable","scrollRootClass","scrollerClass","scrollBarHTML","scrollRoot","scroller","find","addClass","$","appendTo","baron","root","bar","barOnCls","scrollingCls","scroll","add","subscribe","RefreshEvent","emit","RenderEvent","event","payload","fromAngular","update","publish","$on","off","unsubscribe","removeAllListeners","dispose","PanelDirectiveReadyEvent","directiveModule","directiveCache","panelEditorTab","dynamicDirectiveSrv","create","editorTab","directive","pluginId","tabName","title","toLowerCase","result","directiveFn","QueryRowCtrl","$onInit","panelCtrl","queryCtrl","target","hasTextEditMode","toggleEditorMode","bind","getCollapsedText","controller","bindToController","controllerAs","templateUrl","canCollapse","input","sort","arr","start","end","isUndefined","isObject","isArray","isNull","toString","date","mode","dateTime","fromNow","templateSrv","getTemplateSrv","filterFunc","text","scopedVars","row","replaceWithText","$stateful","AlertSrv","set","console","warn","DynamicDirectiveSrv","$compile","addDirective","element","child","document","createElement","empty","append","attrs","options","directiveInfo","registered","$normalize","watchPath","childScope","$watch","$destroy","$new","getReactComponent","$injector","reactComponent","get","e","split","reduce","current","namePart","applyFunctions","obj","propsConfig","prev","value","config","wrapApply","wrappedInApply","wrapped","args","phase","$root","$$phase","$apply","applied","watchProps","watchDepth","watchExpressions","listener","supportsWatchCollection","$watchCollection","supportsWatchGroup","$watchGroup","watchGroupExpressions","expr","actualExpr","prop","Array","exprWatchDepth","getPropWatchDepth","match","push","renderComponent","component","props","$evalAsync","ReactDOM","React","getPropConfig","findAttribute","propName","attr","kebabCase","defaultWatch","ngModule","uiSegmentSrv","$sce","MetricSegment","html","trustAsHtml","type","expandable","isString","highlightVariablesAsHtml","cssClass","custom","fake","selectMode","getSegmentForValue","fallbackText","newSegment","newSelectMeasurement","newFake","newKey","newKeyValue","newCondition","condition","newOperator","op","newOperators","ops","map","transformToSegments","addTemplateVars","variableTypeFilter","results","segments","segment","each","getVariables","variable","unshift","newSelectMetric","newPlusButton","renderMyComponent","$eval","onScopeDestroy","unmountComponent","factory","reactComponentName","conf","injectableProps","scopeProps","forEach","getPropName","propExpressions","propTypes","popoverSrv","openDrop","close","show","extend","model","drop","dismiss","contentElement","innerHTML","Drop","content","position","classes","classNames","openOn","hoverCloseDelay","tetherOptions","constraints","to","attachment","setTimeout","tether","destroy","onClose","open","Timer","register","promise","timers","cancel","without","cancelAll","t","AngularLoader","load","assign","compiledElem","remove","digest","$digest","getScope","$win","dropdownTypeahead","menuItems","dropdownTypeaheadOnSelect","$scope","$input","$button","linkText","ngModel","newValue","item","submenu","subItem","typeaheadValues","memo","index","subIndex","click","menuItemSelected","menuItem","$item","$subItem","hide","val","focus","removeClass","typeahead","source","minLength","items","updater","submenuItem","trigger","keyup","toggleClass","mousedown","evt","preventDefault","blur","contents","dropdownTypeahead2","buttonTemplateClass","timeoutId","closeDropdownMenu","autofillEventFix","dispatchChangeEvent","Event","dispatchEvent","onAnimationStart","animationName","addEventListener","removeEventListener","metricSegment","getOptions","onChange","debounce","cancelBlur","linkMode","debounceLookup","updateVariableValue","selected","altSegments","switchToLink","fromClick","clearTimeout","inputBlur","query","callback","$query","then","alt","escape","indexOf","unescape","matcher","str","substring","data","lookup","$element","process","leading","keydown","keyCode","css","Math","max","metricSegmentModel","property","pre","cachedOptions","valueToSegment","option","getOptionsInternal","Promise","resolve","onSegmentChange","$$postDigest","tip","_t","icon","m","charCodeAt","replaceWith","compile","editorOptBool","ngchange","change","showIf","editorCheckbox","$interpolate","label","$id","gfDropdown","$parse","buildTemplate","placement","ul","divider","splice","li","method","join","iElement","iAttrs","getter","insertAfter","next","defaults","offset","x","y","opts","$tooltip","body","injector","invoke","tmpScope","scopeData","outerWidth","outerHeight","left","top","onchange","inputValue","priority","require","elm","ngModelCtrl","$setViewValue","$parsers","viewValue","$validators","integer","modelValue","$isEmpty","rangeUtil","invalid","setColor","color","borderColor","getTagColorsFromName","rebuildOnChange","$animate","multiElement","terminal","block","previousElements","cleanUp","nodes","node","endNode","blockNodes","nextSibling","i","call","getBlockNodes","clone","leave","oldValue","showNull","newScope","createComment","enter","parent","tagColorFromName","getItemProperty","onTagsUpdated","select","placeholder","tagsinput","typeaheadSource","widthClass","itemValue","itemvalue","itemText","itemtext","tagClass","tagclass","tagElement","children","filter","idx","stopPropagation","giveFocus","domEl","setSelectionRange","pos","DeltaCtrl","observer","MutationObserver","observe","attributes","attributeFilter","characterData","childList","subtree","$onDestroy","disconnect","LinkJSONCtrl","$anchorScroll","goToLine","line","unbind","switchView","$formatters","react2AngularDirective","reactDirective","provideTheme","Input","LegacyForms","DefaultTarget","editorMode","EditorMode","projectName","projects","metricType","filters","metricKind","MetricKind","valueType","refId","labels","variableOptionGroup","variableOptions","AnnotationQueryEditor","unit","onQueryChange","datasource","setState","getLabels","getDefaultProject","toOption","getProjects","render","templateVariableOptions","metric","onMetricTypeChange","className","regions","regionIsLoading","useRegions","EditorHeader","InlineSelect","v","region","allowCustomValue","isLoading","Space","MetricStatEditor","disableExpressions","editorQuery","onRunQuery","EditorRow","EditorField","tooltip","period","optional","Switch","prefixMatching","currentTarget","checked","disabled","actionPrefix","alarmNamePrefix","Select","MetricSelect","isSearchable","useSelectOptions","useSelectedOption","onChangeValue","useCallback","selectable","menuShouldPortal","isMulti","isClearable","backspaceRemovesValue","maxMenuHeight","noOptionsMessage","variables","useMemo","every","o","flatten","LokiAnnotationsQueryEditor","maxLines","instant","queryWithRefId","LokiQueryField","onBlur","history","ExtraFieldElement","LokiOptionFields","lineLimitValue","resolution","SecretFormField","queryPartEditorDirective","part","handleEvent","partDef","def","$paramsContainer","clickFuncParam","paramIndex","$link","params","updateParam","$event","inputKeyPress","which","inputKeyDown","style","addElementsAndCompile","param","$paramLink","partial","keypress","dynamicLookup","dynamicOptions","addTypeahead","partActions","showActionsMenu","promiseToDigest","res","triggerPartAction","action","typeaheadMatcher","FormDropdownCtrl","inputElement","first","linkElement","labelMode","lookupText","modelChanged","cssClasses","typeaheadUpdater","startOpen","isPromiseLike","updateDisplay","optionCache","optionTexts","allowCustom","updateValue","$option","display","grafanaScrollbar","scrollParams","track","direction","scrollbar","object","startExpanded","rootName","expansionLevel","jsonObject","JsonExplorer","animateOpen","SwitchCtrl","id","internalOnChange","labelClass","switchClass","wide","appendChild","dropOptions","hoverOpenDelay","pin","$applyAsync","onColorChange","async","langMode","showGutter","tabSize","behavioursEnabled","snippetsEnabled","aceElem","default","ace","codeEditor","edit","editorSession","getSession","editorOptions","highlightActiveLine","showPrintMargin","autoScrollEditorIntoView","setOptions","$blockScrolling","Infinity","renderer","setScrollMargin","setPadding","theme","setTheme","setThemeMode","lang","acequire","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","getCompleter","anyEditor","completers","aceModeName","setMode","setLangMode","setEditorContent","textarea","setValue","clearSelection","textareaLabel","codeEditorFocus","getValue","editorValue","commands","addCommand","bindKey","win","mac","exec","sqlPartEditorDirective","separator","suggestUrl","noDirectAccess","showForwardOAuthIdentityOption","showAccessOption","datasourceSetting","pluginDirectiveLoader","$http","$templateCache","$location","relativeTemplateUrlToAbs","baseUrl","loadPanelComponentInfo","componentInfo","bindings","dashboard","class","panelInfo","importPanelPlugin","panelPlugin","PanelCtrl","angularPanelCtrl","Component","templatePromise","cached","getTemplate","registerPluginComponent","notFound","message","directiveName","init","$broadcast","appendAndCompile","ds","meta","components","QueryCtrl","currentDatasource","importDataSourcePlugin","dsPlugin","annotation","AnnotationsQueryCtrl","dsMeta","datasourceMeta","angularUrl","onModelChanged","angularConfigCtrl","importAppPlugin","appPlugin","appModel","appEditCtrl","reject","getModule","catch","err","error","GrafanaCtrl","utilSrv","contextSrv","angularLoader","setAngularLoader","setLegacyAngularInjector","setAppEvents","appEvents","initGrafanaLive","appSubUrl","_","colors","onAppEvent","localScope","callerScope","appEvent","$emit","CoreEvents","lastActivity","Date","getTime","activeUser","userActivityDetected","mousemove","capture","passive","setInterval","hasClass","parents","clickAutoHide","closest","clickAutoHideParent","detach","popover","RouteParamsProvider","RouteProvider","$get","initAngularRoutingBridge","$provide","decorator","$delegate","onUrlChange","UtilSrv","$modal","ShowModalEvent","showModal","HideModalEvent","hideModal","modalScope","modal","modalClass","src","templateHtml","persist","keyboard","backdrop","modalEl","AnnotationsSrv","clearPromiseCaches","getAnnotations","annotations","alertState","getAlertStates","getGlobalAnnotations","saveAnnotationEvent","saveAnnotation","updateAnnotationEvent","updateAnnotation","deleteAnnotationEvent","deleteAnnotation","translateQueryResult","snapshotData","cloneDeep","iconColor","isRegion","timeEnd","time","AngularApp","preBootModules","ngModuleDependencies","registerFunctions","$controllerProvider","$compileProvider","$filterProvider","$httpProvider","debugInfoEnabled","useApplyAsync","service","useModule","DashboardLoaderSrv","getTimeSrv","Footer","Icon","Spinner","HelpModal","PageHeader","EmptyListCTA","SearchField","SearchResults","SearchResultsFilter","TagFilter","ColorPicker","SeriesColorPickerPopoverWithTheme","UnitPicker","CloudMonitoringQueryEditor","CloudMonitoringAnnotationQueryEditor","CloudWatchAnnotationQueryEditor","GraphContextMenu","DataLinksInlineEditor","DataSourceHttpSettings","FolderPicker","TimePickerSettings","QueryEditor","ClipboardButton","getBackendSrv","getDashboardSrv","getDataSourceSrv","getLinkSrv","validationSrv","exposeToPlugin","__esModule","sdk","animation","module","bootstrap","getElementById","oldInvoke","locals","serviceName","parentScope","currentAnnotation","isAppConfigCtrl","monkeyPatchInjectorWithPreAssignedBindings","MetricsPanelCtrl","super","panelData","LoadingState","loading","processDataError","angularDirtyCheck","request","timeInfo","timeRange","range","useDataFrames","handleDataFrames","series","legacy","toLegacyResponseData","handleQueryResult","datasourceSrv","timeSrv","onMetricsPanelRefresh","onPanelTearDown","onMetricsPanelMounted","queryRunner","getQueryRunner","querySubscription","getData","withTransforms","withFieldConfig","panelDataObserver","otherPanelInFullscreenMode","updateTimeRange","issueQueries","cancelled","log","newTimeData","applyPanelTimeOverrides","run","queries","targets","panelId","dashboardId","timezone","getTimezone","maxDataPoints","minInterval","interval","cacheTimeout","transformations","snapshot","frame","toDataFrameDTO","plugin","editorTabs","EventBusSrv","timing","pluginName","panelDidMount","panelInitialized","renderingCompleted","profiler","refresh","publishAppEvent","initEditMode","editModeInitiated","addEditorTab","getExtendedMenu","menu","otherPanelInFullscreen","isLastQuery","templates","finally","queryTypeOptions","LokiQueryType","description","DEFAULT_RESOLUTION","RESOLUTION_OPTIONS","concat","runOnBlur","queryType","onQueryTypeChange","rest","cx","InlineFormLabel","RadioButtonGroup","InlineField","min","preprocessMaxLines","nextQuery","onChangeQueryLimit","onKeyDown","NaN","isNaN","LokiResultType","makeClassES5Compatible","PanelCtrlES6","MetricsPanelCtrlES6","QueryCtrlES6","$q","$strapConfig","when","cache","ev","bsTooltip","$this","is","isFunction","container","r","Constructor","prototype","_tooltip","bsTypeahead","shown","proxy","matchAll","transitionEnd","support","transition","el","transEndEventNames","jQuery","toggle","Dropdown","$el","clearMenus","getParent","selector","test","isActive","documentElement","insertBefore","$items","eq","old","dropdown","noConflict","Modal","delegate","remote","isShown","that","isDefaultPrevented","offsetWidth","enforceFocus","one","hideWithTransition","has","timeout","removeBackdrop","$backdrop","animate","doAnimate","$target","Tooltip","eventIn","eventOut","triggers","enabled","_options","fixTitle","delay","hoverState","$tip","actualWidth","actualHeight","tp","hasContent","setContent","getPosition","offsetHeight","applyPlacement","delta","replaceArrow","dimension","arrow","getTitle","$e","getBoundingClientRect","$arrow","validate","parentNode","enable","disable","toggleEnabled","removeData","Tab","previous","$ul","relatedTarget","activate","$active","tab","Typeahead","sorter","highlighter","$menu","listen","grep","beginswith","caseSensitive","caseInsensitive","shift","RegExp","$1","last","eventSupported","mouseenter","mouseleave","eventName","isSupported","setAttribute","move","shiftKey","suppressKeyPressRepeat","inArray","submit","focused","mousedover","Affix","affix","$window","checkPosition","scrollHeight","scrollTop","offsetBottom","bottom","offsetTop","unpin","affixed","$spy","defaultOptions","freeInput","maxTags","confirmKeys","onTagExists","$tag","fadeIn","TagsInput","itemsArray","isSelect","tagName","multiple","hasAttribute","objectItems","placeholderText","$container","after","build","makeOptionItemFunction","propertyName","dontPushVal","pushVal","existing","$existingTag","htmlEncode","findInputWrapper","before","other","removeAll","pop","isEnabled","nodeType","nodeValue","makeOptionFunction","processItems","texts","success","regex","$inputWrapper","doGetCaretPosition","$prevTag","$nextTag","inputSize","elt","arg1","arg2","retVal","htmlEncodeContainer","oField","iCaretPos","selection","oSel","createRange","moveStart","selectionStart","bindonceModule","toBoolean","lowercase","msie","navigator","userAgent","$attrs","showHideBinder","classBinder","watcherRemover","binders","group","boName","ran","addBinder","binder","runBinders","setupWatcher","bindonceValue","removeWatcher","afterNode","afterNextSibling","selectedTranscludes","switchCtrl","cases","selectedTransclude","boSwitchWhen","attrValue","attrKey","newAttr","bindonceController","bindonce","attribute","interpolate","boDirective","tElement","tAttrs","controllers","boParent","parentValue","routeToRegExp","pattern","slash","star","ignoreTrailingSlashes","regexp","caseInsensitiveMatch","isDefined","noop","isEagerInstantiationEnabled","ngRouteModule","info","angularVersion","provider","inherit","extra","routes","route","routeCopy","dst","ii","charAt","shallowCopy","reloadOnUrl","reloadOnSearch","originalPath","redirectPath","substr","redirectTo","otherwise","eagerInstantiationEnabled","$routeParams","$templateRequest","$browser","preparedRoute","preparedRouteIsUpdateOnly","forceReload","$route","reload","fakeLocationEvent","defaultPrevented","prepareRoute","commitRoute","updateParams","newParams","$$route","$routeMinErr","$locationEvent","newRoute","oldRoute","lastRoute","len","switchRouteMatcher","pathParams","equals","nextRoute","copy","nextRoutePromise","$$incOutstandingRequestCount","getRedirectionData","handlePossibleRedirection","keepProcessingRoute","resolveLocals","$$completeOutstandingRequest","hasRedirection","oldPath","oldSearch","resolveRedirectTo","oldUrl","loadedTemplateUrl","valueOf","getTemplateFor","all","string","segmentMatch","instantiateRoute","$$minErr","ngViewFactory","$transclude","currentScope","currentElement","previousLeaveAnimation","autoScrollExp","autoscroll","onloadExp","onload","cleanupLastView","done","response","$template","ngViewFillContentFactory","$controller","resolveAs","$inject","exports","nodeContains","htmlParser","htmlSanitizeWriter","$sanitizeMinErr","hasBeenInstantiated","svgEnabled","$$sanitizeUri","validElements","svgElements","buf","uri","isImage","enableSvg","addValidElements","elements","htmlElements","addElementsTo","voidElements","htmlVoidElements","addValidAttrs","validAttrs","arrayToMap","$$lowercase","handler","inertBodyElement","getInertBodyElement","mXSSAttempts","firstChild","nodeName","attrToMap","chars","textContent","nextNode","getNonDescendant","removeChild","uriValidator","ignoreCurrentElement","out","tag","blockedElements","lkey","uriAttrs","encodeEntities","Node","contains","arg","compareDocumentPosition","SURROGATE_PAIR_REGEXP","NON_ALPHANUMERIC_REGEXP","stringToMap","optionalEndTagBlockElements","optionalEndTagInlineElements","optionalEndTagElements","blockElements","inlineElements","htmlAttrs","svgAttrs","lowercaseKeys","elementsMap","newElements","getInertBodyElement_DOMParser","isDOMParserAvailable","implementation","inertDocument","createHTMLDocument","getDocumentElement","querySelector","documentMode","stripCustomNsAttrs","DOMParser","parseFromString","ELEMENT_NODE","l","attrNode","attrName","lastIndexOf","removeAttributeNode","outerHTML","outerText","$sanitize","LINKY_URL_REGEXP","MAILTO_REGEXP","linkyMinErr","attributesFn","raw","addText","addLink","linkAttributes","autoUpdateOne","watcher","_au","debouncedUpdater","_debounce","_observer","actualizeWatcher","stopWatch","startWatch","clearInterval","WebKitMutationObserver","MozMutationObserver","qs","screen","forward","clipper","_eventHandlers","backward","xBar","offsetPos","sign","client","g","eval","scopedWindow","rm","_baron","instances","oppos","crossPos","crossOpPos","crossSize","crossMinSize","crossMaxSize","crossClient","scrollEdge","crossOffset","scrollSize","h","isMacFF","user","jQueryMode","rootNode","tryNode","HTMLElement","defaultParams","resizeDebounce","cssGuru","impact","_chain","manageAttr","instance","manageEvents","autoUpdate","eventManager","drag","now","draggingCls","button","_pos0","clipperOnScroll","_obj","iterator","arrayEach","removeAttribute","getAttribute","fire","func","wait","timestamp","later","_disposed","barPos","scrollerPos0","resizePauseTimer","scrollingTimer","resizeLastFire","oldBarSize","setBarSize","_size","barMinSize","posBar","_pos","was","will","k","barTopLimit","relToPos","posToRel","dontPosSelect","rtl","cursor","originalEvent","touches","ie","rpos","free","barOn","noScroll","rel","sub","resize","minPeriod","upd","padding","_setCrossSizes","styles","updatePositions","force","newBarSize","_dumbCss","overflow","msOverflowStyle","scrollerCss","margin","border","right","paddingWas","getComputedStyle","numWas","names","userArg","version","fix","controls","userParams","viewPortSize","outside","inside","past","future","radius","minView","topFixHeights","topRealHeights","headerTops","fixElement","flag","ori","bubbleWheel","createEvent","initWebKitWheelEvent","wheelDeltaX","wheelDeltaY","ex","_params","querySelectorAll","limiter","num","j","locPos","x1","x2","clickable","fixFlag","gradFlag","fixState","hTop","gradState","grad","updParams","level","msg","more","Function","supportsPassive","defineProperty","hasOwnProperty","_eventNames","eventNames","prefix","cls","classList","_input","output","_ctx"],"sourceRoot":""}