{"version":3,"file":"3697.60df45cab2aef3a01a18.js","mappings":"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","sources":["webpack://grafana/./public/app/angular/AngularLocationWrapper.ts","webpack://grafana/./public/app/angular/panel/panel_directive.ts","webpack://grafana/./public/app/angular/panel/panel_editor_tab.ts","webpack://grafana/./public/app/angular/panel/query_editor_row.ts","webpack://grafana/./public/app/angular/filters/filters.ts","webpack://grafana/./public/app/angular/services/alert_srv.ts","webpack://grafana/./public/app/angular/services/dynamic_directive_srv.ts","webpack://grafana/./public/app/angular/services/ng_react.ts","webpack://grafana/./public/app/angular/services/segment_srv.ts","webpack://grafana/./public/app/angular/services/popover_srv.ts","webpack://grafana/./public/app/angular/services/timer.ts","webpack://grafana/./public/app/angular/services/AngularLoader.ts","webpack://grafana/./public/app/angular/jquery_extended.ts","webpack://grafana/./public/app/angular/dropdown_typeahead.ts","webpack://grafana/./public/app/angular/autofill_event_fix.ts","webpack://grafana/./public/app/angular/metric_segment.ts","webpack://grafana/./public/app/angular/misc.ts","webpack://grafana/./public/app/angular/bsTooltip.ts","webpack://grafana/./public/app/angular/bsTypeahead.ts","webpack://grafana/./public/app/angular/ng_model_on_blur.ts","webpack://grafana/./public/app/angular/tags.ts","webpack://grafana/./public/app/angular/rebuild_on_change.ts","webpack://grafana/./public/app/angular/give_focus.ts","webpack://grafana/./public/app/angular/diff-view.ts","webpack://grafana/./public/app/angular/array_join.ts","webpack://grafana/./public/app/angular/react2angular.ts","webpack://grafana/./public/app/core/components/Select/MetricSelect.tsx","webpack://grafana/./public/app/angular/angular_wrappers.ts","webpack://grafana/./public/app/angular/components/query_part_editor.ts","webpack://grafana/./public/app/angular/components/form_dropdown/form_dropdown.ts","webpack://grafana/./public/app/angular/components/scroll.ts","webpack://grafana/./public/app/angular/components/jsontree.ts","webpack://grafana/./public/app/angular/components/switch.ts","webpack://grafana/./public/app/angular/components/info_popover.ts","webpack://grafana/./public/app/angular/components/spectrum_picker.ts","webpack://grafana/./public/app/angular/components/code_editor/code_editor.ts","webpack://grafana/./public/app/angular/components/sql_part/sql_part_editor.ts","webpack://grafana/./public/app/angular/components/HttpSettingsCtrl.ts","webpack://grafana/./public/app/angular/components/TlsAuthSettingsCtrl.ts","webpack://grafana/./public/app/angular/components/plugin_component.ts","webpack://grafana/./public/app/angular/GrafanaCtrl.ts","webpack://grafana/./public/app/core/navigation/patch/RouteParamsProvider.ts","webpack://grafana/./public/app/core/navigation/patch/RouteProvider.ts","webpack://grafana/./public/app/angular/bridgeReactAngularRouting.ts","webpack://grafana/./public/app/angular/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/sdk.ts","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.3-c19e788834-efb1685d03.zip/node_modules/angular-route/angular-route.js","webpack://grafana/../../opt/drone/yarncache/angular-route-npm-1.8.3-c19e788834-efb1685d03.zip/node_modules/angular-route/index.js","webpack://grafana/../../opt/drone/yarncache/angular-sanitize-npm-1.8.3-cdd4180b10-b48d13f6cf.zip/node_modules/angular-sanitize/angular-sanitize.js","webpack://grafana/../../opt/drone/yarncache/angular-sanitize-npm-1.8.3-cdd4180b10-b48d13f6cf.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","// @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 angular from 'angular';\nimport $ from 'jquery';\n\nimport coreModule from './core_module';\n\ncoreModule.directive('bsTooltip', [\n '$parse',\n '$compile',\n function ($parse: any, $compile: any) {\n return {\n restrict: 'A',\n scope: true,\n link: function postLink(scope: any, element: any, attrs: any) {\n let getter = $parse(attrs.bsTooltip),\n value = getter(scope);\n scope.$watch(attrs.bsTooltip, function (newValue: any, oldValue: any) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n // Grafana change, always hide other tooltips\n if (true) {\n element.on('show', function (ev: any) {\n $('.tooltip.in').each(function () {\n const $this = $(this),\n tooltip = $this.data('tooltip');\n if (tooltip && !tooltip.$element.is(element)) {\n $this.tooltip('hide');\n }\n });\n });\n }\n element.tooltip({\n title: function () {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n html: true,\n container: 'body', // Grafana change\n });\n const tooltip = element.data('tooltip');\n tooltip.show = function () {\n const r = $.fn.tooltip.Constructor.prototype.show.apply(this, arguments);\n this.tip().data('tooltip', this);\n return r;\n };\n scope._tooltip = function (event: any) {\n element.tooltip(event);\n };\n scope.hide = function () {\n element.tooltip('hide');\n };\n scope.show = function () {\n element.tooltip('show');\n };\n scope.dismiss = scope.hide;\n },\n };\n },\n]);\n","import angular from 'angular';\nimport $ from 'jquery';\nimport { isFunction } from 'lodash';\n\nimport coreModule from './core_module';\n\ncoreModule.directive('bsTypeahead', [\n '$parse',\n function ($parse: any) {\n return {\n restrict: 'A',\n require: '?ngModel',\n link: function postLink(scope: any, element: any, attrs: any, controller: any) {\n let getter = $parse(attrs.bsTypeahead),\n value = getter(scope);\n scope.$watch(attrs.bsTypeahead, function (newValue: any, oldValue: any) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n element.attr('data-provide', 'typeahead');\n element.typeahead({\n source: function () {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n minLength: attrs.minLength || 1,\n items: attrs.item,\n updater: function (value: any) {\n if (controller) {\n scope.$apply(function () {\n controller.$setViewValue(value);\n });\n }\n scope.$emit('typeahead-updated', value);\n return value;\n },\n });\n const typeahead = element.data('typeahead');\n typeahead.lookup = function () {\n let items;\n this.query = this.$element.val() || '';\n if (this.query.length < this.options.minLength) {\n return this.shown ? this.hide() : this;\n }\n items = isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source;\n return items ? this.process(items) : this;\n };\n if (!!attrs.matchAll) {\n typeahead.matcher = function () {\n return true;\n };\n }\n if (attrs.minLength === '0') {\n setTimeout(function () {\n element.on('focus', function () {\n element.val().length === 0 && setTimeout(element.typeahead.bind(element, 'lookup'), 200);\n });\n });\n }\n },\n };\n },\n]);\n","import { rangeUtil } from '@grafana/data';\n\nimport coreModule from './core_module';\n\nfunction ngModelOnBlur() {\n return {\n restrict: 'A',\n priority: 1,\n require: 'ngModel',\n link: (scope: any, elm: any, attr: any, ngModelCtrl: any) => {\n if (attr.type === 'radio' || attr.type === 'checkbox') {\n return;\n }\n\n elm.off('input keydown change');\n elm.bind('blur', () => {\n scope.$apply(() => {\n ngModelCtrl.$setViewValue(elm.val());\n });\n });\n },\n };\n}\n\nfunction emptyToNull() {\n return {\n restrict: 'A',\n require: 'ngModel',\n link: (scope: any, elm: any, attrs: any, ctrl: any) => {\n ctrl.$parsers.push((viewValue: any) => {\n if (viewValue === '') {\n return null;\n }\n return viewValue;\n });\n },\n };\n}\n\nfunction validTimeSpan() {\n return {\n require: 'ngModel',\n link: (scope: any, elm: any, attrs: any, ctrl: any) => {\n ctrl.$validators.integer = (modelValue: any, viewValue: any) => {\n if (ctrl.$isEmpty(modelValue)) {\n return true;\n }\n if (viewValue.indexOf('$') === 0 || viewValue.indexOf('+$') === 0) {\n return true; // allow template variable\n }\n const info = rangeUtil.describeTextRange(viewValue);\n return info.invalid !== true;\n };\n },\n };\n}\n\ncoreModule.directive('ngModelOnblur', ngModelOnBlur);\ncoreModule.directive('emptyToNull', emptyToNull);\ncoreModule.directive('validTimeSpan', validTimeSpan);\n","import angular from 'angular';\nimport $ from 'jquery';\n\nimport { getTagColorsFromName } from '@grafana/ui';\n\nimport coreModule from './core_module';\nimport 'vendor/tagsinput/bootstrap-tagsinput.js';\n\nfunction setColor(name: string, element: JQuery) {\n const { color, borderColor } = getTagColorsFromName(name);\n element.css('background-color', color);\n element.css('border-color', borderColor);\n}\n\nfunction tagColorFromName() {\n return {\n scope: { tagColorFromName: '=' },\n link: (scope: any, element: any) => {\n setColor(scope.tagColorFromName, element);\n },\n };\n}\n\nfunction bootstrapTagsinput() {\n function getItemProperty(scope: any, property: any) {\n if (!property) {\n return undefined;\n }\n\n if (angular.isFunction(scope.$parent[property])) {\n return scope.$parent[property];\n }\n\n return (item: any) => {\n return item[property];\n };\n }\n\n return {\n restrict: 'EA',\n scope: {\n model: '=ngModel',\n onTagsUpdated: '&',\n },\n template: '',\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 { config } from '@grafana/runtime';\nimport coreModule from 'app/angular/core_module';\nimport { provideTheme } from 'app/core/utils/ConfigProvider';\n\nexport function react2AngularDirective(name: string, component: any, options: any) {\n coreModule.directive(name, [\n 'reactDirective',\n (reactDirective) => {\n return reactDirective(provideTheme(component, config.theme2), options);\n },\n ]);\n}\n","import { 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","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 { QueryEditor as CloudMonitoringQueryEditor } from 'app/plugins/datasource/cloud-monitoring/components/QueryEditor';\n\nimport EmptyListCTA from '../core/components/EmptyListCTA/EmptyListCTA';\nimport { Footer } from '../core/components/Footer/Footer';\nimport { PageHeader } from '../core/components/PageHeader/PageHeader';\nimport { MetricSelect } from '../core/components/Select/MetricSelect';\nimport { TagFilter } from '../core/components/TagFilter/TagFilter';\nimport { HelpModal } from '../core/components/help/HelpModal';\n\nconst { SecretFormField } = LegacyForms;\n\nexport function registerAngularDirectives() {\n react2AngularDirective('footer', Footer, []);\n react2AngularDirective('icon', Icon, [\n 'name',\n 'size',\n 'type',\n ['onClick', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('spinner', Spinner, ['inline']);\n react2AngularDirective('helpModal', HelpModal, []);\n react2AngularDirective('pageHeader', PageHeader, ['model', 'noTabs']);\n react2AngularDirective('emptyListCta', EmptyListCTA, [\n 'title',\n 'buttonIcon',\n 'buttonLink',\n 'buttonTitle',\n ['onClick', { watchDepth: 'reference', wrapApply: true }],\n 'proTip',\n 'proTipLink',\n 'proTipLinkTitle',\n 'proTipTarget',\n 'infoBox',\n 'infoBoxTitle',\n ]);\n react2AngularDirective('tagFilter', TagFilter, [\n 'tags',\n ['onChange', { watchDepth: 'reference' }],\n ['tagOptions', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('colorPicker', ColorPicker, [\n 'color',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('seriesColorPickerPopover', SeriesColorPickerPopoverWithTheme, [\n 'color',\n 'series',\n 'onColorChange',\n 'onToggleAxis',\n ]);\n react2AngularDirective('unitPicker', UnitPicker, [\n 'value',\n 'width',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('metricSelect', MetricSelect, [\n 'options',\n 'onChange',\n 'value',\n 'isSearchable',\n 'className',\n 'placeholder',\n ['variables', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('cloudMonitoringQueryEditor', CloudMonitoringQueryEditor, [\n 'target',\n 'onQueryChange',\n 'onExecuteQuery',\n ['events', { watchDepth: 'reference' }],\n ['datasource', { watchDepth: 'reference' }],\n ['templateSrv', { watchDepth: 'reference' }],\n ]);\n react2AngularDirective('secretFormField', SecretFormField, [\n 'value',\n 'isConfigured',\n 'inputWidth',\n 'labelWidth',\n 'aria-label',\n ['onReset', { watchDepth: 'reference', wrapApply: true }],\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('graphContextMenu', GraphContextMenu, [\n 'x',\n 'y',\n 'itemsGroup',\n ['onClose', { watchDepth: 'reference', wrapApply: true }],\n ['getContextMenuSource', { watchDepth: 'reference', wrapApply: true }],\n ['timeZone', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n // We keep the drilldown terminology here because of as using data-* directive\n // being in conflict with HTML data attributes\n react2AngularDirective('drilldownLinksEditor', DataLinksInlineEditor, [\n 'value',\n 'links',\n 'suggestions',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n\n react2AngularDirective('datasourceHttpSettingsNext', DataSourceHttpSettings, [\n 'defaultUrl',\n 'showAccessOptions',\n 'dataSourceConfig',\n 'showForwardOAuthIdentityOption',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n ]);\n react2AngularDirective('folderPicker', 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('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 { 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() {}\n\n init() {\n appEvents.subscribe(ShowModalEvent, (e) => this.showModal(e.payload));\n appEvents.subscribe(HideModalEvent, this.hideModal.bind(this));\n }\n\n /**\n * @deprecated use showModalReact instead that has this capability built in\n */\n hideModal() {\n deprecationWarning('UtilSrv', 'hideModal', '');\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n }\n\n /**\n * @deprecated\n */\n showModal(options: any) {\n deprecationWarning('UtilSrv', 'showModal', 'publish ShowModalReactEvent');\n }\n}\n","import { cloneDeep } from 'lodash';\n\nimport { AnnotationEvent, deprecationWarning } from '@grafana/data';\nimport { deleteAnnotation, saveAnnotation, updateAnnotation } from 'app/features/annotations/api';\nimport { AnnotationQueryOptions } from 'app/features/annotations/types';\n\n/**\n * @deprecated AnnotationsSrv is deprecated in favor of DashboardQueryRunner\n */\nexport class AnnotationsSrv {\n /**\n * @deprecated clearPromiseCaches is deprecated\n */\n clearPromiseCaches() {\n deprecationWarning('annotations_srv.ts', 'clearPromiseCaches', 'DashboardQueryRunner');\n }\n\n /**\n * @deprecated getAnnotations is deprecated in favor of DashboardQueryRunner.getResult\n */\n getAnnotations(options: AnnotationQueryOptions) {\n deprecationWarning('annotations_srv.ts', 'getAnnotations', 'DashboardQueryRunner.getResult');\n return Promise.resolve({ annotations: [], alertState: undefined });\n }\n\n /**\n * @deprecated getAlertStates is deprecated in favor of DashboardQueryRunner.getResult\n */\n getAlertStates(options: any) {\n deprecationWarning('annotations_srv.ts', 'getAlertStates', 'DashboardQueryRunner.getResult');\n return Promise.resolve(undefined);\n }\n\n /**\n * @deprecated getGlobalAnnotations is deprecated in favor of DashboardQueryRunner.getResult\n */\n getGlobalAnnotations(options: AnnotationQueryOptions) {\n deprecationWarning('annotations_srv.ts', 'getGlobalAnnotations', 'DashboardQueryRunner.getResult');\n return Promise.resolve([]);\n }\n\n /**\n * @deprecated saveAnnotationEvent is deprecated\n */\n saveAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'saveAnnotationEvent', 'api/saveAnnotation');\n return saveAnnotation(annotation);\n }\n\n /**\n * @deprecated updateAnnotationEvent is deprecated\n */\n updateAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'updateAnnotationEvent', 'api/updateAnnotation');\n return updateAnnotation(annotation);\n }\n\n /**\n * @deprecated deleteAnnotationEvent is deprecated\n */\n deleteAnnotationEvent(annotation: AnnotationEvent) {\n deprecationWarning('annotations_srv.ts', 'deleteAnnotationEvent', 'api/deleteAnnotation');\n return deleteAnnotation(annotation);\n }\n\n /**\n * @deprecated translateQueryResult is deprecated in favor of DashboardQueryRunner/utils/translateQueryResult\n */\n translateQueryResult(annotation: any, results: any) {\n deprecationWarning('annotations_srv.ts', 'translateQueryResult', 'DashboardQueryRunner/utils/translateQueryResult');\n // if annotation has snapshotData\n // make clone and remove it\n if (annotation.snapshotData) {\n annotation = cloneDeep(annotation);\n delete annotation.snapshotData;\n }\n\n for (const item of results) {\n item.source = annotation;\n item.color = annotation.iconColor;\n item.type = annotation.name;\n item.isRegion = item.timeEnd && item.time !== item.timeEnd;\n }\n\n return results;\n }\n}\n","import 'angular';\nimport 'angular-route';\nimport 'angular-sanitize';\nimport 'angular-bindonce';\nimport 'vendor/bootstrap/bootstrap';\n\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 = ['grafana.core', 'ngSanitize', 'grafana', 'pasvaz.bindonce', 'react'];\n\n // makes it possible to add dynamic stuff\n angularModules.forEach((m: angular.IModule) => {\n this.useModule(m);\n });\n\n // register react angular wrappers\n angular.module('grafana.services').service('dashboardLoaderSrv', DashboardLoaderSrv);\n\n coreModule.factory('timeSrv', () => getTimeSrv());\n coreModule.factory('templateSrv', () => getTemplateSrv());\n\n registerAngularDirectives();\n registerComponents();\n initAngularRoutingBridge();\n\n // 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 publicDashboardAccessToken: this.dashboard.meta.publicDashboardAccessToken,\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","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 * 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 && $.find(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 = $.find($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 if (this.options.container) {\n $tip.appendTo($.find(this.options.container));\n } else {\n $tip.insertAfter(this.$element)\n }\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.find('.tooltip-inner').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 = $.find(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.3' });\n\n/**\n * @ngdoc filter\n * @name linky\n * @kind function\n *\n * @description\n * Finds links in text input and turns them into html links. Supports `http/https/ftp/sftp/mailto` and\n * plain email address links.\n *\n * Requires the {@link ngSanitize `ngSanitize`} module to be installed.\n *\n * @param {string} text Input text.\n * @param {string} [target] Window (`_blank|_self|_parent|_top`) or named frame to open links in.\n * @param {object|function(url)} [attributes] Add custom attributes to the link element.\n *\n * Can be one of:\n *\n * - `object`: A map of attributes\n * - `function`: Takes the url as a parameter and returns a map of attributes\n *\n * If the map of attributes contains a value for `target`, it overrides the value of\n * the target parameter.\n *\n *\n * @returns {string} Html-linkified and {@link $sanitize sanitized} text.\n *\n * @usage\n \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","$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","angular","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","bsTooltip","oldValue","ev","$this","tooltip","is","container","r","_tooltip","require","bsTypeahead","$setViewValue","$emit","shown","isFunction","matchAll","priority","elm","ngModelCtrl","$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","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","Select","LegacyForms","MetricSelect","className","isSearchable","useSelectOptions","useSelectedOption","onChangeValue","useCallback","selectable","isMulti","isClearable","backspaceRemovesValue","maxMenuHeight","noOptionsMessage","variables","useMemo","every","o","flatten","SecretFormField","queryPartEditorDirective","part","handleEvent","partDef","def","$paramsContainer","clickFuncParam","paramIndex","$link","params","optional","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","render","SwitchCtrl","id","internalOnChange","checked","labelClass","switchClass","wide","appendChild","dropOptions","hoverOpenDelay","pin","$applyAsync","onColorChange","async","langMode","maxLines","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","datasource","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","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","ShowModalEvent","showModal","HideModalEvent","hideModal","modalScope","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","angularModules","useModule","DashboardLoaderSrv","getTimeSrv","Footer","Icon","Spinner","HelpModal","PageHeader","EmptyListCTA","TagFilter","ColorPicker","SeriesColorPickerPopoverWithTheme","UnitPicker","CloudMonitoringQueryEditor","GraphContextMenu","DataLinksInlineEditor","DataSourceHttpSettings","FolderPicker","TimePickerSettings","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","v","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","publicDashboardAccessToken","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","makeClassES5Compatible","PanelCtrlES6","MetricsPanelCtrlES6","QueryCtrlES6","transitionEnd","support","transition","el","transEndEventNames","jQuery","toggle","Dropdown","$el","clearMenus","getParent","selector","test","prototype","isActive","documentElement","insertBefore","$items","eq","old","dropdown","Constructor","noConflict","Modal","delegate","proxy","remote","isShown","that","isDefaultPrevented","backdrop","offsetWidth","enforceFocus","one","hideWithTransition","has","keyboard","timeout","removeBackdrop","$backdrop","animate","doAnimate","modal","$target","Tooltip","eventIn","eventOut","triggers","enabled","_options","fixTitle","delay","currentTarget","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","concat","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","when","regex","$inputWrapper","doGetCaretPosition","$prevTag","$nextTag","inputSize","elt","arg1","arg2","retVal","htmlEncodeContainer","oField","iCaretPos","selection","oSel","createRange","moveStart","selectionStart","bindonceModule","toBoolean","lowercase","msie","navigator","userAgent","isNaN","$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","src","dst","ii","charAt","shallowCopy","reloadOnUrl","reloadOnSearch","originalPath","redirectPath","substr","redirectTo","otherwise","eagerInstantiationEnabled","$routeParams","$q","$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","min","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":""}