{"version":3,"sources":["webpack:///webpack/bootstrap","webpack:///./public/app/features/alerting/state/actions.ts","webpack:///./public/app/features/datasources/state/selectors.ts","webpack:///./public/app/core/utils/kbn.ts","webpack:///./public/app/routes/dashboard_loaders.ts","webpack:///./public/app/routes/ReactContainer.tsx","webpack:///./public/app/routes/routes.ts","webpack:///./public/app/app.ts","webpack:///./public/app/index.ts","webpack:///./public/app/core/components/Tooltip/withTooltip.tsx","webpack:///./public/app/core/components/Tooltip/Tooltip.tsx","webpack:///./public/app/features/folders/state/navModel.ts","webpack:///./public/app/core/components/EmptyListCTA/EmptyListCTA.tsx","webpack:///./public/app/core/components/TagFilter/TagBadge.tsx","webpack:///./public/app/core/components/Picker/DescriptionOption.tsx","webpack:///./public/app/core/components/Picker/DescriptionPicker.tsx","webpack:///./public/app/core/services/backend_srv.ts","webpack:///./public/app/features/plugins/state/selectors.ts","webpack:///./public/app/core/actions/navModel.ts","webpack:///./public/app/core/selectors/location.ts","webpack:///./public/app/core/directives/dash_class.ts","webpack:///./public/app/core/directives/dropdown_typeahead.ts","webpack:///./public/app/core/directives/metric_segment.ts","webpack:///./public/app/core/directives/misc.ts","webpack:///./public/app/core/directives/ng_model_on_blur.ts","webpack:///./public/app/core/directives/tags.ts","webpack:///./public/app/core/directives/value_select_dropdown.ts","webpack:///./public/app/core/directives/rebuild_on_change.ts","webpack:///./public/app/core/directives/give_focus.ts","webpack:///./public/app/core/directives/diff-view.ts","webpack:///./public/app/core/jquery_extended.ts","webpack:///./public/app/core/components/json_explorer/helpers.ts","webpack:///./public/app/core/components/json_explorer/json_explorer.ts","webpack:///./public/app/core/components/jsontree/jsontree.ts","webpack:///./public/app/core/components/code_editor/code_editor.ts","webpack:///./public/app/core/components/colorpicker/ColorPalette.tsx","webpack:///./public/app/core/components/colorpicker/SpectrumPicker.tsx","webpack:///./public/app/core/components/colorpicker/ColorPickerPopover.tsx","webpack:///./public/app/core/components/colorpicker/ColorPicker.tsx","webpack:///./public/app/core/components/colorpicker/SeriesColorPicker.tsx","webpack:///./public/app/core/components/colorpicker/spectrum_picker.ts","webpack:///./public/app/core/services/search_srv.ts","webpack:///./public/app/core/services/ng_react.ts","webpack:///./public/app/core/profiler.ts","webpack:///./public/app/core/components/grafana_app.ts","webpack:///./public/app/core/components/search/search.ts","webpack:///./public/app/core/components/info_popover.ts","webpack:///./public/app/core/components/navbar/navbar.ts","webpack:///./public/app/core/directives/array_join.ts","webpack:///./public/app/core/live/live_srv.ts","webpack:///./public/app/core/components/layout_selector/layout_selector.ts","webpack:///./public/app/core/components/switch.ts","webpack:///./public/app/core/components/dashboard_selector.ts","webpack:///./public/app/core/components/query_part/query_part_editor.ts","webpack:///./public/app/core/components/sql_part/sql_part_editor.ts","webpack:///./public/app/core/components/form_dropdown/form_dropdown.ts","webpack:///./public/app/core/controllers/inspect_ctrl.ts","webpack:///./public/app/core/controllers/json_editor_ctrl.ts","webpack:///./public/app/core/controllers/login_ctrl.ts","webpack:///./public/app/core/controllers/invited_ctrl.ts","webpack:///./public/app/core/controllers/signup_ctrl.ts","webpack:///./public/app/core/controllers/reset_password_ctrl.ts","webpack:///./public/app/core/controllers/error_ctrl.ts","webpack:///./public/app/core/controllers/all.ts","webpack:///./public/app/core/services/alert_srv.ts","webpack:///./public/app/core/services/util_srv.ts","webpack:///./public/app/core/services/timer.ts","webpack:///./public/app/core/services/analytics.ts","webpack:///./public/app/core/services/popover_srv.ts","webpack:///./public/app/core/services/segment_srv.ts","webpack:///./public/app/core/services/dynamic_directive_srv.ts","webpack:///./public/app/core/services/bridge_srv.ts","webpack:///./public/app/core/filters/filters.ts","webpack:///./public/app/core/services/all.ts","webpack:///./public/app/core/services/keybindingSrv.ts","webpack:///./public/app/core/components/help/help.ts","webpack:///./public/app/core/nav_model_srv.ts","webpack:///./public/app/core/components/scroll/page_scroll.ts","webpack:///./public/app/core/components/scroll/scroll.ts","webpack:///./public/app/core/components/gf_page.ts","webpack:///./public/app/core/components/org_switcher.ts","webpack:///./public/app/core/components/PasswordStrength.tsx","webpack:///./public/app/core/components/search/SearchResult.tsx","webpack:///./public/app/core/components/TagFilter/TagValue.tsx","webpack:///./public/app/core/components/TagFilter/TagOption.tsx","webpack:///./public/app/core/components/TagFilter/TagFilter.tsx","webpack:///./public/app/core/components/sidemenu/DropDownChild.tsx","webpack:///./public/app/core/components/sidemenu/TopSection.tsx","webpack:///./public/app/core/components/sidemenu/SideMenuDropDown.tsx","webpack:///./public/app/core/components/sidemenu/TopSectionItem.tsx","webpack:///./public/app/core/components/sidemenu/SignIn.tsx","webpack:///./public/app/core/components/sidemenu/BottomNavLinks.tsx","webpack:///./public/app/core/components/sidemenu/SideMenu.tsx","webpack:///./public/app/core/components/sidemenu/BottomSection.tsx","webpack:///./public/app/core/angular_wrappers.ts","webpack:///./public/app/core/components/search/search_results.ts","webpack:///./public/app/core/components/manage_dashboards/manage_dashboards.ts","webpack:///./public/app/core/core.ts","webpack:///./public/app/core/time_series2.ts","webpack:///./public/app/core/utils/url.ts","webpack:///./public/app/core/components/query_part/query_part.ts","webpack:///./public/app/core/utils/tags.ts","webpack:///./public/app/features/teams/state/navModel.ts","webpack:///./public/app/core/components/Picker/UserPicker.tsx","webpack:///./public/app/core/components/Picker/PickerOption.tsx","webpack:///./public/app/core/components/DeleteButton/DeleteButton.tsx","webpack:///./public/app/core/utils/datemath.ts","webpack:///./public/app/features/teams/state/actions.ts","webpack:///./public/app/types/acl.ts","webpack:///./public/app/features/alerting/state/selectors.ts","webpack:///./public/app/types/index.ts","webpack:///./public/app/core/utils/ticks.ts","webpack:///./public/app/core/utils/rangeutil.ts","webpack:///./public/app/core/services/impression_srv.ts","webpack:///./public/app/features/alerting/state/alertDef.ts","webpack:///./public/app/core/utils/model_utils.ts","webpack:///./public/app/core/utils/explore.ts","webpack:///./public/app/core/utils/sort_by_keys.ts","webpack:///./public/app/features/dashboard/dashboard_migration.ts","webpack:///./public/app/features/dashboard/dashboard_model.ts","webpack:///./public/app/core/components/PageHeader/PageHeader.tsx","webpack:///./public/app/core/selectors/navModel.ts","webpack:///./public/app/core/constants.ts","webpack:///./public/app/core/store.ts","webpack:///./public/app/core/services/context_srv.ts","webpack:///./public/app/features/dashboard/state/actions.ts","webpack:///./public/app/core/components/PermissionList/PermissionsInfo.tsx","webpack:///./public/app/features/folders/state/actions.ts","webpack:///./public/app/core/components/LayoutSelector/LayoutSelector.tsx","webpack:///./public/app/core/core_module.ts","webpack:///./public/app/core/components/PermissionList/PermissionListItem.tsx","webpack:///./public/app/core/components/PermissionList/DisabledPermissionListItem.tsx","webpack:///./public/app/core/components/PermissionList/PermissionList.tsx","webpack:///./public/app/core/components/Picker/TeamPicker.tsx","webpack:///./public/app/core/components/PermissionList/AddPermission.tsx","webpack:///./public/app/features/admin/ServerStats.tsx","webpack:///./public/app/features/admin/state/apis.ts","webpack:///./public/app/features/alerting/AlertRuleList.tsx","webpack:///./public/app/features/alerting/AlertRuleItem.tsx","webpack:///./public/app/features/teams/TeamPages.tsx","webpack:///./public/app/features/teams/TeamMembers.tsx","webpack:///./public/app/features/teams/TeamGroupSync.tsx","webpack:///./public/app/features/teams/state/selectors.ts","webpack:///./public/app/features/teams/TeamList.tsx","webpack:///./public/app/features/api-keys/ApiKeysPage.tsx","webpack:///./public/app/features/api-keys/state/selectors.ts","webpack:///./public/app/features/api-keys/ApiKeysAddedModal.tsx","webpack:///./public/app/features/plugins/PluginListPage.tsx","webpack:///./public/app/features/plugins/PluginActionBar.tsx","webpack:///./public/app/features/folders/FolderSettingsPage.tsx","webpack:///./public/app/features/folders/FolderPermissions.tsx","webpack:///./public/app/features/datasources/DataSourcesListPage.tsx","webpack:///./public/app/features/datasources/DataSourcesActionBar.tsx","webpack:///./public/app/features/plugins/PluginListItem.tsx","webpack:///./public/app/features/plugins/PluginList.tsx","webpack:///./public/app/core/components/Forms/Forms.tsx","webpack:///./public/app/features/teams/TeamSettings.tsx","webpack:///./public/app/features/datasources/DataSourcesListItem.tsx","webpack:///./public/app/features/datasources/DataSourcesList.tsx","webpack:///./public/app/core/utils/react2angular.ts","webpack:///./public/app/core/actions/location.ts","webpack:///./public/app/core/actions/index.ts","webpack:///./public/app/core/reducers/navModel.ts","webpack:///./public/app/core/reducers/location.ts","webpack:///./public/app/core/reducers/index.ts","webpack:///./public/app/features/alerting/state/reducers.ts","webpack:///./public/app/features/teams/state/reducers.ts","webpack:///./public/app/features/api-keys/state/reducers.ts","webpack:///./public/app/core/utils/acl.ts","webpack:///./public/app/features/folders/state/reducers.ts","webpack:///./public/app/features/dashboard/state/reducers.ts","webpack:///./public/app/features/plugins/state/reducers.ts","webpack:///./public/app/features/datasources/state/reducers.ts","webpack:///./public/app/store/configureStore.ts","webpack:///./public/app/features/dashboard/panel_model.ts","webpack:///./public/vendor/bootstrap/bootstrap.js","webpack:///./public/vendor/angular-ui/ui-bootstrap-tpls.js","webpack:///./public/vendor/angular-other/angular-strap.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./public/vendor/tagsinput/bootstrap-tagsinput.js","webpack:///./public/app/core/partials.ts","webpack:///./public/app sync \\.html$","webpack:///./public/app/core/components/help/help.html","webpack:///./public/app/core/components/manage_dashboards/manage_dashboards.html","webpack:///./public/app/core/components/navbar/navbar.html","webpack:///./public/app/core/components/search/search.html","webpack:///./public/app/core/components/search/search_results.html","webpack:///./public/app/features/admin/partials/admin_home.html","webpack:///./public/app/features/admin/partials/edit_org.html","webpack:///./public/app/features/admin/partials/edit_user.html","webpack:///./public/app/features/admin/partials/new_user.html","webpack:///./public/app/features/admin/partials/orgs.html","webpack:///./public/app/features/admin/partials/settings.html","webpack:///./public/app/features/admin/partials/stats.html","webpack:///./public/app/features/admin/partials/styleguide.html","webpack:///./public/app/core/app_events.ts","webpack:///./public/app/features/plugins/state/actions.ts","webpack:///./public/app/features/admin/partials/users.html","webpack:///./public/app/features/alerting/partials/alert_howto.html","webpack:///./public/app/features/alerting/partials/alert_tab.html","webpack:///./public/app/features/alerting/partials/notification_edit.html","webpack:///./public/app/features/annotations/partials/editor.html","webpack:///./public/app/features/annotations/partials/event_editor.html","webpack:///./public/app/features/dashboard/dashlinks/editor.html","webpack:///./public/app/features/dashboard/dashnav/dashnav.html","webpack:///./public/app/features/dashboard/export/export_modal.html","webpack:///./public/app/features/datasources/state/actions.ts","webpack:///./public/app/features/dashboard/export_data/export_data_modal.html","webpack:///./public/app/features/dashboard/folder_picker/folder_picker.html","webpack:///./public/app/features/dashboard/history/history.html","webpack:///./public/app/features/dashboard/move_to_folder_modal/move_to_folder.html","webpack:///./public/app/features/dashboard/partials/create_folder.html","webpack:///./public/app/features/dashboard/partials/dashboard_import.html","webpack:///./public/app/features/dashboard/partials/folder_dashboards.html","webpack:///./public/app/features/dashboard/partials/folder_permissions.html","webpack:///./public/app/features/dashboard/partials/folder_settings.html","webpack:///./public/app/features/dashboard/partials/inspector.html","webpack:///./public/app/features/dashboard/partials/row_options.html","webpack:///./public/app/features/dashboard/partials/shareModal.html","webpack:///./public/app/features/dashboard/settings/settings.html","webpack:///./public/app/features/dashboard/submenu/submenu.html","webpack:///./public/app/features/dashboard/timepicker/settings.html","webpack:///./public/app/features/dashboard/timepicker/timepicker.html","webpack:///./public/app/features/manage-dashboards/partials/dashboard_list.html","webpack:///./public/app/features/manage-dashboards/partials/snapshot_list.html","webpack:///./public/app/features/org/partials/change_password.html","webpack:///./public/app/features/org/partials/create_team.html","webpack:///./public/app/features/org/partials/invite.html","webpack:///./public/app/features/org/partials/newOrg.html","webpack:///./public/app/features/org/partials/orgDetails.html","webpack:///./public/app/features/org/partials/orgUsers.html","webpack:///./public/app/features/org/partials/profile.html","webpack:///./public/app/features/org/partials/select_org.html","webpack:///./public/app/features/panel/partials/metrics_tab.html","webpack:///./public/app/features/panel/partials/panelTime.html","webpack:///./public/app/features/panel/partials/query_editor_row.html","webpack:///./public/app/features/panel/partials/soloPanel.html","webpack:///./public/app/features/playlist/partials/playlist.html","webpack:///./public/app/features/playlist/partials/playlist_search.html","webpack:///./public/app/features/playlist/partials/playlists.html","webpack:///./public/app/features/plugins/import_list/import_list.html","webpack:///./public/app/features/plugins/partials/ds_dashboards.html","webpack:///./public/app/features/plugins/partials/ds_edit.html","webpack:///./public/app/features/plugins/partials/ds_http_settings.html","webpack:///./public/app/features/plugins/partials/plugin_edit.html","webpack:///./public/app/features/plugins/partials/plugin_page.html","webpack:///./public/app/core/utils/colors.ts","webpack:///./public/app/features/plugins/partials/update_instructions.html","webpack:///./public/app/features/templating/partials/editor.html","webpack:///./public/app/partials/confirm_modal.html","webpack:///./public/app/partials/edit_json.html","webpack:///./public/app/partials/dashboard.html","webpack:///./public/app/partials/error.html","webpack:///./public/app/partials/login.html","webpack:///./public/app/partials/modal.html","webpack:///./public/app/partials/panelgeneral.html","webpack:///./public/app/partials/reset_password.html","webpack:///./public/app/partials/signup_invited.html","webpack:///./public/app/partials/signup_step2.html","webpack:///./public/app/partials/valueSelectDropdown.html","webpack:///./public/app/plugins/datasource/cloudwatch/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/cloudwatch/partials/config.html","webpack:///./public/app/plugins/datasource/cloudwatch/partials/query.editor.html","webpack:///./public/app/plugins/datasource/cloudwatch/partials/query.parameter.html","webpack:///./public/app/plugins/datasource/elasticsearch/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/elasticsearch/partials/bucket_agg.html","webpack:///./public/app/plugins/datasource/elasticsearch/partials/config.html","webpack:///./public/app/plugins/datasource/elasticsearch/partials/metric_agg.html","webpack:///./public/app/plugins/datasource/elasticsearch/partials/query.editor.html","webpack:///./public/app/plugins/datasource/grafana-live/partials/query.editor.html","webpack:///./public/app/plugins/datasource/grafana/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/grafana/partials/query.editor.html","webpack:///./public/app/plugins/datasource/graphite/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/graphite/partials/config.html","webpack:///./public/app/plugins/datasource/graphite/partials/query.editor.html","webpack:///./public/app/plugins/datasource/influxdb/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/influxdb/partials/config.html","webpack:///./public/app/plugins/datasource/influxdb/partials/query.editor.html","webpack:///./public/app/plugins/datasource/logging/partials/config.html","webpack:///./public/app/plugins/datasource/mssql/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/mssql/partials/config.html","webpack:///./public/app/plugins/datasource/mssql/partials/query.editor.html","webpack:///./public/app/plugins/datasource/mysql/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/mysql/partials/config.html","webpack:///./public/app/plugins/datasource/mysql/partials/query.editor.html","webpack:///./public/app/plugins/datasource/opentsdb/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/opentsdb/partials/config.html","webpack:///./public/app/core/utils/emitter.ts","webpack:///./public/app/plugins/datasource/opentsdb/partials/query.editor.html","webpack:///./public/app/plugins/datasource/postgres/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/postgres/partials/config.html","webpack:///./public/app/plugins/datasource/prometheus/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/postgres/partials/query.editor.html","webpack:///./public/app/plugins/datasource/prometheus/partials/config.html","webpack:///./public/app/plugins/datasource/prometheus/partials/query.editor.html","webpack:///./public/app/plugins/datasource/stackdriver/partials/annotations.editor.html","webpack:///./public/app/plugins/datasource/stackdriver/partials/config.html","webpack:///./public/app/plugins/datasource/stackdriver/partials/query.aggregation.html","webpack:///./public/app/core/config.ts","webpack:///./public/app/plugins/datasource/stackdriver/partials/query.editor.html","webpack:///./public/app/plugins/datasource/stackdriver/partials/query.filter.html","webpack:///./public/app/plugins/datasource/testdata/partials/query.editor.html","webpack:///./public/app/plugins/panel/alertlist/editor.html","webpack:///./public/app/plugins/panel/alertlist/module.html","webpack:///./public/app/plugins/panel/dashlist/editor.html","webpack:///./public/app/plugins/panel/dashlist/module.html","webpack:///./public/app/plugins/panel/gettingstarted/editor.html","webpack:///./public/app/plugins/panel/gettingstarted/module.html","webpack:///./public/app/plugins/panel/graph/axes_editor.html","webpack:///./public/app/core/components/Animations/SlideDown.tsx","webpack:///./public/app/plugins/panel/graph/tab_display.html","webpack:///./public/app/plugins/panel/graph/tab_legend.html","webpack:///./public/app/plugins/panel/heatmap/module.html","webpack:///./public/app/plugins/panel/heatmap/partials/axes_editor.html","webpack:///./public/app/plugins/panel/heatmap/partials/display_editor.html","webpack:///./public/app/plugins/panel/pluginlist/editor.html","webpack:///./public/app/plugins/panel/pluginlist/module.html","webpack:///./public/app/plugins/panel/singlestat/editor.html","webpack:///./public/app/plugins/panel/singlestat/mappings.html","webpack:///./public/app/plugins/panel/singlestat/module.html","webpack:///./public/app/plugins/panel/table/column_options.html","webpack:///./public/app/plugins/panel/table/editor.html","webpack:///./public/app/plugins/panel/table/module.html","webpack:///./public/app/plugins/panel/text/editor.html","webpack:///./public/app/plugins/panel/text/module.html","webpack:///./public/app/plugins/panel/unknown/module.html","webpack:///./public/app/core/components/code_editor/theme-grafana-dark.js","webpack:///./public/app/features/api-keys/state/actions.ts","webpack:///./public/app/core/utils/location_util.ts","webpack:///./public/app/core/utils/outline.ts","webpack:///./public/vendor/spectrum.js"],"names":["webpackJsonpCallback","data","moduleId","chunkId","chunkIds","moreModules","executeModules","i","resolves","length","installedChunks","push","Object","prototype","hasOwnProperty","call","modules","parentJsonpFunction","shift","deferredModules","apply","checkDeferredModules","result","deferredModule","fulfilled","j","depId","splice","__webpack_require__","s","installedModules","2","exports","module","l","e","promises","installedChunkData","promise","Promise","resolve","reject","onScriptComplete","head","document","getElementsByTagName","script","createElement","charset","timeout","nc","setAttribute","src","p","6","jsonpScriptSrc","event","onerror","onload","clearTimeout","chunk","errorType","type","realSrc","target","error","Error","request","undefined","setTimeout","appendChild","all","m","c","d","name","getter","o","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","oe","err","console","jsonpArray","window","oldJsonpFunction","slice","ActionTypes","loadAlertRules","rules","LoadAlertRules","payload","setSearchQuery","query","SetSearchQuery","getAlertRulesAsync","options","_this","this","dispatch","tslib__WEBPACK_IMPORTED_MODULE_0__","app_core_services_backend_srv__WEBPACK_IMPORTED_MODULE_1__","_a","sent","togglePauseAlertRule","id","getState","post","stateFilter","location","state","toString","__webpack_exports__","getDataSources","getDataSourcesSearchQuery","getDataSourcesLayoutMode","getDataSourcesCount","regex","RegExp","searchQuery","dataSources","filter","dataSource","test","database","layoutMode","dataSourcesCount","lodash__WEBPACK_IMPORTED_MODULE_0__","lodash__WEBPACK_IMPORTED_MODULE_0___default","moment__WEBPACK_IMPORTED_MODULE_1__","moment__WEBPACK_IMPORTED_MODULE_1___default","kbn","valueFormats","regexEscape","replace","round_interval","interval","secondsToHms","seconds","numyears","Math","floor","numdays","numhours","numminutes","numseconds","nummilliseconds","secondsToHhmmss","strings","join","to_percent","nr","outof","addslashes","str","interval_regex","intervals_in_seconds","y","M","w","h","ms","calculateInterval","range","resolution","lowLimitInterval","intervalMs","lowLimitMs","interval_to_ms","to","valueOf","from","describe_interval","matches","match","a","has","sec","count","parseInt","info","interval_to_seconds","query_color_dot","color","diameter","slugifyForUrl","toLowerCase","stringToJsRegex","toFixed","decimals","factor","pow","max","formatted","String","round","indexOf","decimalPos","precision","substr","toFixedScaled","scaledDecimals","additionalDecimals","ext","roundValue","num","parseFloat","formatBuilders","fixedUnit","unit","size","scaledUnits","extArray","steps","limit","abs","decimalSIPrefix","offset","prefixes","units","map","binarySIPrefix","currency","symbol","scaler","scaled","simpleCountUnit","none","short","dB","percent","percentunit","hex","toUpperCase","hex0x","hexString","substring","sci","toExponential","locale","toLocaleString","maximumFractionDigits","currencyUSD","currencyGBP","currencyEUR","currencyJPY","currencyRUB","currencyUAH","currencyBRL","currencyDKK","currencyISK","currencyNOK","currencySEK","currencyCZK","currencyCHF","currencyPLN","currencyBTC","bits","bytes","kbytes","mbytes","gbytes","decbits","decbytes","deckbytes","decmbytes","decgbytes","pps","bps","Bps","KBs","Kbits","MBs","Mbits","GBs","Gbits","Hs","KHs","MHs","GHs","THs","PHs","EHs","ops","reqps","rps","wps","iops","opm","rpm","wpm","watt","kwatt","mwatt","kwattm","Wm2","voltamp","kvoltamp","voltampreact","kvoltampreact","watth","kwatth","joule","ev","amp","kamp","mamp","volt","kvolt","mvolt","dBm","ohm","lumens","celsius","farenheit","kelvin","humidity","pressurebar","pressurembar","pressurekbar","pressurehpa","pressurekpa","pressurehg","pressurepsi","forceNm","forcekNm","forceN","forcekN","lengthm","lengthmm","lengthkm","lengthmi","lengthft","areaM2","areaF2","areaMI2","massmg","massg","masskg","masst","velocityms","velocitykmh","velocitymph","velocityknot","accMS2","accFS2","accG","litre","mlitre","m3","Nm3","dm3","gallons","flowgpm","flowcms","flowcfs","flowcfm","litreh","flowlpm","flowmlpm","degree","radian","grad","radbq","radci","radgy","radrad","radsv","radrem","radexpckg","radr","radsvh","ppm","conppb","conngm3","conngNm3","conμgm3","conμgNm3","conmgm3","conmgNm3","congm3","congNm3","hertz","toDuration","timeScale","long","find","decrementDecimals","dtdurationms","dtdurations","dthms","timeticks","dateTimeAsIso","epoch","isUtc","time","utc","isSame","format","dateTimeAsUS","dateTimeFromNow","fromNow","getUnitFormats","text","submenu","dashboard_loaders_LoadDashboardCtrl","LoadDashboardCtrl","$scope","$routeParams","dashboardLoaderSrv","backendSrv","$location","$browser","uid","slug","loadDashboard","then","meta","url","location_util","stripBaseFromUrl","path","autofitpanels","kiosk","initDashboard","getDashboardBySlug","res","homeDash","redirectUri","newUrl","canSave","canShare","canStar","$inject","isNew","folderId","Number","gridPos","x","title","NewDashboardCtrl","configureStore","reactContainer","$route","datasourceSrv","contextSrv","scope","elem","current","locals","roles","some","hasRole","component","default","props","routeParams","params","react_dom_default","render","store","Component","react_default","es","tslib_es6","WrapInProvider","$on","unmountComponentAtNode","DataSourcesListPage","setupAngularRoutes","$routeProvider","$locationProvider","html5Mode","when","templateUrl","reloadOnSearch","pageClass","controller","controllerAs","template","FolderPermissions","FolderSettingsPage","ApiKeysPage","TeamList","TeamPages","ServerStats","PluginListPage","redirectTo","AlertRuleList","otherwise","lodash_default","move","array","fromIndex","toIndex","GrafanaApp","preBootModules","registerFunctions","ngModuleDependencies","useModule","extend","init","app","angular_default","config","bootData","user","$controllerProvider","$compileProvider","$filterProvider","$httpProvider","$provide","preAssignBindingsEnabled","buildInfo","env","debugInfoEnabled","useApplyAsync","register","directive","factory","service","decorator","$templateCache","$delegate","Date","getTime","each","moduleName","core","preBootRequires","fn","tooltip","defaults","animation","bootstrap","invoke","catch","log","react_popper","_super","showTooltip","hideTooltip","Tooltip","tooltipSetState","prevState","show","className","onMouseOver","onMouseOut","children","WrappedComponent","class_1","setState","placement","componentWillReceiveProps","nextProps","renderContent","content","ReactComponent","134","buildNavModel","folder","icon","subTitle","active","getLoadingNav","tabIndex","main","version","react__WEBPACK_IMPORTED_MODULE_1__","react__WEBPACK_IMPORTED_MODULE_1___default","EmptyListCTA","arguments","model","buttonIcon","buttonLink","buttonTitle","proTip","proTipLink","proTipLinkTitle","proTipTarget","href","app_core_utils_tags__WEBPACK_IMPORTED_MODULE_2__","TagBadge","onClick","label","removeIcon","_b","getTagColorsFromName","tagStyle","backgroundColor","borderColor","style","react_select_es","Picker_DescriptionOption","DescriptionOption","handleMouseDown","handleMouseEnter","handleMouseMove","preventDefault","stopPropagation","onSelect","option","onFocus","isFocused","onMouseDown","onMouseEnter","onMouseMove","description","aria-hidden","DescriptionPicker","optionsWithDesc","onSelected","disabled","valueKey","multi","clearable","labelKey","onChange","optionComponent","placeholder","14","setBackendSrv","getBackendSrv","singletonInstance","app_core_core_module__WEBPACK_IMPORTED_MODULE_1__","app_core_app_events__WEBPACK_IMPORTED_MODULE_2__","app_features_dashboard_dashboard_model__WEBPACK_IMPORTED_MODULE_3__","BackendSrv","$http","alertSrv","$q","$timeout","inFlightRequests","HTTP_REQUEST_CANCELLED","method","delete","patch","put","withNoBackendCache","callback","noBackendCache","finally","requestErrorHandler","isHandled","message","isString","status","set","severity","retry","requestIsLocal","orgId","headers","results","showSuccessAlert","isSignedIn","firstAttempt","loginPing","addCanceler","requestId","canceler","resolveCancelerIfExists","cancelers","isUndefined","datasourceRequest","defer","Authorization","response","silent","emit","cancelled","statusText","search","getDashboardByUid","getFolderByUid","saveDashboard","dash","dashboard","overwrite","createFolder","deleteFolder","deleteDashboard","deleteFoldersAndDashboards","folderUids","dashboardUids","tasks","_i","folderUids_1","folderUid","createTask","dashboardUids_1","dashboardUid","executeInOrder","moveDashboards","toFolder","dashboardUids_2","moveDashboard","totalCount","successCount","succeeded","alreadyInFolderCount","alreadyInFolder","fullDash","deferred","clone","getSaveModelClone","ignoreRejections","args","Array","concat","reduce","initialValue","instance","140","getPlugins","getPluginsSearchQuery","getLayoutMode","plugins","item","149","updateNavIndex","151","metricSegment","metricSegmentModel","misc_tip","compile","lodash","toggleClass","$watch","newValue","removeClass","jquery_js_exposed","$compile","attrs","jquery_js_exposed_default","appendTo","linkText","$button","html","ngModel","menuItems","subItem","typeaheadValues","memo","index","subIndex","click","$item","menuItem","$subItem","dropdownTypeaheadOnSelect","$input","attr","typeahead","source","minLength","items","updater","submenuItem","$apply","trigger","hide","focus","keyup","val","blur","contents","$sce","templateSrv","segment","selectMode","debounce","updateVariableValue","selected","altSegments","trustAsHtml","highlightVariablesAsHtml","fake","expandable","custom","fromClick","cancelBlur","inputBlur","switchToLink","getOptions","$query","alt","escape","unshift","unescape","matcher","linkMode","lookup","$element","proxy","process","debounceLookup","leading","keydown","evt","keyCode","css","width","uiSegmentSrv","cssClass","newSegment","cachedOptions","onSegmentChange","valueToSegment","dropdownTypeahead","dropdownTypeahead2","angular","clipboard","_t","replaceWith","element","restrict","link","$eval","ngchange","change","tip","showIf","$interpolate","$id","addClass","$parse","iElement","iAttrs","gfDropdown","buildTemplate","ul","divider","li","insertAfter","next","getText","clipboard_default","on","app_events","destroy","onchange","inputValue","editorOptBool","editorCheckbox","rangeutil","elm","ngModelCtrl","off","$setViewValue","ctrl","$parsers","viewValue","$validators","integer","modelValue","$isEmpty","invalid","utils_tags","setColor","tagColorFromName","getItemProperty","isFunction","$parent","isArray","select","typeaheadSource","widthClass","itemValue","itemvalue","itemText","itemtext","tagclass","onTagsUpdated","tagElement","idx","tagsinput","ValueSelectDropdownCtrl","variable","tags","tagObj","tag","min","dropdownVisible","updateLinkText","selectedAndNotInTag","values","currentTexts","clearSelections","selectionsChanged","selectTag","getValuesForTag","valuesText","keyDown","moveHighlight","commitChanges","selectValue","highlightIndex","direction","commitChange","excludeOthers","setAllExceptCurrentTo","other","ctrlKey","metaKey","shiftKey","selectedValues","selectedTags","oldVariableText","onUpdated","queryChanged","$window","$rootScope","bodyEl","body","bodyOnClick","linkEl","inputEl","cleanUp","vm","$animate","transclude","previousElements","remove","childScope","$destroy","block","nodes","node","endNode","nextSibling","getBlockNodes","leave","oldValue","showNull","newScope","createComment","enter","parent","value_select_dropdown_ValueSelectDropdownCtrl","valueSelectDropdown","core_module","giveFocus","domEl","setSelectionRange","pos","DeltaCtrl","observer","MutationObserver","mutations","appEvent","observe","attributes","attributeFilter","characterData","childList","subtree","$onDestroy","disconnect","diff_view_DeltaCtrl","LinkJSONCtrl","$anchorScroll","goToLine","line","switchView","unbind","place_tt","opts","$tooltip","injector","tmpScope","$new","scopeData","$digest","outerWidth","isObject","getObjectName","constructor","exec","getValuePreview","getType","escapeString","helpers_cssClass","el","classList","add","Node","JsonExplorer","json","open","_isOpen","skipChildren","keys","isEmptyObject","toggleOpen","isOpen","appendChildren","animateOpen","removeChildren","animateClose","toggle","openAtDepth","depth","isNumberArray","isNumber","renderArray","arrayWrapperSpan","forEach","skipRoot","togglerLink","togglerIcon","hasKey","objectWrapperSpan","constructorName","isUrl","isDate","valuePreview","createTextNode","isEmpty","theme","removeChild","addEventListener","animated","querySelector","index_1","addAChild_1","formatter","requestAnimationFrame","childrenRemoved_1","removeAChild_1","childrenElement","innerHTML","DEFAULT_MODE","DEFAULT_MAX_LINES","DEFAULT_TAB_SIZE","DEFAULT_BEHAVIOURS","DEFAULT_SNIPPETS","editorTemplate","code_editor_link","langMode","maxLines","showGutter","tabSize","behavioursEnabled","snippetsEnabled","aceElem","brace_default","edit","codeEditor","getSession","highlightActiveLine","showPrintMargin","autoScrollEditorIntoView","setOptions","editorOptions","$blockScrolling","Infinity","renderer","setScrollMargin","setPadding","lang","acequire","enableBasicAutocompletion","enableLiveAutocompletion","enableSnippets","getCompleter","anyEditor","completers","aceModeName","editorSession","setMode","textarea","codeEditorFocus","getValue","editorValue","$$postDigest","setEditorContent","commands","addCommand","bindKey","win","mac","react_dom","js_drop","drop_default","tinycolor","onColorSelect","ColorPalette","colorPaletteItems","paletteColors","paletteColor","SpectrumPicker_SpectrumPicker","SpectrumPicker","onSpectrumMove","setComponentElem","isMoving","componentDidMount","spectrumOptions","assignIn","flat","showAlpha","showButtons","componentWillUpdate","spectrum","componentDidUpdate","ref","DEFAULT_COLOR","ColorPickerPopover_ColorPickerPopover","ColorPickerPopover","tab","colorString","setPickerNavElem","pickerNavElem","tinycolor_default","newColor","isValid","sampleColorSelected","spectrumColorSelected","rgbColor","toRgbString","onColorStringChange","newColorString","onColorStringBlur","paletteTab","ColorPalette_ColorPalette","spectrumTab","currentTab","data-toggle","onBlur","ColorPicker","openColorPicker","closeColorPicker","setPickerElem","pickerElem","dropContent","dropContentElem","drop","position","classes","openOn","tetherOptions","constraints","attachment","colorPickerDrop","tether","ColorPicker_ColorPicker","watchDepth","wrapApply","SeriesColorPicker_SeriesColorPicker","SeriesColorPicker","onToggleAxis","renderAxisSelection","leftButtonClass","series","yaxis","rightButtonClass","onColorChange","require","SearchSrv","recentIsOpen","getBool","getRecentDashboards","sections","queryForRecentDashboards","score","removable","expanded","toggleRecent","dashIds","take","impression_srv","getDashboardOpened","dashboardIds","orderId","hit","isStarred","section","toggleStarred","starredIsOpen","getStarred","context_srv","starred","hasFilters","folderIds","skipRecent","skipStarred","handleSearchResult","sortBy","results_1","toggleFolder","results_2","folderTitle","folderUrl","getDashboardTags","getReactComponent","$injector","reactComponent","split","namePart","applyFunctions","obj","propsConfig","prev","wrapped","phase","$root","$$phase","wrappedInApply","applied","watchProps","watchExpressions","listener","supportsWatchCollection","$watchCollection","supportsWatchGroup","$watchGroup","watchGroupExpressions","expr","actualExpr","prop","getPropExpression","exprWatchDepth","defaultWatch","getPropWatchDepth","renderComponent","$evalAsync","getPropName","getPropConfig","search_srv_SearchSrv","ngModule","renderMyComponent","onScopeDestroy","unmountComponent","reactComponentName","conf","injectableProps","scopeProps","propName","findAttribute","propExpressions","propTypes","Profiler","enabled","timings","appStart","loadStart","digestCounter","onAppEvent","refresh","dashboardFetched","dashboardInitialized","panelInitialized","panelsInitCount","dashboardLoadStart","getTotalWatcherCount","scopeCount","timeTaken","lastPanelInitializedAt","rootDigestStart","performance","now","scopes","root","f","$$watchers","childElement","panelTimings","renderEnd","queryEnd","queryStart","renderStart","GrafanaCtrl","utilSrv","$controller","bridgeSrv","backend_srv","appSubUrl","core_config","_","profiler","dashAlerts","colors","dashboardData","viewScope","localScope","callerScope","$emit","sidemenuOpen","playlistSrv","grafana_app_GrafanaCtrl","modal","Constructor","enforceFocus","sidemenu","isPlaying","cookie","$$route","setViewModeBodyClass","drops","exit","lastActivity","activeUser","inActiveTimeLimit","checkForInActiveUser","hasClass","userActivityDetected","mousemove","capture","passive","parents","clickAutoHideParent_1","clickAutoHide","detach","append","stop","popover","grafanaAppDirective","SearchCtrl","searchSrv","openSearch","closeSearch","initialFolderFilterTitle","getTags","onTagSelect","isEditor","hasEditPermissionInFolders","ignoreClose","giveSearchFocus","moveSelection","currentItem","getFlattenedResultForNavigation","selectedIndex","dashboardIndex","selectedDash","folderIndex","selectedFolder","onFilterboxClick","preventClose","flattenedResult","newIndex","selectedItem","hideHeader","searchDashboards","currentSearchId","localSearchId","isLoading","queryHasNoFilters","filterByTag","removeTag","without","newTags","clearSearchFilter","showStarred","showImport","folderExpanding","search_SearchCtrl","wide","dropOptions","hoverOpenDelay","pin","$applyAsync","navbar_NavbarCtrl","NavbarCtrl","showSearch","navItemClicked","navItem","clickHandler","$formatters","layout_selector_template","observers","getWebSocketUrl","protocol","host","getConnection","initPromise","conn","readyState","WebSocket","onclose","reconnect","onmessage","handleMessage","onopen","JSON","parse","stream","removeObserver","LiveSrv","send","action","stringify","subscribe","streamName","Observable","addObserver","layout_selector_LayoutSelectorCtrl","LayoutSelectorCtrl","listView","gridView","newLayout","bindToController","SwitchCtrl","internalOnChange","checked","labelClass","switchClass","switch_template","DashboardSelectorCtrl","$onInit","dashboard_selector_template","query_part_editor_template","part","partDef","def","$paramsContainer","clickFuncParam","paramIndex","$link","optional","updateParam","$event","inputKeyPress","which","addElementsAndCompile","param","paramValue","$paramLink","paramTemplate","partial","inputKeyDown","keypress","dynamicLookup","handleEvent","dynamicOptions","op","addTypeahead","partActions","showActionsMenu","empty","queryPartEditorDirective","sql_part_editor_template","separator","typeaheadMatcher","sqlPartEditorDirective","FormDropdownCtrl","inputElement","first","linkElement","modelChanged","labelMode","cssClasses","typeaheadUpdater","startOpen","getOptionsInternal","isPromiseLike","updateDisplay","lookupText","optionCache","optionTexts","allowCustom","updateValue","$option","display","form_dropdown_template","form_dropdown_FormDropdownCtrl","$sanitize","inspector","toJson","request_parameters","stack","editor","getParametersFromQueryString","InspectCtrl","queryString","parameters","keyValue","inspect_ctrl_InspectCtrl","JsonEditorCtrl","canUpdate","updateHandler","canCopy","enableCopy","update","newObject","fromJson","getContentForClipboard","json_editor_ctrl_JsonEditorCtrl","LoginCtrl","email","command","loggingIn","oauth","oauthEnabled","ldapEnabled","authProxyEnabled","disableLoginForm","disableUserSignUp","loginHint","submitBtnText","loginModeChanged","loginError","submit","loginMode","login","signUp","changeView","loginView","changePasswordView","getElementById","oldPassword","newPassword","confirmNew","toGrafana","loginForm","$valid","formModel","password","redirect","redirectUrl","login_ctrl_LoginCtrl","InvitedCtrl","navModel","breadcrumbs","code","invite","username","inviteCode","greeting","invitedBy","inviteForm","invited_ctrl_InvitedCtrl","orgName","verifyEmailEnabled","autoAssignOrg","signUpForm","rsp","signup_ctrl_SignUpCtrl","ResetPasswordCtrl","sendResetForm","confirmPassword","error_ctrl_ErrorCtrl","ErrorCtrl","navModelSrv","getNotFoundNav","AlertSrv","list","alert","getIconForSeverity","newAlert","newAlertJson","clear","clearAll","alert_srv_AlertSrv","util_srv_UtilSrv","UtilSrv","$modal","showModal","hideModal","showConfirmModal","modalScope","dismiss","templateHtml","persist","keyboard","backdrop","modalEl","onConfirm","updateConfirmText","confirmTextValid","confirmText","text2","onAltAction","altActionText","yesText","modalClass","timers","cancel","cancelAll","Timer","timer_Timer","analytics_Analytics","Analytics","gaInit","ajax","dataType","cache","ga","q","googleAnalyticsId","track","page","googleAnalyticsSrv","openDrop","close","contentElement","classNames","hoverCloseDelay","onClose","segment_srv_uiSegmentSrv","self","MetricSegment","fallbackText","newSelectMeasurement","newKeyValue","newCondition","condition","newOperator","newOperators","transformToSegments","addTemplateVars","variableTypeFilter","segments","variables","newPlusButton","run","startAnalytics","popoverSrv","addDirective","child","directiveInfo","registered","$normalize","watchPath","childScope_1","DynamicDirectiveSrv","dynamic_directive_srv_DynamicDirectiveSrv","fullPageReloadRoutes","BridgeSrv","angularUrl","actions","urlWithoutBase","bridge_srv_BridgeSrv","moment","interpolateTemplateVars","filterFunc","scopedVars","panel","row","replaceWithText","$stateful","input","sort","arr","start","end","noXml","mousetrap","KeybindingSrv","timeSrv","modalOpen","timepickerOpen","mousetrap_default","reset","setupGlobal","showHelpModal","goToHome","openAlerting","goToProfile","openSearchStarred","openSearchTags","bindGlobal","tagsMode","editview","fullscreen","keyArg","returnValue","showDashEditView","$broadcast","focusPanelId","canEdit","panelId","exploreEnabled","datasource","url_1","getPanelById","explore","targets","duplicatePanel","panels","panelIndex","shareScope","panelInfo","getPanelInfoById","collapseRows","expandRows","keybindingSrv_KeybindingSrv","help_HelpCtrl","HelpCtrl","shortcuts","Global","Dashboard","Focused Panel","Time Range","NavModelSrv","navItems","navTree","nav","NavModel","args_1","_c","nav_model_srv_NavModelSrv","scrollRoot","scroller","grafanaScrollbar","scrollRootClass","scrollBarHTML","scrollerClass","scrollParams","bar","scrollbar","core_default","dispose","restore","scrollTop","lastPos","animate","preventScroll","gf_page_template","header","OrgSwitchCtrl","currentOrgId","getUserOrgs","orgs","setUsingOrg","org","PasswordStrength_PasswordStrength","PasswordStrength","strengthText","strengthClass","classnames","SearchResult_SearchResultSection","SearchResult","SearchResultSection","toggleSection","renderItem","collapseClassNames","classnames_default","fa","fa-plus","fa-minus","search-section__header__toggle","TagValue_TagValue","TagValue","onRemove","TagOption","TagFilter","searchTags","onTagRemove","tagOptions","selectOptions","loadOptions","TagOption_TagOption","sidemenu_DropDownChild","listItemClassName","sidemenu_SideMenuDropDown","role","sidemenu_TopSectionItem","img","sidemenu_TopSection","cloneDeep","hideFromMenu","mainLinks","encodeURIComponent","pathname","loginUrl","sidemenu_BottomNavLinks","BottomNavLinks","itemClicked","switchOrg","BottomSection","bottomNav","profileNode","showOrgSwitcher","sidemenu_SignIn","SideMenu_SideMenu","toggleSideMenuSmallBreakpoint","SideMenu","toggleSideMenu","react2angular","PageHeader","SearchResult_SearchResult","TagFilter_TagFilter","SearchResultsCtrl","toggleFolderExpand","onFolderExpanding","editable","onSelectionChanged","navigateToFolder","onItemClick","onTagSelected","$tag","search_results_SearchResultsCtrl","ManageDashboardsCtrl","selectAllChecked","canDelete","canMove","starredFilterOptions","selectedStarredFilter","refreshList","initTagFilter","initDashboardList","selectionChanged","selectedDashboards","selectedFolders","getFoldersAndDashboardsToDelete","folders","dashboards","getFolderIds","ids","sections_1","dashCount","folderCount","getDashboardsToMove","moveTo","afterSave","tagFilterOptions","term","selectedTagFilter","onQueryChange","onTagFilterChange","removeStarred","onStarredFilterChange","clearFilters","createDashboardUrl","importDashboardUrl","manage_dashboards_ManageDashboardsCtrl","registerAngularDirectives","json_explorer_JsonExplorer","time_series2","updateLegendValues","app_core_utils_kbn__WEBPACK_IMPORTED_MODULE_0__","app_core_utils_ticks__WEBPACK_IMPORTED_MODULE_1__","lodash__WEBPACK_IMPORTED_MODULE_2__","lodash__WEBPACK_IMPORTED_MODULE_2___default","matchSeriesOverride","aliasOrRegex","seriesAlias","translateFillOption","fill","height","axis","yaxes","formater","getDataMinMax","datamin","datamax","tickDecimals","tickDecimalsPlusOne","data_1","stats","datapoints","alias","aliasEscaped","bars","fillColor","valueFormater","legend","isMsResolutionNeeded","applySeriesOverrides","overrides","dashes","dashLength","points","nullPointMode","override","lines","lineWidth","linewidth","spaceLength","pointradius","radius","steppedLine","zindex","fillBelowTo","transform","getFlotPairs","fillStyle","MAX_VALUE","avg","timeStep","currentTime","previousTime","currentValue","ignoreNulls","nullAsZero","total","allIsNull","nonNulls","previousValue","previousDeltaUp","delta","logmin","allIsZero","TimeSeries","171","173","toUrlParams","v","k","buildParams","prefix","len","rbracket","renderUrl","QueryPartDef","QueryPart","functionRenderer","suffixRenderer","defaultParams","category","addStrategy","updateText","innerExpr","hasMultipleParamsInString","strValue","partVal","trim","paramType","quote","197","TAG_COLORS","hash","charCodeAt","djb2","TAG_BORDER_COLORS","198","getTeamLoadingNav","app_core_config__WEBPACK_IMPORTED_MODULE_0__","team","avatarUrl","pageName","memberCount","199","UserPicker","debouncedSearch","lodash__WEBPACK_IMPORTED_MODULE_4__","trailing","app_core_services_backend_srv__WEBPACK_IMPORTED_MODULE_5__","userId","UserPickerOption","showConfirm","onClickDelete","onClickCancel","showDeleteButton","onClickConfirm","onConfirmDelete","204","parseDateMath","roundUp","timezone","isMoment","mathString","parseString","ISO_8601","date","charAt","dateTime","endOf","startOf","subtract","236","25","setSearchMemberQuery","loadTeams","loadTeam","loadTeamMembers","loadTeamGroups","removeTeamGroup","deleteTeam","_navModel__WEBPACK_IMPORTED_MODULE_3__","teams","teamLoaded","LoadTeam","teamGroups","app_core_actions__WEBPACK_IMPORTED_MODULE_2__","getStore","teamMembersLoaded","addTeamMember","removeTeamMember","updateTeam","groupId","26","AclTarget","OrgRole","PermissionLevel","dashboardAclTargets","dashboardPermissionLevels","Team","User","Viewer","Editor","View","Edit","Admin","276","getSearchQuery","277","_acl__WEBPACK_IMPORTED_MODULE_6__","284","tickStep","e10","sqrt","e5","e2","step0","step1","LN10","getScaledDecimals","tickSize","getFlotTickSize","noTicks","dec","magn","norm","maxDec","getFlotRange","panelMin","panelMax","widen","getFlotTickDecimals","secPerTick","logp","base","getPrecision","getStringPrecision","dotIndex","grafanaTimeFormat","285","getRelativeTimesList","describeTextRange","describeTimeRange","_datemath__WEBPACK_IMPORTED_MODULE_2__","spans","rangeOptions","timepickerSettings","currentDisplay","groupBy","formatDate","absoluteFormat","isLast","opt","rangeIndex","parts","amount","span","toMoment","frame","lodash__WEBPACK_IMPORTED_MODULE_1__","lodash__WEBPACK_IMPORTED_MODULE_1___default","app_core_config__WEBPACK_IMPORTED_MODULE_2__","impressionSrv","ImpressionSrv","addDashboardImpression","dashboardId","impressionsKey","impressionKey","impressions","app_core_store__WEBPACK_IMPORTED_MODULE_0__","exists","imp","pop","287","app_core_components_query_part_query_part__WEBPACK_IMPORTED_MODULE_1__","alertQueryDef","joinEvalMatches","metric","iconClass","stateClass","executionErrorModes","reducerTypes","ah","removeDefaults","assignModelProperties","DEFAULT_RANGE","serializeStateToUrlParam","app_core_utils_url__WEBPACK_IMPORTED_MODULE_1__","getExploreUrl","panelTargets","panelDatasource","exploreDatasource","exploreTargets","mixedExploreDatasource_1","exploreState","parseUrlState","initial","decodeURI","queries","urlState","sortByKeys","isPlainObject","dashboardModel","updateSchema","old","oldVersion","schemaVersion","panelUpgrades","services","templating","isBoolean","grid","leftMin","leftMax","y_format","y_formats","y2_format","maxId_1","getNextPanelId","aliasYAxis","seriesOverrides","pulldowns","annotations","allFormat","timepicker","refId","getNextQueryLetter","fields","rawQuery","field","func","mathExpr","asExpr","thresholds","k_1","styles","k_2","templateVariable","hideVariable","hideLabel","logBase","leftLogBase","leftYAxisLabel","rightMin","rightMax","rightLogBase","rightYAxisLabel","xaxis","t1","t2","threshold1","thresholdLine","lineColor","threshold1Color","colorMode","threshold2","threshold2Color","graphTooltip","sharedCrosshair","upgradeToGridLayout","constants","flattenDeep","rows","collapse","showTitle","repeat","repeatIteration","rowGridHeight","getGridHeight","rowPanel","rowPanelModel","showRows","nextRowId","collapsed","yPos","panel_model","minSpan","panelWidth","widthFactor","panelHeight","panelPos","rowArea","getPanelPosition","addPanel","DashboardMigrator","ceil","RowArea","rowYPos","area","callOnce","startPlace","endPlace","dashboard_model_DashboardModel","DashboardModel","events","emitter","revision","autoUpdate","ensureListExist","snapshot","links","gnetId","panelData","resetOriginalVariables","resetOriginalTime","initMeta","addBuiltInAnnotationQuery","sortPanelsByGridPos","found","builtIn","showSettings","canMakeEditable","saveVariables","saveTimerange","copy","nonPersistedProperties","getSaveModel","originalTemplating","original","filters","originalTime","chain","setViewMode","isEditing","forEachPanel","panelA","panelB","cleanUpRepeats","iteration","panelsToRemove","repeatedByRow","repeatPanelId","pull","processRepeats","repeatPanel","cleanUpRowRepeats","rowPanels","processRowRepeats","rowPanelIndex","findIndex","getRowPanels","_loop_1","this_1","getPanelRepeatClone","sourcePanel","valueIndex","sourcePanelIndex","getRowRepeatClone","sourceRowPanel","rowPanels_1","insertPos","updateRepeatedPanelIds","selectedOptions","getSelectedVariableOptions","minWidth","xPos","repeatDirection","yOffset","repeatRow","setScopedVars","variableOption","_loop_2","optionIndex","rowCopy","this_2","rowHeight","getRowHeight","panelBelowIndex","insertPos_1","cloneRowPanel","maxBy","positions","maxPos","removePanel","removeRow","removePanels","toggleRow","setPanelFocus","updateSubmenuVisibility","submenuEnabled","annotation","newPanel","moment_default","getTimezone","removeAllListeners","rowIndex","hasRepeat","yDiff","yMax","pushDownAmount","eventName","cycleGraphTooltip","sharedTooltipModeEnabled","sharedCrosshairModeOnly","getRelativeTime","every","isTimezoneUtc","dashboard_migration_DashboardMigrator","hasTimeChanged","isEqual","currentGridHeight","visibleHeight","viewHeight","scaleFactor","classnames__WEBPACK_IMPORTED_MODULE_2__","classnames__WEBPACK_IMPORTED_MODULE_2___default","app_core_app_events__WEBPACK_IMPORTED_MODULE_3__","SelectNav","customCss","defaultSelectedItem","htmlFor","hideFromTabs","tabClasses","Navigation","Tabs","shouldComponentUpdate","bc","breadcrumbsResult","renderHeaderTitle","GRID_CELL_HEIGHT","GRID_CELL_VMARGIN","GRID_COLUMN_COUNT","REPEAT_DIR_VERTICAL","DEFAULT_PANEL_SPAN","DEFAULT_ROW_HEIGHT","MIN_PANEL_HEIGHT","LS_PANEL_COPY_KEY","38","getNavModel","navIndex","fallback","node_1","parentItem","getNotFoundModel","Store","localStorage","ret","setObject","removeItem","42","ContextSrv","sidemenuSmallBreakpoint","app_core_store__WEBPACK_IMPORTED_MODULE_3__","settings","orgRole","app_core_core_module__WEBPACK_IMPORTED_MODULE_2__","getDashboardPermissions","updateDashboardPermission","removeDashboardPermission","addDashboardPermission","permissions","permission","itemToUpdate","level","itemsToUpdate","updated","itemToDelete","inherited","456","457","458","react__WEBPACK_IMPORTED_MODULE_0__","react__WEBPACK_IMPORTED_MODULE_0___default","saveFolder","getFolderPermissions","newTitle","SetFolderTitle","LoadFolderPermissions","app_core_app_events__WEBPACK_IMPORTED_MODULE_4__","addFolderPermission","newItem","LayoutModes","onLayoutModeChanged","List","Grid","5","angular__WEBPACK_IMPORTED_MODULE_0__","angular__WEBPACK_IMPORTED_MODULE_0___default","513","react","userAvatarUrl","teamAvatarUrl","teamId","PermissionListItem","PermissionsListItem","onPermissionChanged","onRemoveItem","folderInfo","inheritedFromRoot","setClassNameHelper","ItemAvatar","acl","DisabledPermissionListItem","PermissionList_DisabledPermissionListItem","isFetching","colSpan","PickerOption","TeamPicker_TeamPicker","TeamPicker","Async","loadingPlaceholder","noResultsText","autosize","AddPermission_AddPermissions","AddPermissions","onAddPermission","getCleanState","onCancel","onSubmit","522","react_hot_loader__WEBPACK_IMPORTED_MODULE_2__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_4__","_state_apis__WEBPACK_IMPORTED_MODULE_5__","app_core_components_PageHeader_PageHeader__WEBPACK_IMPORTED_MODULE_6__","trys","getServerStats","stat","error_1","users","activeUsers","playlists","snapshots","stars","alerts","react_redux__WEBPACK_IMPORTED_MODULE_3__","app_core_components_PageHeader_PageHeader__WEBPACK_IMPORTED_MODULE_4__","_AlertRuleItem__WEBPACK_IMPORTED_MODULE_5__","app_core_actions__WEBPACK_IMPORTED_MODULE_7__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_8__","_state_actions__WEBPACK_IMPORTED_MODULE_9__","_state_selectors__WEBPACK_IMPORTED_MODULE_10__","onStateFilterChanged","updateLocation","onOpenHowTo","app_core_app_events__WEBPACK_IMPORTED_MODULE_6__","rule","paused","fetchRules","prevProps","getStateFilter","onSearchQueryChange","stateFilters","alertStateFilterOption","alertRules","onTogglePause","mapDispatchToProps","525","ruleUrl","stateIcon","renderText","stateText","stateAge","AlertRuleItem","PageTypes","react_hot_loader__WEBPACK_IMPORTED_MODULE_4__","_state_selectors__WEBPACK_IMPORTED_MODULE_11__","_state_navModel__WEBPACK_IMPORTED_MODULE_12__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_13__","_core_selectors_location__WEBPACK_IMPORTED_MODULE_14__","isSyncEnabled","app_core_config__WEBPACK_IMPORTED_MODULE_5__","isEnterprise","fetchTeam","_TeamSettings__WEBPACK_IMPORTED_MODULE_8__","GroupSync","_TeamGroupSync__WEBPACK_IMPORTED_MODULE_9__","renderPage","_state_actions__WEBPACK_IMPORTED_MODULE_10__","teamLoadingNav","react_redux__WEBPACK_IMPORTED_MODULE_2__","app_core_components_Animations_SlideDown__WEBPACK_IMPORTED_MODULE_3__","app_core_components_Picker_UserPicker__WEBPACK_IMPORTED_MODULE_4__","app_core_components_DeleteButton_DeleteButton__WEBPACK_IMPORTED_MODULE_5__","app_core_components_TagFilter_TagBadge__WEBPACK_IMPORTED_MODULE_6__","_state_actions__WEBPACK_IMPORTED_MODULE_7__","_state_selectors__WEBPACK_IMPORTED_MODULE_8__","isAdding","onUserSelected","newTeamMember","TeamMembers","member","renderLabels","labels","renderMember","syncEnabled","onRemoveMember","onToggleAdding","newTeamMemberValue","onAddUserToTeam","members","app_core_components_Tooltip_Tooltip__WEBPACK_IMPORTED_MODULE_4__","_state_actions__WEBPACK_IMPORTED_MODULE_5__","_state_selectors__WEBPACK_IMPORTED_MODULE_6__","addTeamGroup","newGroupId","group","TeamGroupSync","isNewGroupValid","renderGroup","onRemoveGroup","groups","in","onAddGroup","onNewGroupIdChanged","headerTooltip","getSearchMemberQuery","getTeamGroups","getTeamsCount","getTeam","getTeams","getTeamMembers","searchMemberQuery","currentTeamId","react_hot_loader__WEBPACK_IMPORTED_MODULE_3__","app_core_components_EmptyListCTA_EmptyListCTA__WEBPACK_IMPORTED_MODULE_6__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_9__","fetchTeams","renderTeam","teamUrl","renderEmptyList","teamsCount","renderTeamList","ApiKeyStateProps","react_dom_server__WEBPACK_IMPORTED_MODULE_2__","react_dom_server__WEBPACK_IMPORTED_MODULE_2___default","app_types__WEBPACK_IMPORTED_MODULE_5__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_6__","_state_selectors__WEBPACK_IMPORTED_MODULE_7__","_state_actions__WEBPACK_IMPORTED_MODULE_8__","app_core_components_PageHeader_PageHeader__WEBPACK_IMPORTED_MODULE_9__","app_core_components_Animations_SlideDown__WEBPACK_IMPORTED_MODULE_10__","app_core_app_events__WEBPACK_IMPORTED_MODULE_13__","onAddApiKey","openModal","apiKey","rootPath","origin","app_core_config__WEBPACK_IMPORTED_MODULE_12__","renderToString","_ApiKeysAddedModal__WEBPACK_IMPORTED_MODULE_11__","modalTemplate","newApiKey","initialApiKeyState","fetchApiKeys","loadApiKeys","onDeleteApiKey","deleteApiKey","apiKeys","onApiKeyStateUpdate","Name","Role","ng-click","border","_core_components_PageHeader_PageHeader__WEBPACK_IMPORTED_MODULE_4__","_PluginActionBar__WEBPACK_IMPORTED_MODULE_5__","_PluginList__WEBPACK_IMPORTED_MODULE_6__","_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_8__","_state_selectors__WEBPACK_IMPORTED_MODULE_9__","loadPlugins","536","setPluginsSearchQuery","PluginActionBar","setLayoutMode","_core_components_LayoutSelector_LayoutSelector__WEBPACK_IMPORTED_MODULE_3__","_state_actions__WEBPACK_IMPORTED_MODULE_4__","_state_selectors__WEBPACK_IMPORTED_MODULE_5__","app_core_app_events__WEBPACK_IMPORTED_MODULE_5__","_state_navModel__WEBPACK_IMPORTED_MODULE_8__","setFolderTitle","onSave","onDelete","hasChanged","app_core_components_Tooltip_Tooltip__WEBPACK_IMPORTED_MODULE_5__","app_core_components_Animations_SlideDown__WEBPACK_IMPORTED_MODULE_6__","app_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_7__","_state_navModel__WEBPACK_IMPORTED_MODULE_9__","app_core_components_PermissionList_PermissionList__WEBPACK_IMPORTED_MODULE_10__","app_core_components_PermissionList_AddPermission__WEBPACK_IMPORTED_MODULE_11__","app_core_components_PermissionList_PermissionsInfo__WEBPACK_IMPORTED_MODULE_12__","onOpenAddPermissions","removeFolderPermission","updateFolderPermission","onCancelAddPermission","_DataSourcesActionBar__WEBPACK_IMPORTED_MODULE_5__","_DataSourcesList__WEBPACK_IMPORTED_MODULE_6__","_core_selectors_navModel__WEBPACK_IMPORTED_MODULE_9__","emptyListModel","loadDataSources","_core_components_EmptyListCTA_EmptyListCTA__WEBPACK_IMPORTED_MODULE_10__","540","DataSourcesActionBar","setDataSourcesSearchQuery","setDataSourcesLayoutMode","plugins_PluginListItem","plugin","logos","small","author","listStyle","selectors","TeamSettings","onUpdate","Label","required","onChangeName","onChangeEmail","selectors_location","553","datasources_DataSourcesListItem","DataSourcesListItem","typeLogoUrl","isDefault","DataSourcesList_DataSourcesList","DataSourcesList","card-section","card-list-layout-grid","LayoutSelector","card-list-layout-list","66","children_1","buildNavIndex","reducers","newPages","location_initialState","alertDef","reducers_initialState","state_reducers","stateModel","getStateDisplayModel","newStateDate","executionError","evalData","noData","convertToAlertRule","state_actions","teams_state_reducers","initialTeamState","LoadTeamMembers","SetSearchMemberQuery","LoadTeamGroups","api_keys_state_reducers","initialApiKeysState","api_keys_state_actions","LoadApiKeys","SetApiKeysSearchQuery","processAclItems","processAclItem","b","sortRank","localeCompare","dto","folders_state_reducers","inititalState","folders_state_actions","LoadFolder","reducers_inititalState","dashboard_state_reducers","dashboard_state_actions","LoadDashboardPermissions","plugins_state_reducers","state_reducers_initialState","plugins_state_actions","LoadPlugins","SetPluginsSearchQuery","SetLayoutMode","datasources_state_actions","datasources_state_reducers","datasources_state_reducers_initialState","LoadDataSources","SetDataSourcesSearchQuery","SetDataSourcesLayoutMode","redux","composeEnhancers","__REDUX_DEVTOOLS_EXTENSION_COMPOSE__","rootReducer","PanelModel","app_core_utils_emitter__WEBPACK_IMPORTED_MODULE_0__","notPersistedProperties","sizeChanged","newPos","resizeDone","$","support","transition","transitionEnd","transEndEventNames","WebkitTransition","MozTransition","OTransition","jQuery","$el","clearMenus","getParent","$this","selector","Dropdown","isActive","is","documentElement","insertBefore","$items","eq","dropdown","noConflict","Modal","delegate","Event","isShown","isDefaultPrevented","that","offsetWidth","hideWithTransition","one","removeBackdrop","$backdrop","doAnimate","$target","remote","eventOut","eventIn","_options","fixTitle","delay","hoverState","currentTarget","$tip","actualWidth","tp","hasContent","setContent","top","left","container","actualHeight","offsetHeight","applyPlacement","replaceArrow","dimension","arrow","getTitle","removeWithAnimation","$e","getBoundingClientRect","validate","parentNode","enable","disable","toggleEnabled","removeData","Tab","previous","$ul","closest","relatedTarget","activate","$active","Typeahead","highlighter","$menu","menu","shown","grep","sorter","beginswith","caseSensitive","caseInsensitive","$1","listen","eventSupported","mouseleave","isSupported","suppressKeyPressRepeat","focused","mousedover","Affix","affix","checkPosition","offsetBottom","bottom","offsetTop","unpin","affixed","$spy","$document","isStaticPositioned","cssprop","currentStyle","getComputedStyle","getStyle","elBCR","offsetParentBCR","offsetParentEl","docDomEl","offsetParent","parentOffsetEl","clientTop","clientLeft","scrollLeft","boundingClientRect","pageYOffset","pageXOffset","positionElements","hostEl","targetEl","positionStr","appendToBody","hostElPos","targetElWidth","targetElHeight","targetElPos","positionStrParts","pos0","pos1","shiftWidth","center","right","shiftHeight","$log","$locale","orderByFilter","SPECIAL_CHARACTERS_REGEXP","parsers","formatCodeToRegex","yyyy","year","yy","MMMM","DATETIME_FORMATS","MONTH","month","MMM","SHORTMONTH","MM","dd","EEEE","DAY","EEE","HH","hours","H","mm","minutes","sss","milliseconds","ss","baseDate","createParser","parser","dt","isNaN","getFullYear","getDate","getMinutes","getSeconds","getMilliseconds","warn","mapper","constant","formatDay","formatMonth","formatYear","formatDayHeader","formatDayTitle","datepickerMode","minMode","showWeeks","startingDay","yearRange","minDate","maxDate","shortcutPropagation","$attrs","dateFilter","datepickerConfig","$datepickerSuppressError","noop","modes","isDefined","refreshView","uniqueId","random","initDate","activeDate","$modelValue","$invalid","dateObject","compare","activeDateId","ngModelCtrl_","$render","$viewValue","_refreshView","$setValidity","isDisabled","customClass","dateDisabled","arrays","fixTimeZone","getHours","setHours","setFullYear","getMonth","step","years","months","toggleMode","maxMode","13","32","33","34","35","36","37","39","40","focusElement","altKey","handleKeyDown","ctrls","datepickerCtrl","DAYS_IN_MONTH","getDaysInMonth","checkDate","setDate","getDay","setMonth","firstDayOfMonth","numDisplayedFromPreviousMonth","difference","firstDate","days","startDate","dates","getDates","createDateObject","secondary","abbr","full","weekNumbers","thursdayIndex","numWeeks","curWeek","getISO8601WeekNumber","date1","date2","formatMonthTitle","getStartingYear","datepickerPopup","datepickerPopupTemplateUrl","html5Types","datetime-local","currentText","clearText","closeText","closeOnDateSelection","showButtonBar","onOpenFocus","$position","dateParser","datepickerPopupConfig","datepickerAppendToBody","datepickerTemplateUrl","watchData","dateFormat","isHtml5DateInput","$observe","newDateFormat","popupEl","cameltoDash","string","ng-model","ng-change","template-url","datepickerEl","datepickerOptions","getAttribute","assign","oldvalue","$$parserName","ngRequired","$viewChangeListeners","documentClickBind","contains","inputKeydownBind","today","dateSelection","$popup","after","775","$strapConfig","bsTooltip","_tooltip","matchAll","776","./af","./af.js","./ar","./ar-dz","./ar-dz.js","./ar-kw","./ar-kw.js","./ar-ly","./ar-ly.js","./ar-ma","./ar-ma.js","./ar-sa","./ar-sa.js","./ar-tn","./ar-tn.js","./ar.js","./az","./az.js","./be","./be.js","./bg","./bg.js","./bm","./bm.js","./bn","./bn.js","./bo","./bo.js","./br","./br.js","./bs","./bs.js","./ca","./ca.js","./cs","./cs.js","./cv","./cv.js","./cy","./cy.js","./da","./da.js","./de","./de-at","./de-at.js","./de-ch","./de-ch.js","./de.js","./dv","./dv.js","./el","./el.js","./en-au","./en-au.js","./en-ca","./en-ca.js","./en-gb","./en-gb.js","./en-ie","./en-ie.js","./en-il","./en-il.js","./en-nz","./en-nz.js","./eo","./eo.js","./es","./es-do","./es-do.js","./es-us","./es-us.js","./es.js","./et","./et.js","./eu","./eu.js","./fa","./fa.js","./fi","./fi.js","./fo","./fo.js","./fr","./fr-ca","./fr-ca.js","./fr-ch","./fr-ch.js","./fr.js","./fy","./fy.js","./gd","./gd.js","./gl","./gl.js","./gom-latn","./gom-latn.js","./gu","./gu.js","./he","./he.js","./hi","./hi.js","./hr","./hr.js","./hu","./hu.js","./hy-am","./hy-am.js","./id","./id.js","./is","./is.js","./it","./it.js","./ja","./ja.js","./jv","./jv.js","./ka","./ka.js","./kk","./kk.js","./km","./km.js","./kn","./kn.js","./ko","./ko.js","./ky","./ky.js","./lb","./lb.js","./lo","./lo.js","./lt","./lt.js","./lv","./lv.js","./me","./me.js","./mi","./mi.js","./mk","./mk.js","./ml","./ml.js","./mn","./mn.js","./mr","./mr.js","./ms","./ms-my","./ms-my.js","./ms.js","./mt","./mt.js","./my","./my.js","./nb","./nb.js","./ne","./ne.js","./nl","./nl-be","./nl-be.js","./nl.js","./nn","./nn.js","./pa-in","./pa-in.js","./pl","./pl.js","./pt","./pt-br","./pt-br.js","./pt.js","./ro","./ro.js","./ru","./ru.js","./sd","./sd.js","./se","./se.js","./si","./si.js","./sk","./sk.js","./sl","./sl.js","./sq","./sq.js","./sr","./sr-cyrl","./sr-cyrl.js","./sr.js","./sv","./sv.js","./sw","./sw.js","./ta","./ta.js","./te","./te.js","./tet","./tet.js","./tg","./tg.js","./th","./th.js","./tl-ph","./tl-ph.js","./tlh","./tlh.js","./tr","./tzm.js","./ug-cn","./uk","./uk.js","./ur","./ur.js","./uz","./uz-latn","./uz-latn.js","./uz.js","./vi","./vi.js","./x-pseudo","./x-pseudo.js","./yo","./yo.js","./zh-cn","./zh-cn.js","./zh-hk","./zh-tw","./zh-tw.js","webpackContextResolve","req","webpackContext","784","defaultOptions","tagClass","maxTags","confirmKeys","onTagExists","TagsInput","itemsArray","isSelect","tagName","multiple","hasAttribute","objectItems","$container","placeholderText","build","dontPushVal","pushVal","existing","$existingTag","htmlEncode","findInputWrapper","before","inArray","removeAll","isEnabled","nodeType","nodeValue","freeInput","makeOptionItemFunction","makeOptionFunction","processItems","texts","success","$inputWrapper","doGetCaretPosition","$prevTag","$nextTag","inputSize","elt","arg1","arg2","retVal","htmlEncodeContainer","oField","iCaretPos","selection","oSel","createRange","moveStart","selectionStart","785","templates","786","./core/components/help/help.html","./core/components/manage_dashboards/manage_dashboards.html","./core/components/navbar/navbar.html","./core/components/search/search.html","./core/components/search/search_results.html","./features/admin/partials/admin_home.html","./features/admin/partials/edit_org.html","./features/admin/partials/edit_user.html","./features/admin/partials/new_user.html","./features/admin/partials/orgs.html","./features/admin/partials/settings.html","./features/admin/partials/stats.html","./features/admin/partials/styleguide.html","./features/admin/partials/users.html","./features/alerting/partials/alert_howto.html","./features/alerting/partials/alert_tab.html","./features/alerting/partials/notification_edit.html","./features/alerting/partials/notifications_list.html","./features/annotations/partials/editor.html","./features/annotations/partials/event_editor.html","./features/dashboard/dashlinks/editor.html","./features/dashboard/dashnav/dashnav.html","./features/dashboard/export/export_modal.html","./features/dashboard/export_data/export_data_modal.html","./features/dashboard/folder_picker/folder_picker.html","./features/dashboard/history/history.html","./features/dashboard/move_to_folder_modal/move_to_folder.html","./features/dashboard/panellinks/module.html","./features/dashboard/partials/create_folder.html","./features/dashboard/partials/dashboard_import.html","./features/dashboard/partials/folder_dashboards.html","./features/dashboard/partials/folder_permissions.html","./features/dashboard/partials/folder_settings.html","./features/dashboard/partials/inspector.html","./features/dashboard/partials/row_options.html","./features/dashboard/partials/shareModal.html","./features/dashboard/settings/settings.html","./features/dashboard/submenu/submenu.html","./features/dashboard/timepicker/settings.html","./features/dashboard/timepicker/timepicker.html","./features/manage-dashboards/partials/dashboard_list.html","./features/manage-dashboards/partials/snapshot_list.html","./features/org/partials/change_password.html","./features/org/partials/create_team.html","./features/org/partials/invite.html","./features/org/partials/newOrg.html","./features/org/partials/orgDetails.html","./features/org/partials/orgUsers.html","./features/org/partials/profile.html","./features/org/partials/select_org.html","./features/panel/partials/metrics_tab.html","./features/panel/partials/panelTime.html","./features/panel/partials/query_editor_row.html","./features/panel/partials/soloPanel.html","./features/playlist/partials/playlist.html","./features/playlist/partials/playlist_search.html","./features/playlist/partials/playlists.html","./features/plugins/import_list/import_list.html","./features/plugins/partials/ds_dashboards.html","./features/plugins/partials/ds_edit.html","./features/plugins/partials/ds_http_settings.html","./features/plugins/partials/plugin_edit.html","./features/plugins/partials/plugin_page.html","./features/plugins/partials/update_instructions.html","./features/templating/partials/editor.html","./partials/confirm_modal.html","./partials/dashboard.html","./partials/edit_json.html","./partials/error.html","./partials/login.html","./partials/modal.html","./partials/panelgeneral.html","./partials/reset_password.html","./partials/signup_invited.html","./partials/signup_step2.html","./partials/valueSelectDropdown.html","./plugins/datasource/cloudwatch/partials/annotations.editor.html","./plugins/datasource/cloudwatch/partials/config.html","./plugins/datasource/cloudwatch/partials/query.editor.html","./plugins/datasource/cloudwatch/partials/query.parameter.html","./plugins/datasource/elasticsearch/partials/annotations.editor.html","./plugins/datasource/elasticsearch/partials/bucket_agg.html","./plugins/datasource/elasticsearch/partials/config.html","./plugins/datasource/elasticsearch/partials/metric_agg.html","./plugins/datasource/elasticsearch/partials/query.editor.html","./plugins/datasource/grafana-live/partials/query.editor.html","./plugins/datasource/grafana/partials/annotations.editor.html","./plugins/datasource/grafana/partials/query.editor.html","./plugins/datasource/graphite/partials/annotations.editor.html","./plugins/datasource/influxdb/partials/annotations.editor.html","./plugins/datasource/influxdb/partials/config.html","./plugins/datasource/influxdb/partials/query.editor.html","./plugins/datasource/logging/partials/config.html","./plugins/datasource/mssql/partials/annotations.editor.html","./plugins/datasource/mssql/partials/config.html","./plugins/datasource/mssql/partials/query.editor.html","./plugins/datasource/mysql/partials/annotations.editor.html","./plugins/datasource/mysql/partials/config.html","./plugins/datasource/mysql/partials/query.editor.html","./plugins/datasource/opentsdb/partials/annotations.editor.html","./plugins/datasource/opentsdb/partials/config.html","./plugins/datasource/opentsdb/partials/query.editor.html","./plugins/datasource/postgres/partials/annotations.editor.html","./plugins/datasource/postgres/partials/config.html","./plugins/datasource/postgres/partials/query.editor.html","./plugins/datasource/prometheus/partials/annotations.editor.html","./plugins/datasource/prometheus/partials/config.html","./plugins/datasource/prometheus/partials/query.editor.html","./plugins/panel/alertlist/editor.html","./plugins/panel/alertlist/module.html","./plugins/panel/dashlist/editor.html","./plugins/panel/dashlist/module.html","./plugins/panel/heatmap/partials/axes_editor.html","./plugins/panel/heatmap/partials/display_editor.html","./plugins/panel/pluginlist/editor.html","./plugins/panel/pluginlist/module.html","./plugins/panel/text/editor.html","./plugins/panel/text/module.html","./plugins/panel/unknown/module.html","798","799","806","807","808","846","847","848","849","85","DEFAULT_ANNOTATION_COLOR","OK_COLOR","ALERTING_COLOR","NO_DATA_COLOR","REGION_FILL_ALPHA","sortedColors","tinycolor2__WEBPACK_IMPORTED_MODULE_1__","tinycolor2__WEBPACK_IMPORTED_MODULE_1___default","PALETTE_ROWS","toHexString","sortedHSLColors","sortColorsByHue","886","888","889","89","eventemitter3__WEBPACK_IMPORTED_MODULE_0__","Emitter","handler","unbind_1","898","datasources","windowTitlePrefix","newPanelTitle","Settings","906","907","908","909","91","react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_2___default","react_transition_group_Transition__WEBPACK_IMPORTED_MODULE_2__","inProp","maxHeight","exiting","defaultStyle","transitionStyles","922","923","924","925","927","ace","define","isDark","cssText","addApiKey","apiKeysLoaded","stripExtraChars","945","domEvents","attachEvent","setCss","styleElement","styleSheet","outlineFixer","947","__WEBPACK_AMD_DEFINE_FACTORY__","__WEBPACK_AMD_DEFINE_ARRAY__","__WEBPACK_AMD_DEFINE_RESULT__","defaultOpts","beforeShow","showInput","allowEmpty","clickoutFiresChange","showInitial","showPalette","showPaletteOnly","togglePaletteOnly","showSelectionPalette","localStorageKey","maxSelectionSize","cancelText","chooseText","togglePaletteMoreText","togglePaletteLessText","noColorSelectedText","preferredFormat","containerClassName","replacerClassName","palette","selectionPalette","spectrums","IE","navigator","userAgent","rgbaSupport","replaceInput","gradientFix","paletteTemplate","tiny","toHsl","equals","formattedString","swatchStyle","toFilter","callbackContext","callbacks","instanceOptions","resize","wait","throttle","reflow","visible","isDragging","dragWidth","dragHeight","slideHeight","alphaWidth","alphaSlideHelperWidth","slideHelperHeight","currentSaturation","currentAlpha","paletteArray","paletteLookup","draggingClass","shiftMovementDirection","doc","ownerDocument","markup","pickerContainer","dragger","dragHelper","slider","slideHelper","alphaSliderInner","alphaSlider","alphaSlideHelper","paletteContainer","initialColorContainer","clearButton","toggleButton","isInput","boundElement","isInputTypeColor","inputTypeColorSupport","replacer","previewElement","initialColor","colorOnShow","currentPreferredFormat","applyOptions","rgb","updateSelectionPaletteFromStorage","oldPalette","addColorToSelectionPalette","drawPalette","currentColor","unique","reverse","getUniqueSelectionPalette","drawInitial","dragStart","textInput","updateOriginalInput","clickout","updateUI","button","revert","onkeydown","ignoreFormatChange","newHsv","toHsv","currentHue","getFormat","updateHelperLocations","flatColor","fromRatio","realColor","displayColor","realHex","realRgb","alpha","toRgb","realAlpha","gradient","gradientType","dragX","dragY","dragHelperHeight","alphaX","slideY","fireCallback","picker","dpWidth","dpHeight","outerHeight","inputHeight","docElem","viewWidth","clientWidth","clientHeight","getOffset","offsetElement","shouldReplace","setFromTextInput","cancelButton","chooseButton","draggable","dragStop","oldDragX","oldDragY","furtherFromX","setValue","paletteElementClick","ignore","hideAfterPaletteSelect","paletteEvent","spect","optionName","optionValue","coord","onmove","onstart","onstop","dragging","hasTouch","prevent","documentMode","t0","originalEvent","touches","pageY","pageX","maxWidth","duringDragEvents","extra","load","loadOpts","_cachedResult","colorInput","localization","palettes","processNativeColorInputs","colorInputs","trimLeft","trimRight","tinyCounter","math","mathRound","mathMin","mathMax","mathRandom","g","named","names","matchers","rgba","parseIntFromHex","stringInputToObject","bound01","rgbToRgb","ok","convertToPercentage","mod","hsvToRgb","hue2rgb","boundAlpha","inputToRGB","_originalInput","_r","_g","_roundA","_format","_gradientType","_ok","_tc_id","rgbToHsl","rgbToHsv","rgbToHex","allow3Char","pad2","convertDecimalToHex","desaturate","hsl","clamp01","saturate","greyscale","lighten","brighten","darken","spin","hue","triad","tetrad","splitcomplement","analogous","slices","monochromatic","hsv","modification","getBrightness","isLight","getOriginalInput","getAlpha","setAlpha","toHsvString","toHslString","toHex","toHex8","toHex8String","toPercentageRgb","toPercentageRgbString","toName","hexNames","secondColor","secondHex8String","hex8String","formatSet","hasAlpha","needsAlphaFormat","_applyModification","_applyCombination","complement","color1","color2","mix","w1","rgb1","rgb2","w2","readability","c1","c2","brightnessA","brightness","brightnessB","colorDiff","isReadable","mostReadable","baseColor","colorList","bestColor","bestScore","bestIsReadable","readable","aliceblue","antiquewhite","aqua","aquamarine","azure","beige","bisque","black","blanchedalmond","blue","blueviolet","brown","burlywood","burntsienna","cadetblue","chartreuse","chocolate","coral","cornflowerblue","cornsilk","crimson","cyan","darkblue","darkcyan","darkgoldenrod","darkgray","darkgreen","darkgrey","darkkhaki","darkmagenta","darkolivegreen","darkorange","darkorchid","darkred","darksalmon","darkseagreen","darkslateblue","darkslategray","darkslategrey","darkturquoise","darkviolet","deeppink","deepskyblue","dimgray","dimgrey","dodgerblue","firebrick","floralwhite","forestgreen","fuchsia","gainsboro","ghostwhite","gold","goldenrod","gray","green","greenyellow","grey","honeydew","hotpink","indianred","indigo","ivory","khaki","lavender","lavenderblush","lawngreen","lemonchiffon","lightblue","lightcoral","lightcyan","lightgoldenrodyellow","lightgray","lightgreen","lightgrey","lightpink","lightsalmon","lightseagreen","lightskyblue","lightslategray","lightslategrey","lightsteelblue","lightyellow","lime","limegreen","linen","magenta","maroon","mediumaquamarine","mediumblue","mediumorchid","mediumpurple","mediumseagreen","mediumslateblue","mediumspringgreen","mediumturquoise","mediumvioletred","midnightblue","mintcream","moccasin","navajowhite","olive","olivedrab","orangered","orchid","palegoldenrod","palegreen","paleturquoise","palevioletred","papayawhip","peachpuff","peru","pink","powderblue","purple","rebeccapurple","rosybrown","royalblue","saddlebrown","sandybrown","seagreen","sienna","silver","skyblue","slategray","slategrey","springgreen","steelblue","tan","teal","tomato","turquoise","violet","wheat","whitesmoke","yellow","yellowgreen","flipped","flip","isOnePointZero","processPercent","CSS_UNIT","PERMISSIVE_MATCH3","PERMISSIVE_MATCH4","hsla","hsva","hex3","hex6","hex8"],"mappings":"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AC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,gBAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,UAAA,IACAC,aAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,aAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,UAAA,IACAC,OAAA,IACAC,YAAA,IACAC,eAAA,IACAC,UAAA,6BAGAC,OAAA,IACAC,UAAA,IA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","file":"app.4ad1072db19f1dad74f5.js","sourcesContent":[" \t// install a JSONP callback for chunk loading\n \tfunction webpackJsonpCallback(data) {\n \t\tvar chunkIds = data[0];\n \t\tvar moreModules = data[1];\n \t\tvar executeModules = data[2];\n\n \t\t// add \"moreModules\" to the modules object,\n \t\t// then flag all \"chunkIds\" as loaded and fire callback\n \t\tvar moduleId, chunkId, i = 0, resolves = [];\n \t\tfor(;i < chunkIds.length; i++) {\n \t\t\tchunkId = chunkIds[i];\n \t\t\tif(installedChunks[chunkId]) {\n \t\t\t\tresolves.push(installedChunks[chunkId][0]);\n \t\t\t}\n \t\t\tinstalledChunks[chunkId] = 0;\n \t\t}\n \t\tfor(moduleId in moreModules) {\n \t\t\tif(Object.prototype.hasOwnProperty.call(moreModules, moduleId)) {\n \t\t\t\tmodules[moduleId] = moreModules[moduleId];\n \t\t\t}\n \t\t}\n \t\tif(parentJsonpFunction) parentJsonpFunction(data);\n\n \t\twhile(resolves.length) {\n \t\t\tresolves.shift()();\n \t\t}\n\n \t\t// add entry modules from loaded chunk to deferred list\n \t\tdeferredModules.push.apply(deferredModules, executeModules || []);\n\n \t\t// run deferred modules when all chunks ready\n \t\treturn checkDeferredModules();\n \t};\n \tfunction checkDeferredModules() {\n \t\tvar result;\n \t\tfor(var i = 0; i < deferredModules.length; i++) {\n \t\t\tvar deferredModule = deferredModules[i];\n \t\t\tvar fulfilled = true;\n \t\t\tfor(var j = 1; j < deferredModule.length; j++) {\n \t\t\t\tvar depId = deferredModule[j];\n \t\t\t\tif(installedChunks[depId] !== 0) fulfilled = false;\n \t\t\t}\n \t\t\tif(fulfilled) {\n \t\t\t\tdeferredModules.splice(i--, 1);\n \t\t\t\tresult = __webpack_require__(__webpack_require__.s = deferredModule[0]);\n \t\t\t}\n \t\t}\n \t\treturn result;\n \t}\n\n \t// The module cache\n \tvar installedModules = {};\n\n \t// object to store loaded and loading chunks\n \t// undefined = chunk not loaded, null = chunk preloaded/prefetched\n \t// Promise = chunk loading, 0 = chunk loaded\n \tvar installedChunks = {\n \t\t2: 0\n \t};\n\n \tvar deferredModules = [];\n\n \t// script path function\n \tfunction jsonpScriptSrc(chunkId) {\n \t\treturn __webpack_require__.p + \"\" + ({\"6\":\"explore\"}[chunkId]||chunkId) + \".\" + \"4ad1072db19f1dad74f5\" + \".js\"\n \t}\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n \t// This file contains only the entry chunk.\n \t// The chunk loading function for additional chunks\n \t__webpack_require__.e = function requireEnsure(chunkId) {\n \t\tvar promises = [];\n\n\n \t\t// JSONP chunk loading for javascript\n\n \t\tvar installedChunkData = installedChunks[chunkId];\n \t\tif(installedChunkData !== 0) { // 0 means \"already installed\".\n\n \t\t\t// a Promise means \"currently loading\".\n \t\t\tif(installedChunkData) {\n \t\t\t\tpromises.push(installedChunkData[2]);\n \t\t\t} else {\n \t\t\t\t// setup Promise in chunk cache\n \t\t\t\tvar promise = new Promise(function(resolve, reject) {\n \t\t\t\t\tinstalledChunkData = installedChunks[chunkId] = [resolve, reject];\n \t\t\t\t});\n \t\t\t\tpromises.push(installedChunkData[2] = promise);\n\n \t\t\t\t// start chunk loading\n \t\t\t\tvar head = document.getElementsByTagName('head')[0];\n \t\t\t\tvar script = document.createElement('script');\n \t\t\t\tvar onScriptComplete;\n\n \t\t\t\tscript.charset = 'utf-8';\n \t\t\t\tscript.timeout = 120;\n \t\t\t\tif (__webpack_require__.nc) {\n \t\t\t\t\tscript.setAttribute(\"nonce\", __webpack_require__.nc);\n \t\t\t\t}\n \t\t\t\tscript.src = jsonpScriptSrc(chunkId);\n\n \t\t\t\tonScriptComplete = function (event) {\n \t\t\t\t\t// avoid mem leaks in IE.\n \t\t\t\t\tscript.onerror = script.onload = null;\n \t\t\t\t\tclearTimeout(timeout);\n \t\t\t\t\tvar chunk = installedChunks[chunkId];\n \t\t\t\t\tif(chunk !== 0) {\n \t\t\t\t\t\tif(chunk) {\n \t\t\t\t\t\t\tvar errorType = event && (event.type === 'load' ? 'missing' : event.type);\n \t\t\t\t\t\t\tvar realSrc = event && event.target && event.target.src;\n \t\t\t\t\t\t\tvar error = new Error('Loading chunk ' + chunkId + ' failed.\\n(' + errorType + ': ' + realSrc + ')');\n \t\t\t\t\t\t\terror.type = errorType;\n \t\t\t\t\t\t\terror.request = realSrc;\n \t\t\t\t\t\t\tchunk[1](error);\n \t\t\t\t\t\t}\n \t\t\t\t\t\tinstalledChunks[chunkId] = undefined;\n \t\t\t\t\t}\n \t\t\t\t};\n \t\t\t\tvar timeout = setTimeout(function(){\n \t\t\t\t\tonScriptComplete({ type: 'timeout', target: script });\n \t\t\t\t}, 120000);\n \t\t\t\tscript.onerror = script.onload = onScriptComplete;\n \t\t\t\thead.appendChild(script);\n \t\t\t}\n \t\t}\n \t\treturn Promise.all(promises);\n \t};\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"public/build/\";\n\n \t// on error function for async loading\n \t__webpack_require__.oe = function(err) { console.error(err); throw err; };\n\n \tvar jsonpArray = window[\"webpackJsonp\"] = window[\"webpackJsonp\"] || [];\n \tvar oldJsonpFunction = jsonpArray.push.bind(jsonpArray);\n \tjsonpArray.push = webpackJsonpCallback;\n \tjsonpArray = jsonpArray.slice();\n \tfor(var i = 0; i < jsonpArray.length; i++) webpackJsonpCallback(jsonpArray[i]);\n \tvar parentJsonpFunction = oldJsonpFunction;\n\n\n \t// add entry module to deferred list\n \tdeferredModules.push([1222,0]);\n \t// run deferred modules when ready\n \treturn checkDeferredModules();\n","import { getBackendSrv } from 'app/core/services/backend_srv';\nimport { AlertRuleDTO, StoreState } from 'app/types';\nimport { ThunkAction } from 'redux-thunk';\n\nexport enum ActionTypes {\n LoadAlertRules = 'LOAD_ALERT_RULES',\n SetSearchQuery = 'SET_ALERT_SEARCH_QUERY',\n}\n\nexport interface LoadAlertRulesAction {\n type: ActionTypes.LoadAlertRules;\n payload: AlertRuleDTO[];\n}\n\nexport interface SetSearchQueryAction {\n type: ActionTypes.SetSearchQuery;\n payload: string;\n}\n\nexport const loadAlertRules = (rules: AlertRuleDTO[]): LoadAlertRulesAction => ({\n type: ActionTypes.LoadAlertRules,\n payload: rules,\n});\n\nexport const setSearchQuery = (query: string): SetSearchQueryAction => ({\n type: ActionTypes.SetSearchQuery,\n payload: query,\n});\n\nexport type Action = LoadAlertRulesAction | SetSearchQueryAction;\n\ntype ThunkResult = ThunkAction;\n\nexport function getAlertRulesAsync(options: { state: string }): ThunkResult {\n return async dispatch => {\n const rules = await getBackendSrv().get('/api/alerts', options);\n dispatch(loadAlertRules(rules));\n };\n}\n\nexport function togglePauseAlertRule(id: number, options: { paused: boolean }): ThunkResult {\n return async (dispatch, getState) => {\n await getBackendSrv().post(`/api/alerts/${id}/pause`, options);\n const stateFilter = getState().location.query.state || 'all';\n dispatch(getAlertRulesAsync({ state: stateFilter.toString() }));\n };\n}\n","export const getDataSources = state => {\n const regex = new RegExp(state.searchQuery, 'i');\n\n return state.dataSources.filter(dataSource => {\n return regex.test(dataSource.name) || regex.test(dataSource.database);\n });\n};\n\nexport const getDataSourcesSearchQuery = state => state.searchQuery;\nexport const getDataSourcesLayoutMode = state => state.layoutMode;\nexport const getDataSourcesCount = state => state.dataSourcesCount;\n","import _ from 'lodash';\nimport moment from 'moment';\n\nconst kbn: any = {};\n\nkbn.valueFormats = {};\n\nkbn.regexEscape = value => {\n return value.replace(/[\\\\^$*+?.()|[\\]{}\\/]/g, '\\\\$&');\n};\n\n///// HELPER FUNCTIONS /////\n\nkbn.round_interval = interval => {\n switch (true) {\n // 0.015s\n case interval < 15:\n return 10; // 0.01s\n // 0.035s\n case interval < 35:\n return 20; // 0.02s\n // 0.075s\n case interval < 75:\n return 50; // 0.05s\n // 0.15s\n case interval < 150:\n return 100; // 0.1s\n // 0.35s\n case interval < 350:\n return 200; // 0.2s\n // 0.75s\n case interval < 750:\n return 500; // 0.5s\n // 1.5s\n case interval < 1500:\n return 1000; // 1s\n // 3.5s\n case interval < 3500:\n return 2000; // 2s\n // 7.5s\n case interval < 7500:\n return 5000; // 5s\n // 12.5s\n case interval < 12500:\n return 10000; // 10s\n // 17.5s\n case interval < 17500:\n return 15000; // 15s\n // 25s\n case interval < 25000:\n return 20000; // 20s\n // 45s\n case interval < 45000:\n return 30000; // 30s\n // 1.5m\n case interval < 90000:\n return 60000; // 1m\n // 3.5m\n case interval < 210000:\n return 120000; // 2m\n // 7.5m\n case interval < 450000:\n return 300000; // 5m\n // 12.5m\n case interval < 750000:\n return 600000; // 10m\n // 12.5m\n case interval < 1050000:\n return 900000; // 15m\n // 25m\n case interval < 1500000:\n return 1200000; // 20m\n // 45m\n case interval < 2700000:\n return 1800000; // 30m\n // 1.5h\n case interval < 5400000:\n return 3600000; // 1h\n // 2.5h\n case interval < 9000000:\n return 7200000; // 2h\n // 4.5h\n case interval < 16200000:\n return 10800000; // 3h\n // 9h\n case interval < 32400000:\n return 21600000; // 6h\n // 1d\n case interval < 86400000:\n return 43200000; // 12h\n // 1w\n case interval < 604800000:\n return 86400000; // 1d\n // 3w\n case interval < 1814400000:\n return 604800000; // 1w\n // 6w\n case interval < 3628800000:\n return 2592000000; // 30d\n default:\n return 31536000000; // 1y\n }\n};\n\nkbn.secondsToHms = seconds => {\n const numyears = Math.floor(seconds / 31536000);\n if (numyears) {\n return numyears + 'y';\n }\n const numdays = Math.floor((seconds % 31536000) / 86400);\n if (numdays) {\n return numdays + 'd';\n }\n const numhours = Math.floor(((seconds % 31536000) % 86400) / 3600);\n if (numhours) {\n return numhours + 'h';\n }\n const numminutes = Math.floor((((seconds % 31536000) % 86400) % 3600) / 60);\n if (numminutes) {\n return numminutes + 'm';\n }\n const numseconds = Math.floor((((seconds % 31536000) % 86400) % 3600) % 60);\n if (numseconds) {\n return numseconds + 's';\n }\n const nummilliseconds = Math.floor(seconds * 1000.0);\n if (nummilliseconds) {\n return nummilliseconds + 'ms';\n }\n\n return 'less than a millisecond'; //'just now' //or other string you like;\n};\n\nkbn.secondsToHhmmss = seconds => {\n const strings = [];\n const numhours = Math.floor(seconds / 3600);\n const numminutes = Math.floor((seconds % 3600) / 60);\n const numseconds = Math.floor((seconds % 3600) % 60);\n numhours > 9 ? strings.push('' + numhours) : strings.push('0' + numhours);\n numminutes > 9 ? strings.push('' + numminutes) : strings.push('0' + numminutes);\n numseconds > 9 ? strings.push('' + numseconds) : strings.push('0' + numseconds);\n return strings.join(':');\n};\n\nkbn.to_percent = (nr, outof) => {\n return Math.floor(nr / outof * 10000) / 100 + '%';\n};\n\nkbn.addslashes = str => {\n str = str.replace(/\\\\/g, '\\\\\\\\');\n str = str.replace(/\\'/g, \"\\\\'\");\n str = str.replace(/\\\"/g, '\\\\\"');\n str = str.replace(/\\0/g, '\\\\0');\n return str;\n};\n\nkbn.interval_regex = /(\\d+(?:\\.\\d+)?)(ms|[Mwdhmsy])/;\n\n// histogram & trends\nkbn.intervals_in_seconds = {\n y: 31536000,\n M: 2592000,\n w: 604800,\n d: 86400,\n h: 3600,\n m: 60,\n s: 1,\n ms: 0.001,\n};\n\nkbn.calculateInterval = (range, resolution, lowLimitInterval) => {\n let lowLimitMs = 1; // 1 millisecond default low limit\n let intervalMs;\n\n if (lowLimitInterval) {\n if (lowLimitInterval[0] === '>') {\n lowLimitInterval = lowLimitInterval.slice(1);\n }\n lowLimitMs = kbn.interval_to_ms(lowLimitInterval);\n }\n\n intervalMs = kbn.round_interval((range.to.valueOf() - range.from.valueOf()) / resolution);\n if (lowLimitMs > intervalMs) {\n intervalMs = lowLimitMs;\n }\n\n return {\n intervalMs: intervalMs,\n interval: kbn.secondsToHms(intervalMs / 1000),\n };\n};\n\nkbn.describe_interval = str => {\n const matches = str.match(kbn.interval_regex);\n if (!matches || !_.has(kbn.intervals_in_seconds, matches[2])) {\n throw new Error('Invalid interval string, expecting a number followed by one of \"Mwdhmsy\"');\n } else {\n return {\n sec: kbn.intervals_in_seconds[matches[2]],\n type: matches[2],\n count: parseInt(matches[1], 10),\n };\n }\n};\n\nkbn.interval_to_ms = str => {\n const info = kbn.describe_interval(str);\n return info.sec * 1000 * info.count;\n};\n\nkbn.interval_to_seconds = str => {\n const info = kbn.describe_interval(str);\n return info.sec * info.count;\n};\n\nkbn.query_color_dot = (color, diameter) => {\n return (\n '
'\n );\n};\n\nkbn.slugifyForUrl = str => {\n return str\n .toLowerCase()\n .replace(/[^\\w ]+/g, '')\n .replace(/ +/g, '-');\n};\n\nkbn.stringToJsRegex = str => {\n if (str[0] !== '/') {\n return new RegExp('^' + str + '$');\n }\n\n const match = str.match(new RegExp('^/(.*?)/(g?i?m?y?)$'));\n return new RegExp(match[1], match[2]);\n};\n\nkbn.toFixed = (value, decimals) => {\n if (value === null) {\n return '';\n }\n\n const factor = decimals ? Math.pow(10, Math.max(0, decimals)) : 1;\n const formatted = String(Math.round(value * factor) / factor);\n\n // if exponent return directly\n if (formatted.indexOf('e') !== -1 || value === 0) {\n return formatted;\n }\n\n // If tickDecimals was specified, ensure that we have exactly that\n // much precision; otherwise default to the value's own precision.\n if (decimals != null) {\n const decimalPos = formatted.indexOf('.');\n const precision = decimalPos === -1 ? 0 : formatted.length - decimalPos - 1;\n if (precision < decimals) {\n return (precision ? formatted : formatted + '.') + String(factor).substr(1, decimals - precision);\n }\n }\n\n return formatted;\n};\n\nkbn.toFixedScaled = (value, decimals, scaledDecimals, additionalDecimals, ext) => {\n if (scaledDecimals === null) {\n return kbn.toFixed(value, decimals) + ext;\n } else {\n return kbn.toFixed(value, scaledDecimals + additionalDecimals) + ext;\n }\n};\n\nkbn.roundValue = (num, decimals) => {\n if (num === null) {\n return null;\n }\n const n = Math.pow(10, decimals);\n const formatted = (n * num).toFixed(decimals);\n return Math.round(parseFloat(formatted)) / n;\n};\n\n///// FORMAT FUNCTION CONSTRUCTORS /////\n\nkbn.formatBuilders = {};\n\n// Formatter which always appends a fixed unit string to the value. No\n// scaling of the value is performed.\nkbn.formatBuilders.fixedUnit = unit => {\n return (size, decimals) => {\n if (size === null) {\n return '';\n }\n return kbn.toFixed(size, decimals) + ' ' + unit;\n };\n};\n\n// Formatter which scales the unit string geometrically according to the given\n// numeric factor. Repeatedly scales the value down by the factor until it is\n// less than the factor in magnitude, or the end of the array is reached.\nkbn.formatBuilders.scaledUnits = (factor, extArray) => {\n return (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n let steps = 0;\n const limit = extArray.length;\n\n while (Math.abs(size) >= factor) {\n steps++;\n size /= factor;\n\n if (steps >= limit) {\n return 'NA';\n }\n }\n\n if (steps > 0 && scaledDecimals !== null) {\n decimals = scaledDecimals + 3 * steps;\n }\n\n return kbn.toFixed(size, decimals) + extArray[steps];\n };\n};\n\n// Extension of the scaledUnits builder which uses SI decimal prefixes. If an\n// offset is given, it adjusts the starting units at the given prefix; a value\n// of 0 starts at no scale; -3 drops to nano, +2 starts at mega, etc.\nkbn.formatBuilders.decimalSIPrefix = (unit, offset) => {\n let prefixes = ['n', 'µ', 'm', '', 'k', 'M', 'G', 'T', 'P', 'E', 'Z', 'Y'];\n prefixes = prefixes.slice(3 + (offset || 0));\n const units = prefixes.map(p => {\n return ' ' + p + unit;\n });\n return kbn.formatBuilders.scaledUnits(1000, units);\n};\n\n// Extension of the scaledUnits builder which uses SI binary prefixes. If\n// offset is given, it starts the units at the given prefix; otherwise, the\n// offset defaults to zero and the initial unit is not prefixed.\nkbn.formatBuilders.binarySIPrefix = (unit, offset) => {\n const prefixes = ['', 'Ki', 'Mi', 'Gi', 'Ti', 'Pi', 'Ei', 'Zi', 'Yi'].slice(offset);\n const units = prefixes.map(p => {\n return ' ' + p + unit;\n });\n return kbn.formatBuilders.scaledUnits(1024, units);\n};\n\n// Currency formatter for prefixing a symbol onto a number. Supports scaling\n// up to the trillions.\nkbn.formatBuilders.currency = symbol => {\n const units = ['', 'K', 'M', 'B', 'T'];\n const scaler = kbn.formatBuilders.scaledUnits(1000, units);\n return (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n const scaled = scaler(size, decimals, scaledDecimals);\n return symbol + scaled;\n };\n};\n\nkbn.formatBuilders.simpleCountUnit = symbol => {\n const units = ['', 'K', 'M', 'B', 'T'];\n const scaler = kbn.formatBuilders.scaledUnits(1000, units);\n return (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n const scaled = scaler(size, decimals, scaledDecimals);\n return scaled + ' ' + symbol;\n };\n};\n\n///// VALUE FORMATS /////\n\n// Dimensionless Units\nkbn.valueFormats.none = kbn.toFixed;\nkbn.valueFormats.short = kbn.formatBuilders.scaledUnits(1000, [\n '',\n ' K',\n ' Mil',\n ' Bil',\n ' Tri',\n ' Quadr',\n ' Quint',\n ' Sext',\n ' Sept',\n]);\nkbn.valueFormats.dB = kbn.formatBuilders.fixedUnit('dB');\n\nkbn.valueFormats.percent = (size, decimals) => {\n if (size === null) {\n return '';\n }\n return kbn.toFixed(size, decimals) + '%';\n};\n\nkbn.valueFormats.percentunit = (size, decimals) => {\n if (size === null) {\n return '';\n }\n return kbn.toFixed(100 * size, decimals) + '%';\n};\n\n/* Formats the value to hex. Uses float if specified decimals are not 0.\n * There are two options, one with 0x, and one without */\n\nkbn.valueFormats.hex = (value, decimals) => {\n if (value == null) {\n return '';\n }\n return parseFloat(kbn.toFixed(value, decimals))\n .toString(16)\n .toUpperCase();\n};\n\nkbn.valueFormats.hex0x = (value, decimals) => {\n if (value == null) {\n return '';\n }\n const hexString = kbn.valueFormats.hex(value, decimals);\n if (hexString.substring(0, 1) === '-') {\n return '-0x' + hexString.substring(1);\n }\n return '0x' + hexString;\n};\n\nkbn.valueFormats.sci = (value, decimals) => {\n return value.toExponential(decimals);\n};\n\nkbn.valueFormats.locale = (value, decimals) => {\n return value.toLocaleString(undefined, { maximumFractionDigits: decimals });\n};\n\n// Currencies\nkbn.valueFormats.currencyUSD = kbn.formatBuilders.currency('$');\nkbn.valueFormats.currencyGBP = kbn.formatBuilders.currency('£');\nkbn.valueFormats.currencyEUR = kbn.formatBuilders.currency('€');\nkbn.valueFormats.currencyJPY = kbn.formatBuilders.currency('¥');\nkbn.valueFormats.currencyRUB = kbn.formatBuilders.currency('₽');\nkbn.valueFormats.currencyUAH = kbn.formatBuilders.currency('₴');\nkbn.valueFormats.currencyBRL = kbn.formatBuilders.currency('R$');\nkbn.valueFormats.currencyDKK = kbn.formatBuilders.currency('kr');\nkbn.valueFormats.currencyISK = kbn.formatBuilders.currency('kr');\nkbn.valueFormats.currencyNOK = kbn.formatBuilders.currency('kr');\nkbn.valueFormats.currencySEK = kbn.formatBuilders.currency('kr');\nkbn.valueFormats.currencyCZK = kbn.formatBuilders.currency('czk');\nkbn.valueFormats.currencyCHF = kbn.formatBuilders.currency('CHF');\nkbn.valueFormats.currencyPLN = kbn.formatBuilders.currency('zł');\nkbn.valueFormats.currencyBTC = kbn.formatBuilders.currency('฿');\n\n// Data (Binary)\nkbn.valueFormats.bits = kbn.formatBuilders.binarySIPrefix('b');\nkbn.valueFormats.bytes = kbn.formatBuilders.binarySIPrefix('B');\nkbn.valueFormats.kbytes = kbn.formatBuilders.binarySIPrefix('B', 1);\nkbn.valueFormats.mbytes = kbn.formatBuilders.binarySIPrefix('B', 2);\nkbn.valueFormats.gbytes = kbn.formatBuilders.binarySIPrefix('B', 3);\n\n// Data (Decimal)\nkbn.valueFormats.decbits = kbn.formatBuilders.decimalSIPrefix('b');\nkbn.valueFormats.decbytes = kbn.formatBuilders.decimalSIPrefix('B');\nkbn.valueFormats.deckbytes = kbn.formatBuilders.decimalSIPrefix('B', 1);\nkbn.valueFormats.decmbytes = kbn.formatBuilders.decimalSIPrefix('B', 2);\nkbn.valueFormats.decgbytes = kbn.formatBuilders.decimalSIPrefix('B', 3);\n\n// Data Rate\nkbn.valueFormats.pps = kbn.formatBuilders.decimalSIPrefix('pps');\nkbn.valueFormats.bps = kbn.formatBuilders.decimalSIPrefix('bps');\nkbn.valueFormats.Bps = kbn.formatBuilders.decimalSIPrefix('B/s');\nkbn.valueFormats.KBs = kbn.formatBuilders.decimalSIPrefix('Bs', 1);\nkbn.valueFormats.Kbits = kbn.formatBuilders.decimalSIPrefix('bps', 1);\nkbn.valueFormats.MBs = kbn.formatBuilders.decimalSIPrefix('Bs', 2);\nkbn.valueFormats.Mbits = kbn.formatBuilders.decimalSIPrefix('bps', 2);\nkbn.valueFormats.GBs = kbn.formatBuilders.decimalSIPrefix('Bs', 3);\nkbn.valueFormats.Gbits = kbn.formatBuilders.decimalSIPrefix('bps', 3);\n\n// Hash Rate\nkbn.valueFormats.Hs = kbn.formatBuilders.decimalSIPrefix('H/s');\nkbn.valueFormats.KHs = kbn.formatBuilders.decimalSIPrefix('H/s', 1);\nkbn.valueFormats.MHs = kbn.formatBuilders.decimalSIPrefix('H/s', 2);\nkbn.valueFormats.GHs = kbn.formatBuilders.decimalSIPrefix('H/s', 3);\nkbn.valueFormats.THs = kbn.formatBuilders.decimalSIPrefix('H/s', 4);\nkbn.valueFormats.PHs = kbn.formatBuilders.decimalSIPrefix('H/s', 5);\nkbn.valueFormats.EHs = kbn.formatBuilders.decimalSIPrefix('H/s', 6);\n\n// Throughput\nkbn.valueFormats.ops = kbn.formatBuilders.simpleCountUnit('ops');\nkbn.valueFormats.reqps = kbn.formatBuilders.simpleCountUnit('reqps');\nkbn.valueFormats.rps = kbn.formatBuilders.simpleCountUnit('rps');\nkbn.valueFormats.wps = kbn.formatBuilders.simpleCountUnit('wps');\nkbn.valueFormats.iops = kbn.formatBuilders.simpleCountUnit('iops');\nkbn.valueFormats.opm = kbn.formatBuilders.simpleCountUnit('opm');\nkbn.valueFormats.rpm = kbn.formatBuilders.simpleCountUnit('rpm');\nkbn.valueFormats.wpm = kbn.formatBuilders.simpleCountUnit('wpm');\n\n// Energy\nkbn.valueFormats.watt = kbn.formatBuilders.decimalSIPrefix('W');\nkbn.valueFormats.kwatt = kbn.formatBuilders.decimalSIPrefix('W', 1);\nkbn.valueFormats.mwatt = kbn.formatBuilders.decimalSIPrefix('W', -1);\nkbn.valueFormats.kwattm = kbn.formatBuilders.decimalSIPrefix('W/Min', 1);\nkbn.valueFormats.Wm2 = kbn.formatBuilders.fixedUnit('W/m²');\nkbn.valueFormats.voltamp = kbn.formatBuilders.decimalSIPrefix('VA');\nkbn.valueFormats.kvoltamp = kbn.formatBuilders.decimalSIPrefix('VA', 1);\nkbn.valueFormats.voltampreact = kbn.formatBuilders.decimalSIPrefix('var');\nkbn.valueFormats.kvoltampreact = kbn.formatBuilders.decimalSIPrefix('var', 1);\nkbn.valueFormats.watth = kbn.formatBuilders.decimalSIPrefix('Wh');\nkbn.valueFormats.kwatth = kbn.formatBuilders.decimalSIPrefix('Wh', 1);\nkbn.valueFormats.joule = kbn.formatBuilders.decimalSIPrefix('J');\nkbn.valueFormats.ev = kbn.formatBuilders.decimalSIPrefix('eV');\nkbn.valueFormats.amp = kbn.formatBuilders.decimalSIPrefix('A');\nkbn.valueFormats.kamp = kbn.formatBuilders.decimalSIPrefix('A', 1);\nkbn.valueFormats.mamp = kbn.formatBuilders.decimalSIPrefix('A', -1);\nkbn.valueFormats.volt = kbn.formatBuilders.decimalSIPrefix('V');\nkbn.valueFormats.kvolt = kbn.formatBuilders.decimalSIPrefix('V', 1);\nkbn.valueFormats.mvolt = kbn.formatBuilders.decimalSIPrefix('V', -1);\nkbn.valueFormats.dBm = kbn.formatBuilders.decimalSIPrefix('dBm');\nkbn.valueFormats.ohm = kbn.formatBuilders.decimalSIPrefix('Ω');\nkbn.valueFormats.lumens = kbn.formatBuilders.decimalSIPrefix('Lm');\n\n// Temperature\nkbn.valueFormats.celsius = kbn.formatBuilders.fixedUnit('°C');\nkbn.valueFormats.farenheit = kbn.formatBuilders.fixedUnit('°F');\nkbn.valueFormats.kelvin = kbn.formatBuilders.fixedUnit('K');\nkbn.valueFormats.humidity = kbn.formatBuilders.fixedUnit('%H');\n\n// Pressure\nkbn.valueFormats.pressurebar = kbn.formatBuilders.decimalSIPrefix('bar');\nkbn.valueFormats.pressurembar = kbn.formatBuilders.decimalSIPrefix('bar', -1);\nkbn.valueFormats.pressurekbar = kbn.formatBuilders.decimalSIPrefix('bar', 1);\nkbn.valueFormats.pressurehpa = kbn.formatBuilders.fixedUnit('hPa');\nkbn.valueFormats.pressurekpa = kbn.formatBuilders.fixedUnit('kPa');\nkbn.valueFormats.pressurehg = kbn.formatBuilders.fixedUnit('\"Hg');\nkbn.valueFormats.pressurepsi = kbn.formatBuilders.scaledUnits(1000, [' psi', ' ksi', ' Mpsi']);\n\n// Force\nkbn.valueFormats.forceNm = kbn.formatBuilders.decimalSIPrefix('Nm');\nkbn.valueFormats.forcekNm = kbn.formatBuilders.decimalSIPrefix('Nm', 1);\nkbn.valueFormats.forceN = kbn.formatBuilders.decimalSIPrefix('N');\nkbn.valueFormats.forcekN = kbn.formatBuilders.decimalSIPrefix('N', 1);\n\n// Length\nkbn.valueFormats.lengthm = kbn.formatBuilders.decimalSIPrefix('m');\nkbn.valueFormats.lengthmm = kbn.formatBuilders.decimalSIPrefix('m', -1);\nkbn.valueFormats.lengthkm = kbn.formatBuilders.decimalSIPrefix('m', 1);\nkbn.valueFormats.lengthmi = kbn.formatBuilders.fixedUnit('mi');\nkbn.valueFormats.lengthft = kbn.formatBuilders.fixedUnit('ft');\n\n// Area\nkbn.valueFormats.areaM2 = kbn.formatBuilders.fixedUnit('m²');\nkbn.valueFormats.areaF2 = kbn.formatBuilders.fixedUnit('ft²');\nkbn.valueFormats.areaMI2 = kbn.formatBuilders.fixedUnit('mi²');\n\n// Mass\nkbn.valueFormats.massmg = kbn.formatBuilders.decimalSIPrefix('g', -1);\nkbn.valueFormats.massg = kbn.formatBuilders.decimalSIPrefix('g');\nkbn.valueFormats.masskg = kbn.formatBuilders.decimalSIPrefix('g', 1);\nkbn.valueFormats.masst = kbn.formatBuilders.fixedUnit('t');\n\n// Velocity\nkbn.valueFormats.velocityms = kbn.formatBuilders.fixedUnit('m/s');\nkbn.valueFormats.velocitykmh = kbn.formatBuilders.fixedUnit('km/h');\nkbn.valueFormats.velocitymph = kbn.formatBuilders.fixedUnit('mph');\nkbn.valueFormats.velocityknot = kbn.formatBuilders.fixedUnit('kn');\n\n// Acceleration\nkbn.valueFormats.accMS2 = kbn.formatBuilders.fixedUnit('m/sec²');\nkbn.valueFormats.accFS2 = kbn.formatBuilders.fixedUnit('f/sec²');\nkbn.valueFormats.accG = kbn.formatBuilders.fixedUnit('g');\n\n// Volume\nkbn.valueFormats.litre = kbn.formatBuilders.decimalSIPrefix('L');\nkbn.valueFormats.mlitre = kbn.formatBuilders.decimalSIPrefix('L', -1);\nkbn.valueFormats.m3 = kbn.formatBuilders.fixedUnit('m³');\nkbn.valueFormats.Nm3 = kbn.formatBuilders.fixedUnit('Nm³');\nkbn.valueFormats.dm3 = kbn.formatBuilders.fixedUnit('dm³');\nkbn.valueFormats.gallons = kbn.formatBuilders.fixedUnit('gal');\n\n// Flow\nkbn.valueFormats.flowgpm = kbn.formatBuilders.fixedUnit('gpm');\nkbn.valueFormats.flowcms = kbn.formatBuilders.fixedUnit('cms');\nkbn.valueFormats.flowcfs = kbn.formatBuilders.fixedUnit('cfs');\nkbn.valueFormats.flowcfm = kbn.formatBuilders.fixedUnit('cfm');\nkbn.valueFormats.litreh = kbn.formatBuilders.fixedUnit('l/h');\nkbn.valueFormats.flowlpm = kbn.formatBuilders.decimalSIPrefix('L');\nkbn.valueFormats.flowmlpm = kbn.formatBuilders.decimalSIPrefix('L', -1);\n\n// Angle\nkbn.valueFormats.degree = kbn.formatBuilders.fixedUnit('°');\nkbn.valueFormats.radian = kbn.formatBuilders.fixedUnit('rad');\nkbn.valueFormats.grad = kbn.formatBuilders.fixedUnit('grad');\n\n// Radiation\nkbn.valueFormats.radbq = kbn.formatBuilders.decimalSIPrefix('Bq');\nkbn.valueFormats.radci = kbn.formatBuilders.decimalSIPrefix('Ci');\nkbn.valueFormats.radgy = kbn.formatBuilders.decimalSIPrefix('Gy');\nkbn.valueFormats.radrad = kbn.formatBuilders.decimalSIPrefix('rad');\nkbn.valueFormats.radsv = kbn.formatBuilders.decimalSIPrefix('Sv');\nkbn.valueFormats.radrem = kbn.formatBuilders.decimalSIPrefix('rem');\nkbn.valueFormats.radexpckg = kbn.formatBuilders.decimalSIPrefix('C/kg');\nkbn.valueFormats.radr = kbn.formatBuilders.decimalSIPrefix('R');\nkbn.valueFormats.radsvh = kbn.formatBuilders.decimalSIPrefix('Sv/h');\n\n// Concentration\nkbn.valueFormats.ppm = kbn.formatBuilders.fixedUnit('ppm');\nkbn.valueFormats.conppb = kbn.formatBuilders.fixedUnit('ppb');\nkbn.valueFormats.conngm3 = kbn.formatBuilders.fixedUnit('ng/m³');\nkbn.valueFormats.conngNm3 = kbn.formatBuilders.fixedUnit('ng/Nm³');\nkbn.valueFormats.conμgm3 = kbn.formatBuilders.fixedUnit('μg/m³');\nkbn.valueFormats.conμgNm3 = kbn.formatBuilders.fixedUnit('μg/Nm³');\nkbn.valueFormats.conmgm3 = kbn.formatBuilders.fixedUnit('mg/m³');\nkbn.valueFormats.conmgNm3 = kbn.formatBuilders.fixedUnit('mg/Nm³');\nkbn.valueFormats.congm3 = kbn.formatBuilders.fixedUnit('g/m³');\nkbn.valueFormats.congNm3 = kbn.formatBuilders.fixedUnit('g/Nm³');\n\n// Time\nkbn.valueFormats.hertz = kbn.formatBuilders.decimalSIPrefix('Hz');\n\nkbn.valueFormats.ms = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 1000) {\n return kbn.toFixed(size, decimals) + ' ms';\n } else if (Math.abs(size) < 60000) {\n // Less than 1 min\n return kbn.toFixedScaled(size / 1000, decimals, scaledDecimals, 3, ' s');\n } else if (Math.abs(size) < 3600000) {\n // Less than 1 hour, divide in minutes\n return kbn.toFixedScaled(size / 60000, decimals, scaledDecimals, 5, ' min');\n } else if (Math.abs(size) < 86400000) {\n // Less than one day, divide in hours\n return kbn.toFixedScaled(size / 3600000, decimals, scaledDecimals, 7, ' hour');\n } else if (Math.abs(size) < 31536000000) {\n // Less than one year, divide in days\n return kbn.toFixedScaled(size / 86400000, decimals, scaledDecimals, 8, ' day');\n }\n\n return kbn.toFixedScaled(size / 31536000000, decimals, scaledDecimals, 10, ' year');\n};\n\nkbn.valueFormats.s = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n // Less than 1 µs, divide in ns\n if (Math.abs(size) < 0.000001) {\n return kbn.toFixedScaled(size * 1e9, decimals, scaledDecimals - decimals, -9, ' ns');\n }\n // Less than 1 ms, divide in µs\n if (Math.abs(size) < 0.001) {\n return kbn.toFixedScaled(size * 1e6, decimals, scaledDecimals - decimals, -6, ' µs');\n }\n // Less than 1 second, divide in ms\n if (Math.abs(size) < 1) {\n return kbn.toFixedScaled(size * 1e3, decimals, scaledDecimals - decimals, -3, ' ms');\n }\n\n if (Math.abs(size) < 60) {\n return kbn.toFixed(size, decimals) + ' s';\n } else if (Math.abs(size) < 3600) {\n // Less than 1 hour, divide in minutes\n return kbn.toFixedScaled(size / 60, decimals, scaledDecimals, 1, ' min');\n } else if (Math.abs(size) < 86400) {\n // Less than one day, divide in hours\n return kbn.toFixedScaled(size / 3600, decimals, scaledDecimals, 4, ' hour');\n } else if (Math.abs(size) < 604800) {\n // Less than one week, divide in days\n return kbn.toFixedScaled(size / 86400, decimals, scaledDecimals, 5, ' day');\n } else if (Math.abs(size) < 31536000) {\n // Less than one year, divide in week\n return kbn.toFixedScaled(size / 604800, decimals, scaledDecimals, 6, ' week');\n }\n\n return kbn.toFixedScaled(size / 3.15569e7, decimals, scaledDecimals, 7, ' year');\n};\n\nkbn.valueFormats['µs'] = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 1000) {\n return kbn.toFixed(size, decimals) + ' µs';\n } else if (Math.abs(size) < 1000000) {\n return kbn.toFixedScaled(size / 1000, decimals, scaledDecimals, 3, ' ms');\n } else {\n return kbn.toFixedScaled(size / 1000000, decimals, scaledDecimals, 6, ' s');\n }\n};\n\nkbn.valueFormats.ns = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 1000) {\n return kbn.toFixed(size, decimals) + ' ns';\n } else if (Math.abs(size) < 1000000) {\n return kbn.toFixedScaled(size / 1000, decimals, scaledDecimals, 3, ' µs');\n } else if (Math.abs(size) < 1000000000) {\n return kbn.toFixedScaled(size / 1000000, decimals, scaledDecimals, 6, ' ms');\n } else if (Math.abs(size) < 60000000000) {\n return kbn.toFixedScaled(size / 1000000000, decimals, scaledDecimals, 9, ' s');\n } else {\n return kbn.toFixedScaled(size / 60000000000, decimals, scaledDecimals, 12, ' min');\n }\n};\n\nkbn.valueFormats.m = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 60) {\n return kbn.toFixed(size, decimals) + ' min';\n } else if (Math.abs(size) < 1440) {\n return kbn.toFixedScaled(size / 60, decimals, scaledDecimals, 2, ' hour');\n } else if (Math.abs(size) < 10080) {\n return kbn.toFixedScaled(size / 1440, decimals, scaledDecimals, 3, ' day');\n } else if (Math.abs(size) < 604800) {\n return kbn.toFixedScaled(size / 10080, decimals, scaledDecimals, 4, ' week');\n } else {\n return kbn.toFixedScaled(size / 5.25948e5, decimals, scaledDecimals, 5, ' year');\n }\n};\n\nkbn.valueFormats.h = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 24) {\n return kbn.toFixed(size, decimals) + ' hour';\n } else if (Math.abs(size) < 168) {\n return kbn.toFixedScaled(size / 24, decimals, scaledDecimals, 2, ' day');\n } else if (Math.abs(size) < 8760) {\n return kbn.toFixedScaled(size / 168, decimals, scaledDecimals, 3, ' week');\n } else {\n return kbn.toFixedScaled(size / 8760, decimals, scaledDecimals, 4, ' year');\n }\n};\n\nkbn.valueFormats.d = (size, decimals, scaledDecimals) => {\n if (size === null) {\n return '';\n }\n\n if (Math.abs(size) < 7) {\n return kbn.toFixed(size, decimals) + ' day';\n } else if (Math.abs(size) < 365) {\n return kbn.toFixedScaled(size / 7, decimals, scaledDecimals, 2, ' week');\n } else {\n return kbn.toFixedScaled(size / 365, decimals, scaledDecimals, 3, ' year');\n }\n};\n\nkbn.toDuration = (size, decimals, timeScale) => {\n if (size === null) {\n return '';\n }\n if (size === 0) {\n return '0 ' + timeScale + 's';\n }\n if (size < 0) {\n return kbn.toDuration(-size, decimals, timeScale) + ' ago';\n }\n\n const units = [\n { short: 'y', long: 'year' },\n { short: 'M', long: 'month' },\n { short: 'w', long: 'week' },\n { short: 'd', long: 'day' },\n { short: 'h', long: 'hour' },\n { short: 'm', long: 'minute' },\n { short: 's', long: 'second' },\n { short: 'ms', long: 'millisecond' },\n ];\n // convert $size to milliseconds\n // intervals_in_seconds uses seconds (duh), convert them to milliseconds here to minimize floating point errors\n size *=\n kbn.intervals_in_seconds[\n units.find(e => {\n return e.long === timeScale;\n }).short\n ] * 1000;\n\n const strings = [];\n // after first value >= 1 print only $decimals more\n let decrementDecimals = false;\n for (let i = 0; i < units.length && decimals >= 0; i++) {\n const interval = kbn.intervals_in_seconds[units[i].short] * 1000;\n const value = size / interval;\n if (value >= 1 || decrementDecimals) {\n decrementDecimals = true;\n const floor = Math.floor(value);\n const unit = units[i].long + (floor !== 1 ? 's' : '');\n strings.push(floor + ' ' + unit);\n size = size % interval;\n decimals--;\n }\n }\n\n return strings.join(', ');\n};\n\nkbn.valueFormats.dtdurationms = (size, decimals) => {\n return kbn.toDuration(size, decimals, 'millisecond');\n};\n\nkbn.valueFormats.dtdurations = (size, decimals) => {\n return kbn.toDuration(size, decimals, 'second');\n};\n\nkbn.valueFormats.dthms = (size, decimals) => {\n return kbn.secondsToHhmmss(size);\n};\n\nkbn.valueFormats.timeticks = (size, decimals, scaledDecimals) => {\n return kbn.valueFormats.s(size / 100, decimals, scaledDecimals);\n};\n\nkbn.valueFormats.dateTimeAsIso = (epoch, isUtc) => {\n const time = isUtc ? moment.utc(epoch) : moment(epoch);\n\n if (moment().isSame(epoch, 'day')) {\n return time.format('HH:mm:ss');\n }\n return time.format('YYYY-MM-DD HH:mm:ss');\n};\n\nkbn.valueFormats.dateTimeAsUS = (epoch, isUtc) => {\n const time = isUtc ? moment.utc(epoch) : moment(epoch);\n\n if (moment().isSame(epoch, 'day')) {\n return time.format('h:mm:ss a');\n }\n return time.format('MM/DD/YYYY h:mm:ss a');\n};\n\nkbn.valueFormats.dateTimeFromNow = (epoch, isUtc) => {\n const time = isUtc ? moment.utc(epoch) : moment(epoch);\n return time.fromNow();\n};\n\n///// FORMAT MENU /////\n\nkbn.getUnitFormats = () => {\n return [\n {\n text: 'none',\n submenu: [\n { text: 'none', value: 'none' },\n { text: 'short', value: 'short' },\n { text: 'percent (0-100)', value: 'percent' },\n { text: 'percent (0.0-1.0)', value: 'percentunit' },\n { text: 'Humidity (%H)', value: 'humidity' },\n { text: 'decibel', value: 'dB' },\n { text: 'hexadecimal (0x)', value: 'hex0x' },\n { text: 'hexadecimal', value: 'hex' },\n { text: 'scientific notation', value: 'sci' },\n { text: 'locale format', value: 'locale' },\n ],\n },\n {\n text: 'currency',\n submenu: [\n { text: 'Dollars ($)', value: 'currencyUSD' },\n { text: 'Pounds (£)', value: 'currencyGBP' },\n { text: 'Euro (€)', value: 'currencyEUR' },\n { text: 'Yen (¥)', value: 'currencyJPY' },\n { text: 'Rubles (₽)', value: 'currencyRUB' },\n { text: 'Hryvnias (₴)', value: 'currencyUAH' },\n { text: 'Real (R$)', value: 'currencyBRL' },\n { text: 'Danish Krone (kr)', value: 'currencyDKK' },\n { text: 'Icelandic Króna (kr)', value: 'currencyISK' },\n { text: 'Norwegian Krone (kr)', value: 'currencyNOK' },\n { text: 'Swedish Krona (kr)', value: 'currencySEK' },\n { text: 'Czech koruna (czk)', value: 'currencyCZK' },\n { text: 'Swiss franc (CHF)', value: 'currencyCHF' },\n { text: 'Polish Złoty (PLN)', value: 'currencyPLN' },\n { text: 'Bitcoin (฿)', value: 'currencyBTC' },\n ],\n },\n {\n text: 'time',\n submenu: [\n { text: 'Hertz (1/s)', value: 'hertz' },\n { text: 'nanoseconds (ns)', value: 'ns' },\n { text: 'microseconds (µs)', value: 'µs' },\n { text: 'milliseconds (ms)', value: 'ms' },\n { text: 'seconds (s)', value: 's' },\n { text: 'minutes (m)', value: 'm' },\n { text: 'hours (h)', value: 'h' },\n { text: 'days (d)', value: 'd' },\n { text: 'duration (ms)', value: 'dtdurationms' },\n { text: 'duration (s)', value: 'dtdurations' },\n { text: 'duration (hh:mm:ss)', value: 'dthms' },\n { text: 'Timeticks (s/100)', value: 'timeticks' },\n ],\n },\n {\n text: 'date & time',\n submenu: [\n { text: 'YYYY-MM-DD HH:mm:ss', value: 'dateTimeAsIso' },\n { text: 'DD/MM/YYYY h:mm:ss a', value: 'dateTimeAsUS' },\n { text: 'From Now', value: 'dateTimeFromNow' },\n ],\n },\n {\n text: 'data (IEC)',\n submenu: [\n { text: 'bits', value: 'bits' },\n { text: 'bytes', value: 'bytes' },\n { text: 'kibibytes', value: 'kbytes' },\n { text: 'mebibytes', value: 'mbytes' },\n { text: 'gibibytes', value: 'gbytes' },\n ],\n },\n {\n text: 'data (Metric)',\n submenu: [\n { text: 'bits', value: 'decbits' },\n { text: 'bytes', value: 'decbytes' },\n { text: 'kilobytes', value: 'deckbytes' },\n { text: 'megabytes', value: 'decmbytes' },\n { text: 'gigabytes', value: 'decgbytes' },\n ],\n },\n {\n text: 'data rate',\n submenu: [\n { text: 'packets/sec', value: 'pps' },\n { text: 'bits/sec', value: 'bps' },\n { text: 'bytes/sec', value: 'Bps' },\n { text: 'kilobits/sec', value: 'Kbits' },\n { text: 'kilobytes/sec', value: 'KBs' },\n { text: 'megabits/sec', value: 'Mbits' },\n { text: 'megabytes/sec', value: 'MBs' },\n { text: 'gigabytes/sec', value: 'GBs' },\n { text: 'gigabits/sec', value: 'Gbits' },\n ],\n },\n {\n text: 'hash rate',\n submenu: [\n { text: 'hashes/sec', value: 'Hs' },\n { text: 'kilohashes/sec', value: 'KHs' },\n { text: 'megahashes/sec', value: 'MHs' },\n { text: 'gigahashes/sec', value: 'GHs' },\n { text: 'terahashes/sec', value: 'THs' },\n { text: 'petahashes/sec', value: 'PHs' },\n { text: 'exahashes/sec', value: 'EHs' },\n ],\n },\n {\n text: 'throughput',\n submenu: [\n { text: 'ops/sec (ops)', value: 'ops' },\n { text: 'requests/sec (rps)', value: 'reqps' },\n { text: 'reads/sec (rps)', value: 'rps' },\n { text: 'writes/sec (wps)', value: 'wps' },\n { text: 'I/O ops/sec (iops)', value: 'iops' },\n { text: 'ops/min (opm)', value: 'opm' },\n { text: 'reads/min (rpm)', value: 'rpm' },\n { text: 'writes/min (wpm)', value: 'wpm' },\n ],\n },\n {\n text: 'length',\n submenu: [\n { text: 'millimetre (mm)', value: 'lengthmm' },\n { text: 'meter (m)', value: 'lengthm' },\n { text: 'feet (ft)', value: 'lengthft' },\n { text: 'kilometer (km)', value: 'lengthkm' },\n { text: 'mile (mi)', value: 'lengthmi' },\n ],\n },\n {\n text: 'area',\n submenu: [\n { text: 'Square Meters (m²)', value: 'areaM2' },\n { text: 'Square Feet (ft²)', value: 'areaF2' },\n { text: 'Square Miles (mi²)', value: 'areaMI2' },\n ],\n },\n {\n text: 'mass',\n submenu: [\n { text: 'milligram (mg)', value: 'massmg' },\n { text: 'gram (g)', value: 'massg' },\n { text: 'kilogram (kg)', value: 'masskg' },\n { text: 'metric ton (t)', value: 'masst' },\n ],\n },\n {\n text: 'velocity',\n submenu: [\n { text: 'metres/second (m/s)', value: 'velocityms' },\n { text: 'kilometers/hour (km/h)', value: 'velocitykmh' },\n { text: 'miles/hour (mph)', value: 'velocitymph' },\n { text: 'knot (kn)', value: 'velocityknot' },\n ],\n },\n {\n text: 'volume',\n submenu: [\n { text: 'millilitre (mL)', value: 'mlitre' },\n { text: 'litre (L)', value: 'litre' },\n { text: 'cubic metre', value: 'm3' },\n { text: 'Normal cubic metre', value: 'Nm3' },\n { text: 'cubic decimetre', value: 'dm3' },\n { text: 'gallons', value: 'gallons' },\n ],\n },\n {\n text: 'energy',\n submenu: [\n { text: 'Watt (W)', value: 'watt' },\n { text: 'Kilowatt (kW)', value: 'kwatt' },\n { text: 'Milliwatt (mW)', value: 'mwatt' },\n { text: 'Watt per square metre (W/m²)', value: 'Wm2' },\n { text: 'Volt-ampere (VA)', value: 'voltamp' },\n { text: 'Kilovolt-ampere (kVA)', value: 'kvoltamp' },\n { text: 'Volt-ampere reactive (var)', value: 'voltampreact' },\n { text: 'Kilovolt-ampere reactive (kvar)', value: 'kvoltampreact' },\n { text: 'Watt-hour (Wh)', value: 'watth' },\n { text: 'Kilowatt-hour (kWh)', value: 'kwatth' },\n { text: 'Kilowatt-min (kWm)', value: 'kwattm' },\n { text: 'Joule (J)', value: 'joule' },\n { text: 'Electron volt (eV)', value: 'ev' },\n { text: 'Ampere (A)', value: 'amp' },\n { text: 'Kiloampere (kA)', value: 'kamp' },\n { text: 'Milliampere (mA)', value: 'mamp' },\n { text: 'Volt (V)', value: 'volt' },\n { text: 'Kilovolt (kV)', value: 'kvolt' },\n { text: 'Millivolt (mV)', value: 'mvolt' },\n { text: 'Decibel-milliwatt (dBm)', value: 'dBm' },\n { text: 'Ohm (Ω)', value: 'ohm' },\n { text: 'Lumens (Lm)', value: 'lumens' },\n ],\n },\n {\n text: 'temperature',\n submenu: [\n { text: 'Celsius (°C)', value: 'celsius' },\n { text: 'Farenheit (°F)', value: 'farenheit' },\n { text: 'Kelvin (K)', value: 'kelvin' },\n ],\n },\n {\n text: 'pressure',\n submenu: [\n { text: 'Millibars', value: 'pressurembar' },\n { text: 'Bars', value: 'pressurebar' },\n { text: 'Kilobars', value: 'pressurekbar' },\n { text: 'Hectopascals', value: 'pressurehpa' },\n { text: 'Kilopascals', value: 'pressurekpa' },\n { text: 'Inches of mercury', value: 'pressurehg' },\n { text: 'PSI', value: 'pressurepsi' },\n ],\n },\n {\n text: 'force',\n submenu: [\n { text: 'Newton-meters (Nm)', value: 'forceNm' },\n { text: 'Kilonewton-meters (kNm)', value: 'forcekNm' },\n { text: 'Newtons (N)', value: 'forceN' },\n { text: 'Kilonewtons (kN)', value: 'forcekN' },\n ],\n },\n {\n text: 'flow',\n submenu: [\n { text: 'Gallons/min (gpm)', value: 'flowgpm' },\n { text: 'Cubic meters/sec (cms)', value: 'flowcms' },\n { text: 'Cubic feet/sec (cfs)', value: 'flowcfs' },\n { text: 'Cubic feet/min (cfm)', value: 'flowcfm' },\n { text: 'Litre/hour', value: 'litreh' },\n { text: 'Litre/min (l/min)', value: 'flowlpm' },\n { text: 'milliLitre/min (mL/min)', value: 'flowmlpm' },\n ],\n },\n {\n text: 'angle',\n submenu: [\n { text: 'Degrees (°)', value: 'degree' },\n { text: 'Radians', value: 'radian' },\n { text: 'Gradian', value: 'grad' },\n ],\n },\n {\n text: 'acceleration',\n submenu: [\n { text: 'Meters/sec²', value: 'accMS2' },\n { text: 'Feet/sec²', value: 'accFS2' },\n { text: 'G unit', value: 'accG' },\n ],\n },\n {\n text: 'radiation',\n submenu: [\n { text: 'Becquerel (Bq)', value: 'radbq' },\n { text: 'curie (Ci)', value: 'radci' },\n { text: 'Gray (Gy)', value: 'radgy' },\n { text: 'rad', value: 'radrad' },\n { text: 'Sievert (Sv)', value: 'radsv' },\n { text: 'rem', value: 'radrem' },\n { text: 'Exposure (C/kg)', value: 'radexpckg' },\n { text: 'roentgen (R)', value: 'radr' },\n { text: 'Sievert/hour (Sv/h)', value: 'radsvh' },\n ],\n },\n {\n text: 'concentration',\n submenu: [\n { text: 'parts-per-million (ppm)', value: 'ppm' },\n { text: 'parts-per-billion (ppb)', value: 'conppb' },\n { text: 'nanogram per cubic metre (ng/m³)', value: 'conngm3' },\n { text: 'nanogram per normal cubic metre (ng/Nm³)', value: 'conngNm3' },\n { text: 'microgram per cubic metre (μg/m³)', value: 'conμgm3' },\n { text: 'microgram per normal cubic metre (μg/Nm³)', value: 'conμgNm3' },\n { text: 'milligram per cubic metre (mg/m³)', value: 'conmgm3' },\n { text: 'milligram per normal cubic metre (mg/Nm³)', value: 'conmgNm3' },\n { text: 'gram per cubic metre (g/m³)', value: 'congm3' },\n { text: 'gram per normal cubic metre (g/Nm³)', value: 'congNm3' },\n ],\n },\n ];\n};\n\nexport default kbn;\n","import coreModule from 'app/core/core_module';\nimport locationUtil from 'app/core/utils/location_util';\n\nexport class LoadDashboardCtrl {\n /** @ngInject */\n constructor($scope, $routeParams, dashboardLoaderSrv, backendSrv, $location, $browser) {\n $scope.appEvent('dashboard-fetch-start');\n\n if (!$routeParams.uid && !$routeParams.slug) {\n backendSrv.get('/api/dashboards/home').then(homeDash => {\n if (homeDash.redirectUri) {\n const newUrl = locationUtil.stripBaseFromUrl(homeDash.redirectUri);\n $location.path(newUrl);\n } else {\n const meta = homeDash.meta;\n meta.canSave = meta.canShare = meta.canStar = false;\n $scope.initDashboard(homeDash, $scope);\n }\n });\n return;\n }\n\n // if no uid, redirect to new route based on slug\n if (!($routeParams.type === 'script' || $routeParams.type === 'snapshot') && !$routeParams.uid) {\n backendSrv.getDashboardBySlug($routeParams.slug).then(res => {\n if (res) {\n $location.path(locationUtil.stripBaseFromUrl(res.meta.url)).replace();\n }\n });\n return;\n }\n\n dashboardLoaderSrv.loadDashboard($routeParams.type, $routeParams.slug, $routeParams.uid).then(result => {\n if (result.meta.url) {\n const url = locationUtil.stripBaseFromUrl(result.meta.url);\n\n if (url !== $location.path()) {\n // replace url to not create additional history items and then return so that initDashboard below isn't executed multiple times.\n $location.path(url).replace();\n return;\n }\n }\n\n result.meta.autofitpanels = $routeParams.autofitpanels;\n result.meta.kiosk = $routeParams.kiosk;\n\n $scope.initDashboard(result, $scope);\n });\n }\n}\n\nexport class NewDashboardCtrl {\n /** @ngInject */\n constructor($scope, $routeParams) {\n $scope.initDashboard(\n {\n meta: {\n canStar: false,\n canShare: false,\n isNew: true,\n folderId: Number($routeParams.folderId),\n },\n dashboard: {\n title: 'New dashboard',\n panels: [\n {\n type: 'add-panel',\n gridPos: { x: 0, y: 0, w: 12, h: 9 },\n title: 'Panel Title',\n },\n ],\n },\n },\n $scope\n );\n }\n}\n\ncoreModule.controller('LoadDashboardCtrl', LoadDashboardCtrl);\ncoreModule.controller('NewDashboardCtrl', NewDashboardCtrl);\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport { Provider } from 'react-redux';\n\nimport coreModule from 'app/core/core_module';\nimport { store } from 'app/store/configureStore';\nimport { BackendSrv } from 'app/core/services/backend_srv';\nimport { DatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { ContextSrv } from 'app/core/services/context_srv';\n\nfunction WrapInProvider(store, Component, props) {\n return (\n \n \n \n );\n}\n\n/** @ngInject */\nexport function reactContainer(\n $route,\n $location,\n backendSrv: BackendSrv,\n datasourceSrv: DatasourceSrv,\n contextSrv: ContextSrv\n) {\n return {\n restrict: 'E',\n template: '',\n link(scope, elem) {\n // Check permissions for this component\n const { roles } = $route.current.locals;\n if (roles && roles.length) {\n if (!roles.some(r => contextSrv.hasRole(r))) {\n $location.url('/');\n }\n }\n\n let { component } = $route.current.locals;\n // Dynamic imports return whole module, need to extract default export\n if (component.default) {\n component = component.default;\n }\n\n const props = {\n backendSrv: backendSrv,\n datasourceSrv: datasourceSrv,\n routeParams: $route.current.params,\n };\n\n ReactDOM.render(WrapInProvider(store, component, props), elem[0]);\n\n scope.$on('$destroy', () => {\n ReactDOM.unmountComponentAtNode(elem[0]);\n });\n },\n };\n}\n\ncoreModule.directive('reactContainer', reactContainer);\n","import './dashboard_loaders';\nimport './ReactContainer';\n\nimport ServerStats from 'app/features/admin/ServerStats';\nimport AlertRuleList from 'app/features/alerting/AlertRuleList';\nimport TeamPages from 'app/features/teams/TeamPages';\nimport TeamList from 'app/features/teams/TeamList';\nimport ApiKeys from 'app/features/api-keys/ApiKeysPage';\nimport PluginListPage from 'app/features/plugins/PluginListPage';\nimport FolderSettingsPage from 'app/features/folders/FolderSettingsPage';\nimport FolderPermissions from 'app/features/folders/FolderPermissions';\nimport DataSourcesListPage from 'app/features/datasources/DataSourcesListPage';\n\n/** @ngInject */\nexport function setupAngularRoutes($routeProvider, $locationProvider) {\n $locationProvider.html5Mode(true);\n\n $routeProvider\n .when('/', {\n templateUrl: 'public/app/partials/dashboard.html',\n controller: 'LoadDashboardCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/d/:uid/:slug', {\n templateUrl: 'public/app/partials/dashboard.html',\n controller: 'LoadDashboardCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/d/:uid', {\n templateUrl: 'public/app/partials/dashboard.html',\n controller: 'LoadDashboardCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/dashboard/:type/:slug', {\n templateUrl: 'public/app/partials/dashboard.html',\n controller: 'LoadDashboardCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/d-solo/:uid/:slug', {\n templateUrl: 'public/app/features/panel/partials/soloPanel.html',\n controller: 'SoloPanelCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/dashboard-solo/:type/:slug', {\n templateUrl: 'public/app/features/panel/partials/soloPanel.html',\n controller: 'SoloPanelCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/dashboard/new', {\n templateUrl: 'public/app/partials/dashboard.html',\n controller: 'NewDashboardCtrl',\n reloadOnSearch: false,\n pageClass: 'page-dashboard',\n })\n .when('/dashboard/import', {\n templateUrl: 'public/app/features/dashboard/partials/dashboard_import.html',\n controller: 'DashboardImportCtrl',\n controllerAs: 'ctrl',\n })\n .when('/datasources', {\n template: '',\n resolve: {\n component: () => DataSourcesListPage,\n },\n })\n .when('/datasources/edit/:id', {\n templateUrl: 'public/app/features/plugins/partials/ds_edit.html',\n controller: 'DataSourceEditCtrl',\n controllerAs: 'ctrl',\n })\n .when('/datasources/edit/:id/dashboards', {\n templateUrl: 'public/app/features/plugins/partials/ds_dashboards.html',\n controller: 'DataSourceDashboardsCtrl',\n controllerAs: 'ctrl',\n })\n .when('/datasources/new', {\n templateUrl: 'public/app/features/plugins/partials/ds_edit.html',\n controller: 'DataSourceEditCtrl',\n controllerAs: 'ctrl',\n })\n .when('/dashboards', {\n templateUrl: 'public/app/features/manage-dashboards/partials/dashboard_list.html',\n controller: 'DashboardListCtrl',\n controllerAs: 'ctrl',\n })\n .when('/dashboards/folder/new', {\n templateUrl: 'public/app/features/dashboard/partials/create_folder.html',\n controller: 'CreateFolderCtrl',\n controllerAs: 'ctrl',\n })\n .when('/dashboards/f/:uid/:slug/permissions', {\n template: '',\n resolve: {\n component: () => FolderPermissions,\n },\n })\n .when('/dashboards/f/:uid/:slug/settings', {\n template: '',\n resolve: {\n component: () => FolderSettingsPage,\n },\n })\n .when('/dashboards/f/:uid/:slug', {\n templateUrl: 'public/app/features/dashboard/partials/folder_dashboards.html',\n controller: 'FolderDashboardsCtrl',\n controllerAs: 'ctrl',\n })\n .when('/dashboards/f/:uid', {\n templateUrl: 'public/app/features/dashboard/partials/folder_dashboards.html',\n controller: 'FolderDashboardsCtrl',\n controllerAs: 'ctrl',\n })\n .when('/explore', {\n template: '',\n reloadOnSearch: false,\n resolve: {\n roles: () => ['Editor', 'Admin'],\n component: () => import(/* webpackChunkName: \"explore\" */ 'app/features/explore/Wrapper'),\n },\n })\n .when('/org', {\n templateUrl: 'public/app/features/org/partials/orgDetails.html',\n controller: 'OrgDetailsCtrl',\n })\n .when('/org/new', {\n templateUrl: 'public/app/features/org/partials/newOrg.html',\n controller: 'NewOrgCtrl',\n })\n .when('/org/users', {\n templateUrl: 'public/app/features/org/partials/orgUsers.html',\n controller: 'OrgUsersCtrl',\n controllerAs: 'ctrl',\n })\n .when('/org/users/invite', {\n templateUrl: 'public/app/features/org/partials/invite.html',\n controller: 'UserInviteCtrl',\n controllerAs: 'ctrl',\n })\n .when('/org/apikeys', {\n template: '',\n resolve: {\n roles: () => ['Editor', 'Admin'],\n component: () => ApiKeys,\n },\n })\n .when('/org/teams', {\n template: '',\n resolve: {\n roles: () => ['Editor', 'Admin'],\n component: () => TeamList,\n },\n })\n .when('/org/teams/new', {\n templateUrl: 'public/app/features/org/partials/create_team.html',\n controller: 'CreateTeamCtrl',\n controllerAs: 'ctrl',\n })\n .when('/org/teams/edit/:id/:page?', {\n template: '',\n resolve: {\n roles: () => ['Admin'],\n component: () => TeamPages,\n },\n })\n .when('/profile', {\n templateUrl: 'public/app/features/org/partials/profile.html',\n controller: 'ProfileCtrl',\n controllerAs: 'ctrl',\n })\n .when('/profile/password', {\n templateUrl: 'public/app/features/org/partials/change_password.html',\n controller: 'ChangePasswordCtrl',\n })\n .when('/profile/select-org', {\n templateUrl: 'public/app/features/org/partials/select_org.html',\n controller: 'SelectOrgCtrl',\n })\n // ADMIN\n .when('/admin', {\n templateUrl: 'public/app/features/admin/partials/admin_home.html',\n controller: 'AdminHomeCtrl',\n controllerAs: 'ctrl',\n })\n .when('/admin/settings', {\n templateUrl: 'public/app/features/admin/partials/settings.html',\n controller: 'AdminSettingsCtrl',\n controllerAs: 'ctrl',\n })\n .when('/admin/users', {\n templateUrl: 'public/app/features/admin/partials/users.html',\n controller: 'AdminListUsersCtrl',\n controllerAs: 'ctrl',\n })\n .when('/admin/users/create', {\n templateUrl: 'public/app/features/admin/partials/new_user.html',\n controller: 'AdminEditUserCtrl',\n })\n .when('/admin/users/edit/:id', {\n templateUrl: 'public/app/features/admin/partials/edit_user.html',\n controller: 'AdminEditUserCtrl',\n })\n .when('/admin/orgs', {\n templateUrl: 'public/app/features/admin/partials/orgs.html',\n controller: 'AdminListOrgsCtrl',\n controllerAs: 'ctrl',\n })\n .when('/admin/orgs/edit/:id', {\n templateUrl: 'public/app/features/admin/partials/edit_org.html',\n controller: 'AdminEditOrgCtrl',\n controllerAs: 'ctrl',\n })\n .when('/admin/stats', {\n template: '',\n resolve: {\n component: () => ServerStats,\n },\n })\n // LOGIN / SIGNUP\n .when('/login', {\n templateUrl: 'public/app/partials/login.html',\n controller: 'LoginCtrl',\n pageClass: 'login-page sidemenu-hidden',\n })\n .when('/invite/:code', {\n templateUrl: 'public/app/partials/signup_invited.html',\n controller: 'InvitedCtrl',\n pageClass: 'sidemenu-hidden',\n })\n .when('/signup', {\n templateUrl: 'public/app/partials/signup_step2.html',\n controller: 'SignUpCtrl',\n pageClass: 'sidemenu-hidden',\n })\n .when('/user/password/send-reset-email', {\n templateUrl: 'public/app/partials/reset_password.html',\n controller: 'ResetPasswordCtrl',\n pageClass: 'sidemenu-hidden',\n })\n .when('/user/password/reset', {\n templateUrl: 'public/app/partials/reset_password.html',\n controller: 'ResetPasswordCtrl',\n pageClass: 'sidemenu-hidden',\n })\n .when('/dashboard/snapshots', {\n templateUrl: 'public/app/features/manage-dashboards/partials/snapshot_list.html',\n controller: 'SnapshotListCtrl',\n controllerAs: 'ctrl',\n })\n .when('/plugins', {\n template: '',\n resolve: {\n component: () => PluginListPage,\n },\n })\n .when('/plugins/:pluginId/edit', {\n templateUrl: 'public/app/features/plugins/partials/plugin_edit.html',\n controller: 'PluginEditCtrl',\n controllerAs: 'ctrl',\n })\n .when('/plugins/:pluginId/page/:slug', {\n templateUrl: 'public/app/features/plugins/partials/plugin_page.html',\n controller: 'AppPageCtrl',\n controllerAs: 'ctrl',\n })\n .when('/styleguide/:page?', {\n controller: 'StyleGuideCtrl',\n controllerAs: 'ctrl',\n templateUrl: 'public/app/features/admin/partials/styleguide.html',\n })\n .when('/alerting', {\n redirectTo: '/alerting/list',\n })\n .when('/alerting/list', {\n templateUrl: 'public/app/features/alerting/partials/alert_list.html',\n controller: 'AlertListCtrl',\n controllerAs: 'ctrl',\n })\n .when('/alerting/list', {\n template: '',\n reloadOnSearch: false,\n resolve: {\n component: () => AlertRuleList,\n },\n })\n .when('/alerting/notifications', {\n templateUrl: 'public/app/features/alerting/partials/notifications_list.html',\n controller: 'AlertNotificationsListCtrl',\n controllerAs: 'ctrl',\n })\n .when('/alerting/notification/new', {\n templateUrl: 'public/app/features/alerting/partials/notification_edit.html',\n controller: 'AlertNotificationEditCtrl',\n controllerAs: 'ctrl',\n })\n .when('/alerting/notification/:id/edit', {\n templateUrl: 'public/app/features/alerting/partials/notification_edit.html',\n controller: 'AlertNotificationEditCtrl',\n controllerAs: 'ctrl',\n })\n .otherwise({\n templateUrl: 'public/app/partials/error.html',\n controller: 'ErrorCtrl',\n });\n}\n","import 'babel-polyfill';\nimport 'file-saver';\nimport 'lodash';\nimport 'jquery';\nimport 'angular';\nimport 'angular-route';\nimport 'angular-sanitize';\nimport 'angular-native-dragdrop';\nimport 'angular-bindonce';\nimport 'react';\nimport 'react-dom';\n\nimport 'vendor/bootstrap/bootstrap';\nimport 'vendor/angular-ui/ui-bootstrap-tpls';\nimport 'vendor/angular-other/angular-strap';\n\nimport $ from 'jquery';\nimport angular from 'angular';\nimport config from 'app/core/config';\nimport _ from 'lodash';\nimport moment from 'moment';\n\n// add move to lodash for backward compatabiltiy\n_.move = (array, fromIndex, toIndex) => {\n array.splice(toIndex, 0, array.splice(fromIndex, 1)[0]);\n return array;\n};\n\nimport { coreModule, registerAngularDirectives } from './core/core';\nimport { setupAngularRoutes } from './routes/routes';\n\ndeclare var System: any;\n\nexport class GrafanaApp {\n registerFunctions: any;\n ngModuleDependencies: any[];\n preBootModules: any[];\n\n constructor() {\n this.preBootModules = [];\n this.registerFunctions = {};\n this.ngModuleDependencies = [];\n }\n\n useModule(module) {\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 init() {\n const app = angular.module('grafana', []);\n\n moment.locale(config.bootData.user.locale);\n\n app.config(($locationProvider, $controllerProvider, $compileProvider, $filterProvider, $httpProvider, $provide) => {\n // pre assing bindings before constructor calls\n $compileProvider.preAssignBindingsEnabled(true);\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, $templateCache) => {\n const get = $delegate.get;\n $delegate.get = (url, config) => {\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 this.ngModuleDependencies = [\n 'grafana.core',\n 'ngRoute',\n 'ngSanitize',\n '$strap.directives',\n 'ang-drag-drop',\n 'grafana',\n 'pasvaz.bindonce',\n 'ui.bootstrap',\n 'ui.bootstrap.tpls',\n 'react',\n ];\n\n const moduleTypes = ['controllers', 'directives', 'factories', 'services', 'filters', 'routes'];\n\n _.each(moduleTypes, type => {\n const moduleName = 'grafana.' + type;\n this.useModule(angular.module(moduleName, []));\n });\n\n // makes it possible to add dynamic stuff\n this.useModule(coreModule);\n\n // register react angular wrappers\n coreModule.config(setupAngularRoutes);\n registerAngularDirectives();\n\n const preBootRequires = [System.import('app/features/all')];\n\n Promise.all(preBootRequires)\n .then(() => {\n // disable tool tip animation\n $.fn.tooltip.defaults.animation = false;\n\n // bootstrap the app\n angular.bootstrap(document, this.ngModuleDependencies).invoke(() => {\n _.each(this.preBootModules, module => {\n _.extend(module, this.registerFunctions);\n });\n\n this.preBootModules = null;\n });\n })\n .catch(err => {\n console.log('Application boot failed:', err);\n });\n }\n}\n\nexport default new GrafanaApp();\n","import app from './app';\napp.init();\n","import React from 'react';\nimport { Manager, Popper, Arrow } from 'react-popper';\n\ninterface IwithTooltipProps {\n placement?: string;\n content: string | ((props: any) => JSX.Element);\n className?: string;\n}\n\nexport default function withTooltip(WrappedComponent) {\n return class extends React.Component {\n constructor(props) {\n super(props);\n\n this.setState = this.setState.bind(this);\n this.state = {\n placement: this.props.placement || 'auto',\n show: false,\n };\n }\n\n componentWillReceiveProps(nextProps) {\n if (nextProps.placement && nextProps.placement !== this.state.placement) {\n this.setState(prevState => {\n return {\n ...prevState,\n placement: nextProps.placement,\n };\n });\n }\n }\n\n renderContent(content) {\n if (typeof content === 'function') {\n // If it's a function we assume it's a React component\n const ReactComponent = content;\n return ;\n }\n return content;\n }\n\n render() {\n const { content, className } = this.props;\n\n return (\n \n \n {this.state.show ? (\n \n {this.renderContent(content)}\n \n \n ) : null}\n \n );\n }\n };\n}\n","import React from 'react';\nimport withTooltip from './withTooltip';\nimport { Target } from 'react-popper';\n\ninterface TooltipProps {\n tooltipSetState: (prevState: object) => void;\n}\n\nclass Tooltip extends React.Component {\n constructor(props) {\n super(props);\n this.showTooltip = this.showTooltip.bind(this);\n this.hideTooltip = this.hideTooltip.bind(this);\n }\n\n showTooltip() {\n const { tooltipSetState } = this.props;\n tooltipSetState(prevState => {\n return {\n ...prevState,\n show: true,\n };\n });\n }\n\n hideTooltip() {\n const { tooltipSetState } = this.props;\n tooltipSetState(prevState => {\n return {\n ...prevState,\n show: false,\n };\n });\n }\n\n render() {\n return (\n \n {this.props.children}\n \n );\n }\n}\n\nexport default withTooltip(Tooltip);\n","import { FolderDTO, NavModelItem, NavModel } from 'app/types';\n\nexport function buildNavModel(folder: FolderDTO): NavModelItem {\n return {\n icon: 'fa fa-folder-open',\n id: 'manage-folder',\n subTitle: 'Manage folder dashboards & permissions',\n url: '',\n text: folder.title,\n breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }],\n children: [\n {\n active: false,\n icon: 'fa fa-fw fa-th-large',\n id: `folder-dashboards-${folder.uid}`,\n text: 'Dashboards',\n url: folder.url,\n },\n {\n active: false,\n icon: 'fa fa-fw fa-lock',\n id: `folder-permissions-${folder.uid}`,\n text: 'Permissions',\n url: `${folder.url}/permissions`,\n },\n {\n active: false,\n icon: 'fa fa-fw fa-cog',\n id: `folder-settings-${folder.uid}`,\n text: 'Settings',\n url: `${folder.url}/settings`,\n },\n ],\n };\n}\n\nexport function getLoadingNav(tabIndex: number): NavModel {\n const main = buildNavModel({\n id: 1,\n uid: 'loading',\n title: 'Loading',\n url: 'url',\n canSave: false,\n version: 0,\n });\n\n main.children[tabIndex].active = true;\n\n return {\n main: main,\n node: main.children[tabIndex],\n };\n}\n","import React, { Component } from 'react';\n\nexport interface Props {\n model: any;\n}\n\nclass EmptyListCTA extends Component {\n render() {\n const {\n title,\n buttonIcon,\n buttonLink,\n buttonTitle,\n proTip,\n proTipLink,\n proTipLinkTitle,\n proTipTarget,\n } = this.props.model;\n return (\n
\n
{title}
\n \n \n {buttonTitle}\n \n
\n ProTip: {proTip}\n \n {proTipLinkTitle}\n \n
\n
\n );\n }\n}\n\nexport default EmptyListCTA;\n","import React from 'react';\nimport tags from 'app/core/utils/tags';\n\nexport interface Props {\n label: string;\n removeIcon: boolean;\n count: number;\n onClick: any;\n}\n\nexport class TagBadge extends React.Component {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n onClick(event) {\n this.props.onClick(event);\n }\n\n render() {\n const { label, removeIcon, count } = this.props;\n const { color, borderColor } = tags.getTagColorsFromName(label);\n const tagStyle = {\n backgroundColor: color,\n borderColor: borderColor,\n };\n const countLabel = count !== 0 && {`(${count})`};\n\n return (\n \n {removeIcon && }\n {label} {countLabel}\n \n );\n }\n}\n","import React, { Component } from 'react';\n\nexport interface Props {\n onSelect: any;\n onFocus: any;\n option: any;\n isFocused: any;\n className: any;\n}\n\nclass DescriptionOption extends Component {\n constructor(props) {\n super(props);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n }\n\n handleMouseDown(event) {\n event.preventDefault();\n event.stopPropagation();\n this.props.onSelect(this.props.option, event);\n }\n\n handleMouseEnter(event) {\n this.props.onFocus(this.props.option, event);\n }\n\n handleMouseMove(event) {\n if (this.props.isFocused) {\n return;\n }\n this.props.onFocus(this.props.option, event);\n }\n\n render() {\n const { option, children, className } = this.props;\n return (\n \n
{children}
\n
\n
{option.description}
\n {className.indexOf('is-selected') > -1 && }\n
\n \n );\n }\n}\n\nexport default DescriptionOption;\n","import React, { Component } from 'react';\nimport Select from 'react-select';\nimport DescriptionOption from './DescriptionOption';\n\nexport interface Props {\n optionsWithDesc: OptionWithDescription[];\n onSelected: (permission) => void;\n value: number;\n disabled: boolean;\n className?: string;\n}\n\nexport interface OptionWithDescription {\n value: any;\n label: string;\n description: string;\n}\n\nclass DescriptionPicker extends Component {\n constructor(props) {\n super(props);\n this.state = {};\n }\n\n render() {\n const { optionsWithDesc, onSelected, value, disabled, className } = this.props;\n\n return (\n
\n \n
\n );\n }\n}\n\nexport default DescriptionPicker;\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\nimport { DashboardModel } from 'app/features/dashboard/dashboard_model';\n\nexport class BackendSrv {\n private inFlightRequests = {};\n private HTTP_REQUEST_CANCELLED = -1;\n private noBackendCache: boolean;\n\n /** @ngInject */\n constructor(private $http, private alertSrv, private $q, private $timeout, private contextSrv) {}\n\n get(url, params?) {\n return this.request({ method: 'GET', url: url, params: params });\n }\n\n delete(url) {\n return this.request({ method: 'DELETE', url: url });\n }\n\n post(url, data) {\n return this.request({ method: 'POST', url: url, data: data });\n }\n\n patch(url, data) {\n return this.request({ method: 'PATCH', url: url, data: data });\n }\n\n put(url, data) {\n return this.request({ method: 'PUT', url: url, data: data });\n }\n\n withNoBackendCache(callback) {\n this.noBackendCache = true;\n return callback().finally(() => {\n this.noBackendCache = false;\n });\n }\n\n requestErrorHandler(err) {\n if (err.isHandled) {\n return;\n }\n\n let data = err.data || { message: 'Unexpected error' };\n if (_.isString(data)) {\n data = { message: data };\n }\n\n if (err.status === 422) {\n this.alertSrv.set('Validation failed', data.message, 'warning', 4000);\n throw data;\n }\n\n data.severity = 'error';\n\n if (err.status < 500) {\n data.severity = 'warning';\n }\n\n if (data.message) {\n let description = '';\n let message = data.message;\n if (message.length > 80) {\n description = message;\n message = 'Error';\n }\n this.alertSrv.set(message, description, data.severity, 10000);\n }\n\n throw data;\n }\n\n request(options) {\n options.retry = options.retry || 0;\n const requestIsLocal = !options.url.match(/^http/);\n const firstAttempt = options.retry === 0;\n\n if (requestIsLocal) {\n if (this.contextSrv.user && this.contextSrv.user.orgId) {\n options.headers = options.headers || {};\n options.headers['X-Grafana-Org-Id'] = this.contextSrv.user.orgId;\n }\n\n if (options.url.indexOf('/') === 0) {\n options.url = options.url.substring(1);\n }\n }\n\n return this.$http(options).then(\n results => {\n if (options.method !== 'GET') {\n if (results && results.data.message) {\n if (options.showSuccessAlert !== false) {\n this.alertSrv.set(results.data.message, '', 'success', 3000);\n }\n }\n }\n return results.data;\n },\n err => {\n // handle unauthorized\n if (err.status === 401 && this.contextSrv.user.isSignedIn && firstAttempt) {\n return this.loginPing().then(() => {\n options.retry = 1;\n return this.request(options);\n });\n }\n\n this.$timeout(this.requestErrorHandler.bind(this, err), 50);\n throw err;\n }\n );\n }\n\n addCanceler(requestId, canceler) {\n if (requestId in this.inFlightRequests) {\n this.inFlightRequests[requestId].push(canceler);\n } else {\n this.inFlightRequests[requestId] = [canceler];\n }\n }\n\n resolveCancelerIfExists(requestId) {\n const cancelers = this.inFlightRequests[requestId];\n if (!_.isUndefined(cancelers) && cancelers.length) {\n cancelers[0].resolve();\n }\n }\n\n datasourceRequest(options) {\n let canceler = null;\n options.retry = options.retry || 0;\n\n // A requestID is provided by the datasource as a unique identifier for a\n // particular query. If the requestID exists, the promise it is keyed to\n // is canceled, canceling the previous datasource request if it is still\n // in-flight.\n const requestId = options.requestId;\n if (requestId) {\n this.resolveCancelerIfExists(requestId);\n // create new canceler\n canceler = this.$q.defer();\n options.timeout = canceler.promise;\n this.addCanceler(requestId, canceler);\n }\n\n const requestIsLocal = !options.url.match(/^http/);\n const firstAttempt = options.retry === 0;\n\n if (requestIsLocal) {\n if (this.contextSrv.user && this.contextSrv.user.orgId) {\n options.headers = options.headers || {};\n options.headers['X-Grafana-Org-Id'] = this.contextSrv.user.orgId;\n }\n\n if (options.url.indexOf('/') === 0) {\n options.url = options.url.substring(1);\n }\n\n if (options.headers && options.headers.Authorization) {\n options.headers['X-DS-Authorization'] = options.headers.Authorization;\n delete options.headers.Authorization;\n }\n\n if (this.noBackendCache) {\n options.headers['X-Grafana-NoCache'] = 'true';\n }\n }\n\n return this.$http(options)\n .then(response => {\n if (!options.silent) {\n appEvents.emit('ds-request-response', response);\n }\n return response;\n })\n .catch(err => {\n if (err.status === this.HTTP_REQUEST_CANCELLED) {\n throw { err, cancelled: true };\n }\n\n // handle unauthorized for backend requests\n if (requestIsLocal && firstAttempt && err.status === 401) {\n return this.loginPing().then(() => {\n options.retry = 1;\n if (canceler) {\n canceler.resolve();\n }\n return this.datasourceRequest(options);\n });\n }\n\n // populate error obj on Internal Error\n if (_.isString(err.data) && err.status === 500) {\n err.data = {\n error: err.statusText,\n response: err.data,\n };\n }\n\n // for Prometheus\n if (err.data && !err.data.message && _.isString(err.data.error)) {\n err.data.message = err.data.error;\n }\n if (!options.silent) {\n appEvents.emit('ds-request-error', err);\n }\n throw err;\n })\n .finally(() => {\n // clean up\n if (options.requestId) {\n this.inFlightRequests[options.requestId].shift();\n }\n });\n }\n\n loginPing() {\n return this.request({ url: '/api/login/ping', method: 'GET', retry: 1 });\n }\n\n search(query) {\n return this.get('/api/search', query);\n }\n\n getDashboardBySlug(slug) {\n return this.get(`/api/dashboards/db/${slug}`);\n }\n\n getDashboardByUid(uid: string) {\n return this.get(`/api/dashboards/uid/${uid}`);\n }\n\n getFolderByUid(uid: string) {\n return this.get(`/api/folders/${uid}`);\n }\n\n saveDashboard(dash, options) {\n options = options || {};\n\n return this.post('/api/dashboards/db/', {\n dashboard: dash,\n folderId: options.folderId,\n overwrite: options.overwrite === true,\n message: options.message || '',\n });\n }\n\n createFolder(payload: any) {\n return this.post('/api/folders', payload);\n }\n\n deleteFolder(uid: string, showSuccessAlert) {\n return this.request({ method: 'DELETE', url: `/api/folders/${uid}`, showSuccessAlert: showSuccessAlert === true });\n }\n\n deleteDashboard(uid, showSuccessAlert) {\n return this.request({\n method: 'DELETE',\n url: `/api/dashboards/uid/${uid}`,\n showSuccessAlert: showSuccessAlert === true,\n });\n }\n\n deleteFoldersAndDashboards(folderUids, dashboardUids) {\n const tasks = [];\n\n for (const folderUid of folderUids) {\n tasks.push(this.createTask(this.deleteFolder.bind(this), true, folderUid, true));\n }\n\n for (const dashboardUid of dashboardUids) {\n tasks.push(this.createTask(this.deleteDashboard.bind(this), true, dashboardUid, true));\n }\n\n return this.executeInOrder(tasks, []);\n }\n\n moveDashboards(dashboardUids, toFolder) {\n const tasks = [];\n\n for (const uid of dashboardUids) {\n tasks.push(this.createTask(this.moveDashboard.bind(this), true, uid, toFolder));\n }\n\n return this.executeInOrder(tasks, []).then(result => {\n return {\n totalCount: result.length,\n successCount: _.filter(result, { succeeded: true }).length,\n alreadyInFolderCount: _.filter(result, { alreadyInFolder: true }).length,\n };\n });\n }\n\n private moveDashboard(uid, toFolder) {\n const deferred = this.$q.defer();\n\n this.getDashboardByUid(uid).then(fullDash => {\n const model = new DashboardModel(fullDash.dashboard, fullDash.meta);\n\n if ((!fullDash.meta.folderId && toFolder.id === 0) || fullDash.meta.folderId === toFolder.id) {\n deferred.resolve({ alreadyInFolder: true });\n return;\n }\n\n const clone = model.getSaveModelClone();\n const options = {\n folderId: toFolder.id,\n overwrite: false,\n };\n\n this.saveDashboard(clone, options)\n .then(() => {\n deferred.resolve({ succeeded: true });\n })\n .catch(err => {\n if (err.data && err.data.status === 'plugin-dashboard') {\n err.isHandled = true;\n options.overwrite = true;\n\n this.saveDashboard(clone, options)\n .then(() => {\n deferred.resolve({ succeeded: true });\n })\n .catch(err => {\n deferred.resolve({ succeeded: false });\n });\n } else {\n deferred.resolve({ succeeded: false });\n }\n });\n });\n\n return deferred.promise;\n }\n\n private createTask(fn, ignoreRejections, ...args: any[]) {\n return result => {\n return fn\n .apply(null, args)\n .then(res => {\n return Array.prototype.concat(result, [res]);\n })\n .catch(err => {\n if (ignoreRejections) {\n return result;\n }\n\n throw err;\n });\n };\n }\n\n private executeInOrder(tasks, initialValue) {\n return tasks.reduce(this.$q.when, initialValue);\n }\n}\n\ncoreModule.service('backendSrv', BackendSrv);\n\n//\n// Code below is to expore the service to react components\n//\n\nlet singletonInstance: BackendSrv;\n\nexport function setBackendSrv(instance: BackendSrv) {\n singletonInstance = instance;\n}\n\nexport function getBackendSrv(): BackendSrv {\n return singletonInstance;\n}\n","export const getPlugins = state => {\n const regex = new RegExp(state.searchQuery, 'i');\n\n return state.plugins.filter(item => {\n return regex.test(item.name) || regex.test(item.info.author.name) || regex.test(item.info.description);\n });\n};\n\nexport const getPluginsSearchQuery = state => state.searchQuery;\nexport const getLayoutMode = state => state.layoutMode;\n","import { NavModelItem } from '../../types';\n\nexport enum ActionTypes {\n UpdateNavIndex = 'UPDATE_NAV_INDEX',\n}\n\nexport type Action = UpdateNavIndexAction;\n\nexport interface UpdateNavIndexAction {\n type: ActionTypes.UpdateNavIndex;\n payload: NavModelItem;\n}\n\nexport const updateNavIndex = (item: NavModelItem): UpdateNavIndexAction => ({\n type: ActionTypes.UpdateNavIndex,\n payload: item,\n});\n","export const getRouteParamsId = state => state.routeParams.id;\n\nexport const getRouteParamsPage = state => state.routeParams.page;\n","import _ from 'lodash';\nimport coreModule from '../core_module';\n\n/** @ngInject */\nexport function dashClass() {\n return {\n link: ($scope, elem) => {\n $scope.onAppEvent('panel-fullscreen-enter', () => {\n elem.toggleClass('panel-in-fullscreen', true);\n });\n\n $scope.onAppEvent('panel-fullscreen-exit', () => {\n elem.toggleClass('panel-in-fullscreen', false);\n });\n\n $scope.$watch('ctrl.dashboardViewState.state.editview', newValue => {\n if (newValue) {\n elem.toggleClass('dashboard-page--settings-opening', _.isString(newValue));\n setTimeout(() => {\n elem.toggleClass('dashboard-page--settings-open', _.isString(newValue));\n }, 10);\n } else {\n elem.removeClass('dashboard-page--settings-opening');\n elem.removeClass('dashboard-page--settings-open');\n }\n });\n },\n };\n}\n\ncoreModule.directive('dashClass', dashClass);\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport coreModule from '../core_module';\n\n/** @ngInject */\nexport function dropdownTypeahead($compile) {\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, elem, attrs) => {\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 => {\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, 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 $scope.menuItemSelected = (index, subIndex) => {\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 };\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: typeaheadValues,\n minLength: 1,\n items: 10,\n updater: value => {\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 $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) {\n const inputTemplate =\n '';\n\n const buttonTemplate =\n '';\n\n return {\n scope: {\n menuItems: '=dropdownTypeahead2',\n dropdownTypeaheadOnSelect: '&dropdownTypeaheadOnSelect',\n model: '=ngModel',\n },\n link: ($scope, elem, attrs) => {\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 => {\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, 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 $scope.menuItemSelected = (index, subIndex) => {\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 };\n\n $input.attr('data-provide', 'typeahead');\n $input.typeahead({\n source: typeaheadValues,\n minLength: 1,\n items: 10,\n updater: value => {\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 $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\ncoreModule.directive('dropdownTypeahead', dropdownTypeahead);\ncoreModule.directive('dropdownTypeahead2', dropdownTypeahead2);\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport coreModule from '../core_module';\n\n/** @ngInject */\nexport function metricSegment($compile, $sce, 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, elem) => {\n const $input = $(inputTemplate);\n const segment = $scope.segment;\n const $button = $(segment.selectMode ? selectTemplate : linkTemplate);\n let options = null;\n let cancelBlur = null;\n let linkMode = true;\n const debounceLookup = $scope.debounce;\n\n $input.appendTo(elem);\n $button.appendTo(elem);\n\n $scope.updateVariableValue = value => {\n if (value === '' || segment.value === value) {\n return;\n }\n\n $scope.$apply(() => {\n const selected = _.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 => {\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, callback) => {\n $scope.$apply(() => {\n $scope.getOptions({ $query: query }).then(altSegments => {\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 => {\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) {\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, $q) {\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, elem, attrs) {\n let cachedOptions;\n\n $scope.valueToSegment = value => {\n const option = _.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 $q.when(\n _.map($scope.options, option => {\n return { value: option.text };\n })\n );\n } else {\n return $scope.getOptions().then(options => {\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 = _.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';\nimport Clipboard from 'clipboard';\nimport coreModule from '../core_module';\nimport kbn from 'app/core/utils/kbn';\nimport { appEvents } from 'app/core/core';\n\n/** @ngInject */\nfunction tip($compile) {\n return {\n restrict: 'E',\n link: (scope, elem, attrs) => {\n let _t =\n '';\n _t = _t.replace(/{/g, '\\\\{').replace(/}/g, '\\\\}');\n elem.replaceWith($compile(angular.element(_t))(scope));\n },\n };\n}\n\nfunction clipboardButton() {\n return {\n scope: {\n getText: '&clipboardButton',\n },\n link: (scope, elem) => {\n scope.clipboard = new Clipboard(elem[0], {\n text: () => {\n return scope.getText();\n },\n });\n\n scope.clipboard.on('success', () => {\n appEvents.emit('alert-success', ['Content copied to clipboard']);\n });\n\n scope.$on('$destroy', () => {\n if (scope.clipboard) {\n scope.clipboard.destroy();\n }\n });\n },\n };\n}\n\n/** @ngInject */\nfunction compile($compile) {\n return {\n restrict: 'A',\n link: (scope, element, attrs) => {\n scope.$watch(\n scope => {\n return scope.$eval(attrs.compile);\n },\n value => {\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, element) => {\n element.on('input', () => {\n scope.$apply(() => {\n scope.onchange({ inputValue: element.val() });\n });\n });\n },\n };\n}\n\n/** @ngInject */\nfunction editorOptBool($compile) {\n return {\n restrict: 'E',\n link: (scope, elem, attrs) => {\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, $interpolate) {\n return {\n restrict: 'E',\n link: (scope, elem, attrs) => {\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, $compile, $timeout) {\n function buildTemplate(items, placement?) {\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, iElement, iAttrs) {\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('clipboardButton', clipboardButton);\ncoreModule.directive('compile', compile);\ncoreModule.directive('watchChange', watchChange);\ncoreModule.directive('editorOptBool', editorOptBool);\ncoreModule.directive('editorCheckbox', editorCheckbox);\ncoreModule.directive('gfDropdown', gfDropdown);\n","import coreModule from '../core_module';\nimport * as rangeUtil from 'app/core/utils/rangeutil';\n\nfunction ngModelOnBlur() {\n return {\n restrict: 'A',\n priority: 1,\n require: 'ngModel',\n link: (scope, elm, attr, ngModelCtrl) => {\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, elm, attrs, ctrl) => {\n ctrl.$parsers.push(viewValue => {\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, elm, attrs, ctrl) => {\n ctrl.$validators.integer = (modelValue, viewValue) => {\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';\nimport coreModule from '../core_module';\nimport tags from 'app/core/utils/tags';\nimport 'vendor/tagsinput/bootstrap-tagsinput.js';\n\nfunction setColor(name, element) {\n const { color, borderColor } = tags.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, element) => {\n setColor(scope.tagColorFromName, element);\n },\n };\n}\n\nfunction bootstrapTagsinput() {\n function getItemProperty(scope, property) {\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 => {\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, element, attrs) {\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 => {\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 => {\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 angular from 'angular';\nimport _ from 'lodash';\nimport coreModule from '../core_module';\n\nexport class ValueSelectDropdownCtrl {\n dropdownVisible: any;\n highlightIndex: any;\n linkText: any;\n oldVariableText: any;\n options: any;\n search: any;\n selectedTags: any;\n selectedValues: any;\n tags: any;\n variable: any;\n\n hide: any;\n onUpdated: any;\n\n /** @ngInject */\n constructor(private $q) {}\n\n show() {\n this.oldVariableText = this.variable.current.text;\n this.highlightIndex = -1;\n\n this.options = this.variable.options;\n this.selectedValues = _.filter(this.options, { selected: true });\n\n this.tags = _.map(this.variable.tags, value => {\n let tag = { text: value, selected: false };\n _.each(this.variable.current.tags, tagObj => {\n if (tagObj.text === value) {\n tag = tagObj;\n }\n });\n return tag;\n });\n\n this.search = {\n query: '',\n options: this.options.slice(0, Math.min(this.options.length, 1000)),\n };\n\n this.dropdownVisible = true;\n }\n\n updateLinkText() {\n const current = this.variable.current;\n\n if (current.tags && current.tags.length) {\n // filer out values that are in selected tags\n const selectedAndNotInTag = _.filter(this.variable.options, option => {\n if (!option.selected) {\n return false;\n }\n for (let i = 0; i < current.tags.length; i++) {\n const tag = current.tags[i];\n if (_.indexOf(tag.values, option.value) !== -1) {\n return false;\n }\n }\n return true;\n });\n\n // convert values to text\n const currentTexts = _.map(selectedAndNotInTag, 'text');\n\n // join texts\n this.linkText = currentTexts.join(' + ');\n if (this.linkText.length > 0) {\n this.linkText += ' + ';\n }\n } else {\n this.linkText = this.variable.current.text;\n }\n }\n\n clearSelections() {\n _.each(this.options, option => {\n option.selected = false;\n });\n\n this.selectionsChanged(false);\n }\n\n selectTag(tag) {\n tag.selected = !tag.selected;\n let tagValuesPromise;\n if (!tag.values) {\n tagValuesPromise = this.variable.getValuesForTag(tag.text);\n } else {\n tagValuesPromise = this.$q.when(tag.values);\n }\n\n return tagValuesPromise.then(values => {\n tag.values = values;\n tag.valuesText = values.join(' + ');\n _.each(this.options, option => {\n if (_.indexOf(tag.values, option.value) !== -1) {\n option.selected = tag.selected;\n }\n });\n\n this.selectionsChanged(false);\n });\n }\n\n keyDown(evt) {\n if (evt.keyCode === 27) {\n this.hide();\n }\n if (evt.keyCode === 40) {\n this.moveHighlight(1);\n }\n if (evt.keyCode === 38) {\n this.moveHighlight(-1);\n }\n if (evt.keyCode === 13) {\n if (this.search.options.length === 0) {\n this.commitChanges();\n } else {\n this.selectValue(this.search.options[this.highlightIndex], {}, true, false);\n }\n }\n if (evt.keyCode === 32) {\n this.selectValue(this.search.options[this.highlightIndex], {}, false, false);\n }\n }\n\n moveHighlight(direction) {\n this.highlightIndex = (this.highlightIndex + direction) % this.search.options.length;\n }\n\n selectValue(option, event, commitChange?, excludeOthers?) {\n if (!option) {\n return;\n }\n\n option.selected = this.variable.multi ? !option.selected : true;\n\n commitChange = commitChange || false;\n excludeOthers = excludeOthers || false;\n\n const setAllExceptCurrentTo = newValue => {\n _.each(this.options, other => {\n if (option !== other) {\n other.selected = newValue;\n }\n });\n };\n\n // commit action (enter key), should not deselect it\n if (commitChange) {\n option.selected = true;\n }\n\n if (option.text === 'All' || excludeOthers) {\n setAllExceptCurrentTo(false);\n commitChange = true;\n } else if (!this.variable.multi) {\n setAllExceptCurrentTo(false);\n commitChange = true;\n } else if (event.ctrlKey || event.metaKey || event.shiftKey) {\n commitChange = true;\n setAllExceptCurrentTo(false);\n }\n\n this.selectionsChanged(commitChange);\n }\n\n selectionsChanged(commitChange) {\n this.selectedValues = _.filter(this.options, { selected: true });\n\n if (this.selectedValues.length > 1) {\n if (this.selectedValues[0].text === 'All') {\n this.selectedValues[0].selected = false;\n this.selectedValues = this.selectedValues.slice(1, this.selectedValues.length);\n }\n }\n\n // validate selected tags\n _.each(this.tags, tag => {\n if (tag.selected) {\n _.each(tag.values, value => {\n if (!_.find(this.selectedValues, { value: value })) {\n tag.selected = false;\n }\n });\n }\n });\n\n this.selectedTags = _.filter(this.tags, { selected: true });\n this.variable.current.value = _.map(this.selectedValues, 'value');\n this.variable.current.text = _.map(this.selectedValues, 'text').join(' + ');\n this.variable.current.tags = this.selectedTags;\n\n if (!this.variable.multi) {\n this.variable.current.value = this.selectedValues[0].value;\n }\n\n if (commitChange) {\n this.commitChanges();\n }\n }\n\n commitChanges() {\n // if we have a search query and no options use that\n if (this.search.options.length === 0 && this.search.query.length > 0) {\n this.variable.current = { text: this.search.query, value: this.search.query };\n } else if (this.selectedValues.length === 0) {\n // make sure one option is selected\n this.options[0].selected = true;\n this.selectionsChanged(false);\n }\n\n this.dropdownVisible = false;\n this.updateLinkText();\n\n if (this.variable.current.text !== this.oldVariableText) {\n this.onUpdated();\n }\n }\n\n queryChanged() {\n this.highlightIndex = -1;\n this.search.options = _.filter(this.options, option => {\n return option.text.toLowerCase().indexOf(this.search.query.toLowerCase()) !== -1;\n });\n\n this.search.options = this.search.options.slice(0, Math.min(this.search.options.length, 1000));\n }\n\n init() {\n this.selectedTags = this.variable.current.tags || [];\n this.updateLinkText();\n }\n}\n\n/** @ngInject */\nexport function valueSelectDropdown($compile, $window, $timeout, $rootScope) {\n return {\n scope: { variable: '=', onUpdated: '&' },\n templateUrl: 'public/app/partials/valueSelectDropdown.html',\n controller: 'ValueSelectDropdownCtrl',\n controllerAs: 'vm',\n bindToController: true,\n link: (scope, elem) => {\n const bodyEl = angular.element($window.document.body);\n const linkEl = elem.find('.variable-value-link');\n const inputEl = elem.find('input');\n\n function openDropdown() {\n inputEl.css('width', Math.max(linkEl.width(), 80) + 'px');\n\n inputEl.show();\n linkEl.hide();\n\n inputEl.focus();\n $timeout(\n () => {\n bodyEl.on('click', bodyOnClick);\n },\n 0,\n false\n );\n }\n\n function switchToLink() {\n inputEl.hide();\n linkEl.show();\n bodyEl.off('click', bodyOnClick);\n }\n\n function bodyOnClick(e) {\n if (elem.has(e.target).length === 0) {\n scope.$apply(() => {\n scope.vm.commitChanges();\n });\n }\n }\n\n scope.$watch('vm.dropdownVisible', newValue => {\n if (newValue) {\n openDropdown();\n } else {\n switchToLink();\n }\n });\n\n const cleanUp = $rootScope.$on('template-variable-value-updated', () => {\n scope.vm.updateLinkText();\n });\n\n scope.$on('$destroy', () => {\n cleanUp();\n });\n\n scope.vm.init();\n },\n };\n}\n\ncoreModule.controller('ValueSelectDropdownCtrl', ValueSelectDropdownCtrl);\ncoreModule.directive('valueSelectDropdown', valueSelectDropdown);\n","import $ from 'jquery';\nimport coreModule from '../core_module';\n\nfunction getBlockNodes(nodes) {\n let node = nodes[0];\n const endNode = nodes[nodes.length - 1];\n let blockNodes;\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));\n }\n blockNodes.push(node);\n }\n node = node.nextSibling;\n }\n\n return blockNodes || nodes;\n}\n\n/** @ngInject */\nfunction rebuildOnChange($animate) {\n return {\n multiElement: true,\n terminal: true,\n transclude: true,\n priority: 600,\n restrict: 'E',\n link: (scope, elem, attrs, ctrl, transclude) => {\n let block, childScope, previousElements;\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, oldValue) {\n if (childScope && value !== oldValue) {\n cleanUp();\n }\n\n if (!childScope && (value || attrs.showNull)) {\n transclude((clone, newScope) => {\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, element, attrs) => {\n element.click(e => {\n e.stopPropagation();\n });\n\n scope.$watch(\n attrs.giveFocus,\n newValue => {\n if (!newValue) {\n return;\n }\n setTimeout(() => {\n element.focus();\n const domEl = 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';\nimport coreModule from '../core_module';\n\nexport class DeltaCtrl {\n observer: any;\n\n /** @ngInject */\n constructor(private $rootScope) {\n const waitForCompile = mutations => {\n if (mutations.length === 1) {\n this.$rootScope.appEvent('json-diff-ready');\n }\n };\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, private $rootScope, private $anchorScroll) {}\n\n goToLine(line: number) {\n let unbind;\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 $ from 'jquery';\nimport angular from 'angular';\nimport _ 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, y, opts) {\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 $tooltip.css('left', x + opts.offset + width > $win.width() ? x - opts.offset - width : x + opts.offset);\n $tooltip.css('top', y + opts.offset + height > $win.height() ? y - opts.offset - height : y + opts.offset);\n });\n };\n})();\n","// Based on work https://github.com/mohsen1/json-formatter-js\n// Licence MIT, Copyright (c) 2015 Mohsen Azimi\n\n/*\n * Escapes `\"` characters from string\n*/\nfunction escapeString(str: string): string {\n return str.replace('\"', '\"');\n}\n\n/*\n * Determines if a value is an object\n*/\nexport function isObject(value: any): boolean {\n const type = typeof value;\n return !!value && type === 'object';\n}\n\n/*\n * Gets constructor name of an object.\n * From http://stackoverflow.com/a/332429\n *\n*/\nexport function getObjectName(object: object): string {\n if (object === undefined) {\n return '';\n }\n if (object === null) {\n return 'Object';\n }\n if (typeof object === 'object' && !object.constructor) {\n return 'Object';\n }\n\n const funcNameRegex = /function ([^(]*)/;\n const results = funcNameRegex.exec(object.constructor.toString());\n if (results && results.length > 1) {\n return results[1];\n } else {\n return '';\n }\n}\n\n/*\n * Gets type of an object. Returns \"null\" for null objects\n*/\nexport function getType(object: object): string {\n if (object === null) {\n return 'null';\n }\n return typeof object;\n}\n\n/*\n * Generates inline preview for a JavaScript object based on a value\n*/\nexport function getValuePreview(object: object, value: string): string {\n const type = getType(object);\n\n if (type === 'null' || type === 'undefined') {\n return type;\n }\n\n if (type === 'string') {\n value = '\"' + escapeString(value) + '\"';\n }\n if (type === 'function') {\n // Remove content of the function\n return (\n object\n .toString()\n .replace(/[\\r\\n]/g, '')\n .replace(/\\{.*\\}/, '') + '{…}'\n );\n }\n return value;\n}\n\n/*\n * Generates inline preview for a JavaScript object\n*/\nlet value = '';\nexport function getPreview(obj: object): string {\n if (isObject(obj)) {\n value = getObjectName(obj);\n if (Array.isArray(obj)) {\n value += '[' + obj.length + ']';\n }\n } else {\n value = getValuePreview(obj, obj.toString());\n }\n return value;\n}\n\n/*\n * Generates a prefixed CSS class name\n*/\nexport function cssClass(className: string): string {\n return `json-formatter-${className}`;\n}\n\n/*\n * Creates a new DOM element with given type and class\n * TODO: move me to helpers\n*/\nexport function createElement(type: string, className?: string, content?: Element | string): Element {\n const el = document.createElement(type);\n if (className) {\n el.classList.add(cssClass(className));\n }\n if (content !== undefined) {\n if (content instanceof Node) {\n el.appendChild(content);\n } else {\n el.appendChild(document.createTextNode(String(content)));\n }\n }\n return el;\n}\n","// Based on work https://github.com/mohsen1/json-formatter-js\n// Licence MIT, Copyright (c) 2015 Mohsen Azimi\n\nimport { isObject, getObjectName, getType, getValuePreview, cssClass, createElement } from './helpers';\n\nimport _ from 'lodash';\n\nconst DATE_STRING_REGEX = /(^\\d{1,4}[\\.|\\\\/|-]\\d{1,2}[\\.|\\\\/|-]\\d{1,4})(\\s*(?:0?[1-9]:[0-5]|1(?=[012])\\d:[0-5])\\d\\s*[ap]m)?$/;\nconst PARTIAL_DATE_REGEX = /\\d{2}:\\d{2}:\\d{2} GMT-\\d{4}/;\nconst JSON_DATE_REGEX = /\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}.\\d{3}Z/;\n\n// When toggleing, don't animated removal or addition of more than a few items\nconst MAX_ANIMATED_TOGGLE_ITEMS = 10;\n\nconst requestAnimationFrame =\n window.requestAnimationFrame ||\n ((cb: () => void) => {\n cb();\n return 0;\n });\n\nexport interface JsonExplorerConfig {\n animateOpen?: boolean;\n animateClose?: boolean;\n theme?: string;\n}\n\nconst _defaultConfig: JsonExplorerConfig = {\n animateOpen: true,\n animateClose: true,\n theme: null,\n};\n\n/**\n * @class JsonExplorer\n *\n * JsonExplorer allows you to render JSON objects in HTML with a\n * **collapsible** navigation.\n */\nexport class JsonExplorer {\n // Hold the open state after the toggler is used\n private _isOpen: boolean = null;\n\n // A reference to the element that we render to\n private element: Element;\n\n private skipChildren = false;\n\n /**\n * @param {object} json The JSON object you want to render. It has to be an\n * object or array. Do NOT pass raw JSON string.\n *\n * @param {number} [open=1] his number indicates up to how many levels the\n * rendered tree should expand. Set it to `0` to make the whole tree collapsed\n * or set it to `Infinity` to expand the tree deeply\n *\n * @param {object} [config=defaultConfig] -\n * defaultConfig = {\n * hoverPreviewEnabled: false,\n * hoverPreviewArrayCount: 100,\n * hoverPreviewFieldCount: 5\n * }\n *\n * Available configurations:\n * #####Hover Preview\n * * `hoverPreviewEnabled`: enable preview on hover\n * * `hoverPreviewArrayCount`: number of array items to show in preview Any\n * array larger than this number will be shown as `Array[XXX]` where `XXX`\n * is length of the array.\n * * `hoverPreviewFieldCount`: number of object properties to show for object\n * preview. Any object with more properties that thin number will be\n * truncated.\n *\n * @param {string} [key=undefined] The key that this object in it's parent\n * context\n */\n constructor(\n public json: any,\n private open = 1,\n private config: JsonExplorerConfig = _defaultConfig,\n private key?: string\n ) {}\n\n /*\n * is formatter open?\n */\n private get isOpen(): boolean {\n if (this._isOpen !== null) {\n return this._isOpen;\n } else {\n return this.open > 0;\n }\n }\n\n /*\n * set open state (from toggler)\n */\n private set isOpen(value: boolean) {\n this._isOpen = value;\n }\n\n /*\n * is this a date string?\n */\n private get isDate(): boolean {\n return (\n this.type === 'string' &&\n (DATE_STRING_REGEX.test(this.json) || JSON_DATE_REGEX.test(this.json) || PARTIAL_DATE_REGEX.test(this.json))\n );\n }\n\n /*\n * is this a URL string?\n */\n private get isUrl(): boolean {\n return this.type === 'string' && this.json.indexOf('http') === 0;\n }\n\n /*\n * is this an array?\n */\n private get isArray(): boolean {\n return Array.isArray(this.json);\n }\n\n /*\n * is this an object?\n * Note: In this context arrays are object as well\n */\n private get isObject(): boolean {\n return isObject(this.json);\n }\n\n /*\n * is this an empty object with no properties?\n */\n private get isEmptyObject(): boolean {\n return !this.keys.length && !this.isArray;\n }\n\n /*\n * is this an empty object or array?\n */\n private get isEmpty(): boolean {\n return this.isEmptyObject || (this.keys && !this.keys.length && this.isArray);\n }\n\n /*\n * did we receive a key argument?\n * This means that the formatter was called as a sub formatter of a parent formatter\n */\n private get hasKey(): boolean {\n return typeof this.key !== 'undefined';\n }\n\n /*\n * if this is an object, get constructor function name\n */\n private get constructorName(): string {\n return getObjectName(this.json);\n }\n\n /*\n * get type of this value\n * Possible values: all JavaScript primitive types plus \"array\" and \"null\"\n */\n private get type(): string {\n return getType(this.json);\n }\n\n /*\n * get object keys\n * If there is an empty key we pad it wit quotes to make it visible\n */\n private get keys(): string[] {\n if (this.isObject) {\n return Object.keys(this.json).map(key => (key ? key : '\"\"'));\n } else {\n return [];\n }\n }\n\n /**\n * Toggles `isOpen` state\n *\n */\n toggleOpen() {\n this.isOpen = !this.isOpen;\n\n if (this.element) {\n if (this.isOpen) {\n this.appendChildren(this.config.animateOpen);\n } else {\n this.removeChildren(this.config.animateClose);\n }\n this.element.classList.toggle(cssClass('open'));\n }\n }\n\n /**\n * Open all children up to a certain depth.\n * Allows actions such as expand all/collapse all\n *\n */\n openAtDepth(depth = 1) {\n if (depth < 0) {\n return;\n }\n\n this.open = depth;\n this.isOpen = depth !== 0;\n\n if (this.element) {\n this.removeChildren(false);\n\n if (depth === 0) {\n this.element.classList.remove(cssClass('open'));\n } else {\n this.appendChildren(this.config.animateOpen);\n this.element.classList.add(cssClass('open'));\n }\n }\n }\n\n isNumberArray() {\n return this.json.length > 0 && this.json.length < 4 && (_.isNumber(this.json[0]) || _.isNumber(this.json[1]));\n }\n\n renderArray() {\n const arrayWrapperSpan = createElement('span');\n arrayWrapperSpan.appendChild(createElement('span', 'bracket', '['));\n\n // some pretty handling of number arrays\n if (this.isNumberArray()) {\n this.json.forEach((val, index) => {\n if (index > 0) {\n arrayWrapperSpan.appendChild(createElement('span', 'array-comma', ','));\n }\n arrayWrapperSpan.appendChild(createElement('span', 'number', val));\n });\n this.skipChildren = true;\n } else {\n arrayWrapperSpan.appendChild(createElement('span', 'number', this.json.length));\n }\n\n arrayWrapperSpan.appendChild(createElement('span', 'bracket', ']'));\n return arrayWrapperSpan;\n }\n\n /**\n * Renders an HTML element and installs event listeners\n *\n * @returns {HTMLDivElement}\n */\n render(skipRoot = false): HTMLDivElement {\n // construct the root element and assign it to this.element\n this.element = createElement('div', 'row');\n\n // construct the toggler link\n const togglerLink = createElement('a', 'toggler-link');\n const togglerIcon = createElement('span', 'toggler');\n\n // if this is an object we need a wrapper span (toggler)\n if (this.isObject) {\n togglerLink.appendChild(togglerIcon);\n }\n\n // if this is child of a parent formatter we need to append the key\n if (this.hasKey) {\n togglerLink.appendChild(createElement('span', 'key', `${this.key}:`));\n }\n\n // Value for objects and arrays\n if (this.isObject) {\n // construct the value holder element\n const value = createElement('span', 'value');\n\n // we need a wrapper span for objects\n const objectWrapperSpan = createElement('span');\n\n // get constructor name and append it to wrapper span\n const constructorName = createElement('span', 'constructor-name', this.constructorName);\n objectWrapperSpan.appendChild(constructorName);\n\n // if it's an array append the array specific elements like brackets and length\n if (this.isArray) {\n const arrayWrapperSpan = this.renderArray();\n objectWrapperSpan.appendChild(arrayWrapperSpan);\n }\n\n // append object wrapper span to toggler link\n value.appendChild(objectWrapperSpan);\n togglerLink.appendChild(value);\n // Primitive values\n } else {\n // make a value holder element\n const value = this.isUrl ? createElement('a') : createElement('span');\n\n // add type and other type related CSS classes\n value.classList.add(cssClass(this.type));\n if (this.isDate) {\n value.classList.add(cssClass('date'));\n }\n if (this.isUrl) {\n value.classList.add(cssClass('url'));\n value.setAttribute('href', this.json);\n }\n\n // Append value content to value element\n const valuePreview = getValuePreview(this.json, this.json);\n value.appendChild(document.createTextNode(valuePreview));\n\n // append the value element to toggler link\n togglerLink.appendChild(value);\n }\n\n // construct a children element\n const children = createElement('div', 'children');\n\n // set CSS classes for children\n if (this.isObject) {\n children.classList.add(cssClass('object'));\n }\n if (this.isArray) {\n children.classList.add(cssClass('array'));\n }\n if (this.isEmpty) {\n children.classList.add(cssClass('empty'));\n }\n\n // set CSS classes for root element\n if (this.config && this.config.theme) {\n this.element.classList.add(cssClass(this.config.theme));\n }\n if (this.isOpen) {\n this.element.classList.add(cssClass('open'));\n }\n\n // append toggler and children elements to root element\n if (!skipRoot) {\n this.element.appendChild(togglerLink);\n }\n\n if (!this.skipChildren) {\n this.element.appendChild(children);\n } else {\n // remove togglerIcon\n togglerLink.removeChild(togglerIcon);\n }\n\n // if formatter is set to be open call appendChildren\n if (this.isObject && this.isOpen) {\n this.appendChildren();\n }\n\n // add event listener for toggling\n if (this.isObject) {\n togglerLink.addEventListener('click', this.toggleOpen.bind(this));\n }\n\n return this.element as HTMLDivElement;\n }\n\n /**\n * Appends all the children to children element\n * Animated option is used when user triggers this via a click\n */\n appendChildren(animated = false) {\n const children = this.element.querySelector(`div.${cssClass('children')}`);\n\n if (!children || this.isEmpty) {\n return;\n }\n\n if (animated) {\n let index = 0;\n const addAChild = () => {\n const key = this.keys[index];\n const formatter = new JsonExplorer(this.json[key], this.open - 1, this.config, key);\n children.appendChild(formatter.render());\n\n index += 1;\n\n if (index < this.keys.length) {\n if (index > MAX_ANIMATED_TOGGLE_ITEMS) {\n addAChild();\n } else {\n requestAnimationFrame(addAChild);\n }\n }\n };\n\n requestAnimationFrame(addAChild);\n } else {\n this.keys.forEach(key => {\n const formatter = new JsonExplorer(this.json[key], this.open - 1, this.config, key);\n children.appendChild(formatter.render());\n });\n }\n }\n\n /**\n * Removes all the children from children element\n * Animated option is used when user triggers this via a click\n */\n removeChildren(animated = false) {\n const childrenElement = this.element.querySelector(`div.${cssClass('children')}`) as HTMLDivElement;\n\n if (animated) {\n let childrenRemoved = 0;\n const removeAChild = () => {\n if (childrenElement && childrenElement.children.length) {\n childrenElement.removeChild(childrenElement.children[0]);\n childrenRemoved += 1;\n if (childrenRemoved > MAX_ANIMATED_TOGGLE_ITEMS) {\n removeAChild();\n } else {\n requestAnimationFrame(removeAChild);\n }\n }\n };\n requestAnimationFrame(removeAChild);\n } else {\n if (childrenElement) {\n childrenElement.innerHTML = '';\n }\n }\n }\n}\n","import coreModule from 'app/core/core_module';\nimport { JsonExplorer } from '../json_explorer/json_explorer';\n\ncoreModule.directive('jsonTree', [\n function jsonTreeDirective() {\n return {\n restrict: 'E',\n scope: {\n object: '=',\n startExpanded: '@',\n rootName: '@',\n },\n link: (scope, elem) => {\n const jsonExp = new JsonExplorer(scope.object, 3, {\n animateOpen: true,\n });\n\n const html = jsonExp.render(true);\n elem.html(html);\n },\n };\n },\n]);\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/core/core_module';\nimport config from 'app/core/config';\nimport ace from 'brace';\nimport './theme-grafana-dark';\nimport 'brace/ext/language_tools';\nimport 'brace/theme/textmate';\nimport 'brace/mode/text';\nimport 'brace/snippets/text';\nimport 'brace/mode/sql';\nimport 'brace/snippets/sql';\nimport 'brace/mode/sqlserver';\nimport 'brace/snippets/sqlserver';\nimport 'brace/mode/markdown';\nimport 'brace/snippets/markdown';\nimport 'brace/mode/json';\nimport 'brace/snippets/json';\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_BEHAVIOURS = true;\nconst DEFAULT_SNIPPETS = true;\n\nconst editorTemplate = `
    `;\n\nfunction link(scope, elem, attrs) {\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_BEHAVIOURS;\n const snippetsEnabled = attrs.snippetsEnabled ? attrs.snippetsEnabled === 'true' : DEFAULT_SNIPPETS;\n\n // Initialize editor\n const aceElem = elem.get(0);\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(15, 15);\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 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, oldValue) => {\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) {\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) {\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 React from 'react';\nimport { sortedColors } from 'app/core/utils/colors';\n\nexport interface Props {\n color: string;\n onColorSelect: (c: string) => void;\n}\n\nexport class ColorPalette extends React.Component {\n paletteColors: string[];\n\n constructor(props) {\n super(props);\n this.paletteColors = sortedColors;\n this.onColorSelect = this.onColorSelect.bind(this);\n }\n\n onColorSelect(color) {\n return () => {\n this.props.onColorSelect(color);\n };\n }\n\n render() {\n const colorPaletteItems = this.paletteColors.map(paletteColor => {\n const cssClass = paletteColor.toLowerCase() === this.props.color.toLowerCase() ? 'fa-circle-o' : 'fa-circle';\n return (\n \n  \n
    \n );\n });\n return (\n
    \n

    {colorPaletteItems}

    \n
    \n );\n }\n}\n","import React from 'react';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport 'vendor/spectrum';\n\nexport interface Props {\n color: string;\n options: object;\n onColorSelect: (c: string) => void;\n}\n\nexport class SpectrumPicker extends React.Component {\n elem: any;\n isMoving: boolean;\n\n constructor(props) {\n super(props);\n this.onSpectrumMove = this.onSpectrumMove.bind(this);\n this.setComponentElem = this.setComponentElem.bind(this);\n }\n\n setComponentElem(elem) {\n this.elem = $(elem);\n }\n\n onSpectrumMove(color) {\n this.isMoving = true;\n this.props.onColorSelect(color);\n }\n\n componentDidMount() {\n const spectrumOptions = _.assignIn(\n {\n flat: true,\n showAlpha: true,\n showButtons: false,\n color: this.props.color,\n appendTo: this.elem,\n move: this.onSpectrumMove,\n },\n this.props.options\n );\n\n this.elem.spectrum(spectrumOptions);\n this.elem.spectrum('show');\n this.elem.spectrum('set', this.props.color);\n }\n\n componentWillUpdate(nextProps) {\n // If user move pointer over spectrum field this produce 'move' event and component\n // may update props.color. We don't want to update spectrum color in this case, so we can use\n // isMoving flag for tracking moving state. Flag should be cleared in componentDidUpdate() which\n // is called after updating occurs (when user finished moving).\n if (!this.isMoving) {\n this.elem.spectrum('set', nextProps.color);\n }\n }\n\n componentDidUpdate() {\n if (this.isMoving) {\n this.isMoving = false;\n }\n }\n\n componentWillUnmount() {\n this.elem.spectrum('destroy');\n }\n\n render() {\n return
    ;\n }\n}\n","import React from 'react';\nimport $ from 'jquery';\nimport tinycolor from 'tinycolor2';\nimport { ColorPalette } from './ColorPalette';\nimport { SpectrumPicker } from './SpectrumPicker';\n\nconst DEFAULT_COLOR = '#000000';\n\nexport interface Props {\n color: string;\n onColorSelect: (c: string) => void;\n}\n\nexport class ColorPickerPopover extends React.Component {\n pickerNavElem: any;\n\n constructor(props) {\n super(props);\n this.state = {\n tab: 'palette',\n color: this.props.color || DEFAULT_COLOR,\n colorString: this.props.color || DEFAULT_COLOR,\n };\n }\n\n setPickerNavElem(elem) {\n this.pickerNavElem = $(elem);\n }\n\n setColor(color) {\n const newColor = tinycolor(color);\n if (newColor.isValid()) {\n this.setState({\n color: newColor.toString(),\n colorString: newColor.toString(),\n });\n this.props.onColorSelect(color);\n }\n }\n\n sampleColorSelected(color) {\n this.setColor(color);\n }\n\n spectrumColorSelected(color) {\n const rgbColor = color.toRgbString();\n this.setColor(rgbColor);\n }\n\n onColorStringChange(e) {\n const colorString = e.target.value;\n this.setState({\n colorString: colorString,\n });\n\n const newColor = tinycolor(colorString);\n if (newColor.isValid()) {\n // Update only color state\n const newColorString = newColor.toString();\n this.setState({\n color: newColorString,\n });\n this.props.onColorSelect(newColorString);\n }\n }\n\n onColorStringBlur(e) {\n const colorString = e.target.value;\n this.setColor(colorString);\n }\n\n componentDidMount() {\n this.pickerNavElem.find('li:first').addClass('active');\n this.pickerNavElem.on('show', e => {\n // use href attr (#name => name)\n const tab = e.target.hash.slice(1);\n this.setState({\n tab: tab,\n });\n });\n }\n\n render() {\n const paletteTab = (\n
    \n \n
    \n );\n const spectrumTab = (\n
    \n \n
    \n );\n const currentTab = this.state.tab === 'palette' ? paletteTab : spectrumTab;\n\n return (\n
    \n \n
    {currentTab}
    \n
    \n \n
    \n
    \n );\n }\n}\n","import React from 'react';\nimport ReactDOM from 'react-dom';\nimport $ from 'jquery';\nimport Drop from 'tether-drop';\nimport { ColorPickerPopover } from './ColorPickerPopover';\nimport { react2AngularDirective } from 'app/core/utils/react2angular';\n\nexport interface Props {\n color: string;\n onChange: (c: string) => void;\n}\n\nexport class ColorPicker extends React.Component {\n pickerElem: any;\n colorPickerDrop: any;\n\n constructor(props) {\n super(props);\n this.openColorPicker = this.openColorPicker.bind(this);\n this.closeColorPicker = this.closeColorPicker.bind(this);\n this.setPickerElem = this.setPickerElem.bind(this);\n this.onColorSelect = this.onColorSelect.bind(this);\n }\n\n setPickerElem(elem) {\n this.pickerElem = $(elem);\n }\n\n openColorPicker() {\n const dropContent = ;\n\n const dropContentElem = document.createElement('div');\n ReactDOM.render(dropContent, dropContentElem);\n\n const drop = new Drop({\n target: this.pickerElem[0],\n content: dropContentElem,\n position: 'top center',\n classes: 'drop-popover',\n openOn: 'click',\n hoverCloseDelay: 200,\n tetherOptions: {\n constraints: [{ to: 'scrollParent', attachment: 'none both' }],\n },\n });\n\n drop.on('close', this.closeColorPicker);\n\n this.colorPickerDrop = drop;\n this.colorPickerDrop.open();\n }\n\n closeColorPicker() {\n setTimeout(() => {\n if (this.colorPickerDrop && this.colorPickerDrop.tether) {\n this.colorPickerDrop.destroy();\n }\n }, 100);\n }\n\n onColorSelect(color) {\n this.props.onChange(color);\n }\n\n render() {\n return (\n
    \n
    \n
    \n
    \n
    \n );\n }\n}\n\nreact2AngularDirective('colorPicker', ColorPicker, [\n 'color',\n ['onChange', { watchDepth: 'reference', wrapApply: true }],\n]);\n","import React from 'react';\nimport { ColorPickerPopover } from './ColorPickerPopover';\nimport { react2AngularDirective } from 'app/core/utils/react2angular';\n\nexport interface Props {\n series: any;\n onColorChange: (color: string) => void;\n onToggleAxis: () => void;\n}\n\nexport class SeriesColorPicker extends React.Component {\n constructor(props) {\n super(props);\n this.onColorChange = this.onColorChange.bind(this);\n this.onToggleAxis = this.onToggleAxis.bind(this);\n }\n\n onColorChange(color) {\n this.props.onColorChange(color);\n }\n\n onToggleAxis() {\n this.props.onToggleAxis();\n }\n\n renderAxisSelection() {\n const leftButtonClass = this.props.series.yaxis === 1 ? 'btn-success' : 'btn-inverse';\n const rightButtonClass = this.props.series.yaxis === 2 ? 'btn-success' : 'btn-inverse';\n\n return (\n
    \n \n \n \n
    \n );\n }\n\n render() {\n return (\n
    \n {this.props.series.yaxis && this.renderAxisSelection()}\n \n
    \n );\n }\n}\n\nreact2AngularDirective('seriesColorPicker', SeriesColorPicker, ['series', 'onColorChange', 'onToggleAxis']);\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, element, attrs, ngModel) => {\n scope.ngModel = ngModel;\n scope.onColorChange = color => {\n ngModel.$setViewValue(color);\n };\n },\n };\n}\ncoreModule.directive('spectrumPicker', spectrumPicker);\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport impressionSrv from 'app/core/services/impression_srv';\nimport store from 'app/core/store';\nimport { contextSrv } from 'app/core/services/context_srv';\n\nexport class SearchSrv {\n recentIsOpen: boolean;\n starredIsOpen: boolean;\n\n /** @ngInject */\n constructor(private backendSrv, private $q) {\n this.recentIsOpen = store.getBool('search.sections.recent', true);\n this.starredIsOpen = store.getBool('search.sections.starred', true);\n }\n\n private getRecentDashboards(sections) {\n return this.queryForRecentDashboards().then(result => {\n if (result.length > 0) {\n sections['recent'] = {\n title: 'Recent',\n icon: 'fa fa-clock-o',\n score: -1,\n removable: true,\n expanded: this.recentIsOpen,\n toggle: this.toggleRecent.bind(this),\n items: result,\n };\n }\n });\n }\n\n private queryForRecentDashboards() {\n const dashIds = _.take(impressionSrv.getDashboardOpened(), 5);\n if (dashIds.length === 0) {\n return Promise.resolve([]);\n }\n\n return this.backendSrv.search({ dashboardIds: dashIds }).then(result => {\n return dashIds\n .map(orderId => {\n return _.find(result, { id: orderId });\n })\n .filter(hit => hit && !hit.isStarred);\n });\n }\n\n private toggleRecent(section) {\n this.recentIsOpen = section.expanded = !section.expanded;\n store.set('search.sections.recent', this.recentIsOpen);\n\n if (!section.expanded || section.items.length) {\n return Promise.resolve(section);\n }\n\n return this.queryForRecentDashboards().then(result => {\n section.items = result;\n return Promise.resolve(section);\n });\n }\n\n private toggleStarred(section) {\n this.starredIsOpen = section.expanded = !section.expanded;\n store.set('search.sections.starred', this.starredIsOpen);\n return Promise.resolve(section);\n }\n\n private getStarred(sections) {\n if (!contextSrv.isSignedIn) {\n return Promise.resolve();\n }\n\n return this.backendSrv.search({ starred: true, limit: 5 }).then(result => {\n if (result.length > 0) {\n sections['starred'] = {\n title: 'Starred',\n icon: 'fa fa-star-o',\n score: -2,\n expanded: this.starredIsOpen,\n toggle: this.toggleStarred.bind(this),\n items: result,\n };\n }\n });\n }\n\n search(options) {\n const sections: any = {};\n const promises = [];\n const query = _.clone(options);\n const hasFilters =\n options.query ||\n (options.tag && options.tag.length > 0) ||\n options.starred ||\n (options.folderIds && options.folderIds.length > 0);\n\n if (!options.skipRecent && !hasFilters) {\n promises.push(this.getRecentDashboards(sections));\n }\n\n if (!options.skipStarred && !hasFilters) {\n promises.push(this.getStarred(sections));\n }\n\n query.folderIds = query.folderIds || [];\n if (!hasFilters) {\n query.folderIds = [0];\n }\n\n promises.push(\n this.backendSrv.search(query).then(results => {\n return this.handleSearchResult(sections, results);\n })\n );\n\n return this.$q.all(promises).then(() => {\n return _.sortBy(_.values(sections), 'score');\n });\n }\n\n private handleSearchResult(sections, results) {\n if (results.length === 0) {\n return sections;\n }\n\n // create folder index\n for (const hit of results) {\n if (hit.type === 'dash-folder') {\n sections[hit.id] = {\n id: hit.id,\n uid: hit.uid,\n title: hit.title,\n expanded: false,\n items: [],\n toggle: this.toggleFolder.bind(this),\n url: hit.url,\n icon: 'fa fa-folder',\n score: _.keys(sections).length,\n };\n }\n }\n\n for (const hit of results) {\n if (hit.type === 'dash-folder') {\n continue;\n }\n\n let section = sections[hit.folderId || 0];\n if (!section) {\n if (hit.folderId) {\n section = {\n id: hit.folderId,\n uid: hit.folderUid,\n title: hit.folderTitle,\n url: hit.folderUrl,\n items: [],\n icon: 'fa fa-folder-open',\n toggle: this.toggleFolder.bind(this),\n score: _.keys(sections).length,\n };\n } else {\n section = {\n id: 0,\n title: 'General',\n items: [],\n icon: 'fa fa-folder-open',\n toggle: this.toggleFolder.bind(this),\n score: _.keys(sections).length,\n };\n }\n // add section\n sections[hit.folderId || 0] = section;\n }\n\n section.expanded = true;\n section.items.push(hit);\n }\n }\n\n private toggleFolder(section) {\n section.expanded = !section.expanded;\n section.icon = section.expanded ? 'fa fa-folder-open' : 'fa fa-folder';\n\n if (section.items.length) {\n return Promise.resolve(section);\n }\n\n const query = {\n folderIds: [section.id],\n };\n\n return this.backendSrv.search(query).then(results => {\n section.items = results;\n return Promise.resolve(section);\n });\n }\n\n getDashboardTags() {\n return this.backendSrv.get('/api/dashboards/tags');\n }\n}\n\ncoreModule.service('searchSrv', SearchSrv);\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 React from 'react';\nimport ReactDOM from 'react-dom';\nimport angular from 'angular';\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, $injector) {\n // if name is a function assume it is component and return it\n if (angular.isFunction(name)) {\n return name;\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 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;\n}\n\n// wraps a function with scope.$apply, if already applied just return\nfunction applied(fn, scope) {\n if (fn.wrappedInApply) {\n return fn;\n }\n //tslint:disable-next-line:only-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, scope, propsConfig?) {\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 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, scope, watchExpressions, listener) {\n const supportsWatchCollection = angular.isFunction(scope.$watchCollection);\n const supportsWatchGroup = angular.isFunction(scope.$watchGroup);\n\n const watchGroupExpressions = [];\n\n watchExpressions.forEach(expr => {\n const actualExpr = getPropExpression(expr);\n const exprWatchDepth = getPropWatchDepth(watchDepth, expr);\n\n if (exprWatchDepth === 'collection' && supportsWatchCollection) {\n scope.$watchCollection(actualExpr, listener);\n } else if (exprWatchDepth === 'reference' && supportsWatchGroup) {\n watchGroupExpressions.push(actualExpr);\n } else if (exprWatchDepth === 'one-time') {\n //do nothing because we handle our one time bindings after this\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, props, scope, elem) {\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) {\n return Array.isArray(prop) ? prop[0] : prop;\n}\n\n// get prop name from prop (string or array)\nfunction getPropConfig(prop) {\n return Array.isArray(prop) ? prop[1] : {};\n}\n\n// get prop expression from prop (string or array)\nfunction getPropExpression(prop) {\n return Array.isArray(prop) ? prop[0] : prop;\n}\n\n// find the normalized attribute knowing that React props accept any type of capitalization\nfunction findAttribute(attrs, propName) {\n const index = Object.keys(attrs).filter(attr => {\n return attr.toLowerCase() === propName.toLowerCase();\n })[0];\n return attrs[index];\n}\n\n// get watch depth of prop (string or array)\nfunction getPropWatchDepth(defaultWatch, prop) {\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 => {\n return {\n restrict: 'E',\n replace: true,\n link: function(scope, elem, attrs) {\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 => {\n return (reactComponentName, props, conf, injectableProps) => {\n const directive = {\n restrict: 'E',\n replace: true,\n link: function(scope, elem, attrs) {\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 = {};\n const config = {};\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) ? [attrs[getPropName(prop)], getPropConfig(prop)] : 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 $ from 'jquery';\nimport angular from 'angular';\n\nexport class Profiler {\n panelsRendered: number;\n enabled: boolean;\n panelsInitCount: any;\n timings: any;\n digestCounter: any;\n $rootScope: any;\n scopeCount: any;\n window: any;\n\n init(config, $rootScope) {\n this.enabled = config.buildInfo.env === 'development';\n this.timings = {};\n this.timings.appStart = { loadStart: new Date().getTime() };\n this.$rootScope = $rootScope;\n this.window = window;\n\n if (!this.enabled) {\n return;\n }\n\n $rootScope.$watch(\n () => {\n this.digestCounter++;\n return false;\n },\n () => {}\n );\n\n $rootScope.onAppEvent('refresh', this.refresh.bind(this), $rootScope);\n $rootScope.onAppEvent('dashboard-fetch-end', this.dashboardFetched.bind(this), $rootScope);\n $rootScope.onAppEvent('dashboard-initialized', this.dashboardInitialized.bind(this), $rootScope);\n $rootScope.onAppEvent('panel-initialized', this.panelInitialized.bind(this), $rootScope);\n }\n\n refresh() {\n this.timings.query = 0;\n this.timings.render = 0;\n\n setTimeout(() => {\n console.log('panel count: ' + this.panelsInitCount);\n console.log('total query: ' + this.timings.query);\n console.log('total render: ' + this.timings.render);\n console.log('avg render: ' + this.timings.render / this.panelsInitCount);\n }, 5000);\n }\n\n dashboardFetched() {\n this.timings.dashboardLoadStart = new Date().getTime();\n this.panelsInitCount = 0;\n this.digestCounter = 0;\n this.panelsInitCount = 0;\n this.panelsRendered = 0;\n this.timings.query = 0;\n this.timings.render = 0;\n }\n\n dashboardInitialized() {\n setTimeout(() => {\n console.log('Dashboard::Performance Total Digests: ' + this.digestCounter);\n console.log('Dashboard::Performance Total Watchers: ' + this.getTotalWatcherCount());\n console.log('Dashboard::Performance Total ScopeCount: ' + this.scopeCount);\n\n const timeTaken = this.timings.lastPanelInitializedAt - this.timings.dashboardLoadStart;\n console.log('Dashboard::Performance All panels initialized in ' + timeTaken + ' ms');\n\n // measure digest performance\n const rootDigestStart = window.performance.now();\n for (let i = 0; i < 30; i++) {\n this.$rootScope.$apply();\n }\n\n console.log('Dashboard::Performance Root Digest ' + (window.performance.now() - rootDigestStart) / 30);\n }, 3000);\n }\n\n getTotalWatcherCount() {\n let count = 0;\n let scopes = 0;\n const root = $(document.getElementsByTagName('body'));\n\n const f = element => {\n if (element.data().hasOwnProperty('$scope')) {\n scopes++;\n angular.forEach(element.data().$scope.$$watchers, () => {\n count++;\n });\n }\n\n angular.forEach(element.children(), childElement => {\n f($(childElement));\n });\n };\n\n f(root);\n this.scopeCount = scopes;\n return count;\n }\n\n renderingCompleted(panelId, panelTimings) {\n // add render counter to root scope\n // used by phantomjs render.js to know when panel has rendered\n this.panelsRendered = (this.panelsRendered || 0) + 1;\n\n // this window variable is used by backend rendering tools to know\n // all panels have completed rendering\n this.window.panelsRendered = this.panelsRendered;\n\n if (this.enabled) {\n panelTimings.renderEnd = new Date().getTime();\n this.timings.query += panelTimings.queryEnd - panelTimings.queryStart;\n this.timings.render += panelTimings.renderEnd - panelTimings.renderStart;\n }\n }\n\n panelInitialized() {\n if (!this.enabled) {\n return;\n }\n\n this.panelsInitCount++;\n this.timings.lastPanelInitializedAt = new Date().getTime();\n }\n}\n\nconst profiler = new Profiler();\nexport { profiler };\n","import config from 'app/core/config';\nimport _ from 'lodash';\nimport $ from 'jquery';\n\nimport coreModule from 'app/core/core_module';\nimport { profiler } from 'app/core/profiler';\nimport appEvents from 'app/core/app_events';\nimport Drop from 'tether-drop';\nimport colors from 'app/core/utils/colors';\nimport { BackendSrv, setBackendSrv } from 'app/core/services/backend_srv';\nimport { DatasourceSrv } from 'app/features/plugins/datasource_srv';\nimport { configureStore } from 'app/store/configureStore';\n\nexport class GrafanaCtrl {\n /** @ngInject */\n constructor(\n $scope,\n alertSrv,\n utilSrv,\n $rootScope,\n $controller,\n contextSrv,\n bridgeSrv,\n backendSrv: BackendSrv,\n datasourceSrv: DatasourceSrv\n ) {\n // sets singleston instances for angular services so react components can access them\n configureStore();\n setBackendSrv(backendSrv);\n\n $scope.init = () => {\n $scope.contextSrv = contextSrv;\n $scope.appSubUrl = config.appSubUrl;\n $scope._ = _;\n\n profiler.init(config, $rootScope);\n alertSrv.init();\n utilSrv.init();\n bridgeSrv.init();\n\n $scope.dashAlerts = alertSrv;\n };\n\n $rootScope.colors = colors;\n\n $scope.initDashboard = (dashboardData, viewScope) => {\n $scope.appEvent('dashboard-fetch-end', dashboardData);\n $controller('DashboardCtrl', { $scope: viewScope }).init(dashboardData);\n };\n\n $rootScope.onAppEvent = function(name, callback, localScope) {\n const unbind = $rootScope.$on(name, callback);\n let callerScope = this;\n if (callerScope.$id === 1 && !localScope) {\n console.log('warning rootScope onAppEvent called without localscope');\n }\n if (localScope) {\n callerScope = localScope;\n }\n callerScope.$on('$destroy', unbind);\n };\n\n $rootScope.appEvent = (name, payload) => {\n $rootScope.$emit(name, payload);\n appEvents.emit(name, payload);\n };\n\n $scope.init();\n }\n}\n\nfunction setViewModeBodyClass(body, mode, sidemenuOpen: boolean) {\n body.removeClass('view-mode--tv');\n body.removeClass('view-mode--kiosk');\n body.removeClass('view-mode--inactive');\n\n switch (mode) {\n case 'tv': {\n body.removeClass('sidemenu-open');\n body.addClass('view-mode--tv');\n break;\n }\n // 1 & true for legacy states\n case '1':\n case true: {\n body.removeClass('sidemenu-open');\n body.addClass('view-mode--kiosk');\n break;\n }\n default: {\n body.toggleClass('sidemenu-open', sidemenuOpen);\n }\n }\n}\n\n/** @ngInject */\nexport function grafanaAppDirective(playlistSrv, contextSrv, $timeout, $rootScope, $location) {\n return {\n restrict: 'E',\n controller: GrafanaCtrl,\n link: (scope, elem) => {\n let sidemenuOpen;\n const body = $('body');\n\n // see https://github.com/zenorocha/clipboard.js/issues/155\n $.fn.modal.Constructor.prototype.enforceFocus = () => {};\n\n $('.preloader').remove();\n\n sidemenuOpen = scope.contextSrv.sidemenu;\n body.toggleClass('sidemenu-open', sidemenuOpen);\n\n appEvents.on('toggle-sidemenu', () => {\n sidemenuOpen = scope.contextSrv.sidemenu;\n body.toggleClass('sidemenu-open');\n });\n\n appEvents.on('toggle-sidemenu-mobile', () => {\n body.toggleClass('sidemenu-open--xs');\n });\n\n appEvents.on('toggle-sidemenu-hidden', () => {\n body.toggleClass('sidemenu-hidden');\n });\n\n scope.$watch(\n () => playlistSrv.isPlaying,\n newValue => {\n elem.toggleClass('view-mode--playlist', newValue === true);\n }\n );\n\n // check if we are in server side render\n if (document.cookie.indexOf('renderKey') !== -1) {\n body.addClass('body--phantomjs');\n }\n\n // tooltip removal fix\n // manage page classes\n let pageClass;\n scope.$on('$routeChangeSuccess', (evt, data) => {\n if (pageClass) {\n body.removeClass(pageClass);\n }\n\n if (data.$$route) {\n pageClass = data.$$route.pageClass;\n if (pageClass) {\n body.addClass(pageClass);\n }\n }\n\n // clear body class sidemenu states\n body.removeClass('sidemenu-open--xs');\n\n $('#tooltip, .tooltip').remove();\n\n // check for kiosk url param\n setViewModeBodyClass(body, data.params.kiosk, sidemenuOpen);\n\n // close all drops\n for (const drop of Drop.drops) {\n drop.destroy();\n }\n });\n\n // handle kiosk mode\n appEvents.on('toggle-kiosk-mode', options => {\n const search = $location.search();\n\n if (options && options.exit) {\n search.kiosk = '1';\n }\n\n switch (search.kiosk) {\n case 'tv': {\n search.kiosk = true;\n appEvents.emit('alert-success', ['Press ESC to exit Kiosk mode']);\n break;\n }\n case '1':\n case true: {\n delete search.kiosk;\n break;\n }\n default: {\n search.kiosk = 'tv';\n }\n }\n\n $location.search(search);\n setViewModeBodyClass(body, search.kiosk, sidemenuOpen);\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 body.removeClass('sidemenu-open');\n }\n }\n\n function userActivityDetected() {\n lastActivity = new Date().getTime();\n if (!activeUser) {\n activeUser = true;\n body.removeClass('view-mode--inactive');\n body.toggleClass('sidemenu-open', sidemenuOpen);\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 appEvents.on('toggle-view-mode', () => {\n lastActivity = 0;\n checkForInActiveUser();\n });\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 if (target.parents('.navbar-buttons--playlist').length === 0) {\n playlistSrv.stop();\n }\n\n // hide search\n if (body.find('.search-container').length > 0) {\n if (target.parents('.search-results-container, .search-field-wrapper').length === 0) {\n scope.$apply(() => {\n scope.appEvent('hide-dash-search');\n });\n }\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","import _ from 'lodash';\nimport coreModule from '../../core_module';\nimport { SearchSrv } from 'app/core/services/search_srv';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport appEvents from 'app/core/app_events';\n\nexport class SearchCtrl {\n isOpen: boolean;\n query: any;\n giveSearchFocus: number;\n selectedIndex: number;\n results: any;\n currentSearchId: number;\n showImport: boolean;\n dismiss: any;\n ignoreClose: any;\n isLoading: boolean;\n initialFolderFilterTitle: string;\n isEditor: string;\n hasEditPermissionInFolders: boolean;\n\n /** @ngInject */\n constructor($scope, private $location, private $timeout, private searchSrv: SearchSrv) {\n appEvents.on('show-dash-search', this.openSearch.bind(this), $scope);\n appEvents.on('hide-dash-search', this.closeSearch.bind(this), $scope);\n\n this.initialFolderFilterTitle = 'All';\n this.getTags = this.getTags.bind(this);\n this.onTagSelect = this.onTagSelect.bind(this);\n this.isEditor = contextSrv.isEditor;\n this.hasEditPermissionInFolders = contextSrv.hasEditPermissionInFolders;\n }\n\n closeSearch() {\n this.isOpen = this.ignoreClose;\n }\n\n openSearch(evt, payload) {\n if (this.isOpen) {\n this.closeSearch();\n return;\n }\n\n this.isOpen = true;\n this.giveSearchFocus = 0;\n this.selectedIndex = -1;\n this.results = [];\n this.query = { query: '', tag: [], starred: false };\n this.currentSearchId = 0;\n this.ignoreClose = true;\n this.isLoading = true;\n\n if (payload && payload.starred) {\n this.query.starred = true;\n }\n\n this.$timeout(() => {\n this.ignoreClose = false;\n this.giveSearchFocus = this.giveSearchFocus + 1;\n this.search();\n }, 100);\n }\n\n keyDown(evt) {\n if (evt.keyCode === 27) {\n this.closeSearch();\n }\n if (evt.keyCode === 40) {\n this.moveSelection(1);\n }\n if (evt.keyCode === 38) {\n this.moveSelection(-1);\n }\n if (evt.keyCode === 13) {\n const flattenedResult = this.getFlattenedResultForNavigation();\n const currentItem = flattenedResult[this.selectedIndex];\n\n if (currentItem) {\n if (currentItem.dashboardIndex !== undefined) {\n const selectedDash = this.results[currentItem.folderIndex].items[currentItem.dashboardIndex];\n\n if (selectedDash) {\n this.$location.search({});\n this.$location.path(selectedDash.url);\n this.closeSearch();\n }\n } else {\n const selectedFolder = this.results[currentItem.folderIndex];\n\n if (selectedFolder) {\n selectedFolder.toggle(selectedFolder);\n }\n }\n }\n }\n }\n\n onFilterboxClick() {\n this.giveSearchFocus = 0;\n this.preventClose();\n }\n\n preventClose() {\n this.ignoreClose = true;\n\n this.$timeout(() => {\n this.ignoreClose = false;\n }, 100);\n }\n\n moveSelection(direction) {\n if (this.results.length === 0) {\n return;\n }\n\n const flattenedResult = this.getFlattenedResultForNavigation();\n const currentItem = flattenedResult[this.selectedIndex];\n\n if (currentItem) {\n if (currentItem.dashboardIndex !== undefined) {\n this.results[currentItem.folderIndex].items[currentItem.dashboardIndex].selected = false;\n } else {\n this.results[currentItem.folderIndex].selected = false;\n }\n }\n\n if (direction === 0) {\n this.selectedIndex = -1;\n return;\n }\n\n const max = flattenedResult.length;\n const newIndex = (this.selectedIndex + direction) % max;\n this.selectedIndex = newIndex < 0 ? newIndex + max : newIndex;\n const selectedItem = flattenedResult[this.selectedIndex];\n\n if (selectedItem.dashboardIndex === undefined && this.results[selectedItem.folderIndex].id === 0) {\n this.moveSelection(direction);\n return;\n }\n\n if (selectedItem.dashboardIndex !== undefined) {\n if (!this.results[selectedItem.folderIndex].expanded) {\n this.moveSelection(direction);\n return;\n }\n\n this.results[selectedItem.folderIndex].items[selectedItem.dashboardIndex].selected = true;\n return;\n }\n\n if (this.results[selectedItem.folderIndex].hideHeader) {\n this.moveSelection(direction);\n return;\n }\n\n this.results[selectedItem.folderIndex].selected = true;\n }\n\n searchDashboards() {\n this.currentSearchId = this.currentSearchId + 1;\n const localSearchId = this.currentSearchId;\n\n return this.searchSrv.search(this.query).then(results => {\n if (localSearchId < this.currentSearchId) {\n return;\n }\n this.results = results || [];\n this.isLoading = false;\n this.moveSelection(1);\n });\n }\n\n queryHasNoFilters() {\n const query = this.query;\n return query.query === '' && query.starred === false && query.tag.length === 0;\n }\n\n filterByTag(tag) {\n if (_.indexOf(this.query.tag, tag) === -1) {\n this.query.tag.push(tag);\n this.search();\n }\n }\n\n removeTag(tag, evt) {\n this.query.tag = _.without(this.query.tag, tag);\n this.search();\n this.giveSearchFocus = this.giveSearchFocus + 1;\n evt.stopPropagation();\n evt.preventDefault();\n }\n\n getTags() {\n return this.searchSrv.getDashboardTags();\n }\n\n onTagSelect(newTags) {\n this.query.tag = _.map(newTags, tag => tag.value);\n this.search();\n }\n\n clearSearchFilter() {\n this.query.tag = [];\n this.search();\n }\n\n showStarred() {\n this.query.starred = !this.query.starred;\n this.giveSearchFocus = this.giveSearchFocus + 1;\n this.search();\n }\n\n search() {\n this.showImport = false;\n this.selectedIndex = -1;\n this.searchDashboards();\n }\n\n folderExpanding() {\n this.moveSelection(0);\n }\n\n private getFlattenedResultForNavigation() {\n let folderIndex = 0;\n\n return _.flatMap(this.results, s => {\n let result = [];\n\n result.push({\n folderIndex: folderIndex,\n });\n\n let dashboardIndex = 0;\n\n result = result.concat(\n _.map(s.items || [], i => {\n return {\n folderIndex: folderIndex,\n dashboardIndex: dashboardIndex++,\n };\n })\n );\n\n folderIndex++;\n return result;\n });\n }\n}\n\nexport function searchDirective() {\n return {\n restrict: 'E',\n templateUrl: 'public/app/core/components/search/search.html',\n controller: SearchCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {},\n };\n}\n\ncoreModule.directive('dashboardSearch', searchDirective);\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport Drop from 'tether-drop';\n\nexport function infoPopover() {\n return {\n restrict: 'E',\n template: '',\n transclude: true,\n link: (scope, elem, attrs, ctrl, transclude) => {\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, newScope) => {\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","import coreModule from '../../core_module';\nimport { NavModel } from '../../nav_model_srv';\nimport appEvents from 'app/core/app_events';\n\nexport class NavbarCtrl {\n model: NavModel;\n\n /** @ngInject */\n constructor() {}\n\n showSearch() {\n appEvents.emit('show-dash-search');\n }\n\n navItemClicked(navItem, evt) {\n if (navItem.clickHandler) {\n navItem.clickHandler();\n evt.preventDefault();\n }\n }\n}\n\nexport function navbarDirective() {\n return {\n restrict: 'E',\n templateUrl: 'public/app/core/components/navbar/navbar.html',\n controller: NavbarCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {\n model: '=',\n },\n link: (scope, elem) => {},\n };\n}\n\nexport function pageH1() {\n return {\n restrict: 'E',\n template: `\n

    \n \n \n {{model.header.text}}\n

    \n `,\n scope: {\n model: '=',\n },\n };\n}\n\ncoreModule.directive('pageH1', pageH1);\ncoreModule.directive('navbar', navbarDirective);\n","import _ from 'lodash';\nimport coreModule from '../core_module';\n\nexport function arrayJoin() {\n 'use strict';\n\n return {\n restrict: 'A',\n require: 'ngModel',\n link: (scope, element, attr, ngModel) => {\n function split_array(text) {\n return (text || '').split(',');\n }\n\n function join_array(text) {\n if (_.isArray(text)) {\n return (text || '').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 _ from 'lodash';\nimport config from 'app/core/config';\n\nimport { Observable } from 'rxjs/Observable';\n\nexport class LiveSrv {\n conn: any;\n observers: any;\n initPromise: any;\n\n constructor() {\n this.observers = {};\n }\n\n getWebSocketUrl() {\n const l = window.location;\n return (l.protocol === 'https:' ? 'wss://' : 'ws://') + l.host + config.appSubUrl + '/ws';\n }\n\n getConnection() {\n if (this.initPromise) {\n return this.initPromise;\n }\n\n if (this.conn && this.conn.readyState === 1) {\n return Promise.resolve(this.conn);\n }\n\n this.initPromise = new Promise((resolve, reject) => {\n console.log('Live: connecting...');\n this.conn = new WebSocket(this.getWebSocketUrl());\n\n this.conn.onclose = evt => {\n console.log('Live: websocket onclose', evt);\n reject({ message: 'Connection closed' });\n\n this.initPromise = null;\n setTimeout(this.reconnect.bind(this), 2000);\n };\n\n this.conn.onmessage = evt => {\n this.handleMessage(evt.data);\n };\n\n this.conn.onerror = evt => {\n this.initPromise = null;\n reject({ message: 'Connection error' });\n console.log('Live: websocket error', evt);\n };\n\n this.conn.onopen = evt => {\n console.log('opened');\n this.initPromise = null;\n resolve(this.conn);\n };\n });\n\n return this.initPromise;\n }\n\n handleMessage(message) {\n message = JSON.parse(message);\n\n if (!message.stream) {\n console.log('Error: stream message without stream!', message);\n return;\n }\n\n const observer = this.observers[message.stream];\n if (!observer) {\n this.removeObserver(message.stream, null);\n return;\n }\n\n observer.next(message);\n }\n\n reconnect() {\n // no need to reconnect if no one cares\n if (_.keys(this.observers).length === 0) {\n return;\n }\n\n console.log('LiveSrv: Reconnecting');\n\n this.getConnection().then(conn => {\n _.each(this.observers, (value, key) => {\n this.send({ action: 'subscribe', stream: key });\n });\n });\n }\n\n send(data) {\n this.conn.send(JSON.stringify(data));\n }\n\n addObserver(stream, observer) {\n this.observers[stream] = observer;\n\n this.getConnection().then(conn => {\n this.send({ action: 'subscribe', stream: stream });\n });\n }\n\n removeObserver(stream, observer) {\n console.log('unsubscribe', stream);\n delete this.observers[stream];\n\n this.getConnection().then(conn => {\n this.send({ action: 'unsubscribe', stream: stream });\n });\n }\n\n subscribe(streamName) {\n console.log('LiveSrv.subscribe: ' + streamName);\n\n return Observable.create(observer => {\n this.addObserver(streamName, observer);\n\n return () => {\n this.removeObserver(streamName, observer);\n };\n });\n\n // return this.init().then(() => {\n // this.send({action: 'subscribe', stream: name});\n // });\n }\n}\n\nconst instance = new LiveSrv();\nexport { instance as liveSrv };\n","import store from 'app/core/store';\nimport coreModule from 'app/core/core_module';\n\nconst template = `\n
    \n \n \n
    \n`;\n\nexport class LayoutSelectorCtrl {\n mode: string;\n\n /** @ngInject */\n constructor(private $rootScope) {\n this.mode = store.get('grafana.list.layout.mode') || 'grid';\n }\n\n listView() {\n this.mode = 'list';\n store.set('grafana.list.layout.mode', 'list');\n this.$rootScope.appEvent('layout-mode-changed', 'list');\n }\n\n gridView() {\n this.mode = 'grid';\n store.set('grafana.list.layout.mode', 'grid');\n this.$rootScope.appEvent('layout-mode-changed', 'grid');\n }\n}\n\n/** @ngInject */\nexport function layoutSelector() {\n return {\n restrict: 'E',\n controller: LayoutSelectorCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {},\n template: template,\n };\n}\n\n/** @ngInject */\nexport function layoutMode($rootScope) {\n return {\n restrict: 'A',\n scope: {},\n link: (scope, elem) => {\n const layout = store.get('grafana.list.layout.mode') || 'grid';\n let className = 'card-list-layout-' + layout;\n elem.addClass(className);\n\n $rootScope.onAppEvent(\n 'layout-mode-changed',\n (evt, newLayout) => {\n elem.removeClass(className);\n className = 'card-list-layout-' + newLayout;\n elem.addClass(className);\n },\n scope\n );\n },\n };\n}\n\ncoreModule.directive('layoutSelector', layoutSelector);\ncoreModule.directive('layoutMode', layoutMode);\n","import coreModule from 'app/core/core_module';\n\nconst template = `\n\n
    \n \n \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, private $timeout) {\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\ncoreModule.directive('gfFormSwitch', switchDirective);\n","import coreModule from 'app/core/core_module';\n\nconst template = `\n\n`;\n\nexport class DashboardSelectorCtrl {\n model: any;\n options: any;\n\n /** @ngInject */\n constructor(private backendSrv) {}\n\n $onInit() {\n this.options = [{ value: 0, text: 'Default' }];\n\n return this.backendSrv.search({ starred: true }).then(res => {\n res.forEach(dash => {\n this.options.push({ value: dash.id, text: dash.title });\n });\n });\n }\n}\n\nexport function dashboardSelector() {\n return {\n restrict: 'E',\n controller: DashboardSelectorCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n template: template,\n scope: {\n model: '=',\n },\n };\n}\n\ncoreModule.directive('dashboardSelector', dashboardSelector);\n","import _ from 'lodash';\nimport $ from 'jquery';\nimport coreModule from 'app/core/core_module';\n\nconst template = `\n
    \n{{part.def.type}}\n()\n\n`;\n\n/** @ngInject */\nexport function queryPartEditorDirective($compile, templateSrv) {\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, elem) {\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) {\n /*jshint validthis:true */\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) {\n /*jshint validthis:true */\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, e) {\n /*jshint validthis:true */\n if (e.which === 13) {\n inputBlur.call(this, paramIndex);\n }\n }\n\n function inputKeyDown(this: any) {\n /*jshint validthis:true */\n this.style.width = (3 + this.value.length) * 8 + 'px';\n }\n\n function addTypeahead($input, param, paramIndex) {\n if (!param.options && !param.dynamicLookup) {\n return;\n }\n\n const typeaheadSource = (query, callback) => {\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 => {\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 => {\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 $scope.handleEvent({ $event: { name: 'get-part-actions' } }).then(res => {\n $scope.partActions = res;\n });\n };\n\n $scope.triggerPartAction = action => {\n $scope.handleEvent({ $event: { name: 'action', action: action } });\n };\n\n function addElementsAndCompile() {\n _.each(partDef.params, (param, index) => {\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 _ from 'lodash';\nimport $ from 'jquery';\nimport coreModule from 'app/core/core_module';\n\nconst template = `\n
    \n{{part.label}}\n{{part.def.wrapOpen}}{{part.def.wrapClose}}\n\n`;\n\n/** @ngInject */\nexport function sqlPartEditorDirective($compile, templateSrv) {\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, elem) {\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 = null;\n\n $scope.partActions = [];\n\n function clickFuncParam(this: any, paramIndex) {\n /*jshint validthis:true */\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, paramIndex) {\n cancelBlur = setTimeout(() => {\n switchToLink($input, paramIndex);\n }, 200);\n }\n\n function switchToLink($input, paramIndex) {\n /*jshint validthis:true */\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, e) {\n /*jshint validthis:true */\n if (e.which === 13) {\n switchToLink($(this), paramIndex);\n }\n }\n\n function inputKeyDown(this: any) {\n /*jshint validthis:true */\n this.style.width = (3 + this.value.length) * 8 + 'px';\n }\n\n function addTypeahead($input, param, paramIndex) {\n if (!param.options && !param.dynamicLookup) {\n return;\n }\n\n const typeaheadSource = (query, callback) => {\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 => {\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 => {\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 => {\n $scope.partActions = res;\n });\n };\n\n $scope.triggerPartAction = action => {\n $scope.handleEvent({ $event: { name: 'action', action: action } });\n };\n\n function addElementsAndCompile() {\n _.each(partDef.params, (param, index) => {\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 _ from 'lodash';\nimport coreModule from '../../core_module';\n\nfunction typeaheadMatcher(this: any, item) {\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: any;\n linkElement: any;\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: number;\n\n /** @ngInject */\n constructor(private $scope, $element, private $sce, private templateSrv, private $q) {\n this.inputElement = $element.find('input').first();\n this.linkElement = $element.find('a').first();\n this.linkMode = true;\n this.cancelBlur = null;\n\n // listen to model changes\n $scope.$watch('ctrl.model', this.modelChanged.bind(this));\n\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 }, 100);\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) {\n const result = this.getOptions({ $query: query });\n if (this.isPromiseLike(result)) {\n return result;\n }\n return this.$q.when(result);\n }\n\n isPromiseLike(obj) {\n return obj && typeof obj.then === 'function';\n }\n\n modelChanged() {\n if (_.isObject(this.model)) {\n this.updateDisplay(this.model.text);\n } else {\n // if we have text use it\n if (this.lookupText) {\n this.getOptionsInternal('').then(options => {\n const item = _.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, callback) {\n this.getOptionsInternal(query).then(options => {\n this.optionCache = options;\n\n // extract texts\n const optionTexts = _.map(options, op => {\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) {\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) {\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());\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) {\n text = _.unescape(text);\n\n if (text === '' || this.text === text) {\n return;\n }\n\n this.$scope.$apply(() => {\n const option = _.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.text = this.model.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) {\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","import angular from 'angular';\nimport _ from 'lodash';\nimport $ from 'jquery';\nimport coreModule from '../core_module';\n\nexport class InspectCtrl {\n /** @ngInject */\n constructor($scope, $sanitize) {\n const model = $scope.inspector;\n\n $scope.init = function() {\n $scope.editor = { index: 0 };\n\n if (!model.error) {\n return;\n }\n\n if (_.isString(model.error.data)) {\n $scope.response = $('
    ' + model.error.data + '
    ').text();\n } else if (model.error.data) {\n if (model.error.data.response) {\n $scope.response = $sanitize(model.error.data.response);\n } else {\n $scope.response = angular.toJson(model.error.data, true);\n }\n } else if (model.error.message) {\n $scope.message = model.error.message;\n }\n\n if (model.error.config && model.error.config.params) {\n $scope.request_parameters = _.map(model.error.config.params, (value, key) => {\n return { key: key, value: value };\n });\n }\n\n if (model.error.stack) {\n $scope.editor.index = 3;\n $scope.stack_trace = model.error.stack;\n $scope.message = model.error.message;\n }\n\n if (model.error.config && model.error.config.data) {\n $scope.editor.index = 2;\n\n if (_.isString(model.error.config.data)) {\n $scope.request_parameters = this.getParametersFromQueryString(model.error.config.data);\n } else {\n $scope.request_parameters = _.map(model.error.config.data, (value, key) => {\n return { key: key, value: angular.toJson(value, true) };\n });\n }\n }\n };\n }\n getParametersFromQueryString(queryString) {\n const result = [];\n const parameters = queryString.split('&');\n for (let i = 0; i < parameters.length; i++) {\n const keyValue = parameters[i].split('=');\n if (keyValue[1].length > 0) {\n result.push({\n key: keyValue[0],\n value: (window as any).unescape(keyValue[1]),\n });\n }\n }\n return result;\n }\n}\n\ncoreModule.controller('InspectCtrl', InspectCtrl);\n","import angular from 'angular';\nimport coreModule from '../core_module';\n\nexport class JsonEditorCtrl {\n /** @ngInject */\n constructor($scope) {\n $scope.json = angular.toJson($scope.object, true);\n $scope.canUpdate = $scope.updateHandler !== void 0 && $scope.contextSrv.isEditor;\n $scope.canCopy = $scope.enableCopy;\n\n $scope.update = () => {\n const newObject = angular.fromJson($scope.json);\n $scope.updateHandler(newObject, $scope.object);\n };\n\n $scope.getContentForClipboard = () => $scope.json;\n }\n}\n\ncoreModule.controller('JsonEditorCtrl', JsonEditorCtrl);\n","import _ from 'lodash';\nimport coreModule from '../core_module';\nimport config from 'app/core/config';\n\nexport class LoginCtrl {\n /** @ngInject */\n constructor($scope, backendSrv, contextSrv, $location) {\n $scope.formModel = {\n user: '',\n email: '',\n password: '',\n };\n\n $scope.command = {};\n $scope.result = '';\n $scope.loggingIn = false;\n\n contextSrv.sidemenu = false;\n\n $scope.oauth = config.oauth;\n $scope.oauthEnabled = _.keys(config.oauth).length > 0;\n $scope.ldapEnabled = config.ldapEnabled;\n $scope.authProxyEnabled = config.authProxyEnabled;\n\n $scope.disableLoginForm = config.disableLoginForm;\n $scope.disableUserSignUp = config.disableUserSignUp;\n $scope.loginHint = config.loginHint;\n\n $scope.loginMode = true;\n $scope.submitBtnText = 'Log in';\n\n $scope.init = () => {\n $scope.$watch('loginMode', $scope.loginModeChanged);\n\n if (config.loginError) {\n $scope.appEvent('alert-warning', ['Login Failed', config.loginError]);\n }\n };\n\n $scope.submit = () => {\n if ($scope.loginMode) {\n $scope.login();\n } else {\n $scope.signUp();\n }\n };\n\n $scope.changeView = () => {\n const loginView = document.querySelector('#login-view');\n const changePasswordView = document.querySelector('#change-password-view');\n\n loginView.className += ' add';\n setTimeout(() => {\n loginView.className += ' hidden';\n }, 250);\n setTimeout(() => {\n changePasswordView.classList.remove('hidden');\n }, 251);\n setTimeout(() => {\n changePasswordView.classList.remove('remove');\n }, 301);\n\n setTimeout(() => {\n document.getElementById('newPassword').focus();\n }, 400);\n };\n\n $scope.changePassword = () => {\n $scope.command.oldPassword = 'admin';\n\n if ($scope.command.newPassword !== $scope.command.confirmNew) {\n $scope.appEvent('alert-warning', ['New passwords do not match', '']);\n return;\n }\n\n backendSrv.put('/api/user/password', $scope.command).then(() => {\n $scope.toGrafana();\n });\n };\n\n $scope.skip = () => {\n $scope.toGrafana();\n };\n\n $scope.loginModeChanged = newValue => {\n $scope.submitBtnText = newValue ? 'Log in' : 'Sign up';\n };\n\n $scope.signUp = () => {\n if (!$scope.loginForm.$valid) {\n return;\n }\n\n backendSrv.post('/api/user/signup', $scope.formModel).then(result => {\n if (result.status === 'SignUpCreated') {\n $location.path('/signup').search({ email: $scope.formModel.email });\n } else {\n window.location.href = config.appSubUrl + '/';\n }\n });\n };\n\n $scope.login = () => {\n delete $scope.loginError;\n\n if (!$scope.loginForm.$valid) {\n return;\n }\n $scope.loggingIn = true;\n\n backendSrv\n .post('/login', $scope.formModel)\n .then(result => {\n $scope.result = result;\n\n if ($scope.formModel.password !== 'admin' || $scope.ldapEnabled || $scope.authProxyEnabled) {\n $scope.toGrafana();\n return;\n } else {\n $scope.changeView();\n }\n })\n .catch(() => {\n $scope.loggingIn = false;\n });\n };\n\n $scope.toGrafana = () => {\n const params = $location.search();\n\n if (params.redirect && params.redirect[0] === '/') {\n window.location.href = config.appSubUrl + params.redirect;\n } else if ($scope.result.redirectUrl) {\n window.location.href = $scope.result.redirectUrl;\n } else {\n window.location.href = config.appSubUrl + '/';\n }\n };\n\n $scope.init();\n }\n}\n\ncoreModule.controller('LoginCtrl', LoginCtrl);\n","import coreModule from '../core_module';\nimport config from 'app/core/config';\n\nexport class InvitedCtrl {\n /** @ngInject */\n constructor($scope, $routeParams, contextSrv, backendSrv) {\n contextSrv.sidemenu = false;\n $scope.formModel = {};\n\n $scope.navModel = {\n main: {\n icon: 'gicon gicon-branding',\n text: 'Invite',\n subTitle: 'Register your Grafana account',\n breadcrumbs: [{ title: 'Login', url: 'login' }],\n },\n };\n\n $scope.init = () => {\n backendSrv.get('/api/user/invite/' + $routeParams.code).then(invite => {\n $scope.formModel.name = invite.name;\n $scope.formModel.email = invite.email;\n $scope.formModel.username = invite.email;\n $scope.formModel.inviteCode = $routeParams.code;\n\n $scope.greeting = invite.name || invite.email || invite.username;\n $scope.invitedBy = invite.invitedBy;\n });\n };\n\n $scope.submit = () => {\n if (!$scope.inviteForm.$valid) {\n return;\n }\n\n backendSrv.post('/api/user/invite/complete', $scope.formModel).then(() => {\n window.location.href = config.appSubUrl + '/';\n });\n };\n\n $scope.init();\n }\n}\n\ncoreModule.controller('InvitedCtrl', InvitedCtrl);\n","import config from 'app/core/config';\nimport coreModule from '../core_module';\n\nexport class SignUpCtrl {\n /** @ngInject */\n constructor(private $scope: any, private backendSrv: any, $location: any, contextSrv: any) {\n contextSrv.sidemenu = false;\n $scope.ctrl = this;\n\n $scope.formModel = {};\n\n const params = $location.search();\n\n // validate email is semi ok\n if (params.email && !params.email.match(/^\\S+@\\S+$/)) {\n console.log('invalid email');\n return;\n }\n\n $scope.formModel.orgName = params.email;\n $scope.formModel.email = params.email;\n $scope.formModel.username = params.email;\n $scope.formModel.code = params.code;\n\n $scope.verifyEmailEnabled = false;\n $scope.autoAssignOrg = false;\n\n $scope.navModel = {\n main: {\n icon: 'gicon gicon-branding',\n text: 'Sign Up',\n subTitle: 'Register your Grafana account',\n breadcrumbs: [{ title: 'Login', url: 'login' }],\n },\n };\n\n backendSrv.get('/api/user/signup/options').then(options => {\n $scope.verifyEmailEnabled = options.verifyEmailEnabled;\n $scope.autoAssignOrg = options.autoAssignOrg;\n });\n }\n\n submit() {\n if (!this.$scope.signUpForm.$valid) {\n return;\n }\n\n this.backendSrv.post('/api/user/signup/step2', this.$scope.formModel).then(rsp => {\n if (rsp.code === 'redirect-to-select-org') {\n window.location.href = config.appSubUrl + '/profile/select-org?signup=1';\n } else {\n window.location.href = config.appSubUrl + '/';\n }\n });\n }\n}\n\ncoreModule.controller('SignUpCtrl', SignUpCtrl);\n","import coreModule from '../core_module';\n\nexport class ResetPasswordCtrl {\n /** @ngInject */\n constructor($scope, contextSrv, backendSrv, $location) {\n contextSrv.sidemenu = false;\n $scope.formModel = {};\n $scope.mode = 'send';\n\n const params = $location.search();\n if (params.code) {\n $scope.mode = 'reset';\n $scope.formModel.code = params.code;\n }\n\n $scope.navModel = {\n main: {\n icon: 'gicon gicon-branding',\n text: 'Reset Password',\n subTitle: 'Reset your Grafana password',\n breadcrumbs: [{ title: 'Login', url: 'login' }],\n },\n };\n\n $scope.sendResetEmail = () => {\n if (!$scope.sendResetForm.$valid) {\n return;\n }\n backendSrv.post('/api/user/password/send-reset-email', $scope.formModel).then(() => {\n $scope.mode = 'email-sent';\n });\n };\n\n $scope.submitReset = () => {\n if (!$scope.resetForm.$valid) {\n return;\n }\n\n if ($scope.formModel.newPassword !== $scope.formModel.confirmPassword) {\n $scope.appEvent('alert-warning', ['New passwords do not match', '']);\n return;\n }\n\n backendSrv.post('/api/user/password/reset', $scope.formModel).then(() => {\n $location.path('login');\n });\n };\n }\n}\n\ncoreModule.controller('ResetPasswordCtrl', ResetPasswordCtrl);\n","import config from 'app/core/config';\nimport coreModule from '../core_module';\nimport appEvents from 'app/core/app_events';\n\nexport class ErrorCtrl {\n /** @ngInject */\n constructor($scope, contextSrv, navModelSrv) {\n $scope.navModel = navModelSrv.getNotFoundNav();\n $scope.appSubUrl = config.appSubUrl;\n\n if (!contextSrv.isSignedIn) {\n appEvents.emit('toggle-sidemenu-hidden');\n }\n\n $scope.$on('destroy', () => {\n if (!contextSrv.isSignedIn) {\n appEvents.emit('toggle-sidemenu-hidden');\n }\n });\n }\n}\n\ncoreModule.controller('ErrorCtrl', ErrorCtrl);\n","import './inspect_ctrl';\nimport './json_editor_ctrl';\nimport './login_ctrl';\nimport './invited_ctrl';\nimport './signup_ctrl';\nimport './reset_password_ctrl';\nimport './error_ctrl';\n","import angular from 'angular';\nimport _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\n\nexport class AlertSrv {\n list: any[];\n\n /** @ngInject */\n constructor(private $timeout, private $rootScope) {\n this.list = [];\n }\n\n init() {\n this.$rootScope.onAppEvent(\n 'alert-error',\n (e, alert) => {\n this.set(alert[0], alert[1], 'error', 12000);\n },\n this.$rootScope\n );\n\n this.$rootScope.onAppEvent(\n 'alert-warning',\n (e, alert) => {\n this.set(alert[0], alert[1], 'warning', 5000);\n },\n this.$rootScope\n );\n\n this.$rootScope.onAppEvent(\n 'alert-success',\n (e, alert) => {\n this.set(alert[0], alert[1], 'success', 3000);\n },\n this.$rootScope\n );\n\n appEvents.on('alert-warning', options => this.set(options[0], options[1], 'warning', 5000));\n appEvents.on('alert-success', options => this.set(options[0], options[1], 'success', 3000));\n appEvents.on('alert-error', options => this.set(options[0], options[1], 'error', 7000));\n }\n\n getIconForSeverity(severity) {\n switch (severity) {\n case 'success':\n return 'fa fa-check';\n case 'error':\n return 'fa fa-exclamation-triangle';\n default:\n return 'fa fa-exclamation';\n }\n }\n\n set(title, text, severity, timeout) {\n if (_.isObject(text)) {\n console.log('alert error', text);\n if (text.statusText) {\n text = `HTTP Error (${text.status}) ${text.statusText}`;\n }\n }\n\n const newAlert = {\n title: title || '',\n text: text || '',\n severity: severity || 'info',\n icon: this.getIconForSeverity(severity),\n };\n\n const newAlertJson = angular.toJson(newAlert);\n\n // remove same alert if it already exists\n _.remove(this.list, value => {\n return angular.toJson(value) === newAlertJson;\n });\n\n this.list.push(newAlert);\n if (timeout > 0) {\n this.$timeout(() => {\n this.list = _.without(this.list, newAlert);\n }, timeout);\n }\n\n if (!this.$rootScope.$$phase) {\n this.$rootScope.$digest();\n }\n\n return newAlert;\n }\n\n clear(alert) {\n this.list = _.without(this.list, alert);\n }\n\n clearAll() {\n this.list = [];\n }\n}\n\ncoreModule.service('alertSrv', AlertSrv);\n","import coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\n\nexport class UtilSrv {\n modalScope: any;\n\n /** @ngInject */\n constructor(private $rootScope, private $modal) {}\n\n init() {\n appEvents.on('show-modal', this.showModal.bind(this), this.$rootScope);\n appEvents.on('hide-modal', this.hideModal.bind(this), this.$rootScope);\n appEvents.on('confirm-modal', this.showConfirmModal.bind(this), this.$rootScope);\n }\n\n hideModal() {\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n }\n\n showModal(options) {\n if (this.modalScope && this.modalScope.dismiss) {\n this.modalScope.dismiss();\n }\n\n this.modalScope = options.scope;\n\n if (options.model) {\n this.modalScope = this.$rootScope.$new();\n this.modalScope.model = options.model;\n } else if (!this.modalScope) {\n this.modalScope = this.$rootScope.$new();\n }\n\n const modal = this.$modal({\n modalClass: options.modalClass,\n template: options.src,\n templateHtml: options.templateHtml,\n persist: false,\n show: false,\n scope: this.modalScope,\n keyboard: false,\n backdrop: options.backdrop,\n });\n\n Promise.resolve(modal).then(modalEl => {\n modalEl.modal('show');\n });\n }\n\n showConfirmModal(payload) {\n const scope = this.$rootScope.$new();\n\n scope.onConfirm = () => {\n payload.onConfirm();\n scope.dismiss();\n };\n\n scope.updateConfirmText = value => {\n scope.confirmTextValid = payload.confirmText.toLowerCase() === value.toLowerCase();\n };\n\n scope.title = payload.title;\n scope.text = payload.text;\n scope.text2 = payload.text2;\n scope.confirmText = payload.confirmText;\n\n scope.onConfirm = payload.onConfirm;\n scope.onAltAction = payload.onAltAction;\n scope.altActionText = payload.altActionText;\n scope.icon = payload.icon || 'fa-check';\n scope.yesText = payload.yesText || 'Yes';\n scope.noText = payload.noText || 'Cancel';\n scope.confirmTextValid = scope.confirmText ? false : true;\n\n appEvents.emit('show-modal', {\n src: 'public/app/partials/confirm_modal.html',\n scope: scope,\n modalClass: 'confirm-modal',\n });\n }\n}\n\ncoreModule.service('utilSrv', UtilSrv);\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\n\n// This service really just tracks a list of $timeout promises to give us a\n// method for cancelling them all when we need to\nexport class Timer {\n timers = [];\n\n /** @ngInject */\n constructor(private $timeout) {}\n\n register(promise) {\n this.timers.push(promise);\n return promise;\n }\n\n cancel(promise) {\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 $ from 'jquery';\nimport coreModule from 'app/core/core_module';\nimport config from 'app/core/config';\n\nexport class Analytics {\n /** @ngInject */\n constructor(private $rootScope, private $location) {}\n\n gaInit() {\n $.ajax({\n url: 'https://www.google-analytics.com/analytics.js',\n dataType: 'script',\n cache: true,\n });\n const ga = ((window as any).ga =\n (window as any).ga ||\n //tslint:disable-next-line:only-arrow-functions\n function() {\n (ga.q = ga.q || []).push(arguments);\n });\n ga.l = +new Date();\n ga('create', (config as any).googleAnalyticsId, 'auto');\n ga('set', 'anonymizeIp', true);\n return ga;\n }\n\n init() {\n this.$rootScope.$on('$viewContentLoaded', () => {\n const track = { page: this.$location.url() };\n const ga = (window as any).ga || this.gaInit();\n ga('set', track);\n ga('send', 'pageview');\n });\n }\n}\n\n/** @ngInject */\nfunction startAnalytics(googleAnalyticsSrv) {\n if ((config as any).googleAnalyticsId) {\n googleAnalyticsSrv.init();\n }\n}\n\ncoreModule.service('googleAnalyticsSrv', Analytics).run(startAnalytics);\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport Drop from 'tether-drop';\n\n/** @ngInject */\nfunction popoverSrv(this: any, $compile, $rootScope, $timeout) {\n let openDrop = null;\n\n this.close = () => {\n if (openDrop) {\n openDrop.close();\n }\n };\n\n this.show = options => {\n if (openDrop) {\n openDrop.close();\n openDrop = null;\n }\n\n const scope = _.extend($rootScope.$new(true), options.model);\n let drop;\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 _ from 'lodash';\nimport coreModule from '../core_module';\n\n/** @ngInject */\nexport function uiSegmentSrv(this: any, $sce, templateSrv) {\n const self = this;\n\n function MetricSegment(this: any, options) {\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.type = options.type;\n this.expandable = options.expandable;\n this.html = options.html || $sce.trustAsHtml(templateSrv.highlightVariablesAsHtml(this.value));\n }\n\n this.getSegmentForValue = function(value, fallbackText) {\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, type, cssClass) => {\n return new MetricSegment({ value: text, fake: true, type: type, cssClass: cssClass });\n };\n\n this.newSegment = options => {\n return new MetricSegment(options);\n };\n\n this.newKey = key => {\n return new MetricSegment({ value: key, type: 'key', cssClass: 'query-segment-key' });\n };\n\n this.newKeyValue = value => {\n return new MetricSegment({ value: value, type: 'value', cssClass: 'query-segment-value' });\n };\n\n this.newCondition = condition => {\n return new MetricSegment({ value: condition, type: 'condition', cssClass: 'query-keyword' });\n };\n\n this.newOperator = op => {\n return new MetricSegment({ value: op, type: 'operator', cssClass: 'query-segment-operator' });\n };\n\n this.newOperators = ops => {\n return _.map(ops, op => {\n return new MetricSegment({ value: op, type: 'operator', cssClass: 'query-segment-operator' });\n });\n };\n\n this.transformToSegments = (addTemplateVars, variableTypeFilter) => {\n return results => {\n const segments = _.map(results, segment => {\n return self.newSegment({ value: segment.text, expandable: segment.expandable });\n });\n\n if (addTemplateVars) {\n _.each(templateSrv.variables, 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 angular from 'angular';\nimport coreModule from '../core_module';\n\nclass DynamicDirectiveSrv {\n /** @ngInject */\n constructor(private $compile, private $rootScope) {}\n\n addDirective(element, name, scope) {\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, elem, attrs, options) {\n options\n .directive(scope)\n .then(directiveInfo => {\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 .catch(err => {\n console.log('Plugin load:', err);\n this.$rootScope.appEvent('alert-error', ['Plugin error', err.toString()]);\n });\n }\n\n create(options) {\n const directiveDef = {\n restrict: 'E',\n scope: options.scope,\n link: (scope, elem, attrs) => {\n if (options.watchPath) {\n let childScope = 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","import coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\nimport { store } from 'app/store/configureStore';\nimport locationUtil from 'app/core/utils/location_util';\nimport { updateLocation } from 'app/core/actions';\n\n// Services that handles angular -> mobx store sync & other react <-> angular sync\nexport class BridgeSrv {\n private fullPageReloadRoutes;\n\n /** @ngInject */\n constructor(private $location, private $timeout, private $window, private $rootScope, private $route) {\n this.fullPageReloadRoutes = ['/logout'];\n }\n\n init() {\n this.$rootScope.$on('$routeUpdate', (evt, data) => {\n const angularUrl = this.$location.url();\n const state = store.getState();\n if (state.location.url !== angularUrl) {\n store.dispatch(\n updateLocation({\n path: this.$location.path(),\n query: this.$location.search(),\n routeParams: this.$route.current.params,\n })\n );\n }\n });\n\n this.$rootScope.$on('$routeChangeSuccess', (evt, data) => {\n store.dispatch(\n updateLocation({\n path: this.$location.path(),\n query: this.$location.search(),\n routeParams: this.$route.current.params,\n })\n );\n });\n\n // Listen for changes in redux location -> update angular location\n store.subscribe(() => {\n const state = store.getState();\n const angularUrl = this.$location.url();\n const url = locationUtil.stripBaseFromUrl(state.location.url);\n if (angularUrl !== url) {\n this.$timeout(() => {\n this.$location.url(url);\n });\n console.log('store updating angular $location.url', url);\n }\n });\n\n appEvents.on('location-change', payload => {\n const urlWithoutBase = locationUtil.stripBaseFromUrl(payload.href);\n if (this.fullPageReloadRoutes.indexOf(urlWithoutBase) > -1) {\n this.$window.location.href = payload.href;\n return;\n }\n\n this.$timeout(() => {\n // A hack to use timeout when we're changing things (in this case the url) from outside of Angular.\n this.$location.url(urlWithoutBase);\n });\n });\n }\n}\n\ncoreModule.service('bridgeSrv', BridgeSrv);\n","import _ from 'lodash';\nimport angular from 'angular';\nimport moment from 'moment';\nimport coreModule from '../core_module';\n\ncoreModule.filter('stringSort', () => {\n return input => {\n return input.sort();\n };\n});\n\ncoreModule.filter('slice', () => {\n return (arr, start, end) => {\n if (!_.isUndefined(arr)) {\n return arr.slice(start, end);\n }\n };\n});\n\ncoreModule.filter('stringify', () => {\n return arr => {\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, mode) => {\n switch (mode) {\n case 'ago':\n return moment(date).fromNow();\n }\n return moment(date).fromNow();\n };\n});\n\ncoreModule.filter('noXml', () => {\n const noXml = text => {\n return _.isString(text)\n ? text\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/'/g, ''')\n .replace(/\"/g, '"')\n : text;\n };\n return text => {\n return _.isArray(text) ? _.map(text, noXml) : noXml(text);\n };\n});\n\n/** @ngInject */\nfunction interpolateTemplateVars(templateSrv) {\n const filterFunc: any = (text, scope) => {\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 './alert_srv';\nimport './util_srv';\nimport './context_srv';\nimport './timer';\nimport './analytics';\nimport './popover_srv';\nimport './segment_srv';\nimport './backend_srv';\nimport './dynamic_directive_srv';\nimport './bridge_srv';\n","import $ from 'jquery';\nimport _ from 'lodash';\n\nimport config from 'app/core/config';\nimport coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\nimport { getExploreUrl } from 'app/core/utils/explore';\n\nimport Mousetrap from 'mousetrap';\nimport 'mousetrap-global-bind';\n\nexport class KeybindingSrv {\n helpModal: boolean;\n modalOpen = false;\n timepickerOpen = false;\n\n /** @ngInject */\n constructor(\n private $rootScope,\n private $location,\n private $timeout,\n private datasourceSrv,\n private timeSrv,\n private contextSrv\n ) {\n // clear out all shortcuts on route change\n $rootScope.$on('$routeChangeSuccess', () => {\n Mousetrap.reset();\n // rebind global shortcuts\n this.setupGlobal();\n });\n\n this.setupGlobal();\n appEvents.on('show-modal', () => (this.modalOpen = true));\n $rootScope.onAppEvent('timepickerOpen', () => (this.timepickerOpen = true));\n $rootScope.onAppEvent('timepickerClosed', () => (this.timepickerOpen = false));\n }\n\n setupGlobal() {\n this.bind(['?', 'h'], this.showHelpModal);\n this.bind('g h', this.goToHome);\n this.bind('g a', this.openAlerting);\n this.bind('g p', this.goToProfile);\n this.bind('s s', this.openSearchStarred);\n this.bind('s o', this.openSearch);\n this.bind('s t', this.openSearchTags);\n this.bind('f', this.openSearch);\n this.bindGlobal('esc', this.exit);\n }\n\n openSearchStarred() {\n appEvents.emit('show-dash-search', { starred: true });\n }\n\n openSearchTags() {\n appEvents.emit('show-dash-search', { tagsMode: true });\n }\n\n openSearch() {\n appEvents.emit('show-dash-search');\n }\n\n openAlerting() {\n this.$location.url('/alerting');\n }\n\n goToHome() {\n this.$location.url('/');\n }\n\n goToProfile() {\n this.$location.url('/profile');\n }\n\n showHelpModal() {\n appEvents.emit('show-modal', { templateHtml: '' });\n }\n\n exit() {\n const popups = $('.popover.in');\n if (popups.length > 0) {\n return;\n }\n\n appEvents.emit('hide-modal');\n\n if (this.modalOpen) {\n this.modalOpen = false;\n return;\n }\n\n if (this.timepickerOpen) {\n this.$rootScope.appEvent('closeTimepicker');\n this.timepickerOpen = false;\n return;\n }\n\n // close settings view\n const search = this.$location.search();\n if (search.editview) {\n delete search.editview;\n this.$location.search(search);\n return;\n }\n\n if (search.fullscreen) {\n this.$rootScope.appEvent('panel-change-view', { fullscreen: false, edit: false });\n return;\n }\n\n if (search.kiosk) {\n this.$rootScope.appEvent('toggle-kiosk-mode', { exit: true });\n }\n }\n\n bind(keyArg, fn) {\n Mousetrap.bind(\n keyArg,\n evt => {\n evt.preventDefault();\n evt.stopPropagation();\n evt.returnValue = false;\n return this.$rootScope.$apply(fn.bind(this));\n },\n 'keydown'\n );\n }\n\n bindGlobal(keyArg, fn) {\n Mousetrap.bindGlobal(\n keyArg,\n evt => {\n evt.preventDefault();\n evt.stopPropagation();\n evt.returnValue = false;\n return this.$rootScope.$apply(fn.bind(this));\n },\n 'keydown'\n );\n }\n\n showDashEditView() {\n const search = _.extend(this.$location.search(), { editview: 'settings' });\n this.$location.search(search);\n }\n\n setupDashboardBindings(scope, dashboard) {\n this.bind('mod+o', () => {\n dashboard.graphTooltip = (dashboard.graphTooltip + 1) % 3;\n appEvents.emit('graph-hover-clear');\n this.$rootScope.$broadcast('refresh');\n });\n\n this.bind('mod+s', e => {\n scope.appEvent('save-dashboard');\n });\n\n this.bind('t z', () => {\n scope.appEvent('zoom-out', 2);\n });\n\n this.bind('ctrl+z', () => {\n scope.appEvent('zoom-out', 2);\n });\n\n this.bind('t left', () => {\n scope.appEvent('shift-time-backward');\n });\n\n this.bind('t right', () => {\n scope.appEvent('shift-time-forward');\n });\n\n // edit panel\n this.bind('e', () => {\n if (dashboard.meta.focusPanelId && dashboard.meta.canEdit) {\n this.$rootScope.appEvent('panel-change-view', {\n fullscreen: true,\n edit: true,\n panelId: dashboard.meta.focusPanelId,\n toggle: true,\n });\n }\n });\n\n // view panel\n this.bind('v', () => {\n if (dashboard.meta.focusPanelId) {\n this.$rootScope.appEvent('panel-change-view', {\n fullscreen: true,\n edit: null,\n panelId: dashboard.meta.focusPanelId,\n toggle: true,\n });\n }\n });\n\n // jump to explore if permissions allow\n if (this.contextSrv.isEditor && config.exploreEnabled) {\n this.bind('x', async () => {\n if (dashboard.meta.focusPanelId) {\n const panel = dashboard.getPanelById(dashboard.meta.focusPanelId);\n const datasource = await this.datasourceSrv.get(panel.datasource);\n const url = await getExploreUrl(panel, panel.targets, datasource, this.datasourceSrv, this.timeSrv);\n if (url) {\n this.$timeout(() => this.$location.url(url));\n }\n }\n });\n }\n\n // delete panel\n this.bind('p r', () => {\n if (dashboard.meta.focusPanelId && dashboard.meta.canEdit) {\n this.$rootScope.appEvent('panel-remove', {\n panelId: dashboard.meta.focusPanelId,\n });\n dashboard.meta.focusPanelId = 0;\n }\n });\n\n // duplicate panel\n this.bind('p d', () => {\n if (dashboard.meta.focusPanelId && dashboard.meta.canEdit) {\n const panelIndex = dashboard.getPanelInfoById(dashboard.meta.focusPanelId).index;\n dashboard.duplicatePanel(dashboard.panels[panelIndex]);\n }\n });\n\n // share panel\n this.bind('p s', () => {\n if (dashboard.meta.focusPanelId) {\n const shareScope = scope.$new();\n const panelInfo = dashboard.getPanelInfoById(dashboard.meta.focusPanelId);\n shareScope.panel = panelInfo.panel;\n shareScope.dashboard = dashboard;\n\n appEvents.emit('show-modal', {\n src: 'public/app/features/dashboard/partials/shareModal.html',\n scope: shareScope,\n });\n }\n });\n\n // collapse all rows\n this.bind('d shift+c', () => {\n dashboard.collapseRows();\n });\n\n // expand all rows\n this.bind('d shift+e', () => {\n dashboard.expandRows();\n });\n\n this.bind('d n', e => {\n this.$location.url('/dashboard/new');\n });\n\n this.bind('d r', () => {\n this.$rootScope.$broadcast('refresh');\n });\n\n this.bind('d s', () => {\n this.showDashEditView();\n });\n\n this.bind('d k', () => {\n appEvents.emit('toggle-kiosk-mode');\n });\n\n this.bind('d v', () => {\n appEvents.emit('toggle-view-mode');\n });\n\n //Autofit panels\n this.bind('d a', () => {\n // this has to be a full page reload\n window.location.href = window.location.href + '&autofitpanels';\n });\n }\n}\n\ncoreModule.service('keybindingSrv', KeybindingSrv);\n","import coreModule from '../../core_module';\nimport appEvents from 'app/core/app_events';\n\nexport class HelpCtrl {\n tabIndex: any;\n shortcuts: any;\n\n /** @ngInject */\n constructor() {\n this.tabIndex = 0;\n this.shortcuts = {\n Global: [\n { keys: ['g', 'h'], description: 'Go to Home Dashboard' },\n { keys: ['g', 'p'], description: 'Go to Profile' },\n { keys: ['s', 'o'], description: 'Open search' },\n { keys: ['s', 's'], description: 'Open search with starred filter' },\n { keys: ['s', 't'], description: 'Open search in tags view' },\n { keys: ['esc'], description: 'Exit edit/setting views' },\n ],\n Dashboard: [\n { keys: ['mod+s'], description: 'Save dashboard' },\n { keys: ['d', 'r'], description: 'Refresh all panels' },\n { keys: ['d', 's'], description: 'Dashboard settings' },\n { keys: ['d', 'v'], description: 'Toggle in-active / view mode' },\n { keys: ['d', 'k'], description: 'Toggle kiosk mode (hides top nav)' },\n { keys: ['d', 'E'], description: 'Expand all rows' },\n { keys: ['d', 'C'], description: 'Collapse all rows' },\n { keys: ['d', 'a'], description: 'Toggle auto fit panels (experimental feature)' },\n { keys: ['mod+o'], description: 'Toggle shared graph crosshair' },\n ],\n 'Focused Panel': [\n { keys: ['e'], description: 'Toggle panel edit view' },\n { keys: ['v'], description: 'Toggle panel fullscreen view' },\n { keys: ['p', 's'], description: 'Open Panel Share Modal' },\n { keys: ['p', 'd'], description: 'Duplicate Panel' },\n { keys: ['p', 'r'], description: 'Remove Panel' },\n ],\n 'Time Range': [\n { keys: ['t', 'z'], description: 'Zoom out time range' },\n {\n keys: ['t', ''],\n description: 'Move time range back',\n },\n {\n keys: ['t', ''],\n description: 'Move time range forward',\n },\n ],\n };\n }\n\n dismiss() {\n appEvents.emit('hide-modal');\n }\n}\n\nexport function helpModal() {\n return {\n restrict: 'E',\n templateUrl: 'public/app/core/components/help/help.html',\n controller: HelpCtrl,\n bindToController: true,\n transclude: true,\n controllerAs: 'ctrl',\n scope: {},\n };\n}\n\ncoreModule.directive('helpModal', helpModal);\n","import coreModule from 'app/core/core_module';\nimport config from 'app/core/config';\nimport _ from 'lodash';\n\nexport interface NavModelItem {\n text: string;\n url: string;\n icon?: string;\n img?: string;\n id: string;\n active?: boolean;\n hideFromTabs?: boolean;\n divider?: boolean;\n children: NavModelItem[];\n target?: string;\n}\n\nexport class NavModel {\n breadcrumbs: NavModelItem[];\n main: NavModelItem;\n node: NavModelItem;\n\n constructor() {\n this.breadcrumbs = [];\n }\n}\n\nexport class NavModelSrv {\n navItems: any;\n\n /** @ngInject */\n constructor() {\n this.navItems = config.bootData.navTree;\n }\n\n getCfgNode() {\n return _.find(this.navItems, { id: 'cfg' });\n }\n\n getNav(...args) {\n let children = this.navItems;\n const nav = new NavModel();\n\n for (const id of args) {\n // if its a number then it's the index to use for main\n if (_.isNumber(id)) {\n nav.main = nav.breadcrumbs[id];\n break;\n }\n\n const node = _.find(children, { id: id });\n nav.breadcrumbs.push(node);\n nav.node = node;\n nav.main = node;\n children = node.children;\n }\n\n if (nav.main.children) {\n for (const item of nav.main.children) {\n item.active = false;\n\n if (item.url === nav.node.url) {\n item.active = true;\n }\n }\n }\n\n return nav;\n }\n\n getNotFoundNav() {\n const node = {\n text: 'Page not found',\n icon: 'fa fa-fw fa-warning',\n subTitle: '404 Error',\n };\n\n return {\n breadcrumbs: [node],\n node: node,\n main: node,\n };\n }\n}\n\ncoreModule.service('navModelSrv', NavModelSrv);\n","import coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\n\nexport function pageScrollbar() {\n return {\n restrict: 'A',\n link: (scope, elem, attrs) => {\n let lastPos = 0;\n\n appEvents.on(\n 'dash-scroll',\n evt => {\n if (evt.restore) {\n elem[0].scrollTop = lastPos;\n return;\n }\n\n lastPos = elem[0].scrollTop;\n\n if (evt.animate) {\n elem.animate({ scrollTop: evt.pos }, 500);\n } else {\n elem[0].scrollTop = evt.pos;\n }\n },\n scope\n );\n\n scope.$on('$routeChangeSuccess', () => {\n lastPos = 0;\n elem[0].scrollTop = 0;\n // Focus page to enable scrolling by keyboard\n elem[0].focus({ preventScroll: true });\n });\n\n elem[0].tabIndex = -1;\n // Focus page to enable scrolling by keyboard\n elem[0].focus({ preventScroll: true });\n },\n };\n}\n\ncoreModule.directive('pageScrollbar', pageScrollbar);\n","import $ from 'jquery';\nimport baron from 'baron';\nimport coreModule from 'app/core/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, elem, attrs) => {\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 coreModule from 'app/core/core_module';\n\nconst template = `\n
    \n \n
    \n\t\t
    \n

    \n \n \n {{::model.node.text}}\n

    \n\n
    \n\t\t
    \n\n
    \n
    \n
    \n
    \n`;\n\nexport function gfPageDirective() {\n return {\n restrict: 'E',\n template: template,\n scope: {\n model: '=',\n },\n transclude: {\n header: '?gfPageHeader',\n body: 'gfPageBody',\n },\n link: (scope, elem, attrs) => {\n console.log(scope);\n },\n };\n}\n\ncoreModule.directive('gfPage', gfPageDirective);\n","import coreModule from 'app/core/core_module';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport config from 'app/core/config';\n\nconst template = `\n
    \n\t
    \n\t\t

    \n\t\t\t\n\t\t\tSwitch Organization\n\t\t

    \n\n\t\t\n\t\t\t\n\t\t\n\t
    \n\n
    \n \n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t\t\n\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\t\n\t\t\t\t\n\t\t\t\n\t\t
    NameRole
    {{org.name}}{{org.role}}\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tCurrent\n\t\t\t\t\t\t\n\t\t\t\t\t\t\n\t\t\t\t\t\t\tSwitch to\n\t\t\t\t\t\t\n\t\t\t\t\t
    \n\t
    \n
    `;\n\nexport class OrgSwitchCtrl {\n orgs: any[];\n currentOrgId: any;\n\n /** @ngInject */\n constructor(private backendSrv) {\n this.currentOrgId = contextSrv.user.orgId;\n this.getUserOrgs();\n }\n\n getUserOrgs() {\n this.backendSrv.get('/api/user/orgs').then(orgs => {\n this.orgs = orgs;\n });\n }\n\n setUsingOrg(org) {\n return this.backendSrv.post('/api/user/using/' + org.orgId).then(() => {\n this.setWindowLocation(config.appSubUrl + (config.appSubUrl.endsWith('/') ? '' : '/') + '?orgId=' + org.orgId);\n });\n }\n\n setWindowLocation(href: string) {\n window.location.href = href;\n }\n}\n\nexport function orgSwitcher() {\n return {\n restrict: 'E',\n template: template,\n controller: OrgSwitchCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: { dismiss: '&' },\n };\n}\n\ncoreModule.directive('orgSwitcher', orgSwitcher);\n","import React from 'react';\n\nexport interface Props {\n password: string;\n}\n\nexport class PasswordStrength extends React.Component {\n constructor(props) {\n super(props);\n }\n\n render() {\n const { password } = this.props;\n let strengthText = 'strength: strong like a bull.';\n let strengthClass = 'password-strength-good';\n\n if (!password) {\n return null;\n }\n\n if (password.length <= 8) {\n strengthText = 'strength: you can do better.';\n strengthClass = 'password-strength-ok';\n }\n\n if (password.length < 4) {\n strengthText = 'strength: weak sauce.';\n strengthClass = 'password-strength-bad';\n }\n\n return (\n
    \n {strengthText}\n
    \n );\n }\n}\n","import React from 'react';\nimport classNames from 'classnames';\n\nexport class SearchResult extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n search: '',\n };\n }\n\n render() {\n return this.state.search.sections.map(section => {\n return ;\n });\n }\n}\n\nexport interface SectionProps {\n section: any;\n}\n\nexport class SearchResultSection extends React.Component {\n constructor(props) {\n super(props);\n }\n\n renderItem(item) {\n return (\n \n \n \n \n \n
    {item.title}
    \n
    \n
    \n );\n }\n\n toggleSection = () => {\n this.props.section.toggle();\n };\n\n render() {\n const collapseClassNames = classNames({\n fa: true,\n 'fa-plus': !this.props.section.expanded,\n 'fa-minus': this.props.section.expanded,\n 'search-section__header__toggle': true,\n });\n\n return (\n
    \n
    \n \n {this.props.section.title}\n \n
    \n {this.props.section.expanded && (\n
    {this.props.section.items.map(this.renderItem)}
    \n )}\n
    \n );\n }\n}\n","import React from 'react';\nimport { TagBadge } from './TagBadge';\n\nexport interface Props {\n value: any;\n className: any;\n onClick: any;\n onRemove: any;\n}\n\nexport class TagValue extends React.Component {\n constructor(props) {\n super(props);\n this.onClick = this.onClick.bind(this);\n }\n\n onClick(event) {\n this.props.onRemove(this.props.value, event);\n }\n\n render() {\n const { value } = this.props;\n\n return ;\n }\n}\n","import React from 'react';\nimport { TagBadge } from './TagBadge';\n\nexport interface Props {\n onSelect: any;\n onFocus: any;\n option: any;\n isFocused: any;\n className: any;\n}\n\nexport class TagOption extends React.Component {\n constructor(props) {\n super(props);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n }\n\n handleMouseDown(event) {\n event.preventDefault();\n event.stopPropagation();\n this.props.onSelect(this.props.option, event);\n }\n\n handleMouseEnter(event) {\n this.props.onFocus(this.props.option, event);\n }\n\n handleMouseMove(event) {\n if (this.props.isFocused) {\n return;\n }\n this.props.onFocus(this.props.option, event);\n }\n\n render() {\n const { option, className } = this.props;\n\n return (\n \n \n \n );\n }\n}\n","import _ from 'lodash';\nimport React from 'react';\nimport { Async } from 'react-select';\nimport { TagValue } from './TagValue';\nimport { TagOption } from './TagOption';\n\nexport interface Props {\n tags: string[];\n tagOptions: () => any;\n onSelect: (tag: string) => void;\n}\n\nexport class TagFilter extends React.Component {\n inlineTags: boolean;\n\n constructor(props) {\n super(props);\n\n this.searchTags = this.searchTags.bind(this);\n this.onChange = this.onChange.bind(this);\n this.onTagRemove = this.onTagRemove.bind(this);\n }\n\n searchTags(query) {\n return this.props.tagOptions().then(options => {\n const tags = _.map(options, tagOption => {\n return { value: tagOption.term, label: tagOption.term, count: tagOption.count };\n });\n return { options: tags };\n });\n }\n\n onChange(newTags) {\n this.props.onSelect(newTags);\n }\n\n onTagRemove(tag) {\n let newTags = _.without(this.props.tags, tag.label);\n newTags = _.map(newTags, tag => {\n return { value: tag };\n });\n this.props.onSelect(newTags);\n }\n\n render() {\n const selectOptions = {\n loadOptions: this.searchTags,\n onChange: this.onChange,\n value: this.props.tags,\n multi: true,\n className: 'gf-form-input gf-form-input--form-dropdown',\n placeholder: 'Tags',\n loadingPlaceholder: 'Loading...',\n noResultsText: 'No tags found',\n optionComponent: TagOption,\n };\n\n selectOptions['valueComponent'] = TagValue;\n\n return (\n
    \n
    \n \n
    \n \n
    \n );\n }\n}\n","import React, { SFC } from 'react';\n\nexport interface Props {\n child: any;\n}\n\nconst DropDownChild: SFC = props => {\n const { child } = props;\n const listItemClassName = child.divider ? 'divider' : '';\n\n return (\n
  • \n \n {child.icon && }\n {child.text}\n \n
  • \n );\n};\n\nexport default DropDownChild;\n","import React, { SFC } from 'react';\nimport _ from 'lodash';\nimport TopSectionItem from './TopSectionItem';\nimport config from '../../config';\n\nconst TopSection: SFC = () => {\n const navTree = _.cloneDeep(config.bootData.navTree);\n const mainLinks = _.filter(navTree, item => !item.hideFromMenu);\n\n return (\n
    \n {mainLinks.map((link, index) => {\n return ;\n })}\n
    \n );\n};\n\nexport default TopSection;\n","import React, { SFC } from 'react';\nimport DropDownChild from './DropDownChild';\n\ninterface Props {\n link: any;\n}\n\nconst SideMenuDropDown: SFC = props => {\n const { link } = props;\n return (\n
      \n
    • \n {link.text}\n
    • \n {link.children &&\n link.children.map((child, index) => {\n return ;\n })}\n
    \n );\n};\n\nexport default SideMenuDropDown;\n","import React, { SFC } from 'react';\nimport SideMenuDropDown from './SideMenuDropDown';\n\nexport interface Props {\n link: any;\n}\n\nconst TopSectionItem: SFC = props => {\n const { link } = props;\n return (\n
    \n \n \n \n {link.img && }\n \n \n {link.children && }\n
    \n );\n};\n\nexport default TopSectionItem;\n","import React, { SFC } from 'react';\n\nconst SignIn: SFC = () => {\n const loginUrl = `login?redirect=${encodeURIComponent(window.location.pathname)}`;\n return (\n \n );\n};\n\nexport default SignIn;\n","import React, { PureComponent } from 'react';\nimport appEvents from '../../app_events';\nimport { User } from '../../services/context_srv';\n\nexport interface Props {\n link: any;\n user: User;\n}\n\nclass BottomNavLinks extends PureComponent {\n itemClicked = (event, child) => {\n if (child.url === '/shortcuts') {\n event.preventDefault();\n appEvents.emit('show-modal', {\n templateHtml: '',\n });\n }\n };\n\n switchOrg = () => {\n appEvents.emit('show-modal', {\n templateHtml: '',\n });\n };\n\n render() {\n const { link, user } = this.props;\n return (\n
    \n \n \n {link.icon && }\n {link.img && }\n \n \n \n
    \n );\n }\n}\n\nexport default BottomNavLinks;\n","import React, { PureComponent } from 'react';\nimport appEvents from '../../app_events';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport TopSection from './TopSection';\nimport BottomSection from './BottomSection';\n\nexport class SideMenu extends PureComponent {\n toggleSideMenu = () => {\n contextSrv.toggleSideMenu();\n appEvents.emit('toggle-sidemenu');\n };\n\n toggleSideMenuSmallBreakpoint = () => {\n appEvents.emit('toggle-sidemenu-mobile');\n };\n\n render() {\n return [\n
    \n \"graphana_logo\"\n
    ,\n
    \n \n \n  Close\n \n
    ,\n ,\n ,\n ];\n }\n}\n","import React from 'react';\nimport _ from 'lodash';\nimport SignIn from './SignIn';\nimport BottomNavLinks from './BottomNavLinks';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport config from '../../config';\n\nexport default function BottomSection() {\n const navTree = _.cloneDeep(config.bootData.navTree);\n const bottomNav = _.filter(navTree, item => item.hideFromMenu);\n const isSignedIn = contextSrv.isSignedIn;\n const user = contextSrv.user;\n\n if (user && user.orgCount > 1) {\n const profileNode = _.find(bottomNav, { id: 'profile' });\n if (profileNode) {\n profileNode.showOrgSwitcher = true;\n }\n }\n\n return (\n
    \n {!isSignedIn && }\n {bottomNav.map((link, index) => {\n return ;\n })}\n
    \n );\n}\n","import { react2AngularDirective } from 'app/core/utils/react2angular';\nimport { PasswordStrength } from './components/PasswordStrength';\nimport PageHeader from './components/PageHeader/PageHeader';\nimport EmptyListCTA from './components/EmptyListCTA/EmptyListCTA';\nimport { SearchResult } from './components/search/SearchResult';\nimport { TagFilter } from './components/TagFilter/TagFilter';\nimport { SideMenu } from './components/sidemenu/SideMenu';\n\nexport function registerAngularDirectives() {\n react2AngularDirective('passwordStrength', PasswordStrength, ['password']);\n react2AngularDirective('sidemenu', SideMenu, []);\n react2AngularDirective('pageHeader', PageHeader, ['model', 'noTabs']);\n react2AngularDirective('emptyListCta', EmptyListCTA, ['model']);\n react2AngularDirective('searchResult', SearchResult, []);\n react2AngularDirective('tagFilter', TagFilter, [\n 'tags',\n ['onSelect', { watchDepth: 'reference' }],\n ['tagOptions', { watchDepth: 'reference' }],\n ]);\n}\n","import _ from 'lodash';\nimport coreModule from '../../core_module';\nimport appEvents from 'app/core/app_events';\n\nexport class SearchResultsCtrl {\n results: any;\n onSelectionChanged: any;\n onTagSelected: any;\n onFolderExpanding: any;\n editable: boolean;\n\n /** @ngInject */\n constructor(private $location) {}\n\n toggleFolderExpand(section) {\n if (section.toggle) {\n if (!section.expanded && this.onFolderExpanding) {\n this.onFolderExpanding();\n }\n\n section.toggle(section).then(f => {\n if (this.editable && f.expanded) {\n if (f.items) {\n _.each(f.items, i => {\n i.checked = f.checked;\n });\n\n if (this.onSelectionChanged) {\n this.onSelectionChanged();\n }\n }\n }\n });\n }\n }\n\n navigateToFolder(section, evt) {\n this.$location.path(section.url);\n\n if (evt) {\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n\n toggleSelection(item, evt) {\n item.checked = !item.checked;\n\n if (item.items) {\n _.each(item.items, i => {\n i.checked = item.checked;\n });\n }\n\n if (this.onSelectionChanged) {\n this.onSelectionChanged();\n }\n\n if (evt) {\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n\n onItemClick(item) {\n //Check if one string can be found in the other\n if (this.$location.path().indexOf(item.url) > -1 || item.url.indexOf(this.$location.path()) > -1) {\n appEvents.emit('hide-dash-search');\n }\n }\n\n selectTag(tag, evt) {\n if (this.onTagSelected) {\n this.onTagSelected({ $tag: tag });\n }\n\n if (evt) {\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n}\n\nexport function searchResultsDirective() {\n return {\n restrict: 'E',\n templateUrl: 'public/app/core/components/search/search_results.html',\n controller: SearchResultsCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {\n editable: '@',\n results: '=',\n onSelectionChanged: '&',\n onTagSelected: '&',\n onFolderExpanding: '&',\n },\n };\n}\n\ncoreModule.directive('dashboardSearchResults', searchResultsDirective);\n","import _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport appEvents from 'app/core/app_events';\nimport { SearchSrv } from 'app/core/services/search_srv';\n\nclass Query {\n query: string;\n mode: string;\n tag: any[];\n starred: boolean;\n skipRecent: boolean;\n skipStarred: boolean;\n folderIds: number[];\n}\n\nexport class ManageDashboardsCtrl {\n sections: any[];\n\n query: Query;\n navModel: any;\n\n selectAllChecked = false;\n\n // enable/disable actions depending on the folders or dashboards selected\n canDelete = false;\n canMove = false;\n\n // filter variables\n hasFilters = false;\n tagFilterOptions: any[];\n selectedTagFilter: any;\n starredFilterOptions = [{ text: 'Filter by Starred', disabled: true }, { text: 'Yes' }, { text: 'No' }];\n selectedStarredFilter: any;\n\n // used when managing dashboards for a specific folder\n folderId?: number;\n folderUid?: string;\n\n // if user can add new folders and/or add new dashboards\n canSave = false;\n\n // if user has editor role or higher\n isEditor: boolean;\n\n hasEditPermissionInFolders: boolean;\n\n /** @ngInject */\n constructor(private backendSrv, navModelSrv, private searchSrv: SearchSrv, private contextSrv) {\n this.isEditor = this.contextSrv.isEditor;\n this.hasEditPermissionInFolders = this.contextSrv.hasEditPermissionInFolders;\n\n this.query = {\n query: '',\n mode: 'tree',\n tag: [],\n starred: false,\n skipRecent: true,\n skipStarred: true,\n folderIds: [],\n };\n\n if (this.folderId) {\n this.query.folderIds = [this.folderId];\n }\n\n this.selectedStarredFilter = this.starredFilterOptions[0];\n\n this.refreshList().then(() => {\n this.initTagFilter();\n });\n }\n\n refreshList() {\n return this.searchSrv\n .search(this.query)\n .then(result => {\n return this.initDashboardList(result);\n })\n .then(() => {\n if (!this.folderUid) {\n return;\n }\n\n return this.backendSrv.getFolderByUid(this.folderUid).then(folder => {\n this.canSave = folder.canSave;\n if (!this.canSave) {\n this.hasEditPermissionInFolders = false;\n }\n });\n });\n }\n\n initDashboardList(result: any) {\n this.canMove = false;\n this.canDelete = false;\n this.selectAllChecked = false;\n this.hasFilters = this.query.query.length > 0 || this.query.tag.length > 0 || this.query.starred;\n\n if (!result) {\n this.sections = [];\n return;\n }\n\n this.sections = result;\n\n for (const section of this.sections) {\n section.checked = false;\n\n for (const dashboard of section.items) {\n dashboard.checked = false;\n }\n }\n\n if (this.folderId && this.sections.length > 0) {\n this.sections[0].hideHeader = true;\n }\n }\n\n selectionChanged() {\n let selectedDashboards = 0;\n\n for (const section of this.sections) {\n selectedDashboards += _.filter(section.items, { checked: true }).length;\n }\n\n const selectedFolders = _.filter(this.sections, { checked: true }).length;\n this.canMove = selectedDashboards > 0;\n this.canDelete = selectedDashboards > 0 || selectedFolders > 0;\n }\n\n getFoldersAndDashboardsToDelete() {\n const selectedDashboards = {\n folders: [],\n dashboards: [],\n };\n\n for (const section of this.sections) {\n if (section.checked && section.id !== 0) {\n selectedDashboards.folders.push(section.uid);\n } else {\n const selected = _.filter(section.items, { checked: true });\n selectedDashboards.dashboards.push(..._.map(selected, 'uid'));\n }\n }\n\n return selectedDashboards;\n }\n\n getFolderIds(sections) {\n const ids = [];\n for (const s of sections) {\n if (s.checked) {\n ids.push(s.id);\n }\n }\n return ids;\n }\n\n delete() {\n const data = this.getFoldersAndDashboardsToDelete();\n const folderCount = data.folders.length;\n const dashCount = data.dashboards.length;\n let text = 'Do you want to delete the ';\n let text2;\n\n if (folderCount > 0 && dashCount > 0) {\n text += `selected folder${folderCount === 1 ? '' : 's'} and dashboard${dashCount === 1 ? '' : 's'}?`;\n text2 = `All dashboards of the selected folder${folderCount === 1 ? '' : 's'} will also be deleted`;\n } else if (folderCount > 0) {\n text += `selected folder${folderCount === 1 ? '' : 's'} and all its dashboards?`;\n } else {\n text += `selected dashboard${dashCount === 1 ? '' : 's'}?`;\n }\n\n appEvents.emit('confirm-modal', {\n title: 'Delete',\n text: text,\n text2: text2,\n icon: 'fa-trash',\n yesText: 'Delete',\n onConfirm: () => {\n this.deleteFoldersAndDashboards(data.folders, data.dashboards);\n },\n });\n }\n\n private deleteFoldersAndDashboards(folderUids, dashboardUids) {\n this.backendSrv.deleteFoldersAndDashboards(folderUids, dashboardUids).then(() => {\n this.refreshList();\n });\n }\n\n getDashboardsToMove() {\n const selectedDashboards = [];\n\n for (const section of this.sections) {\n const selected = _.filter(section.items, { checked: true });\n selectedDashboards.push(..._.map(selected, 'uid'));\n }\n\n return selectedDashboards;\n }\n\n moveTo() {\n const selectedDashboards = this.getDashboardsToMove();\n\n const template =\n '' +\n '`';\n appEvents.emit('show-modal', {\n templateHtml: template,\n modalClass: 'modal--narrow',\n model: {\n dashboards: selectedDashboards,\n afterSave: this.refreshList.bind(this),\n },\n });\n }\n\n initTagFilter() {\n return this.searchSrv.getDashboardTags().then(results => {\n this.tagFilterOptions = [{ term: 'Filter By Tag', disabled: true }].concat(results);\n this.selectedTagFilter = this.tagFilterOptions[0];\n });\n }\n\n filterByTag(tag) {\n if (_.indexOf(this.query.tag, tag) === -1) {\n this.query.tag.push(tag);\n }\n\n return this.refreshList();\n }\n\n onQueryChange() {\n return this.refreshList();\n }\n\n onTagFilterChange() {\n const res = this.filterByTag(this.selectedTagFilter.term);\n this.selectedTagFilter = this.tagFilterOptions[0];\n return res;\n }\n\n removeTag(tag, evt) {\n this.query.tag = _.without(this.query.tag, tag);\n this.refreshList();\n if (evt) {\n evt.stopPropagation();\n evt.preventDefault();\n }\n }\n\n removeStarred() {\n this.query.starred = false;\n return this.refreshList();\n }\n\n onStarredFilterChange() {\n this.query.starred = this.selectedStarredFilter.text === 'Yes';\n this.selectedStarredFilter = this.starredFilterOptions[0];\n return this.refreshList();\n }\n\n onSelectAllChanged() {\n for (const section of this.sections) {\n if (!section.hideHeader) {\n section.checked = this.selectAllChecked;\n }\n\n section.items = _.map(section.items, item => {\n item.checked = this.selectAllChecked;\n return item;\n });\n }\n\n this.selectionChanged();\n }\n\n clearFilters() {\n this.query.query = '';\n this.query.tag = [];\n this.query.starred = false;\n this.refreshList();\n }\n\n createDashboardUrl() {\n let url = 'dashboard/new';\n\n if (this.folderId) {\n url += `?folderId=${this.folderId}`;\n }\n\n return url;\n }\n\n importDashboardUrl() {\n let url = 'dashboard/import';\n\n if (this.folderId) {\n url += `?folderId=${this.folderId}`;\n }\n\n return url;\n }\n}\n\nexport function manageDashboardsDirective() {\n return {\n restrict: 'E',\n templateUrl: 'public/app/core/components/manage_dashboards/manage_dashboards.html',\n controller: ManageDashboardsCtrl,\n bindToController: true,\n controllerAs: 'ctrl',\n scope: {\n folderId: '=',\n folderUid: '=',\n },\n };\n}\n\ncoreModule.directive('manageDashboards', manageDashboardsDirective);\n","import './directives/dash_class';\nimport './directives/dropdown_typeahead';\nimport './directives/metric_segment';\nimport './directives/misc';\nimport './directives/ng_model_on_blur';\nimport './directives/tags';\nimport './directives/value_select_dropdown';\nimport './directives/rebuild_on_change';\nimport './directives/give_focus';\nimport './directives/diff-view';\nimport './jquery_extended';\nimport './partials';\nimport './components/jsontree/jsontree';\nimport './components/code_editor/code_editor';\nimport './utils/outline';\nimport './components/colorpicker/ColorPicker';\nimport './components/colorpicker/SeriesColorPicker';\nimport './components/colorpicker/spectrum_picker';\nimport './services/search_srv';\nimport './services/ng_react';\n\nimport { grafanaAppDirective } from './components/grafana_app';\nimport { searchDirective } from './components/search/search';\nimport { infoPopover } from './components/info_popover';\nimport { navbarDirective } from './components/navbar/navbar';\nimport { arrayJoin } from './directives/array_join';\nimport { liveSrv } from './live/live_srv';\nimport { Emitter } from './utils/emitter';\nimport { layoutSelector } from './components/layout_selector/layout_selector';\nimport { switchDirective } from './components/switch';\nimport { dashboardSelector } from './components/dashboard_selector';\nimport { queryPartEditorDirective } from './components/query_part/query_part_editor';\nimport { sqlPartEditorDirective } from './components/sql_part/sql_part_editor';\nimport { formDropdownDirective } from './components/form_dropdown/form_dropdown';\nimport 'app/core/controllers/all';\nimport 'app/core/services/all';\nimport './filters/filters';\nimport coreModule from './core_module';\nimport appEvents from './app_events';\nimport colors from './utils/colors';\nimport { assignModelProperties } from './utils/model_utils';\nimport { contextSrv } from './services/context_srv';\nimport { KeybindingSrv } from './services/keybindingSrv';\nimport { helpModal } from './components/help/help';\nimport { JsonExplorer } from './components/json_explorer/json_explorer';\nimport { NavModelSrv, NavModel } from './nav_model_srv';\nimport { geminiScrollbar } from './components/scroll/scroll';\nimport { pageScrollbar } from './components/scroll/page_scroll';\nimport { gfPageDirective } from './components/gf_page';\nimport { orgSwitcher } from './components/org_switcher';\nimport { profiler } from './profiler';\nimport { registerAngularDirectives } from './angular_wrappers';\nimport { updateLegendValues } from './time_series2';\nimport TimeSeries from './time_series2';\nimport { searchResultsDirective } from './components/search/search_results';\nimport { manageDashboardsDirective } from './components/manage_dashboards/manage_dashboards';\n\nexport {\n profiler,\n registerAngularDirectives,\n arrayJoin,\n coreModule,\n grafanaAppDirective,\n navbarDirective,\n searchDirective,\n liveSrv,\n layoutSelector,\n switchDirective,\n infoPopover,\n Emitter,\n appEvents,\n dashboardSelector,\n queryPartEditorDirective,\n sqlPartEditorDirective,\n colors,\n formDropdownDirective,\n assignModelProperties,\n contextSrv,\n KeybindingSrv,\n helpModal,\n JsonExplorer,\n NavModelSrv,\n NavModel,\n geminiScrollbar,\n pageScrollbar,\n gfPageDirective,\n orgSwitcher,\n manageDashboardsDirective,\n TimeSeries,\n updateLegendValues,\n searchResultsDirective,\n};\n","import kbn from 'app/core/utils/kbn';\nimport { getFlotTickDecimals } from 'app/core/utils/ticks';\nimport _ from 'lodash';\n\nfunction matchSeriesOverride(aliasOrRegex, seriesAlias) {\n if (!aliasOrRegex) {\n return false;\n }\n\n if (aliasOrRegex[0] === '/') {\n const regex = kbn.stringToJsRegex(aliasOrRegex);\n return seriesAlias.match(regex) != null;\n }\n\n return aliasOrRegex === seriesAlias;\n}\n\nfunction translateFillOption(fill) {\n return fill === 0 ? 0.001 : fill / 10;\n}\n\n/**\n * Calculate decimals for legend and update values for each series.\n * @param data series data\n * @param panel\n * @param height\n */\nexport function updateLegendValues(data: TimeSeries[], panel, height) {\n for (let i = 0; i < data.length; i++) {\n const series = data[i];\n const yaxes = panel.yaxes;\n const seriesYAxis = series.yaxis || 1;\n const axis = yaxes[seriesYAxis - 1];\n const formater = kbn.valueFormats[axis.format];\n\n // decimal override\n if (_.isNumber(panel.decimals)) {\n series.updateLegendValues(formater, panel.decimals, null);\n } else if (_.isNumber(axis.decimals)) {\n series.updateLegendValues(formater, axis.decimals + 1, null);\n } else {\n // auto decimals\n // legend and tooltip gets one more decimal precision\n // than graph legend ticks\n const { datamin, datamax } = getDataMinMax(data);\n const { tickDecimals, scaledDecimals } = getFlotTickDecimals(datamin, datamax, axis, height);\n const tickDecimalsPlusOne = (tickDecimals || -1) + 1;\n series.updateLegendValues(formater, tickDecimalsPlusOne, scaledDecimals + 2);\n }\n }\n}\n\nexport function getDataMinMax(data: TimeSeries[]) {\n let datamin = null;\n let datamax = null;\n\n for (const series of data) {\n if (datamax === null || datamax < series.stats.max) {\n datamax = series.stats.max;\n }\n if (datamin === null || datamin > series.stats.min) {\n datamin = series.stats.min;\n }\n }\n\n return { datamin, datamax };\n}\n\nexport default class TimeSeries {\n datapoints: any;\n id: string;\n label: string;\n alias: string;\n aliasEscaped: string;\n color: string;\n valueFormater: any;\n stats: any;\n legend: boolean;\n hideTooltip: boolean;\n allIsNull: boolean;\n allIsZero: boolean;\n decimals: number;\n scaledDecimals: number;\n hasMsResolution: boolean;\n isOutsideRange: boolean;\n\n lines: any;\n dashes: any;\n bars: any;\n points: any;\n yaxis: any;\n zindex: any;\n stack: any;\n nullPointMode: any;\n fillBelowTo: any;\n transform: any;\n flotpairs: any;\n unit: any;\n\n constructor(opts) {\n this.datapoints = opts.datapoints;\n this.label = opts.alias;\n this.id = opts.alias;\n this.alias = opts.alias;\n this.aliasEscaped = _.escape(opts.alias);\n this.color = opts.color;\n this.bars = { fillColor: opts.color };\n this.valueFormater = kbn.valueFormats.none;\n this.stats = {};\n this.legend = true;\n this.unit = opts.unit;\n this.hasMsResolution = this.isMsResolutionNeeded();\n }\n\n applySeriesOverrides(overrides) {\n this.lines = {};\n this.dashes = {\n dashLength: [],\n };\n this.points = {};\n this.yaxis = 1;\n this.zindex = 0;\n this.nullPointMode = null;\n delete this.stack;\n delete this.bars.show;\n\n for (let i = 0; i < overrides.length; i++) {\n const override = overrides[i];\n if (!matchSeriesOverride(override.alias, this.alias)) {\n continue;\n }\n if (override.lines !== void 0) {\n this.lines.show = override.lines;\n }\n if (override.dashes !== void 0) {\n this.dashes.show = override.dashes;\n this.lines.lineWidth = 0;\n }\n if (override.points !== void 0) {\n this.points.show = override.points;\n }\n if (override.bars !== void 0) {\n this.bars.show = override.bars;\n }\n if (override.fill !== void 0) {\n this.lines.fill = translateFillOption(override.fill);\n }\n if (override.stack !== void 0) {\n this.stack = override.stack;\n }\n if (override.linewidth !== void 0) {\n this.lines.lineWidth = this.dashes.show ? 0 : override.linewidth;\n this.dashes.lineWidth = override.linewidth;\n }\n if (override.dashLength !== void 0) {\n this.dashes.dashLength[0] = override.dashLength;\n }\n if (override.spaceLength !== void 0) {\n this.dashes.dashLength[1] = override.spaceLength;\n }\n if (override.nullPointMode !== void 0) {\n this.nullPointMode = override.nullPointMode;\n }\n if (override.pointradius !== void 0) {\n this.points.radius = override.pointradius;\n }\n if (override.steppedLine !== void 0) {\n this.lines.steps = override.steppedLine;\n }\n if (override.zindex !== void 0) {\n this.zindex = override.zindex;\n }\n if (override.fillBelowTo !== void 0) {\n this.fillBelowTo = override.fillBelowTo;\n }\n if (override.color !== void 0) {\n this.setColor(override.color);\n }\n if (override.transform !== void 0) {\n this.transform = override.transform;\n }\n if (override.legend !== void 0) {\n this.legend = override.legend;\n }\n if (override.hideTooltip !== void 0) {\n this.hideTooltip = override.hideTooltip;\n }\n\n if (override.yaxis !== void 0) {\n this.yaxis = override.yaxis;\n }\n }\n }\n\n getFlotPairs(fillStyle) {\n const result = [];\n\n this.stats.total = 0;\n this.stats.max = -Number.MAX_VALUE;\n this.stats.min = Number.MAX_VALUE;\n this.stats.logmin = Number.MAX_VALUE;\n this.stats.avg = null;\n this.stats.current = null;\n this.stats.first = null;\n this.stats.delta = 0;\n this.stats.diff = null;\n this.stats.range = null;\n this.stats.timeStep = Number.MAX_VALUE;\n this.allIsNull = true;\n this.allIsZero = true;\n\n const ignoreNulls = fillStyle === 'connected';\n const nullAsZero = fillStyle === 'null as zero';\n let currentTime;\n let currentValue;\n let nonNulls = 0;\n let previousTime;\n let previousValue = 0;\n let previousDeltaUp = true;\n\n for (let i = 0; i < this.datapoints.length; i++) {\n currentValue = this.datapoints[i][0];\n currentTime = this.datapoints[i][1];\n\n // Due to missing values we could have different timeStep all along the series\n // so we have to find the minimum one (could occur with aggregators such as ZimSum)\n if (previousTime !== undefined) {\n const timeStep = currentTime - previousTime;\n if (timeStep < this.stats.timeStep) {\n this.stats.timeStep = timeStep;\n }\n }\n previousTime = currentTime;\n\n if (currentValue === null) {\n if (ignoreNulls) {\n continue;\n }\n if (nullAsZero) {\n currentValue = 0;\n }\n }\n\n if (currentValue !== null) {\n if (_.isNumber(currentValue)) {\n this.stats.total += currentValue;\n this.allIsNull = false;\n nonNulls++;\n }\n\n if (currentValue > this.stats.max) {\n this.stats.max = currentValue;\n }\n\n if (currentValue < this.stats.min) {\n this.stats.min = currentValue;\n }\n\n if (this.stats.first === null) {\n this.stats.first = currentValue;\n } else {\n if (previousValue > currentValue) {\n // counter reset\n previousDeltaUp = false;\n if (i === this.datapoints.length - 1) {\n // reset on last\n this.stats.delta += currentValue;\n }\n } else {\n if (previousDeltaUp) {\n this.stats.delta += currentValue - previousValue; // normal increment\n } else {\n this.stats.delta += currentValue; // account for counter reset\n }\n previousDeltaUp = true;\n }\n }\n previousValue = currentValue;\n\n if (currentValue < this.stats.logmin && currentValue > 0) {\n this.stats.logmin = currentValue;\n }\n\n if (currentValue !== 0) {\n this.allIsZero = false;\n }\n }\n\n result.push([currentTime, currentValue]);\n }\n\n if (this.stats.max === -Number.MAX_VALUE) {\n this.stats.max = null;\n }\n if (this.stats.min === Number.MAX_VALUE) {\n this.stats.min = null;\n }\n\n if (result.length && !this.allIsNull) {\n this.stats.avg = this.stats.total / nonNulls;\n this.stats.current = result[result.length - 1][1];\n if (this.stats.current === null && result.length > 1) {\n this.stats.current = result[result.length - 2][1];\n }\n }\n if (this.stats.max !== null && this.stats.min !== null) {\n this.stats.range = this.stats.max - this.stats.min;\n }\n if (this.stats.current !== null && this.stats.first !== null) {\n this.stats.diff = this.stats.current - this.stats.first;\n }\n\n this.stats.count = result.length;\n return result;\n }\n\n updateLegendValues(formater, decimals, scaledDecimals) {\n this.valueFormater = formater;\n this.decimals = decimals;\n this.scaledDecimals = scaledDecimals;\n }\n\n formatValue(value) {\n if (!_.isFinite(value)) {\n value = null; // Prevent NaN formatting\n }\n return this.valueFormater(value, this.decimals, this.scaledDecimals);\n }\n\n isMsResolutionNeeded() {\n for (let i = 0; i < this.datapoints.length; i++) {\n if (this.datapoints[i][1] !== null) {\n const timestamp = this.datapoints[i][1].toString();\n if (timestamp.length === 13 && timestamp % 1000 !== 0) {\n return true;\n }\n }\n }\n return false;\n }\n\n hideFromLegend(options) {\n if (options.hideEmpty && this.allIsNull) {\n return true;\n }\n // ignore series excluded via override\n if (!this.legend) {\n return true;\n }\n\n // ignore zero series\n if (options.hideZero && this.allIsZero) {\n return true;\n }\n\n return false;\n }\n\n setColor(color) {\n this.color = color;\n this.bars.fillColor = color;\n }\n}\n","/**\n * @preserve jquery-param (c) 2015 KNOWLEDGECODE | MIT\n */\n\nimport { UrlQueryMap } from 'app/types';\n\nexport function renderUrl(path: string, query: UrlQueryMap | undefined): string {\n if (query && Object.keys(query).length > 0) {\n path += '?' + toUrlParams(query);\n }\n return path;\n}\n\nexport function toUrlParams(a) {\n const s = [];\n const rbracket = /\\[\\]$/;\n\n const isArray = obj => {\n return Object.prototype.toString.call(obj) === '[object Array]';\n };\n\n const add = (k, v) => {\n v = typeof v === 'function' ? v() : v === null ? '' : v === undefined ? '' : v;\n if (typeof v !== 'boolean') {\n s[s.length] = encodeURIComponent(k) + '=' + encodeURIComponent(v);\n } else {\n s[s.length] = encodeURIComponent(k);\n }\n };\n\n const buildParams = (prefix, obj) => {\n let i, len, key;\n\n if (prefix) {\n if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n if (rbracket.test(prefix)) {\n add(prefix, obj[i]);\n } else {\n buildParams(prefix, obj[i]);\n }\n }\n } else if (obj && String(obj) === '[object Object]') {\n for (key in obj) {\n buildParams(prefix + '[' + key + ']', obj[key]);\n }\n } else {\n add(prefix, obj);\n }\n } else if (isArray(obj)) {\n for (i = 0, len = obj.length; i < len; i++) {\n add(obj[i].name, obj[i].value);\n }\n } else {\n for (key in obj) {\n buildParams(key, obj[key]);\n }\n }\n return s;\n };\n\n return buildParams('', a).join('&');\n}\n","import _ from 'lodash';\n\nexport class QueryPartDef {\n type: string;\n params: any[];\n defaultParams: any[];\n renderer: any;\n category: any;\n addStrategy: any;\n\n constructor(options: any) {\n this.type = options.type;\n this.params = options.params;\n this.defaultParams = options.defaultParams;\n this.renderer = options.renderer;\n this.category = options.category;\n this.addStrategy = options.addStrategy;\n }\n}\n\nexport class QueryPart {\n part: any;\n def: QueryPartDef;\n params: any[];\n text: string;\n\n constructor(part: any, def: any) {\n this.part = part;\n this.def = def;\n if (!this.def) {\n throw { message: 'Could not find query part ' + part.type };\n }\n\n part.params = part.params || _.clone(this.def.defaultParams);\n this.params = part.params;\n this.updateText();\n }\n\n render(innerExpr: string) {\n return this.def.renderer(this, innerExpr);\n }\n\n hasMultipleParamsInString(strValue, index) {\n if (strValue.indexOf(',') === -1) {\n return false;\n }\n\n return this.def.params[index + 1] && this.def.params[index + 1].optional;\n }\n\n updateParam(strValue, index) {\n // handle optional parameters\n // if string contains ',' and next param is optional, split and update both\n if (this.hasMultipleParamsInString(strValue, index)) {\n _.each(strValue.split(','), (partVal, idx) => {\n this.updateParam(partVal.trim(), idx);\n });\n return;\n }\n\n if (strValue === '' && this.def.params[index].optional) {\n this.params.splice(index, 1);\n } else {\n this.params[index] = strValue;\n }\n\n this.part.params = this.params;\n this.updateText();\n }\n\n updateText() {\n if (this.params.length === 0) {\n this.text = this.def.type + '()';\n return;\n }\n\n let text = this.def.type + '(';\n text += this.params.join(', ');\n text += ')';\n this.text = text;\n }\n}\n\nexport function functionRenderer(part, innerExpr) {\n const str = part.def.type + '(';\n const parameters = _.map(part.params, (value, index) => {\n const paramType = part.def.params[index];\n if (paramType.type === 'time') {\n if (value === 'auto') {\n value = '$__interval';\n }\n }\n if (paramType.quote === 'single') {\n return \"'\" + value + \"'\";\n } else if (paramType.quote === 'double') {\n return '\"' + value + '\"';\n }\n\n return value;\n });\n\n if (innerExpr) {\n parameters.unshift(innerExpr);\n }\n return str + parameters.join(', ') + ')';\n}\n\nexport function suffixRenderer(part, innerExpr) {\n return innerExpr + ' ' + part.params[0];\n}\n\nexport function identityRenderer(part, innerExpr) {\n return part.params[0];\n}\n\nexport function quotedIdentityRenderer(part, innerExpr) {\n return '\"' + part.params[0] + '\"';\n}\n","const TAG_COLORS = [\n '#E24D42',\n '#1F78C1',\n '#BA43A9',\n '#705DA0',\n '#466803',\n '#508642',\n '#447EBC',\n '#C15C17',\n '#890F02',\n '#757575',\n '#0A437C',\n '#6D1F62',\n '#584477',\n '#629E51',\n '#2F4F4F',\n '#BF1B00',\n '#806EB7',\n '#8a2eb8',\n '#699e00',\n '#000000',\n '#3F6833',\n '#2F575E',\n '#99440A',\n '#E0752D',\n '#0E4AB4',\n '#58140C',\n '#052B51',\n '#511749',\n '#3F2B5B',\n];\n\nconst TAG_BORDER_COLORS = [\n '#FF7368',\n '#459EE7',\n '#E069CF',\n '#9683C6',\n '#6C8E29',\n '#76AC68',\n '#6AA4E2',\n '#E7823D',\n '#AF3528',\n '#9B9B9B',\n '#3069A2',\n '#934588',\n '#7E6A9D',\n '#88C477',\n '#557575',\n '#E54126',\n '#A694DD',\n '#B054DE',\n '#8FC426',\n '#262626',\n '#658E59',\n '#557D84',\n '#BF6A30',\n '#FF9B53',\n '#3470DA',\n '#7E3A32',\n '#2B5177',\n '#773D6F',\n '#655181',\n];\n\n/**\n * Returns tag badge background and border colors based on hashed tag name.\n * @param name tag name\n */\nexport function getTagColorsFromName(name: string): { color: string; borderColor: string } {\n const hash = djb2(name.toLowerCase());\n const color = TAG_COLORS[Math.abs(hash % TAG_COLORS.length)];\n const borderColor = TAG_BORDER_COLORS[Math.abs(hash % TAG_BORDER_COLORS.length)];\n return { color, borderColor };\n}\n\nfunction djb2(str) {\n let hash = 5381;\n for (let i = 0; i < str.length; i++) {\n hash = (hash << 5) + hash + str.charCodeAt(i); /* hash * 33 + c */\n }\n return hash;\n}\n\nexport default {\n getTagColorsFromName,\n};\n","import { Team, NavModelItem, NavModel } from 'app/types';\nimport config from 'app/core/config';\n\nexport function buildNavModel(team: Team): NavModelItem {\n const navModel = {\n img: team.avatarUrl,\n id: 'team-' + team.id,\n subTitle: 'Manage members & settings',\n url: '',\n text: team.name,\n breadcrumbs: [{ title: 'Teams', url: 'org/teams' }],\n children: [\n {\n active: false,\n icon: 'gicon gicon-team',\n id: `team-members-${team.id}`,\n text: 'Members',\n url: `org/teams/edit/${team.id}/members`,\n },\n {\n active: false,\n icon: 'fa fa-fw fa-sliders',\n id: `team-settings-${team.id}`,\n text: 'Settings',\n url: `org/teams/edit/${team.id}/settings`,\n },\n ],\n };\n\n if (config.buildInfo.isEnterprise) {\n navModel.children.push({\n active: false,\n icon: 'fa fa-fw fa-refresh',\n id: `team-groupsync-${team.id}`,\n text: 'External group sync',\n url: `org/teams/edit/${team.id}/groupsync`,\n });\n }\n\n return navModel;\n}\n\nexport function getTeamLoadingNav(pageName: string): NavModel {\n const main = buildNavModel({\n avatarUrl: 'public/img/user_profile.png',\n id: 1,\n name: 'Loading',\n email: 'loading',\n memberCount: 0,\n });\n\n let node: NavModelItem;\n\n // find active page\n for (const child of main.children) {\n if (child.id.indexOf(pageName) > 0) {\n child.active = true;\n node = child;\n break;\n }\n }\n\n return {\n main: main,\n node: node,\n };\n}\n","import React, { Component } from 'react';\nimport Select from 'react-select';\nimport PickerOption from './PickerOption';\nimport { debounce } from 'lodash';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { User } from 'app/types';\n\nexport interface Props {\n onSelected: (user: User) => void;\n value?: string;\n className?: string;\n}\n\nexport interface State {\n isLoading: boolean;\n}\n\nexport class UserPicker extends Component {\n debouncedSearch: any;\n\n constructor(props) {\n super(props);\n this.state = { isLoading: false };\n this.search = this.search.bind(this);\n\n this.debouncedSearch = debounce(this.search, 300, {\n leading: true,\n trailing: true,\n });\n }\n\n search(query?: string) {\n const backendSrv = getBackendSrv();\n\n this.setState({ isLoading: true });\n\n return backendSrv\n .get(`/api/org/users?query=${query}&limit=10`)\n .then(result => {\n return {\n options: result.map(user => ({\n id: user.userId,\n label: `${user.login} - ${user.email}`,\n avatarUrl: user.avatarUrl,\n login: user.login,\n })),\n };\n })\n .finally(() => {\n this.setState({ isLoading: false });\n });\n }\n\n render() {\n const { value, className } = this.props;\n const { isLoading } = this.state;\n\n return (\n
    \n \n
    \n );\n }\n}\n","import React, { Component } from 'react';\n\nexport interface Props {\n onSelect: any;\n onFocus: any;\n option: any;\n isFocused: any;\n className: any;\n}\n\nclass UserPickerOption extends Component {\n constructor(props) {\n super(props);\n this.handleMouseDown = this.handleMouseDown.bind(this);\n this.handleMouseEnter = this.handleMouseEnter.bind(this);\n this.handleMouseMove = this.handleMouseMove.bind(this);\n }\n\n handleMouseDown(event) {\n event.preventDefault();\n event.stopPropagation();\n this.props.onSelect(this.props.option, event);\n }\n\n handleMouseEnter(event) {\n this.props.onFocus(this.props.option, event);\n }\n\n handleMouseMove(event) {\n if (this.props.isFocused) {\n return;\n }\n this.props.onFocus(this.props.option, event);\n }\n\n render() {\n const { option, children, className } = this.props;\n\n return (\n \n {option.label}\n {children}\n \n );\n }\n}\n\nexport default UserPickerOption;\n","import React, { PureComponent } from 'react';\n\nexport interface DeleteButtonProps {\n onConfirmDelete();\n}\n\nexport interface DeleteButtonStates {\n showConfirm: boolean;\n}\n\nexport default class DeleteButton extends PureComponent {\n state: DeleteButtonStates = {\n showConfirm: false,\n };\n\n onClickDelete = event => {\n if (event) {\n event.preventDefault();\n }\n\n this.setState({\n showConfirm: true,\n });\n };\n\n onClickCancel = event => {\n if (event) {\n event.preventDefault();\n }\n this.setState({\n showConfirm: false,\n });\n };\n\n render() {\n const onClickConfirm = this.props.onConfirmDelete;\n let showConfirm;\n let showDeleteButton;\n\n if (this.state.showConfirm) {\n showConfirm = 'show';\n showDeleteButton = 'hide';\n } else {\n showConfirm = 'hide';\n showDeleteButton = 'show';\n }\n\n return (\n \n \n \n \n \n \n \n Cancel\n \n \n Confirm Delete\n \n \n \n \n );\n }\n}\n","import _ from 'lodash';\nimport moment from 'moment';\n\nconst units = ['y', 'M', 'w', 'd', 'h', 'm', 's'];\n\nexport function parse(text, roundUp?, timezone?) {\n if (!text) {\n return undefined;\n }\n if (moment.isMoment(text)) {\n return text;\n }\n if (_.isDate(text)) {\n return moment(text);\n }\n\n let time;\n let mathString = '';\n let index;\n let parseString;\n\n if (text.substring(0, 3) === 'now') {\n if (timezone === 'utc') {\n time = moment.utc();\n } else {\n time = moment();\n }\n mathString = text.substring('now'.length);\n } else {\n index = text.indexOf('||');\n if (index === -1) {\n parseString = text;\n mathString = ''; // nothing else\n } else {\n parseString = text.substring(0, index);\n mathString = text.substring(index + 2);\n }\n // We're going to just require ISO8601 timestamps, k?\n time = moment(parseString, moment.ISO_8601);\n }\n\n if (!mathString.length) {\n return time;\n }\n\n return parseDateMath(mathString, time, roundUp);\n}\n\nexport function isValid(text) {\n const date = parse(text);\n if (!date) {\n return false;\n }\n\n if (moment.isMoment(date)) {\n return date.isValid();\n }\n\n return false;\n}\n\nexport function parseDateMath(mathString, time, roundUp?) {\n const dateTime = time;\n let i = 0;\n const len = mathString.length;\n\n while (i < len) {\n const c = mathString.charAt(i++);\n let type;\n let num;\n let unit;\n\n if (c === '/') {\n type = 0;\n } else if (c === '+') {\n type = 1;\n } else if (c === '-') {\n type = 2;\n } else {\n return undefined;\n }\n\n if (isNaN(mathString.charAt(i))) {\n num = 1;\n } else if (mathString.length === 2) {\n num = mathString.charAt(i);\n } else {\n const numFrom = i;\n while (!isNaN(mathString.charAt(i))) {\n i++;\n if (i > 10) {\n return undefined;\n }\n }\n num = parseInt(mathString.substring(numFrom, i), 10);\n }\n\n if (type === 0) {\n // rounding is only allowed on whole, single, units (eg M or 1M, not 0.5M or 2M)\n if (num !== 1) {\n return undefined;\n }\n }\n unit = mathString.charAt(i++);\n\n if (!_.includes(units, unit)) {\n return undefined;\n } else {\n if (type === 0) {\n if (roundUp) {\n dateTime.endOf(unit);\n } else {\n dateTime.startOf(unit);\n }\n } else if (type === 1) {\n dateTime.add(num, unit);\n } else if (type === 2) {\n dateTime.subtract(num, unit);\n }\n }\n }\n return dateTime;\n}\n","import { ThunkAction } from 'redux-thunk';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { StoreState, Team, TeamGroup, TeamMember } from 'app/types';\nimport { updateNavIndex, UpdateNavIndexAction } from 'app/core/actions';\nimport { buildNavModel } from './navModel';\n\nexport enum ActionTypes {\n LoadTeams = 'LOAD_TEAMS',\n LoadTeam = 'LOAD_TEAM',\n SetSearchQuery = 'SET_TEAM_SEARCH_QUERY',\n SetSearchMemberQuery = 'SET_TEAM_MEMBER_SEARCH_QUERY',\n LoadTeamMembers = 'TEAM_MEMBERS_LOADED',\n LoadTeamGroups = 'TEAM_GROUPS_LOADED',\n}\n\nexport interface LoadTeamsAction {\n type: ActionTypes.LoadTeams;\n payload: Team[];\n}\n\nexport interface LoadTeamAction {\n type: ActionTypes.LoadTeam;\n payload: Team;\n}\n\nexport interface LoadTeamMembersAction {\n type: ActionTypes.LoadTeamMembers;\n payload: TeamMember[];\n}\n\nexport interface LoadTeamGroupsAction {\n type: ActionTypes.LoadTeamGroups;\n payload: TeamGroup[];\n}\n\nexport interface SetSearchQueryAction {\n type: ActionTypes.SetSearchQuery;\n payload: string;\n}\n\nexport interface SetSearchMemberQueryAction {\n type: ActionTypes.SetSearchMemberQuery;\n payload: string;\n}\n\nexport type Action =\n | LoadTeamsAction\n | SetSearchQueryAction\n | LoadTeamAction\n | LoadTeamMembersAction\n | SetSearchMemberQueryAction\n | LoadTeamGroupsAction;\n\ntype ThunkResult = ThunkAction;\n\nconst teamsLoaded = (teams: Team[]): LoadTeamsAction => ({\n type: ActionTypes.LoadTeams,\n payload: teams,\n});\n\nconst teamLoaded = (team: Team): LoadTeamAction => ({\n type: ActionTypes.LoadTeam,\n payload: team,\n});\n\nconst teamMembersLoaded = (teamMembers: TeamMember[]): LoadTeamMembersAction => ({\n type: ActionTypes.LoadTeamMembers,\n payload: teamMembers,\n});\n\nconst teamGroupsLoaded = (teamGroups: TeamGroup[]): LoadTeamGroupsAction => ({\n type: ActionTypes.LoadTeamGroups,\n payload: teamGroups,\n});\n\nexport const setSearchMemberQuery = (searchQuery: string): SetSearchMemberQueryAction => ({\n type: ActionTypes.SetSearchMemberQuery,\n payload: searchQuery,\n});\n\nexport const setSearchQuery = (searchQuery: string): SetSearchQueryAction => ({\n type: ActionTypes.SetSearchQuery,\n payload: searchQuery,\n});\n\nexport function loadTeams(): ThunkResult {\n return async dispatch => {\n const response = await getBackendSrv().get('/api/teams/search', { perpage: 1000, page: 1 });\n dispatch(teamsLoaded(response.teams));\n };\n}\n\nexport function loadTeam(id: number): ThunkResult {\n return async dispatch => {\n const response = await getBackendSrv().get(`/api/teams/${id}`);\n dispatch(teamLoaded(response));\n dispatch(updateNavIndex(buildNavModel(response)));\n };\n}\n\nexport function loadTeamMembers(): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n const response = await getBackendSrv().get(`/api/teams/${team.id}/members`);\n dispatch(teamMembersLoaded(response));\n };\n}\n\nexport function addTeamMember(id: number): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n await getBackendSrv().post(`/api/teams/${team.id}/members`, { userId: id });\n dispatch(loadTeamMembers());\n };\n}\n\nexport function removeTeamMember(id: number): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n await getBackendSrv().delete(`/api/teams/${team.id}/members/${id}`);\n dispatch(loadTeamMembers());\n };\n}\n\nexport function updateTeam(name: string, email: string): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n await getBackendSrv().put(`/api/teams/${team.id}`, { name, email });\n dispatch(loadTeam(team.id));\n };\n}\n\nexport function loadTeamGroups(): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n const response = await getBackendSrv().get(`/api/teams/${team.id}/groups`);\n dispatch(teamGroupsLoaded(response));\n };\n}\n\nexport function addTeamGroup(groupId: string): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n await getBackendSrv().post(`/api/teams/${team.id}/groups`, { groupId: groupId });\n dispatch(loadTeamGroups());\n };\n}\n\nexport function removeTeamGroup(groupId: string): ThunkResult {\n return async (dispatch, getStore) => {\n const team = getStore().team.team;\n await getBackendSrv().delete(`/api/teams/${team.id}/groups/${groupId}`);\n dispatch(loadTeamGroups());\n };\n}\n\nexport function deleteTeam(id: number): ThunkResult {\n return async dispatch => {\n await getBackendSrv().delete(`/api/teams/${id}`);\n dispatch(loadTeams());\n };\n}\n","export enum OrgRole {\n Viewer = 'Viewer',\n Editor = 'Editor',\n Admin = 'Admin',\n}\n\nexport interface DashboardAclDTO {\n id?: number;\n dashboardId?: number;\n userId?: number;\n userLogin?: string;\n userEmail?: string;\n teamId?: number;\n team?: string;\n permission?: PermissionLevel;\n role?: OrgRole;\n icon?: string;\n inherited?: boolean;\n}\n\nexport interface DashboardAclUpdateDTO {\n userId: number;\n teamId: number;\n role: OrgRole;\n permission: PermissionLevel;\n}\n\nexport interface DashboardAcl {\n id?: number;\n dashboardId?: number;\n userId?: number;\n userLogin?: string;\n userEmail?: string;\n teamId?: number;\n team?: string;\n permission?: PermissionLevel;\n role?: OrgRole;\n icon?: string;\n name?: string;\n inherited?: boolean;\n sortRank?: number;\n}\n\nexport interface DashboardPermissionInfo {\n value: PermissionLevel;\n label: string;\n description: string;\n}\n\nexport interface NewDashboardAclItem {\n teamId: number;\n userId: number;\n role?: OrgRole;\n permission: PermissionLevel;\n type: AclTarget;\n}\n\nexport enum PermissionLevel {\n View = 1,\n Edit = 2,\n Admin = 4,\n}\n\nexport enum AclTarget {\n Team = 'Team',\n User = 'User',\n Viewer = 'Viewer',\n Editor = 'Editor',\n}\n\nexport interface AclTargetInfo {\n value: AclTarget;\n text: string;\n}\n\nexport const dashboardAclTargets: AclTargetInfo[] = [\n { value: AclTarget.Team, text: 'Team' },\n { value: AclTarget.User, text: 'User' },\n { value: AclTarget.Viewer, text: 'Everyone With Viewer Role' },\n { value: AclTarget.Editor, text: 'Everyone With Editor Role' },\n];\n\nexport const dashboardPermissionLevels: DashboardPermissionInfo[] = [\n { value: PermissionLevel.View, label: 'View', description: 'Can view dashboards.' },\n { value: PermissionLevel.Edit, label: 'Edit', description: 'Can add, edit and delete dashboards.' },\n {\n value: PermissionLevel.Admin,\n label: 'Admin',\n description: 'Can add/remove permissions and can add, edit and delete dashboards.',\n },\n];\n","export const getSearchQuery = state => state.searchQuery;\n\nexport const getAlertRuleItems = state => {\n const regex = new RegExp(state.searchQuery, 'i');\n\n return state.items.filter(item => {\n return regex.test(item.name) || regex.test(item.stateText) || regex.test(item.info);\n });\n};\n","import { Team, TeamsState, TeamState, TeamGroup, TeamMember } from './teams';\nimport { AlertRuleDTO, AlertRule, AlertRulesState } from './alerting';\nimport { LocationState, LocationUpdate, UrlQueryMap, UrlQueryValue } from './location';\nimport { NavModel, NavModelItem, NavIndex } from './navModel';\nimport { FolderDTO, FolderState, FolderInfo } from './folders';\nimport { DashboardState } from './dashboard';\nimport { DashboardAcl, OrgRole, PermissionLevel } from './acl';\nimport { ApiKey, ApiKeysState, NewApiKey } from './apiKeys';\nimport { User } from './user';\nimport { DataSource, DataSourcesState } from './datasources';\nimport { PluginMeta, Plugin, PluginsState } from './plugins';\n\nexport {\n Team,\n TeamsState,\n TeamState,\n TeamGroup,\n TeamMember,\n AlertRuleDTO,\n AlertRule,\n AlertRulesState,\n LocationState,\n LocationUpdate,\n NavModel,\n NavModelItem,\n NavIndex,\n UrlQueryMap,\n UrlQueryValue,\n FolderDTO,\n FolderState,\n FolderInfo,\n DashboardState,\n DashboardAcl,\n OrgRole,\n PermissionLevel,\n DataSource,\n PluginMeta,\n ApiKey,\n ApiKeysState,\n NewApiKey,\n User,\n Plugin,\n PluginsState,\n DataSourcesState,\n};\n\nexport interface StoreState {\n navIndex: NavIndex;\n location: LocationState;\n alertRules: AlertRulesState;\n teams: TeamsState;\n team: TeamState;\n folder: FolderState;\n dashboard: DashboardState;\n}\n","/**\n * Calculate tick step.\n * Implementation from d3-array (ticks.js)\n * https://github.com/d3/d3-array/blob/master/src/ticks.js\n * @param start Start value\n * @param stop End value\n * @param count Ticks count\n */\nexport function tickStep(start: number, stop: number, count: number): number {\n const e10 = Math.sqrt(50),\n e5 = Math.sqrt(10),\n e2 = Math.sqrt(2);\n\n const step0 = Math.abs(stop - start) / Math.max(0, count);\n let step1 = Math.pow(10, Math.floor(Math.log(step0) / Math.LN10));\n const error = step0 / step1;\n\n if (error >= e10) {\n step1 *= 10;\n } else if (error >= e5) {\n step1 *= 5;\n } else if (error >= e2) {\n step1 *= 2;\n }\n\n return stop < start ? -step1 : step1;\n}\n\nexport function getScaledDecimals(decimals, tickSize) {\n return decimals - Math.floor(Math.log(tickSize) / Math.LN10);\n}\n\n/**\n * Calculate tick size based on min and max values, number of ticks and precision.\n * Implementation from Flot.\n * @param min Axis minimum\n * @param max Axis maximum\n * @param noTicks Number of ticks\n * @param tickDecimals Tick decimal precision\n */\nexport function getFlotTickSize(min: number, max: number, noTicks: number, tickDecimals: number) {\n const delta = (max - min) / noTicks;\n let dec = -Math.floor(Math.log(delta) / Math.LN10);\n const maxDec = tickDecimals;\n\n const magn = Math.pow(10, -dec);\n const norm = delta / magn; // norm is between 1.0 and 10.0\n let size;\n\n if (norm < 1.5) {\n size = 1;\n } else if (norm < 3) {\n size = 2;\n // special case for 2.5, requires an extra decimal\n if (norm > 2.25 && (maxDec == null || dec + 1 <= maxDec)) {\n size = 2.5;\n ++dec;\n }\n } else if (norm < 7.5) {\n size = 5;\n } else {\n size = 10;\n }\n\n size *= magn;\n\n return size;\n}\n\n/**\n * Calculate axis range (min and max).\n * Implementation from Flot.\n */\nexport function getFlotRange(panelMin, panelMax, datamin, datamax) {\n const autoscaleMargin = 0.02;\n\n let min = +(panelMin != null ? panelMin : datamin);\n let max = +(panelMax != null ? panelMax : datamax);\n const delta = max - min;\n\n if (delta === 0.0) {\n // Grafana fix: wide Y min and max using increased wideFactor\n // when all series values are the same\n const wideFactor = 0.25;\n const widen = Math.abs(max === 0 ? 1 : max * wideFactor);\n\n if (panelMin === null) {\n min -= widen;\n }\n // always widen max if we couldn't widen min to ensure we\n // don't fall into min == max which doesn't work\n if (panelMax == null || panelMin != null) {\n max += widen;\n }\n } else {\n // consider autoscaling\n const margin = autoscaleMargin;\n if (margin != null) {\n if (panelMin == null) {\n min -= delta * margin;\n // make sure we don't go below zero if all values\n // are positive\n if (min < 0 && datamin != null && datamin >= 0) {\n min = 0;\n }\n }\n if (panelMax == null) {\n max += delta * margin;\n if (max > 0 && datamax != null && datamax <= 0) {\n max = 0;\n }\n }\n }\n }\n return { min, max };\n}\n\n/**\n * Calculate tick decimals.\n * Implementation from Flot.\n */\nexport function getFlotTickDecimals(datamin, datamax, axis, height) {\n const { min, max } = getFlotRange(axis.min, axis.max, datamin, datamax);\n const noTicks = 0.3 * Math.sqrt(height);\n const delta = (max - min) / noTicks;\n const dec = -Math.floor(Math.log(delta) / Math.LN10);\n\n const magn = Math.pow(10, -dec);\n // norm is between 1.0 and 10.0\n const norm = delta / magn;\n let size;\n\n if (norm < 1.5) {\n size = 1;\n } else if (norm < 3) {\n size = 2;\n // special case for 2.5, requires an extra decimal\n if (norm > 2.25) {\n size = 2.5;\n }\n } else if (norm < 7.5) {\n size = 5;\n } else {\n size = 10;\n }\n size *= magn;\n\n const tickDecimals = Math.max(0, -Math.floor(Math.log(delta) / Math.LN10) + 1);\n // grafana addition\n const scaledDecimals = tickDecimals - Math.floor(Math.log(size) / Math.LN10);\n return { tickDecimals, scaledDecimals };\n}\n\n/**\n * Format timestamp similar to Grafana graph panel.\n * @param ticks Number of ticks\n * @param min Time from (in milliseconds)\n * @param max Time to (in milliseconds)\n */\nexport function grafanaTimeFormat(ticks, min, max) {\n if (min && max && ticks) {\n const range = max - min;\n const secPerTick = range / ticks / 1000;\n const oneDay = 86400000;\n const oneYear = 31536000000;\n\n if (secPerTick <= 45) {\n return '%H:%M:%S';\n }\n if (secPerTick <= 7200 || range <= oneDay) {\n return '%H:%M';\n }\n if (secPerTick <= 80000) {\n return '%m/%d %H:%M';\n }\n if (secPerTick <= 2419200 || range <= oneYear) {\n return '%m/%d';\n }\n return '%Y-%m';\n }\n\n return '%H:%M';\n}\n\n/**\n * Logarithm of value for arbitrary base.\n */\nexport function logp(value, base) {\n return Math.log(value) / Math.log(base);\n}\n\n/**\n * Get decimal precision of number (3.14 => 2)\n */\nexport function getPrecision(num: number): number {\n const str = num.toString();\n return getStringPrecision(str);\n}\n\n/**\n * Get decimal precision of number stored as a string (\"3.14\" => 2)\n */\nexport function getStringPrecision(num: string): number {\n const dotIndex = num.indexOf('.');\n if (dotIndex === -1) {\n return 0;\n } else {\n return num.length - dotIndex - 1;\n }\n}\n","import _ from 'lodash';\nimport moment from 'moment';\nimport * as dateMath from './datemath';\n\nconst spans = {\n s: { display: 'second' },\n m: { display: 'minute' },\n h: { display: 'hour' },\n d: { display: 'day' },\n w: { display: 'week' },\n M: { display: 'month' },\n y: { display: 'year' },\n};\n\nconst rangeOptions = [\n { from: 'now/d', to: 'now/d', display: 'Today', section: 2 },\n { from: 'now/d', to: 'now', display: 'Today so far', section: 2 },\n { from: 'now/w', to: 'now/w', display: 'This week', section: 2 },\n { from: 'now/w', to: 'now', display: 'This week so far', section: 2 },\n { from: 'now/M', to: 'now/M', display: 'This month', section: 2 },\n { from: 'now/M', to: 'now', display: 'This month so far', section: 2 },\n { from: 'now/y', to: 'now/y', display: 'This year', section: 2 },\n { from: 'now/y', to: 'now', display: 'This year so far', section: 2 },\n\n { from: 'now-1d/d', to: 'now-1d/d', display: 'Yesterday', section: 1 },\n {\n from: 'now-2d/d',\n to: 'now-2d/d',\n display: 'Day before yesterday',\n section: 1,\n },\n {\n from: 'now-7d/d',\n to: 'now-7d/d',\n display: 'This day last week',\n section: 1,\n },\n { from: 'now-1w/w', to: 'now-1w/w', display: 'Previous week', section: 1 },\n { from: 'now-1M/M', to: 'now-1M/M', display: 'Previous month', section: 1 },\n { from: 'now-1y/y', to: 'now-1y/y', display: 'Previous year', section: 1 },\n\n { from: 'now-5m', to: 'now', display: 'Last 5 minutes', section: 3 },\n { from: 'now-15m', to: 'now', display: 'Last 15 minutes', section: 3 },\n { from: 'now-30m', to: 'now', display: 'Last 30 minutes', section: 3 },\n { from: 'now-1h', to: 'now', display: 'Last 1 hour', section: 3 },\n { from: 'now-3h', to: 'now', display: 'Last 3 hours', section: 3 },\n { from: 'now-6h', to: 'now', display: 'Last 6 hours', section: 3 },\n { from: 'now-12h', to: 'now', display: 'Last 12 hours', section: 3 },\n { from: 'now-24h', to: 'now', display: 'Last 24 hours', section: 3 },\n\n { from: 'now-2d', to: 'now', display: 'Last 2 days', section: 0 },\n { from: 'now-7d', to: 'now', display: 'Last 7 days', section: 0 },\n { from: 'now-30d', to: 'now', display: 'Last 30 days', section: 0 },\n { from: 'now-90d', to: 'now', display: 'Last 90 days', section: 0 },\n { from: 'now-6M', to: 'now', display: 'Last 6 months', section: 0 },\n { from: 'now-1y', to: 'now', display: 'Last 1 year', section: 0 },\n { from: 'now-2y', to: 'now', display: 'Last 2 years', section: 0 },\n { from: 'now-5y', to: 'now', display: 'Last 5 years', section: 0 },\n];\n\nconst absoluteFormat = 'MMM D, YYYY HH:mm:ss';\n\nconst rangeIndex = {};\n_.each(rangeOptions, frame => {\n rangeIndex[frame.from + ' to ' + frame.to] = frame;\n});\n\nexport function getRelativeTimesList(timepickerSettings, currentDisplay) {\n const groups = _.groupBy(rangeOptions, (option: any) => {\n option.active = option.display === currentDisplay;\n return option.section;\n });\n\n // _.each(timepickerSettings.time_options, (duration: string) => {\n // let info = describeTextRange(duration);\n // if (info.section) {\n // groups[info.section].push(info);\n // }\n // });\n\n return groups;\n}\n\nfunction formatDate(date) {\n return date.format(absoluteFormat);\n}\n\n// handles expressions like\n// 5m\n// 5m to now/d\n// now/d to now\n// now/d\n// if no to then to now is assumed\nexport function describeTextRange(expr: any) {\n const isLast = expr.indexOf('+') !== 0;\n if (expr.indexOf('now') === -1) {\n expr = (isLast ? 'now-' : 'now') + expr;\n }\n\n let opt = rangeIndex[expr + ' to now'];\n if (opt) {\n return opt;\n }\n\n if (isLast) {\n opt = { from: expr, to: 'now' };\n } else {\n opt = { from: 'now', to: expr };\n }\n\n const parts = /^now([-+])(\\d+)(\\w)/.exec(expr);\n if (parts) {\n const unit = parts[3];\n const amount = parseInt(parts[2], 10);\n const span = spans[unit];\n if (span) {\n opt.display = isLast ? 'Last ' : 'Next ';\n opt.display += amount + ' ' + span.display;\n opt.section = span.section;\n if (amount > 1) {\n opt.display += 's';\n }\n }\n } else {\n opt.display = opt.from + ' to ' + opt.to;\n opt.invalid = true;\n }\n\n return opt;\n}\n\nexport function describeTimeRange(range) {\n const option = rangeIndex[range.from.toString() + ' to ' + range.to.toString()];\n if (option) {\n return option.display;\n }\n\n if (moment.isMoment(range.from) && moment.isMoment(range.to)) {\n return formatDate(range.from) + ' to ' + formatDate(range.to);\n }\n\n if (moment.isMoment(range.from)) {\n const toMoment = dateMath.parse(range.to, true);\n return formatDate(range.from) + ' to ' + toMoment.fromNow();\n }\n\n if (moment.isMoment(range.to)) {\n const from = dateMath.parse(range.from, false);\n return from.fromNow() + ' to ' + formatDate(range.to);\n }\n\n if (range.to.toString() === 'now') {\n const res = describeTextRange(range.from);\n return res.display;\n }\n\n return range.from.toString() + ' to ' + range.to.toString();\n}\n","import store from 'app/core/store';\nimport _ from 'lodash';\nimport config from 'app/core/config';\n\nexport class ImpressionSrv {\n constructor() {}\n\n addDashboardImpression(dashboardId) {\n const impressionsKey = this.impressionKey(config);\n let impressions = [];\n if (store.exists(impressionsKey)) {\n impressions = JSON.parse(store.get(impressionsKey));\n if (!_.isArray(impressions)) {\n impressions = [];\n }\n }\n\n impressions = impressions.filter(imp => {\n return dashboardId !== imp;\n });\n\n impressions.unshift(dashboardId);\n\n if (impressions.length > 50) {\n impressions.pop();\n }\n store.set(impressionsKey, JSON.stringify(impressions));\n }\n\n getDashboardOpened() {\n let impressions = store.get(this.impressionKey(config)) || '[]';\n\n impressions = JSON.parse(impressions);\n\n impressions = _.filter(impressions, el => {\n return _.isNumber(el);\n });\n\n return impressions;\n }\n\n impressionKey(config) {\n return 'dashboard_impressions-' + config.bootData.user.orgId;\n }\n}\n\nconst impressionSrv = new ImpressionSrv();\nexport default impressionSrv;\n","import _ from 'lodash';\nimport { QueryPartDef, QueryPart } from 'app/core/components/query_part/query_part';\n\nconst alertQueryDef = new QueryPartDef({\n type: 'query',\n params: [\n { name: 'queryRefId', type: 'string', dynamicLookup: true },\n {\n name: 'from',\n type: 'string',\n options: ['1s', '10s', '1m', '5m', '10m', '15m', '1h', '24h', '48h'],\n },\n { name: 'to', type: 'string', options: ['now'] },\n ],\n defaultParams: ['#A', '15m', 'now', 'avg'],\n});\n\nconst conditionTypes = [{ text: 'Query', value: 'query' }];\n\nconst alertStateSortScore = {\n alerting: 1,\n no_data: 2,\n pending: 3,\n ok: 4,\n paused: 5,\n};\n\nconst evalFunctions = [\n { text: 'IS ABOVE', value: 'gt' },\n { text: 'IS BELOW', value: 'lt' },\n { text: 'IS OUTSIDE RANGE', value: 'outside_range' },\n { text: 'IS WITHIN RANGE', value: 'within_range' },\n { text: 'HAS NO VALUE', value: 'no_value' },\n];\n\nconst evalOperators = [{ text: 'OR', value: 'or' }, { text: 'AND', value: 'and' }];\n\nconst reducerTypes = [\n { text: 'avg()', value: 'avg' },\n { text: 'min()', value: 'min' },\n { text: 'max()', value: 'max' },\n { text: 'sum()', value: 'sum' },\n { text: 'count()', value: 'count' },\n { text: 'last()', value: 'last' },\n { text: 'median()', value: 'median' },\n { text: 'diff()', value: 'diff' },\n { text: 'percent_diff()', value: 'percent_diff' },\n { text: 'count_non_null()', value: 'count_non_null' },\n];\n\nconst noDataModes = [\n { text: 'Alerting', value: 'alerting' },\n { text: 'No Data', value: 'no_data' },\n { text: 'Keep Last State', value: 'keep_state' },\n { text: 'Ok', value: 'ok' },\n];\n\nconst executionErrorModes = [{ text: 'Alerting', value: 'alerting' }, { text: 'Keep Last State', value: 'keep_state' }];\n\nfunction createReducerPart(model) {\n const def = new QueryPartDef({ type: model.type, defaultParams: [] });\n return new QueryPart(model, def);\n}\n\nfunction getStateDisplayModel(state) {\n switch (state) {\n case 'ok': {\n return {\n text: 'OK',\n iconClass: 'icon-gf icon-gf-online',\n stateClass: 'alert-state-ok',\n };\n }\n case 'alerting': {\n return {\n text: 'ALERTING',\n iconClass: 'icon-gf icon-gf-critical',\n stateClass: 'alert-state-critical',\n };\n }\n case 'no_data': {\n return {\n text: 'NO DATA',\n iconClass: 'fa fa-question',\n stateClass: 'alert-state-warning',\n };\n }\n case 'paused': {\n return {\n text: 'PAUSED',\n iconClass: 'fa fa-pause',\n stateClass: 'alert-state-paused',\n };\n }\n case 'pending': {\n return {\n text: 'PENDING',\n iconClass: 'fa fa-exclamation',\n stateClass: 'alert-state-warning',\n };\n }\n }\n\n throw { message: 'Unknown alert state' };\n}\n\nfunction joinEvalMatches(matches, separator: string) {\n return _.reduce(\n matches,\n (res, ev) => {\n if (ev.metric !== undefined && ev.value !== undefined) {\n res.push(ev.metric + '=' + ev.value);\n }\n\n // For backwards compatibility . Should be be able to remove this after ~2017-06-01\n if (ev.Metric !== undefined && ev.Value !== undefined) {\n res.push(ev.Metric + '=' + ev.Value);\n }\n\n return res;\n },\n []\n ).join(separator);\n}\n\nfunction getAlertAnnotationInfo(ah) {\n // backward compatibility, can be removed in grafana 5.x\n // old way stored evalMatches in data property directly,\n // new way stores it in evalMatches property on new data object\n\n if (_.isArray(ah.data)) {\n return joinEvalMatches(ah.data, ', ');\n } else if (_.isArray(ah.data.evalMatches)) {\n return joinEvalMatches(ah.data.evalMatches, ', ');\n }\n\n if (ah.data.error) {\n return 'Error: ' + ah.data.error;\n }\n\n return '';\n}\n\nexport default {\n alertQueryDef: alertQueryDef,\n getStateDisplayModel: getStateDisplayModel,\n conditionTypes: conditionTypes,\n evalFunctions: evalFunctions,\n evalOperators: evalOperators,\n noDataModes: noDataModes,\n executionErrorModes: executionErrorModes,\n reducerTypes: reducerTypes,\n createReducerPart: createReducerPart,\n getAlertAnnotationInfo: getAlertAnnotationInfo,\n alertStateSortScore: alertStateSortScore,\n};\n","export function assignModelProperties(target, source, defaults, removeDefaults?) {\n for (const key in defaults) {\n if (!defaults.hasOwnProperty(key)) {\n continue;\n }\n\n target[key] = source[key] === undefined ? defaults[key] : source[key];\n }\n}\n","import { renderUrl } from 'app/core/utils/url';\nimport { ExploreState, ExploreUrlState } from 'app/types/explore';\n\nexport const DEFAULT_RANGE = {\n from: 'now-6h',\n to: 'now',\n};\n\n/**\n * Returns an Explore-URL that contains a panel's queries and the dashboard time range.\n *\n * @param panel Origin panel of the jump to Explore\n * @param panelTargets The origin panel's query targets\n * @param panelDatasource The origin panel's datasource\n * @param datasourceSrv Datasource service to query other datasources in case the panel datasource is mixed\n * @param timeSrv Time service to get the current dashboard range from\n */\nexport async function getExploreUrl(\n panel: any,\n panelTargets: any[],\n panelDatasource: any,\n datasourceSrv: any,\n timeSrv: any\n) {\n let exploreDatasource = panelDatasource;\n let exploreTargets = panelTargets;\n let url;\n\n // Mixed datasources need to choose only one datasource\n if (panelDatasource.meta.id === 'mixed' && panelTargets) {\n // Find first explore datasource among targets\n let mixedExploreDatasource;\n for (const t of panel.targets) {\n const datasource = await datasourceSrv.get(t.datasource);\n if (datasource && datasource.meta.explore) {\n mixedExploreDatasource = datasource;\n break;\n }\n }\n\n // Add all its targets\n if (mixedExploreDatasource) {\n exploreDatasource = mixedExploreDatasource;\n exploreTargets = panelTargets.filter(t => t.datasource === mixedExploreDatasource.name);\n }\n }\n\n if (exploreDatasource && exploreDatasource.meta.explore) {\n const range = timeSrv.timeRangeForUrl();\n const state = {\n ...exploreDatasource.getExploreState(exploreTargets),\n range,\n };\n const exploreState = JSON.stringify(state);\n url = renderUrl('/explore', { state: exploreState });\n }\n return url;\n}\n\nexport function parseUrlState(initial: string | undefined): ExploreUrlState {\n if (initial) {\n try {\n return JSON.parse(decodeURI(initial));\n } catch (e) {\n console.error(e);\n }\n }\n return { datasource: null, queries: [], range: DEFAULT_RANGE };\n}\n\nexport function serializeStateToUrlParam(state: ExploreState): string {\n const urlState: ExploreUrlState = {\n datasource: state.datasourceName,\n queries: state.queries.map(q => ({ query: q.query })),\n range: state.range,\n };\n return JSON.stringify(urlState);\n}\n","import _ from 'lodash';\n\nexport default function sortByKeys(input) {\n if (_.isArray(input)) {\n return input.map(sortByKeys);\n }\n\n if (_.isPlainObject(input)) {\n const sortedObject = {};\n for (const key of _.keys(input).sort()) {\n sortedObject[key] = sortByKeys(input[key]);\n }\n return sortedObject;\n }\n\n return input;\n}\n","import _ from 'lodash';\nimport {\n GRID_COLUMN_COUNT,\n GRID_CELL_HEIGHT,\n GRID_CELL_VMARGIN,\n DEFAULT_ROW_HEIGHT,\n MIN_PANEL_HEIGHT,\n DEFAULT_PANEL_SPAN,\n} from 'app/core/constants';\nimport { PanelModel } from './panel_model';\nimport { DashboardModel } from './dashboard_model';\n\nexport class DashboardMigrator {\n dashboard: DashboardModel;\n\n constructor(dashboardModel: DashboardModel) {\n this.dashboard = dashboardModel;\n }\n\n updateSchema(old) {\n let i, j, k, n;\n const oldVersion = this.dashboard.schemaVersion;\n const panelUpgrades = [];\n this.dashboard.schemaVersion = 16;\n\n if (oldVersion === this.dashboard.schemaVersion) {\n return;\n }\n\n // version 2 schema changes\n if (oldVersion < 2) {\n if (old.services) {\n if (old.services.filter) {\n this.dashboard.time = old.services.filter.time;\n this.dashboard.templating.list = old.services.filter.list || [];\n }\n }\n\n panelUpgrades.push(panel => {\n // rename panel type\n if (panel.type === 'graphite') {\n panel.type = 'graph';\n }\n\n if (panel.type !== 'graph') {\n return;\n }\n\n if (_.isBoolean(panel.legend)) {\n panel.legend = { show: panel.legend };\n }\n\n if (panel.grid) {\n if (panel.grid.min) {\n panel.grid.leftMin = panel.grid.min;\n delete panel.grid.min;\n }\n\n if (panel.grid.max) {\n panel.grid.leftMax = panel.grid.max;\n delete panel.grid.max;\n }\n }\n\n if (panel.y_format) {\n if (!panel.y_formats) {\n panel.y_formats = [];\n }\n panel.y_formats[0] = panel.y_format;\n delete panel.y_format;\n }\n\n if (panel.y2_format) {\n if (!panel.y_formats) {\n panel.y_formats = [];\n }\n panel.y_formats[1] = panel.y2_format;\n delete panel.y2_format;\n }\n });\n }\n\n // schema version 3 changes\n if (oldVersion < 3) {\n // ensure panel ids\n let maxId = this.dashboard.getNextPanelId();\n panelUpgrades.push(panel => {\n if (!panel.id) {\n panel.id = maxId;\n maxId += 1;\n }\n });\n }\n\n // schema version 4 changes\n if (oldVersion < 4) {\n // move aliasYAxis changes\n panelUpgrades.push(panel => {\n if (panel.type !== 'graph') {\n return;\n }\n _.each(panel.aliasYAxis, (value, key) => {\n panel.seriesOverrides = [{ alias: key, yaxis: value }];\n });\n delete panel.aliasYAxis;\n });\n }\n\n if (oldVersion < 6) {\n // move pulldowns to new schema\n const annotations = _.find(old.pulldowns, { type: 'annotations' });\n\n if (annotations) {\n this.dashboard.annotations = {\n list: annotations.annotations || [],\n };\n }\n\n // update template variables\n for (i = 0; i < this.dashboard.templating.list.length; i++) {\n const variable = this.dashboard.templating.list[i];\n if (variable.datasource === void 0) {\n variable.datasource = null;\n }\n if (variable.type === 'filter') {\n variable.type = 'query';\n }\n if (variable.type === void 0) {\n variable.type = 'query';\n }\n if (variable.allFormat === void 0) {\n variable.allFormat = 'glob';\n }\n }\n }\n\n if (oldVersion < 7) {\n if (old.nav && old.nav.length) {\n this.dashboard.timepicker = old.nav[0];\n }\n\n // ensure query refIds\n panelUpgrades.push(panel => {\n _.each(panel.targets, target => {\n if (!target.refId) {\n target.refId = this.dashboard.getNextQueryLetter(panel);\n }\n });\n });\n }\n\n if (oldVersion < 8) {\n panelUpgrades.push(panel => {\n _.each(panel.targets, target => {\n // update old influxdb query schema\n if (target.fields && target.tags && target.groupBy) {\n if (target.rawQuery) {\n delete target.fields;\n delete target.fill;\n } else {\n target.select = _.map(target.fields, field => {\n const parts = [];\n parts.push({ type: 'field', params: [field.name] });\n parts.push({ type: field.func, params: [] });\n if (field.mathExpr) {\n parts.push({ type: 'math', params: [field.mathExpr] });\n }\n if (field.asExpr) {\n parts.push({ type: 'alias', params: [field.asExpr] });\n }\n return parts;\n });\n delete target.fields;\n _.each(target.groupBy, part => {\n if (part.type === 'time' && part.interval) {\n part.params = [part.interval];\n delete part.interval;\n }\n if (part.type === 'tag' && part.key) {\n part.params = [part.key];\n delete part.key;\n }\n });\n\n if (target.fill) {\n target.groupBy.push({ type: 'fill', params: [target.fill] });\n delete target.fill;\n }\n }\n }\n });\n });\n }\n\n // schema version 9 changes\n if (oldVersion < 9) {\n // move aliasYAxis changes\n panelUpgrades.push(panel => {\n if (panel.type !== 'singlestat' && panel.thresholds !== '') {\n return;\n }\n\n if (panel.thresholds) {\n const k = panel.thresholds.split(',');\n\n if (k.length >= 3) {\n k.shift();\n panel.thresholds = k.join(',');\n }\n }\n });\n }\n\n // schema version 10 changes\n if (oldVersion < 10) {\n // move aliasYAxis changes\n panelUpgrades.push(panel => {\n if (panel.type !== 'table') {\n return;\n }\n\n _.each(panel.styles, style => {\n if (style.thresholds && style.thresholds.length >= 3) {\n const k = style.thresholds;\n k.shift();\n style.thresholds = k;\n }\n });\n });\n }\n\n if (oldVersion < 12) {\n // update template variables\n _.each(this.dashboard.templating.list, templateVariable => {\n if (templateVariable.refresh) {\n templateVariable.refresh = 1;\n }\n if (!templateVariable.refresh) {\n templateVariable.refresh = 0;\n }\n if (templateVariable.hideVariable) {\n templateVariable.hide = 2;\n } else if (templateVariable.hideLabel) {\n templateVariable.hide = 1;\n }\n });\n }\n\n if (oldVersion < 12) {\n // update graph yaxes changes\n panelUpgrades.push(panel => {\n if (panel.type !== 'graph') {\n return;\n }\n if (!panel.grid) {\n return;\n }\n\n if (!panel.yaxes) {\n panel.yaxes = [\n {\n show: panel['y-axis'],\n min: panel.grid.leftMin,\n max: panel.grid.leftMax,\n logBase: panel.grid.leftLogBase,\n format: panel.y_formats[0],\n label: panel.leftYAxisLabel,\n },\n {\n show: panel['y-axis'],\n min: panel.grid.rightMin,\n max: panel.grid.rightMax,\n logBase: panel.grid.rightLogBase,\n format: panel.y_formats[1],\n label: panel.rightYAxisLabel,\n },\n ];\n\n panel.xaxis = {\n show: panel['x-axis'],\n };\n\n delete panel.grid.leftMin;\n delete panel.grid.leftMax;\n delete panel.grid.leftLogBase;\n delete panel.grid.rightMin;\n delete panel.grid.rightMax;\n delete panel.grid.rightLogBase;\n delete panel.y_formats;\n delete panel.leftYAxisLabel;\n delete panel.rightYAxisLabel;\n delete panel['y-axis'];\n delete panel['x-axis'];\n }\n });\n }\n\n if (oldVersion < 13) {\n // update graph yaxes changes\n panelUpgrades.push(panel => {\n if (panel.type !== 'graph') {\n return;\n }\n if (!panel.grid) {\n return;\n }\n\n panel.thresholds = [];\n const t1: any = {},\n t2: any = {};\n\n if (panel.grid.threshold1 !== null) {\n t1.value = panel.grid.threshold1;\n if (panel.grid.thresholdLine) {\n t1.line = true;\n t1.lineColor = panel.grid.threshold1Color;\n t1.colorMode = 'custom';\n } else {\n t1.fill = true;\n t1.fillColor = panel.grid.threshold1Color;\n t1.colorMode = 'custom';\n }\n }\n\n if (panel.grid.threshold2 !== null) {\n t2.value = panel.grid.threshold2;\n if (panel.grid.thresholdLine) {\n t2.line = true;\n t2.lineColor = panel.grid.threshold2Color;\n t2.colorMode = 'custom';\n } else {\n t2.fill = true;\n t2.fillColor = panel.grid.threshold2Color;\n t2.colorMode = 'custom';\n }\n }\n\n if (_.isNumber(t1.value)) {\n if (_.isNumber(t2.value)) {\n if (t1.value > t2.value) {\n t1.op = t2.op = 'lt';\n panel.thresholds.push(t1);\n panel.thresholds.push(t2);\n } else {\n t1.op = t2.op = 'gt';\n panel.thresholds.push(t1);\n panel.thresholds.push(t2);\n }\n } else {\n t1.op = 'gt';\n panel.thresholds.push(t1);\n }\n }\n\n delete panel.grid.threshold1;\n delete panel.grid.threshold1Color;\n delete panel.grid.threshold2;\n delete panel.grid.threshold2Color;\n delete panel.grid.thresholdLine;\n });\n }\n\n if (oldVersion < 14) {\n this.dashboard.graphTooltip = old.sharedCrosshair ? 1 : 0;\n }\n\n if (oldVersion < 16) {\n this.upgradeToGridLayout(old);\n }\n\n if (panelUpgrades.length === 0) {\n return;\n }\n\n for (j = 0; j < this.dashboard.panels.length; j++) {\n for (k = 0; k < panelUpgrades.length; k++) {\n panelUpgrades[k].call(this, this.dashboard.panels[j]);\n if (this.dashboard.panels[j].panels) {\n for (n = 0; n < this.dashboard.panels[j].panels.length; n++) {\n panelUpgrades[k].call(this, this.dashboard.panels[j].panels[n]);\n }\n }\n }\n }\n }\n\n upgradeToGridLayout(old) {\n let yPos = 0;\n const widthFactor = GRID_COLUMN_COUNT / 12;\n\n const maxPanelId = _.max(\n _.flattenDeep(\n _.map(old.rows, row => {\n return _.map(row.panels, 'id');\n })\n )\n );\n let nextRowId = maxPanelId + 1;\n\n if (!old.rows) {\n return;\n }\n\n // Add special \"row\" panels if even one row is collapsed, repeated or has visible title\n const showRows = _.some(old.rows, row => row.collapse || row.showTitle || row.repeat);\n\n for (const row of old.rows) {\n if (row.repeatIteration) {\n continue;\n }\n\n const height: any = row.height || DEFAULT_ROW_HEIGHT;\n const rowGridHeight = getGridHeight(height);\n\n const rowPanel: any = {};\n let rowPanelModel: PanelModel;\n if (showRows) {\n // add special row panel\n rowPanel.id = nextRowId;\n rowPanel.type = 'row';\n rowPanel.title = row.title;\n rowPanel.collapsed = row.collapse;\n rowPanel.repeat = row.repeat;\n rowPanel.panels = [];\n rowPanel.gridPos = {\n x: 0,\n y: yPos,\n w: GRID_COLUMN_COUNT,\n h: rowGridHeight,\n };\n rowPanelModel = new PanelModel(rowPanel);\n nextRowId++;\n yPos++;\n }\n\n const rowArea = new RowArea(rowGridHeight, GRID_COLUMN_COUNT, yPos);\n\n for (const panel of row.panels) {\n panel.span = panel.span || DEFAULT_PANEL_SPAN;\n if (panel.minSpan) {\n panel.minSpan = Math.min(GRID_COLUMN_COUNT, GRID_COLUMN_COUNT / 12 * panel.minSpan);\n }\n const panelWidth = Math.floor(panel.span) * widthFactor;\n const panelHeight = panel.height ? getGridHeight(panel.height) : rowGridHeight;\n\n const panelPos = rowArea.getPanelPosition(panelHeight, panelWidth);\n yPos = rowArea.yPos;\n panel.gridPos = {\n x: panelPos.x,\n y: yPos + panelPos.y,\n w: panelWidth,\n h: panelHeight,\n };\n rowArea.addPanel(panel.gridPos);\n\n delete panel.span;\n\n if (rowPanelModel && rowPanel.collapsed) {\n rowPanelModel.panels.push(panel);\n } else {\n this.dashboard.panels.push(new PanelModel(panel));\n }\n }\n\n if (rowPanelModel) {\n this.dashboard.panels.push(rowPanelModel);\n }\n\n if (!(rowPanelModel && rowPanel.collapsed)) {\n yPos += rowGridHeight;\n }\n }\n }\n}\n\nfunction getGridHeight(height) {\n if (_.isString(height)) {\n height = parseInt(height.replace('px', ''), 10);\n }\n\n if (height < MIN_PANEL_HEIGHT) {\n height = MIN_PANEL_HEIGHT;\n }\n\n const gridHeight = Math.ceil(height / (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN));\n return gridHeight;\n}\n\n/**\n * RowArea represents dashboard row filled by panels\n * area is an array of numbers represented filled column's cells like\n * -----------------------\n * |******** ****\n * |******** ****\n * |********\n * -----------------------\n * 33333333 2222 00000 ...\n */\nclass RowArea {\n area: number[];\n yPos: number;\n height: number;\n\n constructor(height, width = GRID_COLUMN_COUNT, rowYPos = 0) {\n this.area = new Array(width).fill(0);\n this.yPos = rowYPos;\n this.height = height;\n }\n\n reset() {\n this.area.fill(0);\n }\n\n /**\n * Update area after adding the panel.\n */\n addPanel(gridPos) {\n for (let i = gridPos.x; i < gridPos.x + gridPos.w; i++) {\n if (!this.area[i] || gridPos.y + gridPos.h - this.yPos > this.area[i]) {\n this.area[i] = gridPos.y + gridPos.h - this.yPos;\n }\n }\n return this.area;\n }\n\n /**\n * Calculate position for the new panel in the row.\n */\n getPanelPosition(panelHeight, panelWidth, callOnce = false) {\n let startPlace, endPlace;\n let place;\n for (let i = this.area.length - 1; i >= 0; i--) {\n if (this.height - this.area[i] > 0) {\n if (endPlace === undefined) {\n endPlace = i;\n } else {\n if (i < this.area.length - 1 && this.area[i] <= this.area[i + 1]) {\n startPlace = i;\n } else {\n break;\n }\n }\n } else {\n break;\n }\n }\n\n if (startPlace !== undefined && endPlace !== undefined && endPlace - startPlace >= panelWidth - 1) {\n const yPos = _.max(this.area.slice(startPlace));\n place = {\n x: startPlace,\n y: yPos,\n };\n } else if (!callOnce) {\n // wrap to next row\n this.yPos += this.height;\n this.reset();\n return this.getPanelPosition(panelHeight, panelWidth, true);\n } else {\n return null;\n }\n\n return place;\n }\n}\n","import moment from 'moment';\nimport _ from 'lodash';\n\nimport { GRID_COLUMN_COUNT, REPEAT_DIR_VERTICAL, GRID_CELL_HEIGHT, GRID_CELL_VMARGIN } from 'app/core/constants';\nimport { DEFAULT_ANNOTATION_COLOR } from 'app/core/utils/colors';\nimport { Emitter } from 'app/core/utils/emitter';\nimport { contextSrv } from 'app/core/services/context_srv';\nimport sortByKeys from 'app/core/utils/sort_by_keys';\n\nimport { PanelModel } from './panel_model';\nimport { DashboardMigrator } from './dashboard_migration';\n\nexport class DashboardModel {\n id: any;\n uid: any;\n title: any;\n autoUpdate: any;\n description: any;\n tags: any;\n style: any;\n timezone: any;\n editable: any;\n graphTooltip: any;\n time: any;\n private originalTime: any;\n timepicker: any;\n templating: any;\n private originalTemplating: any;\n annotations: any;\n refresh: any;\n snapshot: any;\n schemaVersion: number;\n version: number;\n revision: number;\n links: any;\n gnetId: any;\n panels: PanelModel[];\n\n // ------------------\n // not persisted\n // ------------------\n\n // repeat process cycles\n iteration: number;\n meta: any;\n events: Emitter;\n\n static nonPersistedProperties: { [str: string]: boolean } = {\n events: true,\n meta: true,\n panels: true, // needs special handling\n templating: true, // needs special handling\n originalTime: true,\n originalTemplating: true,\n };\n\n constructor(data, meta?) {\n if (!data) {\n data = {};\n }\n\n this.events = new Emitter();\n this.id = data.id || null;\n this.uid = data.uid || null;\n this.revision = data.revision;\n this.title = data.title || 'No Title';\n this.autoUpdate = data.autoUpdate;\n this.description = data.description;\n this.tags = data.tags || [];\n this.style = data.style || 'dark';\n this.timezone = data.timezone || '';\n this.editable = data.editable !== false;\n this.graphTooltip = data.graphTooltip || 0;\n this.time = data.time || { from: 'now-6h', to: 'now' };\n this.timepicker = data.timepicker || {};\n this.templating = this.ensureListExist(data.templating);\n this.annotations = this.ensureListExist(data.annotations);\n this.refresh = data.refresh;\n this.snapshot = data.snapshot;\n this.schemaVersion = data.schemaVersion || 0;\n this.version = data.version || 0;\n this.links = data.links || [];\n this.gnetId = data.gnetId || null;\n this.panels = _.map(data.panels || [], panelData => new PanelModel(panelData));\n\n this.resetOriginalVariables();\n this.resetOriginalTime();\n\n this.initMeta(meta);\n this.updateSchema(data);\n\n this.addBuiltInAnnotationQuery();\n this.sortPanelsByGridPos();\n }\n\n addBuiltInAnnotationQuery() {\n let found = false;\n for (const item of this.annotations.list) {\n if (item.builtIn === 1) {\n found = true;\n break;\n }\n }\n\n if (found) {\n return;\n }\n\n this.annotations.list.unshift({\n datasource: '-- Grafana --',\n name: 'Annotations & Alerts',\n type: 'dashboard',\n iconColor: DEFAULT_ANNOTATION_COLOR,\n enable: true,\n hide: true,\n builtIn: 1,\n });\n }\n\n private initMeta(meta) {\n meta = meta || {};\n\n meta.canShare = meta.canShare !== false;\n meta.canSave = meta.canSave !== false;\n meta.canStar = meta.canStar !== false;\n meta.canEdit = meta.canEdit !== false;\n meta.showSettings = meta.canEdit;\n meta.canMakeEditable = meta.canSave && !this.editable;\n\n if (!this.editable) {\n meta.canEdit = false;\n meta.canDelete = false;\n meta.canSave = false;\n }\n\n this.meta = meta;\n }\n\n // cleans meta data and other non persistent state\n getSaveModelClone(options?) {\n const defaults = _.defaults(options || {}, {\n saveVariables: true,\n saveTimerange: true,\n });\n\n // make clone\n let copy: any = {};\n for (const property in this) {\n if (DashboardModel.nonPersistedProperties[property] || !this.hasOwnProperty(property)) {\n continue;\n }\n\n copy[property] = _.cloneDeep(this[property]);\n }\n\n // get variable save models\n copy.templating = {\n list: _.map(this.templating.list, variable => (variable.getSaveModel ? variable.getSaveModel() : variable)),\n };\n\n if (!defaults.saveVariables) {\n for (let i = 0; i < copy.templating.list.length; i++) {\n const current = copy.templating.list[i];\n const original = _.find(this.originalTemplating, { name: current.name, type: current.type });\n\n if (!original) {\n continue;\n }\n\n if (current.type === 'adhoc') {\n copy.templating.list[i].filters = original.filters;\n } else {\n copy.templating.list[i].current = original.current;\n }\n }\n }\n\n if (!defaults.saveTimerange) {\n copy.time = this.originalTime;\n }\n\n // get panel save models\n copy.panels = _.chain(this.panels)\n .filter(panel => panel.type !== 'add-panel')\n .map(panel => panel.getSaveModel())\n .value();\n\n // sort by keys\n copy = sortByKeys(copy);\n\n return copy;\n }\n\n setViewMode(panel: PanelModel, fullscreen: boolean, isEditing: boolean) {\n this.meta.fullscreen = fullscreen;\n this.meta.isEditing = isEditing && this.meta.canEdit;\n\n panel.setViewMode(fullscreen, this.meta.isEditing);\n\n this.events.emit('view-mode-changed', panel);\n }\n\n private ensureListExist(data) {\n if (!data) {\n data = {};\n }\n if (!data.list) {\n data.list = [];\n }\n return data;\n }\n\n getNextPanelId() {\n let max = 0;\n\n for (const panel of this.panels) {\n if (panel.id > max) {\n max = panel.id;\n }\n\n if (panel.collapsed) {\n for (const rowPanel of panel.panels) {\n if (rowPanel.id > max) {\n max = rowPanel.id;\n }\n }\n }\n }\n\n return max + 1;\n }\n\n forEachPanel(callback) {\n for (let i = 0; i < this.panels.length; i++) {\n callback(this.panels[i], i);\n }\n }\n\n getPanelById(id) {\n for (const panel of this.panels) {\n if (panel.id === id) {\n return panel;\n }\n }\n return null;\n }\n\n addPanel(panelData) {\n panelData.id = this.getNextPanelId();\n\n const panel = new PanelModel(panelData);\n\n this.panels.unshift(panel);\n\n this.sortPanelsByGridPos();\n\n this.events.emit('panel-added', panel);\n }\n\n sortPanelsByGridPos() {\n this.panels.sort((panelA, panelB) => {\n if (panelA.gridPos.y === panelB.gridPos.y) {\n return panelA.gridPos.x - panelB.gridPos.x;\n } else {\n return panelA.gridPos.y - panelB.gridPos.y;\n }\n });\n }\n\n cleanUpRepeats() {\n if (this.snapshot || this.templating.list.length === 0) {\n return;\n }\n\n this.iteration = (this.iteration || new Date().getTime()) + 1;\n const panelsToRemove = [];\n\n // cleanup scopedVars\n for (const panel of this.panels) {\n delete panel.scopedVars;\n }\n\n for (let i = 0; i < this.panels.length; i++) {\n const panel = this.panels[i];\n if ((!panel.repeat || panel.repeatedByRow) && panel.repeatPanelId && panel.repeatIteration !== this.iteration) {\n panelsToRemove.push(panel);\n }\n }\n\n // remove panels\n _.pull(this.panels, ...panelsToRemove);\n\n this.sortPanelsByGridPos();\n this.events.emit('repeats-processed');\n }\n\n processRepeats() {\n if (this.snapshot || this.templating.list.length === 0) {\n return;\n }\n\n this.cleanUpRepeats();\n\n this.iteration = (this.iteration || new Date().getTime()) + 1;\n\n for (let i = 0; i < this.panels.length; i++) {\n const panel = this.panels[i];\n if (panel.repeat) {\n this.repeatPanel(panel, i);\n }\n }\n\n this.sortPanelsByGridPos();\n this.events.emit('repeats-processed');\n }\n\n cleanUpRowRepeats(rowPanels) {\n const panelsToRemove = [];\n for (let i = 0; i < rowPanels.length; i++) {\n const panel = rowPanels[i];\n if (!panel.repeat && panel.repeatPanelId) {\n panelsToRemove.push(panel);\n }\n }\n _.pull(rowPanels, ...panelsToRemove);\n _.pull(this.panels, ...panelsToRemove);\n }\n\n processRowRepeats(row: PanelModel) {\n if (this.snapshot || this.templating.list.length === 0) {\n return;\n }\n\n let rowPanels = row.panels;\n if (!row.collapsed) {\n const rowPanelIndex = _.findIndex(this.panels, p => p.id === row.id);\n rowPanels = this.getRowPanels(rowPanelIndex);\n }\n\n this.cleanUpRowRepeats(rowPanels);\n\n for (let i = 0; i < rowPanels.length; i++) {\n const panel = rowPanels[i];\n if (panel.repeat) {\n const panelIndex = _.findIndex(this.panels, p => p.id === panel.id);\n this.repeatPanel(panel, panelIndex);\n }\n }\n }\n\n getPanelRepeatClone(sourcePanel, valueIndex, sourcePanelIndex) {\n // if first clone return source\n if (valueIndex === 0) {\n return sourcePanel;\n }\n\n const clone = new PanelModel(sourcePanel.getSaveModel());\n clone.id = this.getNextPanelId();\n\n // insert after source panel + value index\n this.panels.splice(sourcePanelIndex + valueIndex, 0, clone);\n\n clone.repeatIteration = this.iteration;\n clone.repeatPanelId = sourcePanel.id;\n clone.repeat = null;\n return clone;\n }\n\n getRowRepeatClone(sourceRowPanel, valueIndex, sourcePanelIndex) {\n // if first clone return source\n if (valueIndex === 0) {\n if (!sourceRowPanel.collapsed) {\n const rowPanels = this.getRowPanels(sourcePanelIndex);\n sourceRowPanel.panels = rowPanels;\n }\n return sourceRowPanel;\n }\n\n const clone = new PanelModel(sourceRowPanel.getSaveModel());\n // for row clones we need to figure out panels under row to clone and where to insert clone\n let rowPanels, insertPos;\n if (sourceRowPanel.collapsed) {\n rowPanels = _.cloneDeep(sourceRowPanel.panels);\n clone.panels = rowPanels;\n // insert copied row after preceding row\n insertPos = sourcePanelIndex + valueIndex;\n } else {\n rowPanels = this.getRowPanels(sourcePanelIndex);\n clone.panels = _.map(rowPanels, panel => panel.getSaveModel());\n // insert copied row after preceding row's panels\n insertPos = sourcePanelIndex + (rowPanels.length + 1) * valueIndex;\n }\n this.panels.splice(insertPos, 0, clone);\n\n this.updateRepeatedPanelIds(clone);\n return clone;\n }\n\n repeatPanel(panel: PanelModel, panelIndex: number) {\n const variable = _.find(this.templating.list, { name: panel.repeat });\n if (!variable) {\n return;\n }\n\n if (panel.type === 'row') {\n this.repeatRow(panel, panelIndex, variable);\n return;\n }\n\n const selectedOptions = this.getSelectedVariableOptions(variable);\n const minWidth = panel.minSpan || 6;\n let xPos = 0;\n let yPos = panel.gridPos.y;\n\n for (let index = 0; index < selectedOptions.length; index++) {\n const option = selectedOptions[index];\n let copy;\n\n copy = this.getPanelRepeatClone(panel, index, panelIndex);\n copy.scopedVars = copy.scopedVars || {};\n copy.scopedVars[variable.name] = option;\n\n if (panel.repeatDirection === REPEAT_DIR_VERTICAL) {\n if (index > 0) {\n yPos += copy.gridPos.h;\n }\n copy.gridPos.y = yPos;\n } else {\n // set width based on how many are selected\n // assumed the repeated panels should take up full row width\n copy.gridPos.w = Math.max(GRID_COLUMN_COUNT / selectedOptions.length, minWidth);\n copy.gridPos.x = xPos;\n copy.gridPos.y = yPos;\n\n xPos += copy.gridPos.w;\n\n // handle overflow by pushing down one row\n if (xPos + copy.gridPos.w > GRID_COLUMN_COUNT) {\n xPos = 0;\n yPos += copy.gridPos.h;\n }\n }\n }\n\n // Update gridPos for panels below\n const yOffset = yPos - panel.gridPos.y;\n if (yOffset > 0) {\n const panelBelowIndex = panelIndex + selectedOptions.length;\n for (let i = panelBelowIndex; i < this.panels.length; i++) {\n this.panels[i].gridPos.y += yOffset;\n }\n }\n }\n\n repeatRow(panel: PanelModel, panelIndex: number, variable) {\n const selectedOptions = this.getSelectedVariableOptions(variable);\n let yPos = panel.gridPos.y;\n\n function setScopedVars(panel, variableOption) {\n panel.scopedVars = panel.scopedVars || {};\n panel.scopedVars[variable.name] = variableOption;\n }\n\n for (let optionIndex = 0; optionIndex < selectedOptions.length; optionIndex++) {\n const option = selectedOptions[optionIndex];\n const rowCopy = this.getRowRepeatClone(panel, optionIndex, panelIndex);\n setScopedVars(rowCopy, option);\n\n const rowHeight = this.getRowHeight(rowCopy);\n const rowPanels = rowCopy.panels || [];\n let panelBelowIndex;\n\n if (panel.collapsed) {\n // For collapsed row just copy its panels and set scoped vars and proper IDs\n _.each(rowPanels, (rowPanel, i) => {\n setScopedVars(rowPanel, option);\n if (optionIndex > 0) {\n this.updateRepeatedPanelIds(rowPanel, true);\n }\n });\n rowCopy.gridPos.y += optionIndex;\n yPos += optionIndex;\n panelBelowIndex = panelIndex + optionIndex + 1;\n } else {\n // insert after 'row' panel\n const insertPos = panelIndex + (rowPanels.length + 1) * optionIndex + 1;\n _.each(rowPanels, (rowPanel, i) => {\n setScopedVars(rowPanel, option);\n if (optionIndex > 0) {\n const cloneRowPanel = new PanelModel(rowPanel);\n this.updateRepeatedPanelIds(cloneRowPanel, true);\n // For exposed row additionally set proper Y grid position and add it to dashboard panels\n cloneRowPanel.gridPos.y += rowHeight * optionIndex;\n this.panels.splice(insertPos + i, 0, cloneRowPanel);\n }\n });\n rowCopy.panels = [];\n rowCopy.gridPos.y += rowHeight * optionIndex;\n yPos += rowHeight;\n panelBelowIndex = insertPos + rowPanels.length;\n }\n\n // Update gridPos for panels below\n for (let i = panelBelowIndex; i < this.panels.length; i++) {\n this.panels[i].gridPos.y += yPos;\n }\n }\n }\n\n updateRepeatedPanelIds(panel: PanelModel, repeatedByRow?: boolean) {\n panel.repeatPanelId = panel.id;\n panel.id = this.getNextPanelId();\n panel.repeatIteration = this.iteration;\n if (repeatedByRow) {\n panel.repeatedByRow = true;\n } else {\n panel.repeat = null;\n }\n return panel;\n }\n\n getSelectedVariableOptions(variable) {\n let selectedOptions;\n if (variable.current.text === 'All') {\n selectedOptions = variable.options.slice(1, variable.options.length);\n } else {\n selectedOptions = _.filter(variable.options, { selected: true });\n }\n return selectedOptions;\n }\n\n getRowHeight(rowPanel: PanelModel): number {\n if (!rowPanel.panels || rowPanel.panels.length === 0) {\n return 0;\n }\n const rowYPos = rowPanel.gridPos.y;\n const positions = _.map(rowPanel.panels, 'gridPos');\n const maxPos = _.maxBy(positions, pos => {\n return pos.y + pos.h;\n });\n return maxPos.y + maxPos.h - rowYPos;\n }\n\n removePanel(panel: PanelModel) {\n const index = _.indexOf(this.panels, panel);\n this.panels.splice(index, 1);\n this.events.emit('panel-removed', panel);\n }\n\n removeRow(row: PanelModel, removePanels: boolean) {\n const needToogle = (!removePanels && row.collapsed) || (removePanels && !row.collapsed);\n\n if (needToogle) {\n this.toggleRow(row);\n }\n\n this.removePanel(row);\n }\n\n expandRows() {\n for (let i = 0; i < this.panels.length; i++) {\n const panel = this.panels[i];\n\n if (panel.type !== 'row') {\n continue;\n }\n\n if (panel.collapsed) {\n this.toggleRow(panel);\n }\n }\n }\n\n collapseRows() {\n for (let i = 0; i < this.panels.length; i++) {\n const panel = this.panels[i];\n\n if (panel.type !== 'row') {\n continue;\n }\n\n if (!panel.collapsed) {\n this.toggleRow(panel);\n }\n }\n }\n\n setPanelFocus(id) {\n this.meta.focusPanelId = id;\n }\n\n updateSubmenuVisibility() {\n this.meta.submenuEnabled = (() => {\n if (this.links.length > 0) {\n return true;\n }\n\n const visibleVars = _.filter(this.templating.list, variable => variable.hide !== 2);\n if (visibleVars.length > 0) {\n return true;\n }\n\n const visibleAnnotations = _.filter(this.annotations.list, annotation => annotation.hide !== true);\n if (visibleAnnotations.length > 0) {\n return true;\n }\n\n return false;\n })();\n }\n\n getPanelInfoById(panelId) {\n for (let i = 0; i < this.panels.length; i++) {\n if (this.panels[i].id === panelId) {\n return {\n panel: this.panels[i],\n index: i,\n };\n }\n }\n\n return null;\n }\n\n duplicatePanel(panel) {\n const newPanel = panel.getSaveModel();\n newPanel.id = this.getNextPanelId();\n\n delete newPanel.repeat;\n delete newPanel.repeatIteration;\n delete newPanel.repeatPanelId;\n delete newPanel.scopedVars;\n if (newPanel.alert) {\n delete newPanel.thresholds;\n }\n delete newPanel.alert;\n\n // does it fit to the right?\n if (panel.gridPos.x + panel.gridPos.w * 2 <= GRID_COLUMN_COUNT) {\n newPanel.gridPos.x += panel.gridPos.w;\n } else {\n // add below\n newPanel.gridPos.y += panel.gridPos.h;\n }\n\n this.addPanel(newPanel);\n return newPanel;\n }\n\n formatDate(date, format?) {\n date = moment.isMoment(date) ? date : moment(date);\n format = format || 'YYYY-MM-DD HH:mm:ss';\n const timezone = this.getTimezone();\n\n return timezone === 'browser' ? moment(date).format(format) : moment.utc(date).format(format);\n }\n\n destroy() {\n this.events.removeAllListeners();\n for (const panel of this.panels) {\n panel.destroy();\n }\n }\n\n toggleRow(row: PanelModel) {\n const rowIndex = _.indexOf(this.panels, row);\n\n if (row.collapsed) {\n row.collapsed = false;\n const hasRepeat = _.some(row.panels, p => p.repeat);\n\n if (row.panels.length > 0) {\n // Use first panel to figure out if it was moved or pushed\n const firstPanel = row.panels[0];\n const yDiff = firstPanel.gridPos.y - (row.gridPos.y + row.gridPos.h);\n\n // start inserting after row\n let insertPos = rowIndex + 1;\n // y max will represent the bottom y pos after all panels have been added\n // needed to know home much panels below should be pushed down\n let yMax = row.gridPos.y;\n\n for (const panel of row.panels) {\n // make sure y is adjusted (in case row moved while collapsed)\n // console.log('yDiff', yDiff);\n panel.gridPos.y -= yDiff;\n // insert after row\n this.panels.splice(insertPos, 0, new PanelModel(panel));\n // update insert post and y max\n insertPos += 1;\n yMax = Math.max(yMax, panel.gridPos.y + panel.gridPos.h);\n }\n\n const pushDownAmount = yMax - row.gridPos.y - 1;\n\n // push panels below down\n for (let panelIndex = insertPos; panelIndex < this.panels.length; panelIndex++) {\n this.panels[panelIndex].gridPos.y += pushDownAmount;\n }\n\n row.panels = [];\n\n if (hasRepeat) {\n this.processRowRepeats(row);\n }\n }\n\n // sort panels\n this.sortPanelsByGridPos();\n\n // emit change event\n this.events.emit('row-expanded');\n return;\n }\n\n const rowPanels = this.getRowPanels(rowIndex);\n\n // remove panels\n _.pull(this.panels, ...rowPanels);\n // save panel models inside row panel\n row.panels = _.map(rowPanels, panel => panel.getSaveModel());\n row.collapsed = true;\n\n // emit change event\n this.events.emit('row-collapsed');\n }\n\n /**\n * Will return all panels after rowIndex until it encounters another row\n */\n getRowPanels(rowIndex: number): PanelModel[] {\n const rowPanels = [];\n\n for (let index = rowIndex + 1; index < this.panels.length; index++) {\n const panel = this.panels[index];\n\n // break when encountering another row\n if (panel.type === 'row') {\n break;\n }\n\n // this panel must belong to row\n rowPanels.push(panel);\n }\n\n return rowPanels;\n }\n\n on(eventName, callback) {\n this.events.on(eventName, callback);\n }\n\n off(eventName, callback?) {\n this.events.off(eventName, callback);\n }\n\n cycleGraphTooltip() {\n this.graphTooltip = (this.graphTooltip + 1) % 3;\n }\n\n sharedTooltipModeEnabled() {\n return this.graphTooltip > 0;\n }\n\n sharedCrosshairModeOnly() {\n return this.graphTooltip === 1;\n }\n\n getRelativeTime(date) {\n date = moment.isMoment(date) ? date : moment(date);\n\n return this.timezone === 'browser' ? moment(date).fromNow() : moment.utc(date).fromNow();\n }\n\n getNextQueryLetter(panel) {\n const letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';\n\n return _.find(letters, refId => {\n return _.every(panel.targets, other => {\n return other.refId !== refId;\n });\n });\n }\n\n isTimezoneUtc() {\n return this.getTimezone() === 'utc';\n }\n\n getTimezone() {\n return this.timezone ? this.timezone : contextSrv.user.timezone;\n }\n\n private updateSchema(old) {\n const migrator = new DashboardMigrator(this);\n migrator.updateSchema(old);\n }\n\n resetOriginalTime() {\n this.originalTime = _.cloneDeep(this.time);\n }\n\n hasTimeChanged() {\n return !_.isEqual(this.time, this.originalTime);\n }\n\n resetOriginalVariables() {\n this.originalTemplating = _.map(this.templating.list, variable => {\n return {\n name: variable.name,\n type: variable.type,\n current: _.cloneDeep(variable.current),\n filters: _.cloneDeep(variable.filters),\n };\n });\n }\n\n hasVariableValuesChanged() {\n if (this.templating.list.length !== this.originalTemplating.length) {\n return false;\n }\n\n const updated = _.map(this.templating.list, variable => {\n return {\n name: variable.name,\n type: variable.type,\n current: _.cloneDeep(variable.current),\n filters: _.cloneDeep(variable.filters),\n };\n });\n\n return !_.isEqual(updated, this.originalTemplating);\n }\n\n autoFitPanels(viewHeight: number) {\n if (!this.meta.autofitpanels) {\n return;\n }\n\n const currentGridHeight = Math.max(\n ...this.panels.map(panel => {\n return panel.gridPos.h + panel.gridPos.y;\n })\n );\n\n const navbarHeight = 55;\n const margin = 20;\n const submenuHeight = 50;\n\n let visibleHeight = viewHeight - navbarHeight - margin;\n\n // Remove submenu height if visible\n if (this.meta.submenuEnabled && !this.meta.kiosk) {\n visibleHeight -= submenuHeight;\n }\n\n // add back navbar height\n if (this.meta.kiosk === 'b') {\n visibleHeight += 55;\n }\n\n const visibleGridHeight = Math.floor(visibleHeight / (GRID_CELL_HEIGHT + GRID_CELL_VMARGIN));\n const scaleFactor = currentGridHeight / visibleGridHeight;\n\n this.panels.forEach((panel, i) => {\n panel.gridPos.y = Math.round(panel.gridPos.y / scaleFactor) || 1;\n panel.gridPos.h = Math.round(panel.gridPos.h / scaleFactor) || 1;\n });\n }\n}\n","import React from 'react';\nimport { NavModel, NavModelItem } from 'app/types';\nimport classNames from 'classnames';\nimport appEvents from 'app/core/app_events';\n\nexport interface Props {\n model: NavModel;\n}\n\nconst SelectNav = ({ main, customCss }: { main: NavModelItem; customCss: string }) => {\n const defaultSelectedItem = main.children.find(navItem => {\n return navItem.active === true;\n });\n\n const gotoUrl = evt => {\n const element = evt.target;\n const url = element.options[element.selectedIndex].value;\n appEvents.emit('location-change', { href: url });\n };\n\n return (\n
    \n
    \n );\n};\n\nconst Tabs = ({ main, customCss }: { main: NavModelItem; customCss: string }) => {\n return (\n
      \n {main.children.map((tab, idx) => {\n if (tab.hideFromTabs) {\n return null;\n }\n\n const tabClasses = classNames({\n 'gf-tabs-link': true,\n active: tab.active,\n });\n\n return (\n
    • \n \n \n {tab.text}\n \n
    • \n );\n })}\n
    \n );\n};\n\nconst Navigation = ({ main }: { main: NavModelItem }) => {\n return (\n \n );\n};\n\nexport default class PageHeader extends React.Component {\n constructor(props) {\n super(props);\n }\n\n shouldComponentUpdate() {\n //Hack to re-render on changed props from angular with the @observer decorator\n return true;\n }\n\n renderTitle(title: string, breadcrumbs: any[]) {\n if (!title && (!breadcrumbs || breadcrumbs.length === 0)) {\n return null;\n }\n\n if (!breadcrumbs || breadcrumbs.length === 0) {\n return

    {title}

    ;\n }\n\n const breadcrumbsResult = [];\n for (let i = 0; i < breadcrumbs.length; i++) {\n const bc = breadcrumbs[i];\n if (bc.url) {\n breadcrumbsResult.push(\n \n {bc.title}\n \n );\n } else {\n breadcrumbsResult.push( / {bc.title});\n }\n }\n breadcrumbsResult.push( / {title});\n\n return

    {breadcrumbsResult}

    ;\n }\n\n renderHeaderTitle(main) {\n return (\n
    \n \n {main.icon && }\n {main.img && }\n \n\n
    \n {this.renderTitle(main.text, main.breadcrumbs)}\n {main.subTitle &&
    {main.subTitle}
    }\n {main.subType && (\n
    \n \n {main.subType.text}\n
    \n )}\n
    \n
    \n );\n }\n\n render() {\n const { model } = this.props;\n\n if (!model) {\n return null;\n }\n\n const main = model.main;\n\n return (\n
    \n
    \n
    \n {this.renderHeaderTitle(main)}\n {main.children && }\n
    \n
    \n
    \n );\n }\n}\n","import { NavModel, NavModelItem, NavIndex } from 'app/types';\n\nfunction getNotFoundModel(): NavModel {\n const node: NavModelItem = {\n id: 'not-found',\n text: 'Page not found',\n icon: 'fa fa-fw fa-warning',\n subTitle: '404 Error',\n url: 'not-found',\n };\n\n return {\n node: node,\n main: node,\n };\n}\n\nexport function getNavModel(navIndex: NavIndex, id: string, fallback?: NavModel): NavModel {\n if (navIndex[id]) {\n const node = navIndex[id];\n const main = {\n ...node.parentItem,\n };\n\n main.children = main.children.map(item => {\n return {\n ...item,\n active: item.url === node.url,\n };\n });\n\n return {\n node: node,\n main: main,\n };\n }\n\n if (fallback) {\n return fallback;\n }\n\n return getNotFoundModel();\n}\n","export const GRID_CELL_HEIGHT = 30;\nexport const GRID_CELL_VMARGIN = 10;\nexport const GRID_COLUMN_COUNT = 24;\nexport const REPEAT_DIR_VERTICAL = 'v';\n\nexport const DEFAULT_PANEL_SPAN = 4;\nexport const DEFAULT_ROW_HEIGHT = 250;\nexport const MIN_PANEL_HEIGHT = GRID_CELL_HEIGHT * 3;\n\nexport const LS_PANEL_COPY_KEY = 'panel-copy';\n","export class Store {\n get(key) {\n return window.localStorage[key];\n }\n\n set(key, value) {\n window.localStorage[key] = value;\n }\n\n getBool(key, def) {\n if (def !== void 0 && !this.exists(key)) {\n return def;\n }\n return window.localStorage[key] === 'true';\n }\n\n getObject(key: string, def?: any) {\n let ret = def;\n if (this.exists(key)) {\n const json = window.localStorage[key];\n try {\n ret = JSON.parse(json);\n } catch (error) {\n console.error(`Error parsing store object: ${key}. Returning default: ${def}. [${error}]`);\n }\n }\n return ret;\n }\n\n // Returns true when successfully stored\n setObject(key: string, value: any): boolean {\n let json;\n try {\n json = JSON.stringify(value);\n } catch (error) {\n console.error(`Could not stringify object: ${key}. [${error}]`);\n return false;\n }\n try {\n this.set(key, json);\n } catch (error) {\n // Likely hitting storage quota\n console.error(`Could not save item in localStorage: ${key}. [${error}]`);\n return false;\n }\n return true;\n }\n\n exists(key) {\n return window.localStorage[key] !== void 0;\n }\n\n delete(key) {\n window.localStorage.removeItem(key);\n }\n}\n\nconst store = new Store();\nexport default store;\n","import config from 'app/core/config';\nimport _ from 'lodash';\nimport coreModule from 'app/core/core_module';\nimport store from 'app/core/store';\n\nexport class User {\n isGrafanaAdmin: any;\n isSignedIn: any;\n orgRole: any;\n orgId: number;\n orgName: string;\n orgCount: number;\n timezone: string;\n helpFlags1: number;\n lightTheme: boolean;\n hasEditPermissionInFolders: boolean;\n\n constructor() {\n if (config.bootData.user) {\n _.extend(this, config.bootData.user);\n }\n }\n}\n\nexport class ContextSrv {\n pinned: any;\n version: any;\n user: User;\n isSignedIn: any;\n isGrafanaAdmin: any;\n isEditor: any;\n sidemenu: any;\n sidemenuSmallBreakpoint = false;\n hasEditPermissionInFolders: boolean;\n\n constructor() {\n this.sidemenu = store.getBool('grafana.sidemenu', true);\n\n if (!config.bootData) {\n config.bootData = { user: {}, settings: {} };\n }\n\n this.user = new User();\n this.isSignedIn = this.user.isSignedIn;\n this.isGrafanaAdmin = this.user.isGrafanaAdmin;\n this.isEditor = this.hasRole('Editor') || this.hasRole('Admin');\n this.hasEditPermissionInFolders = this.user.hasEditPermissionInFolders;\n }\n\n hasRole(role) {\n return this.user.orgRole === role;\n }\n\n isGrafanaVisible() {\n return !!(document.visibilityState === undefined || document.visibilityState === 'visible');\n }\n\n toggleSideMenu() {\n this.sidemenu = !this.sidemenu;\n store.set('grafana.sidemenu', this.sidemenu);\n }\n}\n\nconst contextSrv = new ContextSrv();\nexport { contextSrv };\n\ncoreModule.factory('contextSrv', () => {\n return contextSrv;\n});\n","import { StoreState } from 'app/types';\nimport { ThunkAction } from 'redux-thunk';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\n\nimport {\n DashboardAcl,\n DashboardAclDTO,\n PermissionLevel,\n DashboardAclUpdateDTO,\n NewDashboardAclItem,\n} from 'app/types/acl';\n\nexport enum ActionTypes {\n LoadDashboardPermissions = 'LOAD_DASHBOARD_PERMISSIONS',\n}\n\nexport interface LoadDashboardPermissionsAction {\n type: ActionTypes.LoadDashboardPermissions;\n payload: DashboardAcl[];\n}\n\nexport type Action = LoadDashboardPermissionsAction;\n\ntype ThunkResult = ThunkAction;\n\nexport const loadDashboardPermissions = (items: DashboardAclDTO[]): LoadDashboardPermissionsAction => ({\n type: ActionTypes.LoadDashboardPermissions,\n payload: items,\n});\n\nexport function getDashboardPermissions(id: number): ThunkResult {\n return async dispatch => {\n const permissions = await getBackendSrv().get(`/api/dashboards/id/${id}/permissions`);\n dispatch(loadDashboardPermissions(permissions));\n };\n}\n\nfunction toUpdateItem(item: DashboardAcl): DashboardAclUpdateDTO {\n return {\n userId: item.userId,\n teamId: item.teamId,\n role: item.role,\n permission: item.permission,\n };\n}\n\nexport function updateDashboardPermission(\n dashboardId: number,\n itemToUpdate: DashboardAcl,\n level: PermissionLevel\n): ThunkResult {\n return async (dispatch, getStore) => {\n const { dashboard } = getStore();\n const itemsToUpdate = [];\n\n for (const item of dashboard.permissions) {\n if (item.inherited) {\n continue;\n }\n\n const updated = toUpdateItem(item);\n\n // if this is the item we want to update, update it's permisssion\n if (itemToUpdate === item) {\n updated.permission = level;\n }\n\n itemsToUpdate.push(updated);\n }\n\n await getBackendSrv().post(`/api/dashboards/id/${dashboardId}/permissions`, { items: itemsToUpdate });\n await dispatch(getDashboardPermissions(dashboardId));\n };\n}\n\nexport function removeDashboardPermission(dashboardId: number, itemToDelete: DashboardAcl): ThunkResult {\n return async (dispatch, getStore) => {\n const dashboard = getStore().dashboard;\n const itemsToUpdate = [];\n\n for (const item of dashboard.permissions) {\n if (item.inherited || item === itemToDelete) {\n continue;\n }\n itemsToUpdate.push(toUpdateItem(item));\n }\n\n await getBackendSrv().post(`/api/dashboards/id/${dashboardId}/permissions`, { items: itemsToUpdate });\n await dispatch(getDashboardPermissions(dashboardId));\n };\n}\n\nexport function addDashboardPermission(dashboardId: number, newItem: NewDashboardAclItem): ThunkResult {\n return async (dispatch, getStore) => {\n const { dashboard } = getStore();\n const itemsToUpdate = [];\n\n for (const item of dashboard.permissions) {\n if (item.inherited) {\n continue;\n }\n itemsToUpdate.push(toUpdateItem(item));\n }\n\n itemsToUpdate.push({\n userId: newItem.userId,\n teamId: newItem.teamId,\n role: newItem.role,\n permission: newItem.permission,\n });\n\n await getBackendSrv().post(`/api/dashboards/id/${dashboardId}/permissions`, { items: itemsToUpdate });\n await dispatch(getDashboardPermissions(dashboardId));\n };\n}\n","import React from 'react';\n\nexport default () => {\n return (\n
    \n
    What are Permissions?
    \n

    \n An Access Control List (ACL) model is used to limit access to Dashboard Folders. A user or a Team can be\n assigned permissions for a folder or for a single dashboard.\n

    \n
    \n );\n};\n","import { getBackendSrv } from 'app/core/services/backend_srv';\nimport { StoreState } from 'app/types';\nimport { ThunkAction } from 'redux-thunk';\nimport { FolderDTO, FolderState } from 'app/types';\nimport {\n DashboardAcl,\n DashboardAclDTO,\n PermissionLevel,\n DashboardAclUpdateDTO,\n NewDashboardAclItem,\n} from 'app/types/acl';\n\nimport { updateNavIndex, updateLocation } from 'app/core/actions';\nimport { buildNavModel } from './navModel';\nimport appEvents from 'app/core/app_events';\n\nexport enum ActionTypes {\n LoadFolder = 'LOAD_FOLDER',\n SetFolderTitle = 'SET_FOLDER_TITLE',\n SaveFolder = 'SAVE_FOLDER',\n LoadFolderPermissions = 'LOAD_FOLDER_PERMISSONS',\n}\n\nexport interface LoadFolderAction {\n type: ActionTypes.LoadFolder;\n payload: FolderDTO;\n}\n\nexport interface SetFolderTitleAction {\n type: ActionTypes.SetFolderTitle;\n payload: string;\n}\n\nexport interface LoadFolderPermissionsAction {\n type: ActionTypes.LoadFolderPermissions;\n payload: DashboardAcl[];\n}\n\nexport type Action = LoadFolderAction | SetFolderTitleAction | LoadFolderPermissionsAction;\n\ntype ThunkResult = ThunkAction;\n\nexport const loadFolder = (folder: FolderDTO): LoadFolderAction => ({\n type: ActionTypes.LoadFolder,\n payload: folder,\n});\n\nexport const setFolderTitle = (newTitle: string): SetFolderTitleAction => ({\n type: ActionTypes.SetFolderTitle,\n payload: newTitle,\n});\n\nexport const loadFolderPermissions = (items: DashboardAclDTO[]): LoadFolderPermissionsAction => ({\n type: ActionTypes.LoadFolderPermissions,\n payload: items,\n});\n\nexport function getFolderByUid(uid: string): ThunkResult {\n return async dispatch => {\n const folder = await getBackendSrv().getFolderByUid(uid);\n dispatch(loadFolder(folder));\n dispatch(updateNavIndex(buildNavModel(folder)));\n };\n}\n\nexport function saveFolder(folder: FolderState): ThunkResult {\n return async dispatch => {\n const res = await getBackendSrv().put(`/api/folders/${folder.uid}`, {\n title: folder.title,\n version: folder.version,\n });\n\n // this should be redux action at some point\n appEvents.emit('alert-success', ['Folder saved']);\n\n dispatch(updateLocation({ path: `${res.url}/settings` }));\n };\n}\n\nexport function deleteFolder(uid: string): ThunkResult {\n return async dispatch => {\n await getBackendSrv().deleteFolder(uid, true);\n dispatch(updateLocation({ path: `dashboards` }));\n };\n}\n\nexport function getFolderPermissions(uid: string): ThunkResult {\n return async dispatch => {\n const permissions = await getBackendSrv().get(`/api/folders/${uid}/permissions`);\n dispatch(loadFolderPermissions(permissions));\n };\n}\n\nfunction toUpdateItem(item: DashboardAcl): DashboardAclUpdateDTO {\n return {\n userId: item.userId,\n teamId: item.teamId,\n role: item.role,\n permission: item.permission,\n };\n}\n\nexport function updateFolderPermission(itemToUpdate: DashboardAcl, level: PermissionLevel): ThunkResult {\n return async (dispatch, getStore) => {\n const folder = getStore().folder;\n const itemsToUpdate = [];\n\n for (const item of folder.permissions) {\n if (item.inherited) {\n continue;\n }\n\n const updated = toUpdateItem(item);\n\n // if this is the item we want to update, update it's permisssion\n if (itemToUpdate === item) {\n updated.permission = level;\n }\n\n itemsToUpdate.push(updated);\n }\n\n await getBackendSrv().post(`/api/folders/${folder.uid}/permissions`, { items: itemsToUpdate });\n await dispatch(getFolderPermissions(folder.uid));\n };\n}\n\nexport function removeFolderPermission(itemToDelete: DashboardAcl): ThunkResult {\n return async (dispatch, getStore) => {\n const folder = getStore().folder;\n const itemsToUpdate = [];\n\n for (const item of folder.permissions) {\n if (item.inherited || item === itemToDelete) {\n continue;\n }\n itemsToUpdate.push(toUpdateItem(item));\n }\n\n await getBackendSrv().post(`/api/folders/${folder.uid}/permissions`, { items: itemsToUpdate });\n await dispatch(getFolderPermissions(folder.uid));\n };\n}\n\nexport function addFolderPermission(newItem: NewDashboardAclItem): ThunkResult {\n return async (dispatch, getStore) => {\n const folder = getStore().folder;\n const itemsToUpdate = [];\n\n for (const item of folder.permissions) {\n if (item.inherited) {\n continue;\n }\n itemsToUpdate.push(toUpdateItem(item));\n }\n\n itemsToUpdate.push({\n userId: newItem.userId,\n teamId: newItem.teamId,\n role: newItem.role,\n permission: newItem.permission,\n });\n\n await getBackendSrv().post(`/api/folders/${folder.uid}/permissions`, { items: itemsToUpdate });\n await dispatch(getFolderPermissions(folder.uid));\n };\n}\n","import React, { SFC } from 'react';\n\nexport type LayoutMode = LayoutModes.Grid | LayoutModes.List;\n\nexport enum LayoutModes {\n Grid = 'grid',\n List = 'list',\n}\n\ninterface Props {\n mode: LayoutMode;\n onLayoutModeChanged: (mode: LayoutMode) => {};\n}\n\nconst LayoutSelector: SFC = props => {\n const { mode, onLayoutModeChanged } = props;\n return (\n
    \n {\n onLayoutModeChanged(LayoutModes.List);\n }}\n className={mode === LayoutModes.List ? 'active' : ''}\n >\n \n \n {\n onLayoutModeChanged(LayoutModes.Grid);\n }}\n className={mode === LayoutModes.Grid ? 'active' : ''}\n >\n \n \n
    \n );\n};\n\nexport default LayoutSelector;\n","import angular from 'angular';\nexport default angular.module('grafana.core', ['ngRoute']);\n","import React, { PureComponent } from 'react';\nimport DescriptionPicker from 'app/core/components/Picker/DescriptionPicker';\nimport { dashboardPermissionLevels, DashboardAcl, PermissionLevel } from 'app/types/acl';\nimport { FolderInfo } from 'app/types';\n\nconst setClassNameHelper = inherited => {\n return inherited ? 'gf-form-disabled' : '';\n};\n\nfunction ItemAvatar({ item }) {\n if (item.userAvatarUrl) {\n return ;\n }\n if (item.teamAvatarUrl) {\n return ;\n }\n if (item.role === 'Editor') {\n return ;\n }\n\n return ;\n}\n\nfunction ItemDescription({ item }) {\n if (item.userId) {\n return (User);\n }\n if (item.teamId) {\n return (Team);\n }\n return (Role);\n}\n\ninterface Props {\n item: DashboardAcl;\n onRemoveItem: (item: DashboardAcl) => void;\n onPermissionChanged: (item: DashboardAcl, level: PermissionLevel) => void;\n folderInfo?: FolderInfo;\n}\n\nexport default class PermissionsListItem extends PureComponent {\n onPermissionChanged = option => {\n this.props.onPermissionChanged(this.props.item, option.value as PermissionLevel);\n };\n\n onRemoveItem = () => {\n this.props.onRemoveItem(this.props.item);\n };\n\n render() {\n const { item, folderInfo } = this.props;\n const inheritedFromRoot = item.dashboardId === -1 && !item.inherited;\n\n return (\n \n \n \n \n \n {item.name} \n \n \n {item.inherited &&\n folderInfo && (\n \n Inherited from folder{' '}\n \n {folderInfo.title}\n {' '}\n \n )}\n {inheritedFromRoot && Default Permission}\n \n Can\n \n
    \n \n
    \n \n \n {!item.inherited ? (\n \n \n \n ) : (\n \n )}\n \n \n );\n }\n}\n","import React, { Component } from 'react';\nimport DescriptionPicker from 'app/core/components/Picker/DescriptionPicker';\nimport { dashboardPermissionLevels } from 'app/types/acl';\n\nexport interface Props {\n item: any;\n}\n\nexport default class DisabledPermissionListItem extends Component {\n render() {\n const { item } = this.props;\n\n return (\n \n \n \n \n \n {item.name}\n (Role)\n \n \n Can\n \n
    \n {}}\n value={item.permission}\n disabled={true}\n className={'gf-form-input--form-dropdown-right'}\n />\n
    \n \n \n \n \n \n );\n }\n}\n","import React, { PureComponent } from 'react';\nimport PermissionsListItem from './PermissionListItem';\nimport DisabledPermissionsListItem from './DisabledPermissionListItem';\nimport { FolderInfo } from 'app/types';\nimport { DashboardAcl } from 'app/types/acl';\n\nexport interface Props {\n items: DashboardAcl[];\n onRemoveItem: (item: DashboardAcl) => void;\n onPermissionChanged: any;\n isFetching: boolean;\n folderInfo?: FolderInfo;\n}\n\nclass PermissionList extends PureComponent {\n render() {\n const { items, onRemoveItem, onPermissionChanged, isFetching, folderInfo } = this.props;\n\n return (\n \n \n \n {items.map((item, idx) => {\n return (\n \n );\n })}\n {isFetching === true && items.length < 1 ? (\n \n \n \n ) : null}\n\n {isFetching === false && items.length < 1 ? (\n \n \n \n ) : null}\n \n
    \n Loading permissions...\n
    \n No permissions are set. Will only be accessible by admins.\n
    \n );\n }\n}\n\nexport default PermissionList;\n","import React, { Component } from 'react';\nimport Select from 'react-select';\nimport PickerOption from './PickerOption';\nimport { debounce } from 'lodash';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\n\nexport interface Props {\n onSelected: (team: Team) => void;\n value?: string;\n className?: string;\n}\n\nexport interface State {\n isLoading;\n}\n\nexport interface Team {\n id: number;\n label: string;\n name: string;\n avatarUrl: string;\n}\n\nexport class TeamPicker extends Component {\n debouncedSearch: any;\n\n constructor(props) {\n super(props);\n this.state = { isLoading: false };\n this.search = this.search.bind(this);\n\n this.debouncedSearch = debounce(this.search, 300, {\n leading: true,\n trailing: false,\n });\n }\n\n search(query?: string) {\n const backendSrv = getBackendSrv();\n this.setState({ isLoading: true });\n\n return backendSrv.get(`/api/teams/search?perpage=50&page=1&query=${query}`).then(result => {\n const teams = result.teams.map(team => {\n return {\n id: team.id,\n label: team.name,\n name: team.name,\n avatarUrl: team.avatarUrl,\n };\n });\n\n this.setState({ isLoading: false });\n return { options: teams };\n });\n }\n\n render() {\n const { onSelected, value, className } = this.props;\n const { isLoading } = this.state;\n\n return (\n
    \n \n
    \n );\n }\n}\n","import React, { Component } from 'react';\nimport { UserPicker } from 'app/core/components/Picker/UserPicker';\nimport { TeamPicker, Team } from 'app/core/components/Picker/TeamPicker';\nimport DescriptionPicker, { OptionWithDescription } from 'app/core/components/Picker/DescriptionPicker';\nimport { User } from 'app/types';\nimport {\n dashboardPermissionLevels,\n dashboardAclTargets,\n AclTarget,\n PermissionLevel,\n NewDashboardAclItem,\n OrgRole,\n} from 'app/types/acl';\n\nexport interface Props {\n onAddPermission: (item: NewDashboardAclItem) => void;\n onCancel: () => void;\n}\n\nclass AddPermissions extends Component {\n constructor(props) {\n super(props);\n this.state = this.getCleanState();\n }\n\n getCleanState() {\n return {\n userId: 0,\n teamId: 0,\n type: AclTarget.Team,\n permission: PermissionLevel.View,\n };\n }\n\n onTypeChanged = evt => {\n const type = evt.target.value as AclTarget;\n\n switch (type) {\n case AclTarget.User:\n case AclTarget.Team:\n this.setState({ type: type, userId: 0, teamId: 0, role: undefined });\n break;\n case AclTarget.Editor:\n this.setState({ type: type, userId: 0, teamId: 0, role: OrgRole.Editor });\n break;\n case AclTarget.Viewer:\n this.setState({ type: type, userId: 0, teamId: 0, role: OrgRole.Viewer });\n break;\n }\n };\n\n onUserSelected = (user: User) => {\n this.setState({ userId: user ? user.id : 0 });\n };\n\n onTeamSelected = (team: Team) => {\n this.setState({ teamId: team ? team.id : 0 });\n };\n\n onPermissionChanged = (permission: OptionWithDescription) => {\n this.setState({ permission: permission.value });\n };\n\n onSubmit = async evt => {\n evt.preventDefault();\n await this.props.onAddPermission(this.state);\n this.setState(this.getCleanState());\n };\n\n isValid() {\n switch (this.state.type) {\n case AclTarget.Team:\n return this.state.teamId > 0;\n case AclTarget.User:\n return this.state.userId > 0;\n }\n return true;\n }\n\n render() {\n const { onCancel } = this.props;\n const newItem = this.state;\n const pickerClassName = 'width-20';\n const isValid = this.isValid();\n\n return (\n
    \n \n
    \n
    Add Permission For
    \n
    \n
    \n
    \n \n
    \n
    \n\n {newItem.type === AclTarget.User ? (\n
    \n \n
    \n ) : null}\n\n {newItem.type === AclTarget.Team ? (\n
    \n \n
    \n ) : null}\n\n
    \n \n
    \n\n
    \n \n
    \n
    \n
    \n
    \n );\n }\n}\n\nexport default AddPermissions;\n","import React, { PureComponent } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { connect } from 'react-redux';\nimport { NavModel, StoreState } from 'app/types';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { getServerStats, ServerStat } from './state/apis';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\n\ninterface Props {\n navModel: NavModel;\n getServerStats: () => Promise;\n}\n\ninterface State {\n stats: ServerStat[];\n}\n\nexport class ServerStats extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n stats: [],\n };\n }\n\n async componentDidMount() {\n try {\n const stats = await this.props.getServerStats();\n this.setState({ stats });\n } catch (error) {\n console.error(error);\n }\n }\n\n render() {\n const { navModel } = this.props;\n const { stats } = this.state;\n\n return (\n
    \n \n
    \n \n \n \n \n \n \n \n {stats.map(StatItem)}\n
    NameValue
    \n
    \n
    \n );\n }\n}\n\nfunction StatItem(stat: ServerStat) {\n return (\n \n {stat.name}\n {stat.value}\n \n );\n}\n\nconst mapStateToProps = (state: StoreState) => ({\n navModel: getNavModel(state.navIndex, 'server-stats'),\n getServerStats: getServerStats,\n});\n\nexport default hot(module)(connect(mapStateToProps)(ServerStats));\n","import { getBackendSrv } from 'app/core/services/backend_srv';\n\nexport interface ServerStat {\n name: string;\n value: number;\n}\n\nexport const getServerStats = async (): Promise => {\n try {\n const res = await getBackendSrv().get('api/admin/stats');\n return [\n { name: 'Total users', value: res.users },\n { name: 'Total dashboards', value: res.dashboards },\n { name: 'Active users (seen last 30 days)', value: res.activeUsers },\n { name: 'Total orgs', value: res.orgs },\n { name: 'Total playlists', value: res.playlists },\n { name: 'Total snapshots', value: res.snapshots },\n { name: 'Total dashboard tags', value: res.tags },\n { name: 'Total starred dashboards', value: res.stars },\n { name: 'Total alerts', value: res.alerts },\n ];\n } catch (error) {\n console.error(error);\n throw error;\n }\n};\n","import React, { PureComponent } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { connect } from 'react-redux';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport AlertRuleItem from './AlertRuleItem';\nimport appEvents from 'app/core/app_events';\nimport { updateLocation } from 'app/core/actions';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { NavModel, StoreState, AlertRule } from 'app/types';\nimport { getAlertRulesAsync, setSearchQuery, togglePauseAlertRule } from './state/actions';\nimport { getAlertRuleItems, getSearchQuery } from './state/selectors';\n\nexport interface Props {\n navModel: NavModel;\n alertRules: AlertRule[];\n updateLocation: typeof updateLocation;\n getAlertRulesAsync: typeof getAlertRulesAsync;\n setSearchQuery: typeof setSearchQuery;\n togglePauseAlertRule: typeof togglePauseAlertRule;\n stateFilter: string;\n search: string;\n}\n\nexport class AlertRuleList extends PureComponent {\n stateFilters = [\n { text: 'All', value: 'all' },\n { text: 'OK', value: 'ok' },\n { text: 'Not OK', value: 'not_ok' },\n { text: 'Alerting', value: 'alerting' },\n { text: 'No Data', value: 'no_data' },\n { text: 'Paused', value: 'paused' },\n ];\n\n componentDidMount() {\n this.fetchRules();\n }\n\n componentDidUpdate(prevProps: Props) {\n if (prevProps.stateFilter !== this.props.stateFilter) {\n this.fetchRules();\n }\n }\n\n async fetchRules() {\n await this.props.getAlertRulesAsync({ state: this.getStateFilter() });\n }\n\n getStateFilter(): string {\n const { stateFilter } = this.props;\n if (stateFilter) {\n return stateFilter.toString();\n }\n return 'all';\n }\n\n onStateFilterChanged = event => {\n this.props.updateLocation({\n query: { state: event.target.value },\n });\n };\n\n onOpenHowTo = () => {\n appEvents.emit('show-modal', {\n src: 'public/app/features/alerting/partials/alert_howto.html',\n modalClass: 'confirm-modal',\n model: {},\n });\n };\n\n onSearchQueryChange = event => {\n const { value } = event.target;\n this.props.setSearchQuery(value);\n };\n\n onTogglePause = (rule: AlertRule) => {\n this.props.togglePauseAlertRule(rule.id, { paused: rule.state !== 'paused' });\n };\n\n alertStateFilterOption = ({ text, value }) => {\n return (\n \n );\n };\n\n render() {\n const { navModel, alertRules, search } = this.props;\n\n return (\n
    \n \n
    \n
    \n
    \n \n
    \n
    \n \n\n
    \n \n
    \n
    \n \n
    \n
      \n {alertRules.map(rule => (\n this.onTogglePause(rule)}\n />\n ))}\n
    \n
    \n
    \n
    \n );\n }\n}\n\nconst mapStateToProps = (state: StoreState) => ({\n navModel: getNavModel(state.navIndex, 'alert-list'),\n alertRules: getAlertRuleItems(state.alertRules),\n stateFilter: state.location.query.state,\n search: getSearchQuery(state.alertRules),\n});\n\nconst mapDispatchToProps = {\n updateLocation,\n getAlertRulesAsync,\n setSearchQuery,\n togglePauseAlertRule,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(AlertRuleList));\n","import React, { PureComponent } from 'react';\nimport Highlighter from 'react-highlight-words';\nimport classNames from 'classnames/bind';\nimport { AlertRule } from '../../types';\n\nexport interface Props {\n rule: AlertRule;\n search: string;\n onTogglePause: () => void;\n}\n\nclass AlertRuleItem extends PureComponent {\n renderText(text: string) {\n return (\n \n );\n }\n\n render() {\n const { rule, onTogglePause } = this.props;\n\n const stateClass = classNames({\n fa: true,\n 'fa-play': rule.state === 'paused',\n 'fa-pause': rule.state !== 'paused',\n });\n\n const ruleUrl = `${rule.url}?panelId=${rule.panelId}&fullscreen=true&edit=true&tab=alert`;\n\n return (\n
  • \n \n \n \n
    \n
    \n \n
    \n {this.renderText(rule.stateText)}\n for {rule.stateAge}\n
    \n
    \n {rule.info &&
    {this.renderText(rule.info)}
    }\n
    \n\n
    \n \n \n \n \n \n \n
    \n
  • \n );\n }\n}\n\nexport default AlertRuleItem;\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport _ from 'lodash';\nimport { hot } from 'react-hot-loader';\nimport config from 'app/core/config';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport TeamMembers from './TeamMembers';\nimport TeamSettings from './TeamSettings';\nimport TeamGroupSync from './TeamGroupSync';\nimport { NavModel, Team } from 'app/types';\nimport { loadTeam } from './state/actions';\nimport { getTeam } from './state/selectors';\nimport { getTeamLoadingNav } from './state/navModel';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { getRouteParamsId, getRouteParamsPage } from '../../core/selectors/location';\n\nexport interface Props {\n team: Team;\n loadTeam: typeof loadTeam;\n teamId: number;\n pageName: string;\n navModel: NavModel;\n}\n\ninterface State {\n isSyncEnabled: boolean;\n}\n\nenum PageTypes {\n Members = 'members',\n Settings = 'settings',\n GroupSync = 'groupsync',\n}\n\nexport class TeamPages extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n isSyncEnabled: config.buildInfo.isEnterprise,\n };\n }\n\n componentDidMount() {\n this.fetchTeam();\n }\n\n async fetchTeam() {\n const { loadTeam, teamId } = this.props;\n\n await loadTeam(teamId);\n }\n\n getCurrentPage() {\n const pages = ['members', 'settings', 'groupsync'];\n const currentPage = this.props.pageName;\n return _.includes(pages, currentPage) ? currentPage : pages[0];\n }\n\n renderPage() {\n const { isSyncEnabled } = this.state;\n const currentPage = this.getCurrentPage();\n\n switch (currentPage) {\n case PageTypes.Members:\n return ;\n\n case PageTypes.Settings:\n return ;\n\n case PageTypes.GroupSync:\n return isSyncEnabled && ;\n }\n\n return null;\n }\n\n render() {\n const { team, navModel } = this.props;\n\n return (\n
    \n \n {team && Object.keys(team).length !== 0 &&
    {this.renderPage()}
    }\n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n const teamId = getRouteParamsId(state.location);\n const pageName = getRouteParamsPage(state.location) || 'members';\n const teamLoadingNav = getTeamLoadingNav(pageName);\n\n return {\n navModel: getNavModel(state.navIndex, `team-${pageName}-${teamId}`, teamLoadingNav),\n teamId: teamId,\n pageName: pageName,\n team: getTeam(state.team, teamId),\n };\n}\n\nconst mapDispatchToProps = {\n loadTeam,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(TeamPages));\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport SlideDown from 'app/core/components/Animations/SlideDown';\nimport { UserPicker } from 'app/core/components/Picker/UserPicker';\nimport DeleteButton from 'app/core/components/DeleteButton/DeleteButton';\nimport { TagBadge } from 'app/core/components/TagFilter/TagBadge';\nimport { TeamMember, User } from 'app/types';\nimport { loadTeamMembers, addTeamMember, removeTeamMember, setSearchMemberQuery } from './state/actions';\nimport { getSearchMemberQuery, getTeamMembers } from './state/selectors';\n\nexport interface Props {\n members: TeamMember[];\n searchMemberQuery: string;\n loadTeamMembers: typeof loadTeamMembers;\n addTeamMember: typeof addTeamMember;\n removeTeamMember: typeof removeTeamMember;\n setSearchMemberQuery: typeof setSearchMemberQuery;\n syncEnabled: boolean;\n}\n\nexport interface State {\n isAdding: boolean;\n newTeamMember?: User;\n}\n\nexport class TeamMembers extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { isAdding: false, newTeamMember: null };\n }\n\n componentDidMount() {\n this.props.loadTeamMembers();\n }\n\n onSearchQueryChange = event => {\n this.props.setSearchMemberQuery(event.target.value);\n };\n\n onRemoveMember(member: TeamMember) {\n this.props.removeTeamMember(member.userId);\n }\n\n onToggleAdding = () => {\n this.setState({ isAdding: !this.state.isAdding });\n };\n\n onUserSelected = (user: User) => {\n this.setState({ newTeamMember: user });\n };\n\n onAddUserToTeam = async () => {\n this.props.addTeamMember(this.state.newTeamMember.id);\n this.setState({ newTeamMember: null });\n };\n\n renderLabels(labels: string[]) {\n if (!labels) {\n return ;\n }\n\n return (\n \n {labels.map(label => {}} />)}\n \n );\n }\n\n renderMember(member: TeamMember, syncEnabled: boolean) {\n return (\n \n \n \n \n {member.login}\n {member.email}\n {syncEnabled ? this.renderLabels(member.labels) : ''}\n \n this.onRemoveMember(member)} />\n \n \n );\n }\n\n render() {\n const { newTeamMember, isAdding } = this.state;\n const { searchMemberQuery, members, syncEnabled } = this.props;\n const newTeamMemberValue = newTeamMember && newTeamMember.id.toString();\n\n return (\n
    \n
    \n
    \n \n
    \n\n
    \n\n \n
    \n\n \n
    \n \n
    Add Team Member
    \n
    \n \n\n {this.state.newTeamMember && (\n \n )}\n
    \n
    \n
    \n\n
    \n \n \n \n \n \n {syncEnabled ? \n \n {members && members.map(member => this.renderMember(member, syncEnabled))}\n
    \n NameEmail : ''}\n \n
    \n
    \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n members: getTeamMembers(state.team),\n searchMemberQuery: getSearchMemberQuery(state.team),\n };\n}\n\nconst mapDispatchToProps = {\n loadTeamMembers,\n addTeamMember,\n removeTeamMember,\n setSearchMemberQuery,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TeamMembers);\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport SlideDown from 'app/core/components/Animations/SlideDown';\nimport Tooltip from 'app/core/components/Tooltip/Tooltip';\nimport { TeamGroup } from '../../types';\nimport { addTeamGroup, loadTeamGroups, removeTeamGroup } from './state/actions';\nimport { getTeamGroups } from './state/selectors';\n\nexport interface Props {\n groups: TeamGroup[];\n loadTeamGroups: typeof loadTeamGroups;\n addTeamGroup: typeof addTeamGroup;\n removeTeamGroup: typeof removeTeamGroup;\n}\n\ninterface State {\n isAdding: boolean;\n newGroupId?: string;\n}\n\nconst headerTooltip = `Sync LDAP or OAuth groups with your Grafana teams.`;\n\nexport class TeamGroupSync extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { isAdding: false, newGroupId: '' };\n }\n\n componentDidMount() {\n this.fetchTeamGroups();\n }\n\n async fetchTeamGroups() {\n await this.props.loadTeamGroups();\n }\n\n onToggleAdding = () => {\n this.setState({ isAdding: !this.state.isAdding });\n };\n\n onNewGroupIdChanged = event => {\n this.setState({ newGroupId: event.target.value });\n };\n\n onAddGroup = event => {\n event.preventDefault();\n this.props.addTeamGroup(this.state.newGroupId);\n this.setState({ isAdding: false, newGroupId: '' });\n };\n\n onRemoveGroup = (group: TeamGroup) => {\n this.props.removeTeamGroup(group.groupId);\n };\n\n isNewGroupValid() {\n return this.state.newGroupId.length > 1;\n }\n\n renderGroup(group: TeamGroup) {\n return (\n \n {group.groupId}\n \n this.onRemoveGroup(group)}>\n \n \n \n \n );\n }\n\n render() {\n const { isAdding, newGroupId } = this.state;\n const groups = this.props.groups;\n\n return (\n
    \n
    \n

    External group sync

    \n \n \n \n
    \n {groups.length > 0 && (\n \n )}\n
    \n\n \n
    \n \n
    Add External Group
    \n
    \n
    \n \n
    \n\n
    \n \n
    \n
    \n
    \n
    \n\n {groups.length === 0 &&\n !isAdding && (\n
    \n
    There are no external groups to sync with
    \n \n
    \n {headerTooltip}\n \n Learn more\n \n
    \n
    \n )}\n\n {groups.length > 0 && (\n
    \n \n \n \n \n \n \n {groups.map(group => this.renderGroup(group))}\n
    External Group ID\n
    \n
    \n )}\n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n groups: getTeamGroups(state.team),\n };\n}\n\nconst mapDispatchToProps = {\n loadTeamGroups,\n addTeamGroup,\n removeTeamGroup,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TeamGroupSync);\n","import { Team, TeamsState, TeamState } from 'app/types';\n\nexport const getSearchQuery = (state: TeamsState) => state.searchQuery;\nexport const getSearchMemberQuery = (state: TeamState) => state.searchMemberQuery;\nexport const getTeamGroups = (state: TeamState) => state.groups;\nexport const getTeamsCount = (state: TeamsState) => state.teams.length;\n\nexport const getTeam = (state: TeamState, currentTeamId): Team | null => {\n if (state.team.id === parseInt(currentTeamId, 10)) {\n return state.team;\n }\n\n return null;\n};\n\nexport const getTeams = (state: TeamsState) => {\n const regex = RegExp(state.searchQuery, 'i');\n\n return state.teams.filter(team => {\n return regex.test(team.name);\n });\n};\n\nexport const getTeamMembers = (state: TeamState) => {\n const regex = RegExp(state.searchMemberQuery, 'i');\n\n return state.members.filter(member => {\n return regex.test(member.login) || regex.test(member.email);\n });\n};\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { hot } from 'react-hot-loader';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport DeleteButton from 'app/core/components/DeleteButton/DeleteButton';\nimport EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA';\nimport { NavModel, Team } from '../../types';\nimport { loadTeams, deleteTeam, setSearchQuery } from './state/actions';\nimport { getSearchQuery, getTeams, getTeamsCount } from './state/selectors';\nimport { getNavModel } from 'app/core/selectors/navModel';\n\nexport interface Props {\n navModel: NavModel;\n teams: Team[];\n searchQuery: string;\n teamsCount: number;\n loadTeams: typeof loadTeams;\n deleteTeam: typeof deleteTeam;\n setSearchQuery: typeof setSearchQuery;\n}\n\nexport class TeamList extends PureComponent {\n componentDidMount() {\n this.fetchTeams();\n }\n\n async fetchTeams() {\n await this.props.loadTeams();\n }\n\n deleteTeam = (team: Team) => {\n this.props.deleteTeam(team.id);\n };\n\n onSearchQueryChange = event => {\n this.props.setSearchQuery(event.target.value);\n };\n\n renderTeam(team: Team) {\n const teamUrl = `org/teams/edit/${team.id}`;\n\n return (\n \n \n \n \n \n \n \n {team.name}\n \n \n {team.email}\n \n \n {team.memberCount}\n \n \n this.deleteTeam(team)} />\n \n \n );\n }\n\n renderEmptyList() {\n return (\n
    \n \n
    \n );\n }\n\n renderTeamList() {\n const { teams, searchQuery } = this.props;\n\n return (\n
    \n
    \n
    \n \n
    \n\n \n\n
    \n \n \n \n \n \n \n \n \n {teams.map(team => this.renderTeam(team))}\n
    \n NameEmailMembers\n
    \n
    \n
    \n );\n }\n\n render() {\n const { navModel, teamsCount } = this.props;\n\n return (\n
    \n \n {teamsCount > 0 ? this.renderTeamList() : this.renderEmptyList()}\n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n navModel: getNavModel(state.navIndex, 'teams'),\n teams: getTeams(state.teams),\n searchQuery: getSearchQuery(state.teams),\n teamsCount: getTeamsCount(state.teams),\n };\n}\n\nconst mapDispatchToProps = {\n loadTeams,\n deleteTeam,\n setSearchQuery,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(TeamList));\n","import React, { PureComponent } from 'react';\nimport ReactDOMServer from 'react-dom/server';\nimport { connect } from 'react-redux';\nimport { hot } from 'react-hot-loader';\nimport { NavModel, ApiKey, NewApiKey, OrgRole } from 'app/types';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { getApiKeys } from './state/selectors';\nimport { loadApiKeys, deleteApiKey, setSearchQuery, addApiKey } from './state/actions';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport SlideDown from 'app/core/components/Animations/SlideDown';\nimport ApiKeysAddedModal from './ApiKeysAddedModal';\nimport config from 'app/core/config';\nimport appEvents from 'app/core/app_events';\n\nexport interface Props {\n navModel: NavModel;\n apiKeys: ApiKey[];\n searchQuery: string;\n loadApiKeys: typeof loadApiKeys;\n deleteApiKey: typeof deleteApiKey;\n setSearchQuery: typeof setSearchQuery;\n addApiKey: typeof addApiKey;\n}\n\nexport interface State {\n isAdding: boolean;\n newApiKey: NewApiKey;\n}\n\nenum ApiKeyStateProps {\n Name = 'name',\n Role = 'role',\n}\n\nconst initialApiKeyState = {\n name: '',\n role: OrgRole.Viewer,\n};\n\nexport class ApiKeysPage extends PureComponent {\n constructor(props) {\n super(props);\n this.state = { isAdding: false, newApiKey: initialApiKeyState };\n }\n\n componentDidMount() {\n this.fetchApiKeys();\n }\n\n async fetchApiKeys() {\n await this.props.loadApiKeys();\n }\n\n onDeleteApiKey(key: ApiKey) {\n this.props.deleteApiKey(key.id);\n }\n\n onSearchQueryChange = evt => {\n this.props.setSearchQuery(evt.target.value);\n };\n\n onToggleAdding = () => {\n this.setState({ isAdding: !this.state.isAdding });\n };\n\n onAddApiKey = async evt => {\n evt.preventDefault();\n\n const openModal = (apiKey: string) => {\n const rootPath = window.location.origin + config.appSubUrl;\n const modalTemplate = ReactDOMServer.renderToString();\n\n appEvents.emit('show-modal', {\n templateHtml: modalTemplate,\n });\n };\n\n this.props.addApiKey(this.state.newApiKey, openModal);\n this.setState((prevState: State) => {\n return {\n ...prevState,\n newApiKey: initialApiKeyState,\n };\n });\n };\n\n onApiKeyStateUpdate = (evt, prop: string) => {\n const value = evt.currentTarget.value;\n this.setState((prevState: State) => {\n const newApiKey = {\n ...prevState.newApiKey,\n };\n newApiKey[prop] = value;\n\n return {\n ...prevState,\n newApiKey: newApiKey,\n };\n });\n };\n\n render() {\n const { newApiKey, isAdding } = this.state;\n const { navModel, apiKeys, searchQuery } = this.props;\n\n return (\n
    \n \n
    \n
    \n
    \n \n
    \n\n
    \n \n
    \n\n \n
    \n \n
    Add API Key
    \n
    \n
    \n
    \n Key name\n this.onApiKeyStateUpdate(evt, ApiKeyStateProps.Name)}\n />\n
    \n
    \n Role\n \n this.onApiKeyStateUpdate(evt, ApiKeyStateProps.Role)}\n >\n {Object.keys(OrgRole).map(role => {\n return (\n \n );\n })}\n \n \n
    \n
    \n \n
    \n
    \n
    \n
    \n
    \n\n

    Existing Keys

    \n \n \n \n \n \n \n \n {apiKeys.length > 0 ? (\n \n {apiKeys.map(key => {\n return (\n \n \n \n \n \n );\n })}\n \n ) : null}\n
    NameRole\n
    {key.name}{key.role}\n this.onDeleteApiKey(key)} className=\"btn btn-danger btn-mini\">\n \n \n
    \n
    \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n navModel: getNavModel(state.navIndex, 'apikeys'),\n apiKeys: getApiKeys(state.apiKeys),\n searchQuery: state.apiKeys.searchQuery,\n };\n}\n\nconst mapDispatchToProps = {\n loadApiKeys,\n deleteApiKey,\n setSearchQuery,\n addApiKey,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(ApiKeysPage));\n","import { ApiKeysState } from 'app/types';\n\nexport const getApiKeys = (state: ApiKeysState) => {\n const regex = RegExp(state.searchQuery, 'i');\n\n return state.keys.filter(key => {\n return regex.test(key.name) || regex.test(key.role);\n });\n};\n","import React from 'react';\n\nexport interface Props {\n apiKey: string;\n rootPath: string;\n}\n\nexport const ApiKeysAddedModal = (props: Props) => {\n return (\n
    \n
    \n

    \n \n API Key Created\n

    \n\n \n \n \n
    \n\n
    \n
    \n
    \n Key\n {props.apiKey}\n
    \n
    \n\n
    \n You will only be able to view this key here once! It is not stored in this form. So be sure to copy it now.\n
    \n
    \n You can authenticate request using the Authorization HTTP header, example:\n
    \n
    \n
    \n            curl -H \"Authorization: Bearer {props.apiKey}\" {props.rootPath}/api/dashboards/home\n          
    \n
    \n
    \n
    \n );\n};\n\nexport default ApiKeysAddedModal;\n","import React, { PureComponent } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { connect } from 'react-redux';\nimport PageHeader from '../../core/components/PageHeader/PageHeader';\nimport PluginActionBar from './PluginActionBar';\nimport PluginList from './PluginList';\nimport { NavModel, Plugin } from '../../types';\nimport { loadPlugins } from './state/actions';\nimport { getNavModel } from '../../core/selectors/navModel';\nimport { getLayoutMode, getPlugins } from './state/selectors';\nimport { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';\n\nexport interface Props {\n navModel: NavModel;\n plugins: Plugin[];\n layoutMode: LayoutMode;\n loadPlugins: typeof loadPlugins;\n}\n\nexport class PluginListPage extends PureComponent {\n componentDidMount() {\n this.fetchPlugins();\n }\n\n async fetchPlugins() {\n await this.props.loadPlugins();\n }\n\n render() {\n const { navModel, plugins, layoutMode } = this.props;\n\n return (\n
    \n \n
    \n \n {plugins && }\n
    \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n navModel: getNavModel(state.navIndex, 'plugins'),\n plugins: getPlugins(state.plugins),\n layoutMode: getLayoutMode(state.plugins),\n };\n}\n\nconst mapDispatchToProps = {\n loadPlugins,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(PluginListPage));\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport LayoutSelector, { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';\nimport { setLayoutMode, setPluginsSearchQuery } from './state/actions';\nimport { getPluginsSearchQuery, getLayoutMode } from './state/selectors';\n\nexport interface Props {\n searchQuery: string;\n layoutMode: LayoutMode;\n setLayoutMode: typeof setLayoutMode;\n setPluginsSearchQuery: typeof setPluginsSearchQuery;\n}\n\nexport class PluginActionBar extends PureComponent {\n onSearchQueryChange = event => {\n this.props.setPluginsSearchQuery(event.target.value);\n };\n\n render() {\n const { searchQuery, layoutMode, setLayoutMode } = this.props;\n\n return (\n
    \n
    \n \n setLayoutMode(mode)} />\n
    \n
    \n \n Find more plugins on Grafana.com\n \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n searchQuery: getPluginsSearchQuery(state.plugins),\n layoutMode: getLayoutMode(state.plugins),\n };\n}\n\nconst mapDispatchToProps = {\n setPluginsSearchQuery,\n setLayoutMode,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(PluginActionBar);\n","import React, { PureComponent } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { connect } from 'react-redux';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport appEvents from 'app/core/app_events';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { NavModel, StoreState, FolderState } from 'app/types';\nimport { getFolderByUid, setFolderTitle, saveFolder, deleteFolder } from './state/actions';\nimport { getLoadingNav } from './state/navModel';\n\nexport interface Props {\n navModel: NavModel;\n folderUid: string;\n folder: FolderState;\n getFolderByUid: typeof getFolderByUid;\n setFolderTitle: typeof setFolderTitle;\n saveFolder: typeof saveFolder;\n deleteFolder: typeof deleteFolder;\n}\n\nexport class FolderSettingsPage extends PureComponent {\n componentDidMount() {\n this.props.getFolderByUid(this.props.folderUid);\n }\n\n onTitleChange = evt => {\n this.props.setFolderTitle(evt.target.value);\n };\n\n onSave = async evt => {\n evt.preventDefault();\n evt.stopPropagation();\n\n await this.props.saveFolder(this.props.folder);\n };\n\n onDelete = evt => {\n evt.stopPropagation();\n evt.preventDefault();\n\n appEvents.emit('confirm-modal', {\n title: 'Delete',\n text: `Do you want to delete this folder and all its dashboards?`,\n icon: 'fa-trash',\n yesText: 'Delete',\n onConfirm: () => {\n this.props.deleteFolder(this.props.folder.uid);\n },\n });\n };\n\n render() {\n const { navModel, folder } = this.props;\n\n return (\n
    \n \n
    \n

    Folder Settings

    \n\n
    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nconst mapStateToProps = (state: StoreState) => {\n const uid = state.location.routeParams.uid;\n\n return {\n navModel: getNavModel(state.navIndex, `folder-settings-${uid}`, getLoadingNav(2)),\n folderUid: uid,\n folder: state.folder,\n };\n};\n\nconst mapDispatchToProps = {\n getFolderByUid,\n saveFolder,\n setFolderTitle,\n deleteFolder,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(FolderSettingsPage));\n","import React, { PureComponent } from 'react';\nimport { hot } from 'react-hot-loader';\nimport { connect } from 'react-redux';\nimport PageHeader from 'app/core/components/PageHeader/PageHeader';\nimport Tooltip from 'app/core/components/Tooltip/Tooltip';\nimport SlideDown from 'app/core/components/Animations/SlideDown';\nimport { getNavModel } from 'app/core/selectors/navModel';\nimport { NavModel, StoreState, FolderState } from 'app/types';\nimport { DashboardAcl, PermissionLevel, NewDashboardAclItem } from 'app/types/acl';\nimport {\n getFolderByUid,\n getFolderPermissions,\n updateFolderPermission,\n removeFolderPermission,\n addFolderPermission,\n} from './state/actions';\nimport { getLoadingNav } from './state/navModel';\nimport PermissionList from 'app/core/components/PermissionList/PermissionList';\nimport AddPermission from 'app/core/components/PermissionList/AddPermission';\nimport PermissionsInfo from 'app/core/components/PermissionList/PermissionsInfo';\n\nexport interface Props {\n navModel: NavModel;\n folderUid: string;\n folder: FolderState;\n getFolderByUid: typeof getFolderByUid;\n getFolderPermissions: typeof getFolderPermissions;\n updateFolderPermission: typeof updateFolderPermission;\n removeFolderPermission: typeof removeFolderPermission;\n addFolderPermission: typeof addFolderPermission;\n}\n\nexport interface State {\n isAdding: boolean;\n}\n\nexport class FolderPermissions extends PureComponent {\n constructor(props) {\n super(props);\n\n this.state = {\n isAdding: false,\n };\n }\n\n componentDidMount() {\n this.props.getFolderByUid(this.props.folderUid);\n this.props.getFolderPermissions(this.props.folderUid);\n }\n\n onOpenAddPermissions = () => {\n this.setState({ isAdding: true });\n };\n\n onRemoveItem = (item: DashboardAcl) => {\n this.props.removeFolderPermission(item);\n };\n\n onPermissionChanged = (item: DashboardAcl, level: PermissionLevel) => {\n this.props.updateFolderPermission(item, level);\n };\n\n onAddPermission = (newItem: NewDashboardAclItem) => {\n return this.props.addFolderPermission(newItem);\n };\n\n onCancelAddPermission = () => {\n this.setState({ isAdding: false });\n };\n\n render() {\n const { navModel, folder } = this.props;\n const { isAdding } = this.state;\n\n if (folder.id === 0) {\n return ;\n }\n\n const folderInfo = { title: folder.title, url: folder.url, id: folder.id };\n\n return (\n
    \n \n
    \n
    \n

    Folder Permissions

    \n \n \n \n
    \n \n
    \n \n \n \n \n
    \n
    \n );\n }\n}\n\nconst mapStateToProps = (state: StoreState) => {\n const uid = state.location.routeParams.uid;\n return {\n navModel: getNavModel(state.navIndex, `folder-permissions-${uid}`, getLoadingNav(1)),\n folderUid: uid,\n folder: state.folder,\n };\n};\n\nconst mapDispatchToProps = {\n getFolderByUid,\n getFolderPermissions,\n updateFolderPermission,\n removeFolderPermission,\n addFolderPermission,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(FolderPermissions));\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport { hot } from 'react-hot-loader';\nimport PageHeader from '../../core/components/PageHeader/PageHeader';\nimport DataSourcesActionBar from './DataSourcesActionBar';\nimport DataSourcesList from './DataSourcesList';\nimport { loadDataSources } from './state/actions';\nimport { getDataSources, getDataSourcesCount, getDataSourcesLayoutMode } from './state/selectors';\nimport { getNavModel } from '../../core/selectors/navModel';\nimport { DataSource, NavModel } from 'app/types';\nimport { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';\nimport EmptyListCTA from '../../core/components/EmptyListCTA/EmptyListCTA';\n\nexport interface Props {\n navModel: NavModel;\n dataSources: DataSource[];\n dataSourcesCount: number;\n layoutMode: LayoutMode;\n loadDataSources: typeof loadDataSources;\n}\n\nconst emptyListModel = {\n title: 'There are no data sources defined yet',\n buttonIcon: 'gicon gicon-add-datasources',\n buttonLink: 'datasources/new',\n buttonTitle: 'Add data source',\n proTip: 'You can also define data sources through configuration files.',\n proTipLink: 'http://docs.grafana.org/administration/provisioning/#datasources?utm_source=grafana_ds_list',\n proTipLinkTitle: 'Learn more',\n proTipTarget: '_blank',\n};\n\nexport class DataSourcesListPage extends PureComponent {\n componentDidMount() {\n this.fetchDataSources();\n }\n\n async fetchDataSources() {\n return await this.props.loadDataSources();\n }\n\n render() {\n const { dataSources, dataSourcesCount, navModel, layoutMode } = this.props;\n\n return (\n
    \n \n
    \n {dataSourcesCount === 0 ? (\n \n ) : (\n [\n ,\n ,\n ]\n )}\n
    \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n navModel: getNavModel(state.navIndex, 'datasources'),\n dataSources: getDataSources(state.dataSources),\n layoutMode: getDataSourcesLayoutMode(state.dataSources),\n dataSourcesCount: getDataSourcesCount(state.dataSources),\n };\n}\n\nconst mapDispatchToProps = {\n loadDataSources,\n};\n\nexport default hot(module)(connect(mapStateToProps, mapDispatchToProps)(DataSourcesListPage));\n","import React, { PureComponent } from 'react';\nimport { connect } from 'react-redux';\nimport LayoutSelector, { LayoutMode } from '../../core/components/LayoutSelector/LayoutSelector';\nimport { setDataSourcesLayoutMode, setDataSourcesSearchQuery } from './state/actions';\nimport { getDataSourcesLayoutMode, getDataSourcesSearchQuery } from './state/selectors';\n\nexport interface Props {\n searchQuery: string;\n layoutMode: LayoutMode;\n setDataSourcesLayoutMode: typeof setDataSourcesLayoutMode;\n setDataSourcesSearchQuery: typeof setDataSourcesSearchQuery;\n}\n\nexport class DataSourcesActionBar extends PureComponent {\n onSearchQueryChange = event => {\n this.props.setDataSourcesSearchQuery(event.target.value);\n };\n\n render() {\n const { searchQuery, layoutMode, setDataSourcesLayoutMode } = this.props;\n\n return (\n
    \n
    \n \n setDataSourcesLayoutMode(mode)}\n />\n
    \n \n );\n }\n}\n\nfunction mapStateToProps(state) {\n return {\n searchQuery: getDataSourcesSearchQuery(state.dataSources),\n layoutMode: getDataSourcesLayoutMode(state.dataSources),\n };\n}\n\nconst mapDispatchToProps = {\n setDataSourcesLayoutMode,\n setDataSourcesSearchQuery,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(DataSourcesActionBar);\n","import React, { SFC } from 'react';\nimport { Plugin } from 'app/types';\n\ninterface Props {\n plugin: Plugin;\n}\n\nconst PluginListItem: SFC = props => {\n const { plugin } = props;\n\n return (\n
  • \n \n
    \n
    \n \n {plugin.type}\n
    \n {plugin.hasUpdate && (\n
    \n Update available!\n
    \n )}\n
    \n
    \n
    \n \n
    \n
    \n
    {plugin.name}
    \n
    {`By ${plugin.info.author.name}`}
    \n
    \n
    \n
    \n
  • \n );\n};\n\nexport default PluginListItem;\n","import React, { SFC } from 'react';\nimport classNames from 'classnames/bind';\nimport PluginListItem from './PluginListItem';\nimport { Plugin } from 'app/types';\nimport { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';\n\ninterface Props {\n plugins: Plugin[];\n layoutMode: LayoutMode;\n}\n\nconst PluginList: SFC = props => {\n const { plugins, layoutMode } = props;\n\n const listStyle = classNames({\n 'card-section': true,\n 'card-list-layout-grid': layoutMode === LayoutModes.Grid,\n 'card-list-layout-list': layoutMode === LayoutModes.List,\n });\n\n return (\n
    \n
      \n {plugins.map((plugin, index) => {\n return ;\n })}\n
    \n
    \n );\n};\n\nexport default PluginList;\n","import React, { SFC, ReactNode } from 'react';\nimport Tooltip from '../Tooltip/Tooltip';\n\ninterface Props {\n tooltip?: string;\n for?: string;\n children: ReactNode;\n}\n\nexport const Label: SFC = props => {\n return (\n \n {props.children}\n {props.tooltip && (\n \n \n \n )}\n \n );\n};\n","import React from 'react';\nimport { connect } from 'react-redux';\nimport { Label } from 'app/core/components/Forms/Forms';\nimport { Team } from '../../types';\nimport { updateTeam } from './state/actions';\nimport { getRouteParamsId } from '../../core/selectors/location';\nimport { getTeam } from './state/selectors';\n\nexport interface Props {\n team: Team;\n updateTeam: typeof updateTeam;\n}\n\ninterface State {\n name: string;\n email: string;\n}\n\nexport class TeamSettings extends React.Component {\n constructor(props) {\n super(props);\n\n this.state = {\n name: props.team.name,\n email: props.team.email,\n };\n }\n\n onChangeName = event => {\n this.setState({ name: event.target.value });\n };\n\n onChangeEmail = event => {\n this.setState({ email: event.target.value });\n };\n\n onUpdate = event => {\n const { name, email } = this.state;\n event.preventDefault();\n this.props.updateTeam(name, email);\n };\n\n render() {\n const { name, email } = this.state;\n\n return (\n
    \n

    Team Settings

    \n
    \n
    \n \n \n
    \n
    \n \n \n
    \n\n
    \n \n
    \n
    \n
    \n );\n }\n}\n\nfunction mapStateToProps(state) {\n const teamId = getRouteParamsId(state.location);\n\n return {\n team: getTeam(state.team, teamId),\n };\n}\n\nconst mapDispatchToProps = {\n updateTeam,\n};\n\nexport default connect(mapStateToProps, mapDispatchToProps)(TeamSettings);\n","import React, { PureComponent } from 'react';\nimport { DataSource } from 'app/types';\n\nexport interface Props {\n dataSource: DataSource;\n}\n\nexport class DataSourcesListItem extends PureComponent {\n render() {\n const { dataSource } = this.props;\n return (\n
  • \n \n
    \n
    {dataSource.type}
    \n
    \n
    \n
    \n \n
    \n
    \n
    \n {dataSource.name}\n {dataSource.isDefault && default}\n
    \n
    {dataSource.url}
    \n
    \n
    \n
    \n
  • \n );\n }\n}\n\nexport default DataSourcesListItem;\n","import React, { PureComponent } from 'react';\nimport classNames from 'classnames/bind';\nimport DataSourcesListItem from './DataSourcesListItem';\nimport { DataSource } from 'app/types';\nimport { LayoutMode, LayoutModes } from '../../core/components/LayoutSelector/LayoutSelector';\n\nexport interface Props {\n dataSources: DataSource[];\n layoutMode: LayoutMode;\n}\n\nexport class DataSourcesList extends PureComponent {\n render() {\n const { dataSources, layoutMode } = this.props;\n\n const listStyle = classNames({\n 'card-section': true,\n 'card-list-layout-grid': layoutMode === LayoutModes.Grid,\n 'card-list-layout-list': layoutMode === LayoutModes.List,\n });\n\n return (\n
    \n
      \n {dataSources.map((dataSource, index) => {\n return ;\n })}\n
    \n
    \n );\n }\n}\n\nexport default DataSourcesList;\n","import coreModule from 'app/core/core_module';\n\nexport function react2AngularDirective(name: string, component: any, options: any) {\n coreModule.directive(name, [\n 'reactDirective',\n reactDirective => {\n return reactDirective(component, options);\n },\n ]);\n}\n","import { LocationUpdate } from 'app/types';\n\nexport type Action = UpdateLocationAction;\n\nexport interface UpdateLocationAction {\n type: 'UPDATE_LOCATION';\n payload: LocationUpdate;\n}\n\nexport const updateLocation = (location: LocationUpdate): UpdateLocationAction => ({\n type: 'UPDATE_LOCATION',\n payload: location,\n});\n","import { updateLocation } from './location';\nimport { updateNavIndex, UpdateNavIndexAction } from './navModel';\n\nexport { updateLocation, updateNavIndex, UpdateNavIndexAction };\n","import { Action, ActionTypes } from 'app/core/actions/navModel';\nimport { NavIndex, NavModelItem } from 'app/types';\nimport config from 'app/core/config';\n\nexport function buildInitialState(): NavIndex {\n const navIndex: NavIndex = {};\n const rootNodes = config.bootData.navTree as NavModelItem[];\n buildNavIndex(navIndex, rootNodes);\n return navIndex;\n}\n\nfunction buildNavIndex(navIndex: NavIndex, children: NavModelItem[], parentItem?: NavModelItem) {\n for (const node of children) {\n navIndex[node.id] = {\n ...node,\n parentItem: parentItem,\n };\n\n if (node.children) {\n buildNavIndex(navIndex, node.children, node);\n }\n }\n}\n\nexport const initialState: NavIndex = buildInitialState();\n\nexport const navIndexReducer = (state = initialState, action: Action): NavIndex => {\n switch (action.type) {\n case ActionTypes.UpdateNavIndex:\n const newPages = {};\n const payload = action.payload;\n\n for (const node of payload.children) {\n newPages[node.id] = {\n ...node,\n parentItem: payload,\n };\n }\n\n return { ...state, ...newPages };\n }\n return state;\n};\n","import { Action } from 'app/core/actions/location';\nimport { LocationState } from 'app/types';\nimport { renderUrl } from 'app/core/utils/url';\n\nexport const initialState: LocationState = {\n url: '',\n path: '',\n query: {},\n routeParams: {},\n};\n\nexport const locationReducer = (state = initialState, action: Action): LocationState => {\n switch (action.type) {\n case 'UPDATE_LOCATION': {\n const { path, query, routeParams } = action.payload;\n return {\n url: renderUrl(path || state.path, query),\n path: path || state.path,\n query: query || state.query,\n routeParams: routeParams || state.routeParams,\n };\n }\n }\n\n return state;\n};\n","import { navIndexReducer as navIndex } from './navModel';\nimport { locationReducer as location } from './location';\n\nexport default {\n navIndex,\n location,\n};\n","import moment from 'moment';\nimport { AlertRuleDTO, AlertRule, AlertRulesState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\nimport alertDef from './alertDef';\n\nexport const initialState: AlertRulesState = { items: [], searchQuery: '' };\n\nfunction convertToAlertRule(rule, state): AlertRule {\n const stateModel = alertDef.getStateDisplayModel(state);\n rule.stateText = stateModel.text;\n rule.stateIcon = stateModel.iconClass;\n rule.stateClass = stateModel.stateClass;\n rule.stateAge = moment(rule.newStateDate)\n .fromNow()\n .replace(' ago', '');\n\n if (rule.state !== 'paused') {\n if (rule.executionError) {\n rule.info = 'Execution Error: ' + rule.executionError;\n }\n if (rule.evalData && rule.evalData.noData) {\n rule.info = 'Query returned no data';\n }\n }\n\n return rule;\n}\n\nexport const alertRulesReducer = (state = initialState, action: Action): AlertRulesState => {\n switch (action.type) {\n case ActionTypes.LoadAlertRules: {\n const alertRules: AlertRuleDTO[] = action.payload;\n\n const alertRulesViewModel: AlertRule[] = alertRules.map(rule => {\n return convertToAlertRule(rule, rule.state);\n });\n\n return { items: alertRulesViewModel, searchQuery: state.searchQuery };\n }\n\n case ActionTypes.SetSearchQuery:\n return { items: state.items, searchQuery: action.payload };\n }\n\n return state;\n};\n\nexport default {\n alertRules: alertRulesReducer,\n};\n","import { Team, TeamGroup, TeamMember, TeamsState, TeamState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\n\nexport const initialTeamsState: TeamsState = { teams: [], searchQuery: '' };\nexport const initialTeamState: TeamState = {\n team: {} as Team,\n members: [] as TeamMember[],\n groups: [] as TeamGroup[],\n searchMemberQuery: '',\n};\n\nexport const teamsReducer = (state = initialTeamsState, action: Action): TeamsState => {\n switch (action.type) {\n case ActionTypes.LoadTeams:\n return { ...state, teams: action.payload };\n\n case ActionTypes.SetSearchQuery:\n return { ...state, searchQuery: action.payload };\n }\n return state;\n};\n\nexport const teamReducer = (state = initialTeamState, action: Action): TeamState => {\n switch (action.type) {\n case ActionTypes.LoadTeam:\n return { ...state, team: action.payload };\n\n case ActionTypes.LoadTeamMembers:\n return { ...state, members: action.payload };\n\n case ActionTypes.SetSearchMemberQuery:\n return { ...state, searchMemberQuery: action.payload };\n\n case ActionTypes.LoadTeamGroups:\n return { ...state, groups: action.payload };\n }\n\n return state;\n};\n\nexport default {\n teams: teamsReducer,\n team: teamReducer,\n};\n","import { ApiKeysState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\n\nexport const initialApiKeysState: ApiKeysState = {\n keys: [],\n searchQuery: '',\n};\n\nexport const apiKeysReducer = (state = initialApiKeysState, action: Action): ApiKeysState => {\n switch (action.type) {\n case ActionTypes.LoadApiKeys:\n return { ...state, keys: action.payload };\n case ActionTypes.SetApiKeysSearchQuery:\n return { ...state, searchQuery: action.payload };\n }\n return state;\n};\n\nexport default {\n apiKeys: apiKeysReducer,\n};\n","import { DashboardAcl, DashboardAclDTO } from 'app/types/acl';\n\nexport function processAclItems(items: DashboardAclDTO[]): DashboardAcl[] {\n return items.map(processAclItem).sort((a, b) => b.sortRank - a.sortRank || a.name.localeCompare(b.name));\n}\n\nfunction processAclItem(dto: DashboardAclDTO): DashboardAcl {\n const item = dto as DashboardAcl;\n\n item.sortRank = 0;\n if (item.userId > 0) {\n item.name = item.userLogin;\n item.sortRank = 10;\n } else if (item.teamId > 0) {\n item.name = item.team;\n item.sortRank = 20;\n } else if (item.role) {\n item.icon = 'fa fa-fw fa-street-view';\n item.name = item.role;\n item.sortRank = 30;\n if (item.role === 'Editor') {\n item.sortRank += 1;\n }\n }\n\n if (item.inherited) {\n item.sortRank += 100;\n }\n\n return item;\n}\n","import { FolderState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\nimport { processAclItems } from 'app/core/utils/acl';\n\nexport const inititalState: FolderState = {\n id: 0,\n uid: 'loading',\n title: 'loading',\n url: '',\n canSave: false,\n hasChanged: false,\n version: 1,\n permissions: [],\n};\n\nexport const folderReducer = (state = inititalState, action: Action): FolderState => {\n switch (action.type) {\n case ActionTypes.LoadFolder:\n return {\n ...state,\n ...action.payload,\n hasChanged: false,\n };\n case ActionTypes.SetFolderTitle:\n return {\n ...state,\n title: action.payload,\n hasChanged: action.payload.trim().length > 0,\n };\n case ActionTypes.LoadFolderPermissions:\n return {\n ...state,\n permissions: processAclItems(action.payload),\n };\n }\n return state;\n};\n\nexport default {\n folder: folderReducer,\n};\n","import { DashboardState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\nimport { processAclItems } from 'app/core/utils/acl';\n\nexport const inititalState: DashboardState = {\n permissions: [],\n};\n\nexport const dashboardReducer = (state = inititalState, action: Action): DashboardState => {\n switch (action.type) {\n case ActionTypes.LoadDashboardPermissions:\n return {\n ...state,\n permissions: processAclItems(action.payload),\n };\n }\n return state;\n};\n\nexport default {\n dashboard: dashboardReducer,\n};\n","import { Action, ActionTypes } from './actions';\nimport { Plugin, PluginsState } from 'app/types';\nimport { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';\n\nexport const initialState: PluginsState = {\n plugins: [] as Plugin[],\n searchQuery: '',\n layoutMode: LayoutModes.Grid,\n};\n\nexport const pluginsReducer = (state = initialState, action: Action): PluginsState => {\n switch (action.type) {\n case ActionTypes.LoadPlugins:\n return { ...state, plugins: action.payload };\n\n case ActionTypes.SetPluginsSearchQuery:\n return { ...state, searchQuery: action.payload };\n\n case ActionTypes.SetLayoutMode:\n return { ...state, layoutMode: action.payload };\n }\n return state;\n};\n\nexport default {\n plugins: pluginsReducer,\n};\n","import { DataSource, DataSourcesState } from 'app/types';\nimport { Action, ActionTypes } from './actions';\nimport { LayoutModes } from '../../../core/components/LayoutSelector/LayoutSelector';\n\nconst initialState: DataSourcesState = {\n dataSources: [] as DataSource[],\n layoutMode: LayoutModes.Grid,\n searchQuery: '',\n dataSourcesCount: 0,\n};\n\nexport const dataSourcesReducer = (state = initialState, action: Action): DataSourcesState => {\n switch (action.type) {\n case ActionTypes.LoadDataSources:\n return { ...state, dataSources: action.payload, dataSourcesCount: action.payload.length };\n\n case ActionTypes.SetDataSourcesSearchQuery:\n return { ...state, searchQuery: action.payload };\n\n case ActionTypes.SetDataSourcesLayoutMode:\n return { ...state, layoutMode: action.payload };\n }\n\n return state;\n};\n\nexport default {\n dataSources: dataSourcesReducer,\n};\n","import { createStore, applyMiddleware, compose, combineReducers } from 'redux';\nimport thunk from 'redux-thunk';\nimport { createLogger } from 'redux-logger';\nimport sharedReducers from 'app/core/reducers';\nimport alertingReducers from 'app/features/alerting/state/reducers';\nimport teamsReducers from 'app/features/teams/state/reducers';\nimport apiKeysReducers from 'app/features/api-keys/state/reducers';\nimport foldersReducers from 'app/features/folders/state/reducers';\nimport dashboardReducers from 'app/features/dashboard/state/reducers';\nimport pluginReducers from 'app/features/plugins/state/reducers';\nimport dataSourcesReducers from 'app/features/datasources/state/reducers';\n\nconst rootReducer = combineReducers({\n ...sharedReducers,\n ...alertingReducers,\n ...teamsReducers,\n ...apiKeysReducers,\n ...foldersReducers,\n ...dashboardReducers,\n ...pluginReducers,\n ...dataSourcesReducers,\n});\n\nexport let store;\n\nexport function configureStore() {\n const composeEnhancers = (window as any).__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;\n\n if (process.env.NODE_ENV !== 'production') {\n // DEV builds we had the logger middleware\n store = createStore(rootReducer, {}, composeEnhancers(applyMiddleware(thunk, createLogger())));\n } else {\n store = createStore(rootReducer, {}, composeEnhancers(applyMiddleware(thunk)));\n }\n}\n","import { Emitter } from 'app/core/utils/emitter';\nimport _ from 'lodash';\n\nexport interface GridPos {\n x: number;\n y: number;\n w: number;\n h: number;\n static?: boolean;\n}\n\nconst notPersistedProperties: { [str: string]: boolean } = {\n events: true,\n fullscreen: true,\n isEditing: true,\n};\n\nexport class PanelModel {\n id: number;\n gridPos: GridPos;\n type: string;\n title: string;\n alert?: any;\n scopedVars?: any;\n repeat?: string;\n repeatIteration?: number;\n repeatPanelId?: number;\n repeatDirection?: string;\n repeatedByRow?: boolean;\n minSpan?: number;\n collapsed?: boolean;\n panels?: any;\n soloMode?: boolean;\n\n // non persisted\n fullscreen: boolean;\n isEditing: boolean;\n events: Emitter;\n\n constructor(model) {\n this.events = new Emitter();\n\n // copy properties from persisted model\n for (const property in model) {\n this[property] = model[property];\n }\n\n if (!this.gridPos) {\n this.gridPos = { x: 0, y: 0, h: 3, w: 6 };\n }\n }\n\n getSaveModel() {\n const model: any = {};\n for (const property in this) {\n if (notPersistedProperties[property] || !this.hasOwnProperty(property)) {\n continue;\n }\n\n model[property] = _.cloneDeep(this[property]);\n }\n\n return model;\n }\n\n setViewMode(fullscreen: boolean, isEditing: boolean) {\n this.fullscreen = fullscreen;\n this.isEditing = isEditing;\n this.events.emit('panel-size-changed');\n }\n\n updateGridPos(newPos: GridPos) {\n let sizeChanged = false;\n\n if (this.gridPos.w !== newPos.w || this.gridPos.h !== newPos.h) {\n sizeChanged = true;\n }\n\n this.gridPos.x = newPos.x;\n this.gridPos.y = newPos.y;\n this.gridPos.w = newPos.w;\n this.gridPos.h = newPos.h;\n\n if (sizeChanged) {\n console.log('PanelModel sizeChanged event and render events fired');\n this.events.emit('panel-size-changed');\n }\n }\n\n resizeDone() {\n this.events.emit('panel-size-changed');\n }\n\n destroy() {\n this.events.removeAllListeners();\n }\n}\n","/* ===================================================\n * bootstrap-transition.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#transitions\n * ===================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* CSS TRANSITION SUPPORT (http://www.modernizr.com/)\n * ======================================================= */\n\n $(function () {\n\n $.support.transition = (function () {\n\n var transitionEnd = (function () {\n\n var el = document.createElement('bootstrap')\n , transEndEventNames = {\n 'WebkitTransition' : 'webkitTransitionEnd'\n , 'MozTransition' : 'transitionend'\n , 'OTransition' : 'oTransitionEnd otransitionend'\n , 'transition' : 'transitionend'\n }\n , name\n\n for (name in transEndEventNames){\n if (el.style[name] !== undefined) {\n return transEndEventNames[name]\n }\n }\n\n }())\n\n return transitionEnd && {\n end: transitionEnd\n }\n\n })()\n\n })\n\n}(window.jQuery);/* ==========================================================\n * bootstrap-alert.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#alerts\n * ==========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n/* ============================================================\n * bootstrap-dropdown.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#dropdowns\n * ============================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n /* DROPDOWN CLASS DEFINITION\n * ========================= */\n\n var toggle = '[data-toggle=dropdown]'\n , Dropdown = function (element) {\n var $el = $(element).on('click.dropdown.data-api', this.toggle)\n $('html').on('click.dropdown.data-api', function () {\n $el.parent().removeClass('open')\n })\n }\n\n Dropdown.prototype = {\n\n constructor: Dropdown\n\n , toggle: function (e) {\n var $this = $(this)\n , $parent\n , isActive\n\n if ($this.is('.disabled, :disabled')) return\n\n $parent = getParent($this)\n\n isActive = $parent.hasClass('open')\n\n clearMenus()\n\n if (!isActive) {\n if ('ontouchstart' in document.documentElement) {\n // if mobile we we use a backdrop because click events don't delegate\n $('
    ').insertBefore($(this)).on('click', clearMenus)\n }\n $parent.toggleClass('open')\n }\n\n $this.focus()\n\n return false\n }\n\n , keydown: function (e) {\n var $this\n , $items\n , $active\n , $parent\n , isActive\n , index\n\n if (!/(38|40|27)/.test(e.keyCode)) return\n\n $this = $(this)\n\n e.preventDefault()\n e.stopPropagation()\n\n if ($this.is('.disabled, :disabled')) return\n\n $parent = getParent($this)\n\n isActive = $parent.hasClass('open')\n\n if (!isActive || (isActive && e.keyCode == 27)) {\n if (e.which == 27) $parent.find(toggle).focus()\n return $this.click()\n }\n\n $items = $('[role=menu] li:not(.divider):visible a', $parent)\n\n if (!$items.length) return\n\n index = $items.index($items.filter(':focus'))\n\n if (e.keyCode == 38 && index > 0) index-- // up\n if (e.keyCode == 40 && index < $items.length - 1) index++ // down\n if (!~index) index = 0\n\n $items\n .eq(index)\n .focus()\n }\n\n }\n\n function clearMenus() {\n $('.dropdown-backdrop').remove()\n $(toggle).each(function () {\n getParent($(this)).removeClass('open')\n })\n }\n\n function getParent($this) {\n var selector = $this.attr('data-target')\n , $parent\n\n if (!selector) {\n selector = $this.attr('href')\n // grafana backport fix from bootstrap 3\n selector = selector && /#[A-Za-z]/.test(selector) && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n $parent = selector && $(selector)\n\n if (!$parent || !$parent.length) $parent = $this.parent()\n\n return $parent\n }\n\n\n /* DROPDOWN PLUGIN DEFINITION\n * ========================== */\n\n var old = $.fn.dropdown\n\n $.fn.dropdown = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('dropdown')\n if (!data) $this.data('dropdown', (data = new Dropdown(this)))\n if (typeof option == 'string') data[option].call($this)\n })\n }\n\n $.fn.dropdown.Constructor = Dropdown\n\n\n /* DROPDOWN NO CONFLICT\n * ==================== */\n\n $.fn.dropdown.noConflict = function () {\n $.fn.dropdown = old\n return this\n }\n\n\n /* APPLY TO STANDARD DROPDOWN ELEMENTS\n * =================================== */\n\n $(document)\n .on('click.dropdown.data-api', clearMenus)\n .on('click.dropdown.data-api', '.dropdown form', function (e) { e.stopPropagation() })\n .on('click.dropdown.data-api' , toggle, Dropdown.prototype.toggle)\n .on('keydown.dropdown.data-api', toggle + ', [role=menu]' , Dropdown.prototype.keydown)\n\n}(window.jQuery);\n/* =========================================================\n * bootstrap-modal.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#modals\n * =========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================= */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* MODAL CLASS DEFINITION\n * ====================== */\n\n var Modal = function (element, options) {\n this.options = options\n this.$element = $(element)\n .delegate('[data-dismiss=\"modal\"]', 'click.dismiss.modal', $.proxy(this.hide, this))\n this.options.remote && this.$element.find('.modal-body').load(this.options.remote)\n }\n\n Modal.prototype = {\n\n constructor: Modal\n\n , toggle: function () {\n return this[!this.isShown ? 'show' : 'hide']()\n }\n\n , show: function () {\n var that = this\n , e = $.Event('show')\n\n this.$element.trigger(e)\n\n if (this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = true\n\n this.escape()\n\n this.backdrop(function () {\n var transition = $.support.transition && that.$element.hasClass('fade')\n\n if (!that.$element.parent().length) {\n that.$element.appendTo(document.body) //don't move modals dom position\n }\n\n that.$element.show()\n\n if (transition) {\n that.$element[0].offsetWidth // force reflow\n }\n\n that.$element\n .addClass('in')\n .attr('aria-hidden', false)\n\n that.enforceFocus()\n\n transition ?\n that.$element.one($.support.transition.end, function () { that.$element.focus().trigger('shown') }) :\n that.$element.focus().trigger('shown')\n\n })\n }\n\n , hide: function (e) {\n e && e.preventDefault()\n\n var that = this\n\n e = $.Event('hide')\n\n this.$element.trigger(e)\n\n if (!this.isShown || e.isDefaultPrevented()) return\n\n this.isShown = false\n\n this.escape()\n\n $(document).off('focusin.modal')\n\n this.$element\n .removeClass('in')\n .attr('aria-hidden', true)\n\n $.support.transition && this.$element.hasClass('fade') ?\n this.hideWithTransition() :\n this.hideModal()\n }\n\n , enforceFocus: function () {\n var that = this\n $(document).on('focusin.modal', function (e) {\n if (that.$element[0] !== e.target && !that.$element.has(e.target).length) {\n that.$element.focus()\n }\n })\n }\n\n , escape: function () {\n var that = this\n if (this.isShown && this.options.keyboard) {\n this.$element.on('keyup.dismiss.modal', function ( e ) {\n e.which == 27 && that.hide()\n })\n } else if (!this.isShown) {\n this.$element.off('keyup.dismiss.modal')\n }\n }\n\n , hideWithTransition: function () {\n var that = this\n , timeout = setTimeout(function () {\n that.$element.off($.support.transition.end)\n that.hideModal()\n }, 500)\n\n this.$element.one($.support.transition.end, function () {\n clearTimeout(timeout)\n that.hideModal()\n })\n }\n\n , hideModal: function () {\n var that = this\n this.$element.hide()\n this.backdrop(function () {\n that.removeBackdrop()\n that.$element.trigger('hidden')\n })\n }\n\n , removeBackdrop: function () {\n this.$backdrop && this.$backdrop.remove()\n this.$backdrop = null\n }\n\n , backdrop: function (callback) {\n var that = this\n , animate = this.$element.hasClass('fade') ? 'fade' : ''\n\n if (this.isShown && this.options.backdrop) {\n var doAnimate = $.support.transition && animate\n\n this.$backdrop = $('
    ')\n .appendTo(document.body)\n\n this.$backdrop.click(\n this.options.backdrop == 'static' ?\n $.proxy(this.$element[0].focus, this.$element[0])\n : $.proxy(this.hide, this)\n )\n\n if (doAnimate) this.$backdrop[0].offsetWidth // force reflow\n\n this.$backdrop.addClass('in')\n\n if (!callback) return\n\n doAnimate ?\n this.$backdrop.one($.support.transition.end, callback) :\n callback()\n\n } else if (!this.isShown && this.$backdrop) {\n this.$backdrop.removeClass('in')\n\n $.support.transition && this.$element.hasClass('fade')?\n this.$backdrop.one($.support.transition.end, callback) :\n callback()\n\n } else if (callback) {\n callback()\n }\n }\n }\n\n\n /* MODAL PLUGIN DEFINITION\n * ======================= */\n\n var old = $.fn.modal\n\n $.fn.modal = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('modal')\n , options = $.extend({}, $.fn.modal.defaults, $this.data(), typeof option == 'object' && option)\n if (!data) $this.data('modal', (data = new Modal(this, options)))\n if (typeof option == 'string') data[option]()\n else if (options.show) data.show()\n })\n }\n\n $.fn.modal.defaults = {\n backdrop: true\n , keyboard: true\n , show: true\n }\n\n $.fn.modal.Constructor = Modal\n\n\n /* MODAL NO CONFLICT\n * ================= */\n\n $.fn.modal.noConflict = function () {\n $.fn.modal = old\n return this\n }\n\n\n /* MODAL DATA-API\n * ============== */\n\n $(document).on('click.modal.data-api', '[data-toggle=\"modal\"]', function (e) {\n var $this = $(this)\n , href = $this.attr('href')\n , $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\\s]+$)/, ''))) //strip for ie7\n , option = $target.data('modal') ? 'toggle' : $.extend({ remote:!/#/.test(href) && href }, $target.data(), $this.data())\n\n e.preventDefault()\n\n $target\n .modal(option)\n .one('hide', function () {\n $this.focus()\n })\n })\n\n}(window.jQuery);\n/* ===========================================================\n * bootstrap-tooltip.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#tooltips\n * Inspired by the original jQuery.tipsy by Jason Frame\n * ===========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* TOOLTIP PUBLIC CLASS DEFINITION\n * =============================== */\n\n var Tooltip = function (element, options) {\n this.init('tooltip', element, options)\n }\n\n Tooltip.prototype = {\n\n constructor: Tooltip\n\n , init: function (type, element, options) {\n var eventIn\n , eventOut\n , triggers\n , trigger\n , i\n\n this.type = type\n this.$element = $(element)\n this.options = this.getOptions(options)\n this.enabled = true\n\n triggers = this.options.trigger.split(' ')\n\n for (i = triggers.length; i--;) {\n trigger = triggers[i]\n if (trigger == 'click') {\n this.$element.on('click.' + this.type, this.options.selector, $.proxy(this.toggle, this))\n } else if (trigger != 'manual') {\n eventIn = trigger == 'hover' ? 'mouseenter' : 'focus'\n eventOut = trigger == 'hover' ? 'mouseleave' : 'blur'\n this.$element.on(eventIn + '.' + this.type, this.options.selector, $.proxy(this.enter, this))\n this.$element.on(eventOut + '.' + this.type, this.options.selector, $.proxy(this.leave, this))\n }\n }\n\n this.options.selector ?\n (this._options = $.extend({}, this.options, { trigger: 'manual', selector: '' })) :\n this.fixTitle()\n }\n\n , getOptions: function (options) {\n options = $.extend({}, $.fn[this.type].defaults, this.$element.data(), options)\n\n if (options.delay && typeof options.delay == 'number') {\n options.delay = {\n show: options.delay\n , hide: options.delay\n }\n }\n\n return options\n }\n\n , enter: function (e) {\n var defaults = $.fn[this.type].defaults\n , options = {}\n , self\n\n this._options && $.each(this._options, function (key, value) {\n if (defaults[key] != value) options[key] = value\n }, this)\n\n self = $(e.currentTarget)[this.type](options).data(this.type)\n\n if (!self.options.delay || !self.options.delay.show) return self.show()\n\n clearTimeout(this.timeout)\n self.hoverState = 'in'\n this.timeout = setTimeout(function() {\n if (self.hoverState == 'in') self.show()\n }, self.options.delay.show)\n }\n\n , leave: function (e) {\n var self = $(e.currentTarget)[this.type](this._options).data(this.type)\n\n if (this.timeout) clearTimeout(this.timeout)\n if (!self.options.delay || !self.options.delay.hide) return self.hide()\n\n self.hoverState = 'out'\n this.timeout = setTimeout(function() {\n if (self.hoverState == 'out') self.hide()\n }, self.options.delay.hide)\n }\n\n , show: function () {\n var $tip\n , pos\n , actualWidth\n , actualHeight\n , placement\n , tp\n , e = $.Event('show')\n\n if (this.hasContent() && this.enabled) {\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n $tip = this.tip()\n this.setContent()\n\n if (this.options.animation) {\n $tip.addClass('fade')\n }\n\n placement = typeof this.options.placement == 'function' ?\n this.options.placement.call(this, $tip[0], this.$element[0]) :\n this.options.placement\n\n $tip\n .detach()\n .css({ top: 0, left: 0, display: 'block' })\n\n this.options.container ? $tip.appendTo(this.options.container) : $tip.insertAfter(this.$element)\n\n pos = this.getPosition()\n\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n\n switch (placement) {\n case 'bottom':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - actualWidth / 2}\n break\n case 'top':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - actualWidth / 2}\n break\n case 'left':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left - actualWidth}\n break\n case 'right':\n tp = {top: pos.top + pos.height / 2 - actualHeight / 2, left: pos.left + pos.width}\n break\n\n // extend placements (top)\n case 'topLeft':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - (actualWidth * .10)};\n break;\n case 'topRight':\n tp = {top: pos.top - actualHeight, left: pos.left + pos.width / 2 - (actualWidth * .90)};\n break;\n\n // extend placements (right)\n case 'rightTop':\n tp = {top: pos.top + pos.height / 2 - (actualHeight *.10), left: pos.left + pos.width};\n break;\n case 'rightBottom':\n tp = {top: pos.top + pos.height / 2 - (actualHeight * .90), left: pos.left + pos.width};\n break;\n\n // extend placements (bottom)\n case 'bottomLeft':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - (actualWidth * .10)};\n break;\n case 'bottomRight':\n tp = {top: pos.top + pos.height, left: pos.left + pos.width / 2 - (actualWidth * .90)};\n break;\n\n // extend placements (left)\n case 'leftTop':\n tp = {top: pos.top + pos.height / 2 - (actualHeight *.10), left: pos.left - actualWidth};\n break;\n case 'leftBottom':\n tp = {top: pos.top + pos.height / 2 - (actualHeight * .90), left: pos.left - actualWidth};\n break;\n\n\n }\n\n this.applyPlacement(tp, placement)\n this.$element.trigger('shown')\n }\n }\n\n , applyPlacement: function(offset, placement){\n var $tip = this.tip()\n , width = $tip[0].offsetWidth\n , height = $tip[0].offsetHeight\n , actualWidth\n , actualHeight\n , delta\n , replace\n\n $tip\n .offset(offset)\n .addClass(placement)\n .addClass('in')\n\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n\n if (placement == 'top' && actualHeight != height) {\n offset.top = offset.top + height - actualHeight\n replace = true\n }\n\n if (placement == 'bottom' || placement == 'top') {\n delta = 0\n\n if (offset.left < 0){\n delta = offset.left * -2\n offset.left = 0\n $tip.offset(offset)\n actualWidth = $tip[0].offsetWidth\n actualHeight = $tip[0].offsetHeight\n }\n\n this.replaceArrow(delta - width + actualWidth, actualWidth, 'left')\n } else {\n this.replaceArrow(actualHeight - height, actualHeight, 'top')\n }\n\n if (replace) $tip.offset(offset)\n }\n\n , replaceArrow: function(delta, dimension, position){\n this\n .arrow()\n .css(position, delta ? (50 * (1 - delta / dimension) + \"%\") : '')\n }\n\n , setContent: function () {\n var $tip = this.tip()\n , title = this.getTitle()\n\n $tip.find('.tooltip-inner')[this.options.html ? 'html' : 'text'](title)\n $tip.removeClass('fade in top bottom left right')\n }\n\n , hide: function () {\n var that = this\n , $tip = this.tip()\n , e = $.Event('hide')\n\n this.$element.trigger(e)\n if (e.isDefaultPrevented()) return\n\n $tip.removeClass('in')\n\n function removeWithAnimation() {\n var timeout = setTimeout(function () {\n $tip.off($.support.transition.end).detach()\n }, 500)\n\n $tip.one($.support.transition.end, function () {\n clearTimeout(timeout)\n $tip.detach()\n })\n }\n\n $.support.transition && this.$tip.hasClass('fade') ?\n removeWithAnimation() :\n $tip.detach()\n\n this.$element.trigger('hidden')\n\n return this\n }\n\n , fixTitle: function () {\n var $e = this.$element\n if ($e.attr('title') || typeof($e.attr('data-original-title')) != 'string') {\n $e.attr('data-original-title', $e.attr('title') || '').attr('title', '')\n }\n }\n\n , hasContent: function () {\n return this.getTitle()\n }\n\n , getPosition: function () {\n var el = this.$element[0]\n return $.extend({}, (typeof el.getBoundingClientRect == 'function') ? el.getBoundingClientRect() : {\n width: el.offsetWidth\n , height: el.offsetHeight\n }, this.$element.offset())\n }\n\n , getTitle: function () {\n var title\n , $e = this.$element\n , o = this.options\n\n title = $e.attr('data-original-title')\n || (typeof o.title == 'function' ? o.title.call($e[0]) : o.title)\n\n return title\n }\n\n , tip: function () {\n return this.$tip = this.$tip || $(this.options.template)\n }\n\n , arrow: function(){\n return this.$arrow = this.$arrow || this.tip().find(\".tooltip-arrow\")\n }\n\n , validate: function () {\n if (!this.$element[0].parentNode) {\n this.hide()\n this.$element = null\n this.options = null\n }\n }\n\n , enable: function () {\n this.enabled = true\n }\n\n , disable: function () {\n this.enabled = false\n }\n\n , toggleEnabled: function () {\n this.enabled = !this.enabled\n }\n\n , toggle: function (e) {\n var self = e ? $(e.currentTarget)[this.type](this._options).data(this.type) : this\n self.tip().hasClass('in') ? self.hide() : self.show()\n }\n\n , destroy: function () {\n this.hide().$element.off('.' + this.type).removeData(this.type)\n }\n\n }\n\n\n /* TOOLTIP PLUGIN DEFINITION\n * ========================= */\n\n var old = $.fn.tooltip\n\n $.fn.tooltip = function ( option ) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('tooltip')\n , options = typeof option == 'object' && option\n if (!data) $this.data('tooltip', (data = new Tooltip(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tooltip.Constructor = Tooltip\n\n $.fn.tooltip.defaults = {\n animation: true\n , placement: 'top'\n , selector: false\n , template: '
    '\n , trigger: 'hover focus'\n , title: ''\n , delay: 0\n , html: false\n , container: false\n }\n\n\n /* TOOLTIP NO CONFLICT\n * =================== */\n\n $.fn.tooltip.noConflict = function () {\n $.fn.tooltip = old\n return this\n }\n\n}(window.jQuery);\n\n/* ========================================================\n * bootstrap-tab.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#tabs\n * ========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ======================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* TAB CLASS DEFINITION\n * ==================== */\n\n var Tab = function (element) {\n this.element = $(element)\n }\n\n Tab.prototype = {\n\n constructor: Tab\n\n , show: function () {\n var $this = this.element\n , $ul = $this.closest('ul:not(.dropdown-menu)')\n , selector = $this.attr('data-target')\n , previous\n , $target\n , e\n\n if (!selector) {\n selector = $this.attr('href')\n selector = selector && selector.replace(/.*(?=#[^\\s]*$)/, '') //strip for ie7\n }\n\n if ( $this.parent('li').hasClass('active') ) return\n\n previous = $ul.find('.active:last a')[0]\n\n e = $.Event('show', {\n relatedTarget: previous\n })\n\n $this.trigger(e)\n\n if (e.isDefaultPrevented()) return\n\n $target = $(selector)\n\n this.activate($this.parent('li'), $ul)\n this.activate($target, $target.parent(), function () {\n $this.trigger({\n type: 'shown'\n , relatedTarget: previous\n })\n })\n }\n\n , activate: function ( element, container, callback) {\n var $active = container.find('> .active')\n , transition = callback\n && $.support.transition\n && $active.hasClass('fade')\n\n function next() {\n $active\n .removeClass('active')\n .find('> .dropdown-menu > .active')\n .removeClass('active')\n\n element.addClass('active')\n\n if (transition) {\n element[0].offsetWidth // reflow for transition\n element.addClass('in')\n } else {\n element.removeClass('fade')\n }\n\n if ( element.parent('.dropdown-menu') ) {\n element.closest('li.dropdown').addClass('active')\n }\n\n callback && callback()\n }\n\n transition ?\n $active.one($.support.transition.end, next) :\n next()\n\n $active.removeClass('in')\n }\n }\n\n\n /* TAB PLUGIN DEFINITION\n * ===================== */\n\n var old = $.fn.tab\n\n $.fn.tab = function ( option ) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('tab')\n if (!data) $this.data('tab', (data = new Tab(this)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.tab.Constructor = Tab\n\n\n /* TAB NO CONFLICT\n * =============== */\n\n $.fn.tab.noConflict = function () {\n $.fn.tab = old\n return this\n }\n\n\n /* TAB DATA-API\n * ============ */\n\n $(document).on('click.tab.data-api', '[data-toggle=\"tab\"], [data-toggle=\"pill\"]', function (e) {\n e.preventDefault()\n $(this).tab('show')\n })\n\n}(window.jQuery);/* =============================================================\n * bootstrap-typeahead.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#typeahead\n * =============================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ============================================================ */\n\n\n!function($){\n\n \"use strict\"; // jshint ;_;\n\n\n /* TYPEAHEAD PUBLIC CLASS DEFINITION\n * ================================= */\n\n var Typeahead = function (element, options) {\n this.$element = $(element)\n this.options = $.extend({}, $.fn.typeahead.defaults, options)\n this.matcher = this.options.matcher || this.matcher\n this.sorter = this.options.sorter || this.sorter\n this.highlighter = this.options.highlighter || this.highlighter\n this.updater = this.options.updater || this.updater\n this.source = this.options.source\n this.$menu = $(this.options.menu)\n this.shown = false\n this.listen()\n }\n\n Typeahead.prototype = {\n\n constructor: Typeahead\n\n , select: function () {\n // CHANGE (rashidkpc) If nothing is selected, use existing value\n var val = this.$menu.find('.active').attr('data-value') || this.$element.val();\n this.$element\n .val(this.updater(val))\n .change()\n return this.hide()\n }\n\n , updater: function (item) {\n return item\n }\n\n , show: function () {\n var pos = $.extend({}, this.$element.position(), {\n height: this.$element[0].offsetHeight\n })\n\n this.$menu\n .insertAfter(this.$element)\n .css({\n top: pos.top + pos.height\n , left: pos.left\n })\n .show()\n\n this.shown = true\n return this\n }\n\n , hide: function () {\n this.$menu.hide()\n this.shown = false\n return this\n }\n\n , lookup: function (event) {\n var items\n\n this.query = this.$element.val()\n\n if (!this.query || this.query.length < this.options.minLength) {\n return this.shown ? this.hide() : this\n }\n\n items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source\n\n return items ? this.process(items) : this\n }\n\n , process: function (items) {\n var that = this\n\n items = $.grep(items, function (item) {\n return that.matcher(item)\n })\n\n items = this.sorter(items)\n\n if (!items.length) {\n return this.shown ? this.hide() : this\n }\n\n return this.render(items.slice(0, this.options.items)).show()\n }\n\n , matcher: function (item) {\n return ~item.toLowerCase().indexOf(this.query.toLowerCase())\n }\n\n , sorter: function (items) {\n var beginswith = []\n , caseSensitive = []\n , caseInsensitive = []\n , item\n\n while (item = items.shift()) {\n if (!item.toLowerCase().indexOf(this.query.toLowerCase())) beginswith.push(item)\n else if (~item.indexOf(this.query)) caseSensitive.push(item)\n else caseInsensitive.push(item)\n }\n\n return beginswith.concat(caseSensitive, caseInsensitive)\n }\n\n , highlighter: function (item) {\n var query = this.query.replace(/[\\-\\[\\]{}()*+?.,\\\\\\^$|#\\s]/g, '\\\\$&')\n if (!query) {\n return item;\n }\n return item.replace(new RegExp('(' + query + ')', 'ig'), function ($1, match) {\n return '' + match + ''\n });\n }\n\n , render: function (items) {\n var that = this\n\n items = $(items).map(function (i, item) {\n i = $(that.options.item).attr('data-value', item)\n i.find('a').html(that.highlighter(item))\n return i[0]\n })\n\n // CHANGE (rashidpc) Do not select first element by default\n // items.first().addClass('active')\n this.$menu.html(items)\n return this\n }\n\n , next: function (event) {\n var active = this.$menu.find('.active').removeClass('active')\n , next = active.next()\n\n if (!next.length) {\n next = $(this.$menu.find('li')[0])\n }\n\n next.addClass('active')\n }\n\n , prev: function (event) {\n var active = this.$menu.find('.active').removeClass('active')\n , prev = active.prev()\n\n if (!prev.length) {\n prev = this.$menu.find('li').last()\n }\n\n prev.addClass('active')\n }\n\n , listen: function () {\n this.$element\n .on('focus', $.proxy(this.focus, this))\n .on('blur', $.proxy(this.blur, this))\n .on('keypress', $.proxy(this.keypress, this))\n .on('keyup', $.proxy(this.keyup, this))\n\n if (this.eventSupported('keydown')) {\n this.$element.on('keydown', $.proxy(this.keydown, this))\n }\n\n this.$menu\n .on('click', $.proxy(this.click, this))\n .on('mouseenter', 'li', $.proxy(this.mouseenter, this))\n .on('mouseleave', 'li', $.proxy(this.mouseleave, this))\n },\n\n destroy: function () {\n this.$element.off().removeData('typeahead');\n this.$menu.off();\n }\n\n , eventSupported: function(eventName) {\n var isSupported = eventName in this.$element\n if (!isSupported) {\n this.$element.setAttribute(eventName, 'return;')\n isSupported = typeof this.$element[eventName] === 'function'\n }\n return isSupported\n }\n\n , move: function (e) {\n if (!this.shown) return\n\n // grafana change, shift+left parenthesis\n if (e.shiftKey && e.keyCode === 40) {\n return;\n }\n\n switch(e.keyCode) {\n case 9: // tab\n case 13: // enter\n case 27: // escape\n e.preventDefault()\n break\n\n case 38: // up arrow\n e.preventDefault()\n this.prev()\n break\n\n case 40: // down arrow\n e.preventDefault()\n this.next()\n break\n }\n\n e.stopPropagation()\n }\n\n , keydown: function (e) {\n this.suppressKeyPressRepeat = ~$.inArray(e.keyCode, [40,38,9,13,27,57])\n this.move(e)\n }\n\n , keypress: function (e) {\n if (this.suppressKeyPressRepeat) return\n this.move(e)\n }\n\n , keyup: function (e) {\n switch(e.keyCode) {\n case 40: // down arrow\n case 38: // up arrow\n case 16: // shift\n case 17: // ctrl\n case 18: // alt\n break\n\n case 9: // tab\n case 13: // enter\n if (!this.shown) return\n this.select()\n break\n\n case 27: // escape\n if (!this.shown) return\n this.hide()\n break\n\n default:\n this.lookup();\n }\n\n if(e.keyCode === 13 && typeof this.$menu.find('.active').attr('data-value') === 'undefined') {\n // CHANGE (rashidkpc). Enter was hit, nothing was selected from typeahead, submit form\n this.$element.submit();\n } else {\n e.stopPropagation()\n e.preventDefault()\n }\n\n }\n\n , focus: function (e) {\n this.focused = true\n }\n\n , blur: function (e) {\n this.focused = false\n if (!this.mousedover && this.shown) this.hide()\n }\n\n , click: function (e) {\n e.stopPropagation()\n e.preventDefault()\n this.select()\n this.$element.focus()\n }\n\n , mouseenter: function (e) {\n this.mousedover = true\n this.$menu.find('.active').removeClass('active')\n $(e.currentTarget).addClass('active')\n }\n\n , mouseleave: function (e) {\n this.mousedover = false\n if (!this.focused && this.shown) this.hide()\n }\n\n }\n\n\n /* TYPEAHEAD PLUGIN DEFINITION\n * =========================== */\n\n var old = $.fn.typeahead\n\n $.fn.typeahead = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('typeahead')\n , options = typeof option == 'object' && option\n if (!data) $this.data('typeahead', (data = new Typeahead(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.typeahead.defaults = {\n source: []\n , items: 8\n , menu: '
      '\n , item: '
    • '\n , minLength: 1\n }\n\n $.fn.typeahead.Constructor = Typeahead\n\n\n /* TYPEAHEAD NO CONFLICT\n * =================== */\n\n $.fn.typeahead.noConflict = function () {\n $.fn.typeahead = old\n return this\n }\n\n\n /* TYPEAHEAD DATA-API\n * ================== */\n\n $(document).on('focus.typeahead.data-api', '[data-provide=\"typeahead\"]', function (e) {\n var $this = $(this)\n if ($this.data('typeahead')) return\n $this.typeahead($this.data())\n })\n\n}(window.jQuery);\n/* ==========================================================\n * bootstrap-affix.js v2.3.2\n * http://getbootstrap.com/2.3.2/javascript.html#affix\n * ==========================================================\n * Copyright 2013 Twitter, Inc.\n *\n * Licensed under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License.\n * You may obtain a copy of the License at\n *\n * http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software\n * distributed under the License is distributed on an \"AS IS\" BASIS,\n * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n * See the License for the specific language governing permissions and\n * limitations under the License.\n * ========================================================== */\n\n\n!function ($) {\n\n \"use strict\"; // jshint ;_;\n\n\n /* AFFIX CLASS DEFINITION\n * ====================== */\n\n var Affix = function (element, options) {\n this.options = $.extend({}, $.fn.affix.defaults, options)\n this.$window = $(window)\n .on('scroll.affix.data-api', $.proxy(this.checkPosition, this))\n .on('click.affix.data-api', $.proxy(function () { setTimeout($.proxy(this.checkPosition, this), 1) }, this))\n this.$element = $(element)\n this.checkPosition()\n }\n\n Affix.prototype.checkPosition = function () {\n if (!this.$element.is(':visible')) return\n\n var scrollHeight = $(document).height()\n , scrollTop = this.$window.scrollTop()\n , position = this.$element.offset()\n , offset = this.options.offset\n , offsetBottom = offset.bottom\n , offsetTop = offset.top\n , reset = 'affix affix-top affix-bottom'\n , affix\n\n if (typeof offset != 'object') offsetBottom = offsetTop = offset\n if (typeof offsetTop == 'function') offsetTop = offset.top()\n if (typeof offsetBottom == 'function') offsetBottom = offset.bottom()\n\n affix = this.unpin != null && (scrollTop + this.unpin <= position.top) ?\n false : offsetBottom != null && (position.top + this.$element.height() >= scrollHeight - offsetBottom) ?\n 'bottom' : offsetTop != null && scrollTop <= offsetTop ?\n 'top' : false\n\n if (this.affixed === affix) return\n\n this.affixed = affix\n this.unpin = affix == 'bottom' ? position.top - scrollTop : null\n\n this.$element.removeClass(reset).addClass('affix' + (affix ? '-' + affix : ''))\n }\n\n\n /* AFFIX PLUGIN DEFINITION\n * ======================= */\n\n var old = $.fn.affix\n\n $.fn.affix = function (option) {\n return this.each(function () {\n var $this = $(this)\n , data = $this.data('affix')\n , options = typeof option == 'object' && option\n if (!data) $this.data('affix', (data = new Affix(this, options)))\n if (typeof option == 'string') data[option]()\n })\n }\n\n $.fn.affix.Constructor = Affix\n\n $.fn.affix.defaults = {\n offset: 0\n }\n\n\n /* AFFIX NO CONFLICT\n * ================= */\n\n $.fn.affix.noConflict = function () {\n $.fn.affix = old\n return this\n }\n\n\n /* AFFIX DATA-API\n * ============== */\n\n $(window).on('load', function () {\n $('[data-spy=\"affix\"]').each(function () {\n var $spy = $(this)\n , data = $spy.data()\n\n data.offset = data.offset || {}\n\n data.offsetBottom && (data.offset.bottom = data.offsetBottom)\n data.offsetTop && (data.offset.top = data.offsetTop)\n\n $spy.affix(data)\n })\n })\n\n\n}(window.jQuery);\n","/*\n * angular-ui-bootstrap\n * http://angular-ui.github.io/bootstrap/\n\n * Version: 0.13.4 - 2015-09-03\n * License: MIT\n */\nangular.module(\"ui.bootstrap\", [\"ui.bootstrap.tpls\",\"ui.bootstrap.position\",\"ui.bootstrap.dateparser\",\"ui.bootstrap.datepicker\"]);\nangular.module(\"ui.bootstrap.tpls\", [\"template/datepicker/datepicker.html\",\"template/datepicker/day.html\",\"template/datepicker/month.html\",\"template/datepicker/popup.html\",\"template/datepicker/year.html\"]);\nangular.module('ui.bootstrap.position', [])\n\n/**\n * A set of utility methods that can be use to retrieve position of DOM elements.\n * It is meant to be used where we need to absolute-position DOM elements in\n * relation to other, existing elements (this is the case for tooltips, popovers,\n * typeahead suggestions etc.).\n */\n .factory('$position', ['$document', '$window', function($document, $window) {\n function getStyle(el, cssprop) {\n if (el.currentStyle) { //IE\n return el.currentStyle[cssprop];\n } else if ($window.getComputedStyle) {\n return $window.getComputedStyle(el)[cssprop];\n }\n // finally try and get inline style\n return el.style[cssprop];\n }\n\n /**\n * Checks if a given element is statically positioned\n * @param element - raw DOM element\n */\n function isStaticPositioned(element) {\n return (getStyle(element, 'position') || 'static' ) === 'static';\n }\n\n /**\n * returns the closest, non-statically positioned parentOffset of a given element\n * @param element\n */\n var parentOffsetEl = function(element) {\n var docDomEl = $document[0];\n var offsetParent = element.offsetParent || docDomEl;\n while (offsetParent && offsetParent !== docDomEl && isStaticPositioned(offsetParent) ) {\n offsetParent = offsetParent.offsetParent;\n }\n return offsetParent || docDomEl;\n };\n\n return {\n /**\n * Provides read-only equivalent of jQuery's position function:\n * http://api.jquery.com/position/\n */\n position: function(element) {\n var elBCR = this.offset(element);\n var offsetParentBCR = { top: 0, left: 0 };\n var offsetParentEl = parentOffsetEl(element[0]);\n if (offsetParentEl != $document[0]) {\n offsetParentBCR = this.offset(angular.element(offsetParentEl));\n offsetParentBCR.top += offsetParentEl.clientTop - offsetParentEl.scrollTop;\n offsetParentBCR.left += offsetParentEl.clientLeft - offsetParentEl.scrollLeft;\n }\n\n var boundingClientRect = element[0].getBoundingClientRect();\n return {\n width: boundingClientRect.width || element.prop('offsetWidth'),\n height: boundingClientRect.height || element.prop('offsetHeight'),\n top: elBCR.top - offsetParentBCR.top,\n left: elBCR.left - offsetParentBCR.left\n };\n },\n\n /**\n * Provides read-only equivalent of jQuery's offset function:\n * http://api.jquery.com/offset/\n */\n offset: function(element) {\n var boundingClientRect = element[0].getBoundingClientRect();\n return {\n width: boundingClientRect.width || element.prop('offsetWidth'),\n height: boundingClientRect.height || element.prop('offsetHeight'),\n top: boundingClientRect.top + ($window.pageYOffset || $document[0].documentElement.scrollTop),\n left: boundingClientRect.left + ($window.pageXOffset || $document[0].documentElement.scrollLeft)\n };\n },\n\n /**\n * Provides coordinates for the targetEl in relation to hostEl\n */\n positionElements: function(hostEl, targetEl, positionStr, appendToBody) {\n var positionStrParts = positionStr.split('-');\n var pos0 = positionStrParts[0], pos1 = positionStrParts[1] || 'center';\n\n var hostElPos,\n targetElWidth,\n targetElHeight,\n targetElPos;\n\n hostElPos = appendToBody ? this.offset(hostEl) : this.position(hostEl);\n\n targetElWidth = targetEl.prop('offsetWidth');\n targetElHeight = targetEl.prop('offsetHeight');\n\n var shiftWidth = {\n center: function() {\n return hostElPos.left + hostElPos.width / 2 - targetElWidth / 2;\n },\n left: function() {\n return hostElPos.left;\n },\n right: function() {\n return hostElPos.left + hostElPos.width;\n }\n };\n\n var shiftHeight = {\n center: function() {\n return hostElPos.top + hostElPos.height / 2 - targetElHeight / 2;\n },\n top: function() {\n return hostElPos.top;\n },\n bottom: function() {\n return hostElPos.top + hostElPos.height;\n }\n };\n\n switch (pos0) {\n case 'right':\n targetElPos = {\n top: shiftHeight[pos1](),\n left: shiftWidth[pos0]()\n };\n break;\n case 'left':\n targetElPos = {\n top: shiftHeight[pos1](),\n left: hostElPos.left - targetElWidth\n };\n break;\n case 'bottom':\n targetElPos = {\n top: shiftHeight[pos0](),\n left: shiftWidth[pos1]()\n };\n break;\n default:\n targetElPos = {\n top: hostElPos.top - targetElHeight,\n left: shiftWidth[pos1]()\n };\n break;\n }\n\n return targetElPos;\n }\n };\n }]);\n\nangular.module('ui.bootstrap.dateparser', [])\n\n.service('dateParser', ['$log', '$locale', 'orderByFilter', function($log, $locale, orderByFilter) {\n // Pulled from https://github.com/mbostock/d3/blob/master/src/format/requote.js\n var SPECIAL_CHARACTERS_REGEXP = /[\\\\\\^\\$\\*\\+\\?\\|\\[\\]\\(\\)\\.\\{\\}]/g;\n\n this.parsers = {};\n\n var formatCodeToRegex = {\n 'yyyy': {\n regex: '\\\\d{4}',\n apply: function(value) { this.year = +value; }\n },\n 'yy': {\n regex: '\\\\d{2}',\n apply: function(value) { this.year = +value + 2000; }\n },\n 'y': {\n regex: '\\\\d{1,4}',\n apply: function(value) { this.year = +value; }\n },\n 'MMMM': {\n regex: $locale.DATETIME_FORMATS.MONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.MONTH.indexOf(value); }\n },\n 'MMM': {\n regex: $locale.DATETIME_FORMATS.SHORTMONTH.join('|'),\n apply: function(value) { this.month = $locale.DATETIME_FORMATS.SHORTMONTH.indexOf(value); }\n },\n 'MM': {\n regex: '0[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; }\n },\n 'M': {\n regex: '[1-9]|1[0-2]',\n apply: function(value) { this.month = value - 1; }\n },\n 'dd': {\n regex: '[0-2][0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; }\n },\n 'd': {\n regex: '[1-2]?[0-9]{1}|3[0-1]{1}',\n apply: function(value) { this.date = +value; }\n },\n 'EEEE': {\n regex: $locale.DATETIME_FORMATS.DAY.join('|')\n },\n 'EEE': {\n regex: $locale.DATETIME_FORMATS.SHORTDAY.join('|')\n },\n 'HH': {\n regex: '(?:0|1)[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; }\n },\n 'hh': {\n regex: '0[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; }\n },\n 'H': {\n regex: '1?[0-9]|2[0-3]',\n apply: function(value) { this.hours = +value; }\n },\n 'h': {\n regex: '[0-9]|1[0-2]',\n apply: function(value) { this.hours = +value; }\n },\n 'mm': {\n regex: '[0-5][0-9]',\n apply: function(value) { this.minutes = +value; }\n },\n 'm': {\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.minutes = +value; }\n },\n 'sss': {\n regex: '[0-9][0-9][0-9]',\n apply: function(value) { this.milliseconds = +value; }\n },\n 'ss': {\n regex: '[0-5][0-9]',\n apply: function(value) { this.seconds = +value; }\n },\n 's': {\n regex: '[0-9]|[1-5][0-9]',\n apply: function(value) { this.seconds = +value; }\n },\n 'a': {\n regex: $locale.DATETIME_FORMATS.AMPMS.join('|'),\n apply: function(value) {\n if (this.hours === 12) {\n this.hours = 0;\n }\n\n if (value === 'PM') {\n this.hours += 12;\n }\n }\n }\n };\n\n function createParser(format) {\n var map = [], regex = format.split('');\n\n angular.forEach(formatCodeToRegex, function(data, code) {\n var index = format.indexOf(code);\n\n if (index > -1) {\n format = format.split('');\n\n regex[index] = '(' + data.regex + ')';\n format[index] = '$'; // Custom symbol to define consumed part of format\n for (var i = index + 1, n = index + code.length; i < n; i++) {\n regex[i] = '';\n format[i] = '$';\n }\n format = format.join('');\n\n map.push({ index: index, apply: data.apply });\n }\n });\n\n return {\n regex: new RegExp('^' + regex.join('') + '$'),\n map: orderByFilter(map, 'index')\n };\n }\n\n this.parse = function(input, format, baseDate) {\n if (!angular.isString(input) || !format) {\n return input;\n }\n\n format = $locale.DATETIME_FORMATS[format] || format;\n format = format.replace(SPECIAL_CHARACTERS_REGEXP, '\\\\$&');\n\n if (!this.parsers[format]) {\n this.parsers[format] = createParser(format);\n }\n\n var parser = this.parsers[format],\n regex = parser.regex,\n map = parser.map,\n results = input.match(regex);\n\n if (results && results.length) {\n var fields, dt;\n if (angular.isDate(baseDate) && !isNaN(baseDate.getTime())) {\n fields = {\n year: baseDate.getFullYear(),\n month: baseDate.getMonth(),\n date: baseDate.getDate(),\n hours: baseDate.getHours(),\n minutes: baseDate.getMinutes(),\n seconds: baseDate.getSeconds(),\n milliseconds: baseDate.getMilliseconds()\n };\n } else {\n if (baseDate) {\n $log.warn('dateparser:', 'baseDate is not a valid date');\n }\n fields = { year: 1900, month: 0, date: 1, hours: 0, minutes: 0, seconds: 0, milliseconds: 0 };\n }\n\n for (var i = 1, n = results.length; i < n; i++) {\n var mapper = map[i-1];\n if (mapper.apply) {\n mapper.apply.call(fields, results[i]);\n }\n }\n\n if (isValid(fields.year, fields.month, fields.date)) {\n dt = new Date(fields.year, fields.month, fields.date,\n fields.hours, fields.minutes, fields.seconds,\n fields.milliseconds || 0);\n }\n\n return dt;\n }\n };\n\n // Check if date is valid for specific month (and year for February).\n // Month: 0 = Jan, 1 = Feb, etc\n function isValid(year, month, date) {\n if (date < 1) {\n return false;\n }\n\n if (month === 1 && date > 28) {\n return date === 29 && ((year % 4 === 0 && year % 100 !== 0) || year % 400 === 0);\n }\n\n if (month === 3 || month === 5 || month === 8 || month === 10) {\n return date < 31;\n }\n\n return true;\n }\n}]);\n\nangular.module('ui.bootstrap.datepicker', ['ui.bootstrap.dateparser', 'ui.bootstrap.position'])\n\n.value('$datepickerSuppressError', false)\n\n.constant('datepickerConfig', {\n formatDay: 'dd',\n formatMonth: 'MMMM',\n formatYear: 'yyyy',\n formatDayHeader: 'EEE',\n formatDayTitle: 'MMMM yyyy',\n formatMonthTitle: 'yyyy',\n datepickerMode: 'day',\n minMode: 'day',\n maxMode: 'year',\n showWeeks: true,\n startingDay: 0,\n yearRange: 20,\n minDate: null,\n maxDate: null,\n shortcutPropagation: false\n})\n\n.controller('DatepickerController', ['$scope', '$attrs', '$parse', '$interpolate', '$log', 'dateFilter', 'datepickerConfig', '$datepickerSuppressError', function($scope, $attrs, $parse, $interpolate, $log, dateFilter, datepickerConfig, $datepickerSuppressError) {\n var self = this,\n ngModelCtrl = { $setViewValue: angular.noop }; // nullModelCtrl;\n\n // Modes chain\n this.modes = ['day', 'month', 'year'];\n\n // Configuration attributes\n angular.forEach(['formatDay', 'formatMonth', 'formatYear', 'formatDayHeader', 'formatDayTitle', 'formatMonthTitle',\n 'showWeeks', 'startingDay', 'yearRange', 'shortcutPropagation'], function(key, index) {\n self[key] = angular.isDefined($attrs[key]) ? (index < 6 ? $interpolate($attrs[key])($scope.$parent) : $scope.$parent.$eval($attrs[key])) : datepickerConfig[key];\n });\n\n // Watchable date attributes\n angular.forEach(['minDate', 'maxDate'], function(key) {\n if ($attrs[key]) {\n $scope.$parent.$watch($parse($attrs[key]), function(value) {\n self[key] = value ? new Date(value) : null;\n self.refreshView();\n });\n } else {\n self[key] = datepickerConfig[key] ? new Date(datepickerConfig[key]) : null;\n }\n });\n\n angular.forEach(['minMode', 'maxMode'], function(key) {\n if ($attrs[key]) {\n $scope.$parent.$watch($parse($attrs[key]), function(value) {\n self[key] = angular.isDefined(value) ? value : $attrs[key];\n $scope[key] = self[key];\n if ((key == 'minMode' && self.modes.indexOf($scope.datepickerMode) < self.modes.indexOf(self[key])) || (key == 'maxMode' && self.modes.indexOf($scope.datepickerMode) > self.modes.indexOf(self[key]))) {\n $scope.datepickerMode = self[key];\n }\n });\n } else {\n self[key] = datepickerConfig[key] || null;\n $scope[key] = self[key];\n }\n });\n\n $scope.datepickerMode = $scope.datepickerMode || datepickerConfig.datepickerMode;\n $scope.uniqueId = 'datepicker-' + $scope.$id + '-' + Math.floor(Math.random() * 10000);\n\n if (angular.isDefined($attrs.initDate)) {\n this.activeDate = $scope.$parent.$eval($attrs.initDate) || new Date();\n $scope.$parent.$watch($attrs.initDate, function(initDate) {\n if (initDate && (ngModelCtrl.$isEmpty(ngModelCtrl.$modelValue) || ngModelCtrl.$invalid)) {\n self.activeDate = initDate;\n self.refreshView();\n }\n });\n } else {\n this.activeDate = new Date();\n }\n\n $scope.isActive = function(dateObject) {\n if (self.compare(dateObject.date, self.activeDate) === 0) {\n $scope.activeDateId = dateObject.uid;\n return true;\n }\n return false;\n };\n\n this.init = function(ngModelCtrl_) {\n ngModelCtrl = ngModelCtrl_;\n\n ngModelCtrl.$render = function() {\n self.render();\n };\n };\n\n this.render = function() {\n if (ngModelCtrl.$viewValue) {\n var date = new Date(ngModelCtrl.$viewValue),\n isValid = !isNaN(date);\n\n if (isValid) {\n this.activeDate = date;\n } else if (!$datepickerSuppressError) {\n $log.error('Datepicker directive: \"ng-model\" value must be a Date object, a number of milliseconds since 01.01.1970 or a string representing an RFC2822 or ISO 8601 date.');\n }\n }\n this.refreshView();\n };\n\n this.refreshView = function() {\n if (this.element) {\n this._refreshView();\n\n var date = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n ngModelCtrl.$setValidity('dateDisabled', !date || (this.element && !this.isDisabled(date)));\n }\n };\n\n this.createDateObject = function(date, format) {\n var model = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : null;\n return {\n date: date,\n label: dateFilter(date, format),\n selected: model && this.compare(date, model) === 0,\n disabled: this.isDisabled(date),\n current: this.compare(date, new Date()) === 0,\n customClass: this.customClass(date)\n };\n };\n\n this.isDisabled = function(date) {\n return ((this.minDate && this.compare(date, this.minDate) < 0) || (this.maxDate && this.compare(date, this.maxDate) > 0) || ($attrs.dateDisabled && $scope.dateDisabled({date: date, mode: $scope.datepickerMode})));\n };\n\n this.customClass = function(date) {\n return $scope.customClass({date: date, mode: $scope.datepickerMode});\n };\n\n // Split array into smaller arrays\n this.split = function(arr, size) {\n var arrays = [];\n while (arr.length > 0) {\n arrays.push(arr.splice(0, size));\n }\n return arrays;\n };\n\n // Fix a hard-reprodusible bug with timezones\n // The bug depends on OS, browser, current timezone and current date\n // i.e.\n // var date = new Date(2014, 0, 1);\n // console.log(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours());\n // can result in \"2013 11 31 23\" because of the bug.\n this.fixTimeZone = function(date) {\n var hours = date.getHours();\n date.setHours(hours === 23 ? hours + 2 : 0);\n };\n\n $scope.select = function(date) {\n if ($scope.datepickerMode === self.minMode) {\n var dt = ngModelCtrl.$viewValue ? new Date(ngModelCtrl.$viewValue) : new Date(0, 0, 0, 0, 0, 0, 0);\n dt.setFullYear(date.getFullYear(), date.getMonth(), date.getDate());\n ngModelCtrl.$setViewValue(dt);\n ngModelCtrl.$render();\n } else {\n self.activeDate = date;\n $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) - 1];\n }\n };\n\n $scope.move = function(direction) {\n var year = self.activeDate.getFullYear() + direction * (self.step.years || 0),\n month = self.activeDate.getMonth() + direction * (self.step.months || 0);\n self.activeDate.setFullYear(year, month, 1);\n self.refreshView();\n };\n\n $scope.toggleMode = function(direction) {\n direction = direction || 1;\n\n if (($scope.datepickerMode === self.maxMode && direction === 1) || ($scope.datepickerMode === self.minMode && direction === -1)) {\n return;\n }\n\n $scope.datepickerMode = self.modes[self.modes.indexOf($scope.datepickerMode) + direction];\n };\n\n // Key event mapper\n $scope.keys = { 13: 'enter', 32: 'space', 33: 'pageup', 34: 'pagedown', 35: 'end', 36: 'home', 37: 'left', 38: 'up', 39: 'right', 40: 'down' };\n\n var focusElement = function() {\n self.element[0].focus();\n };\n\n // Listen for focus requests from popup directive\n $scope.$on('datepicker.focus', focusElement);\n\n $scope.keydown = function(evt) {\n var key = $scope.keys[evt.which];\n\n if (!key || evt.shiftKey || evt.altKey) {\n return;\n }\n\n evt.preventDefault();\n if (!self.shortcutPropagation) {\n evt.stopPropagation();\n }\n\n if (key === 'enter' || key === 'space') {\n if (self.isDisabled(self.activeDate)) {\n return; // do nothing\n }\n $scope.select(self.activeDate);\n focusElement();\n } else if (evt.ctrlKey && (key === 'up' || key === 'down')) {\n $scope.toggleMode(key === 'up' ? 1 : -1);\n focusElement();\n } else {\n self.handleKeyDown(key, evt);\n self.refreshView();\n }\n };\n}])\n\n.directive('datepicker', function() {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'template/datepicker/datepicker.html';\n },\n scope: {\n datepickerMode: '=?',\n dateDisabled: '&',\n customClass: '&',\n shortcutPropagation: '&?'\n },\n require: ['datepicker', '^ngModel'],\n controller: 'DatepickerController',\n controllerAs: 'datepicker',\n link: function(scope, element, attrs, ctrls) {\n var datepickerCtrl = ctrls[0], ngModelCtrl = ctrls[1];\n\n datepickerCtrl.init(ngModelCtrl);\n }\n };\n})\n\n.directive('daypicker', ['dateFilter', function(dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/day.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n scope.showWeeks = ctrl.showWeeks;\n\n ctrl.step = { months: 1 };\n ctrl.element = element;\n\n var DAYS_IN_MONTH = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];\n function getDaysInMonth(year, month) {\n return ((month === 1) && (year % 4 === 0) && ((year % 100 !== 0) || (year % 400 === 0))) ? 29 : DAYS_IN_MONTH[month];\n }\n\n function getDates(startDate, n) {\n var dates = new Array(n), current = new Date(startDate), i = 0, date;\n while (i < n) {\n date = new Date(current);\n ctrl.fixTimeZone(date);\n dates[i++] = date;\n current.setDate(current.getDate() + 1);\n }\n return dates;\n }\n\n ctrl._refreshView = function() {\n var year = ctrl.activeDate.getFullYear(),\n month = ctrl.activeDate.getMonth(),\n firstDayOfMonth = new Date(year, month, 1),\n difference = ctrl.startingDay - firstDayOfMonth.getDay(),\n numDisplayedFromPreviousMonth = (difference > 0) ? 7 - difference : - difference,\n firstDate = new Date(firstDayOfMonth);\n\n if (numDisplayedFromPreviousMonth > 0) {\n firstDate.setDate(-numDisplayedFromPreviousMonth + 1);\n }\n\n // 42 is the number of days on a six-month calendar\n var days = getDates(firstDate, 42);\n for (var i = 0; i < 42; i ++) {\n days[i] = angular.extend(ctrl.createDateObject(days[i], ctrl.formatDay), {\n secondary: days[i].getMonth() !== month,\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.labels = new Array(7);\n for (var j = 0; j < 7; j++) {\n scope.labels[j] = {\n abbr: dateFilter(days[j].date, ctrl.formatDayHeader),\n full: dateFilter(days[j].date, 'EEEE')\n };\n }\n\n scope.title = dateFilter(ctrl.activeDate, ctrl.formatDayTitle);\n scope.rows = ctrl.split(days, 7);\n\n if (scope.showWeeks) {\n scope.weekNumbers = [];\n var thursdayIndex = (4 + 7 - ctrl.startingDay) % 7,\n numWeeks = scope.rows.length;\n for (var curWeek = 0; curWeek < numWeeks; curWeek++) {\n scope.weekNumbers.push(\n getISO8601WeekNumber(scope.rows[curWeek][thursdayIndex].date));\n }\n }\n };\n\n ctrl.compare = function(date1, date2) {\n return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));\n };\n\n function getISO8601WeekNumber(date) {\n var checkDate = new Date(date);\n checkDate.setDate(checkDate.getDate() + 4 - (checkDate.getDay() || 7)); // Thursday\n var time = checkDate.getTime();\n checkDate.setMonth(0); // Compare with Jan 1\n checkDate.setDate(1);\n return Math.floor(Math.round((time - checkDate) / 86400000) / 7) + 1;\n }\n\n ctrl.handleKeyDown = function(key, evt) {\n var date = ctrl.activeDate.getDate();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 7; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 7;\n } else if (key === 'pageup' || key === 'pagedown') {\n var month = ctrl.activeDate.getMonth() + (key === 'pageup' ? - 1 : 1);\n ctrl.activeDate.setMonth(month, 1);\n date = Math.min(getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth()), date);\n } else if (key === 'home') {\n date = 1;\n } else if (key === 'end') {\n date = getDaysInMonth(ctrl.activeDate.getFullYear(), ctrl.activeDate.getMonth());\n }\n ctrl.activeDate.setDate(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.directive('monthpicker', ['dateFilter', function(dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/month.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n ctrl.step = { years: 1 };\n ctrl.element = element;\n\n ctrl._refreshView = function() {\n var months = new Array(12),\n year = ctrl.activeDate.getFullYear(),\n date;\n\n for (var i = 0; i < 12; i++) {\n date = new Date(year, i, 1);\n ctrl.fixTimeZone(date);\n months[i] = angular.extend(ctrl.createDateObject(date, ctrl.formatMonth), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = dateFilter(ctrl.activeDate, ctrl.formatMonthTitle);\n scope.rows = ctrl.split(months, 3);\n };\n\n ctrl.compare = function(date1, date2) {\n return new Date(date1.getFullYear(), date1.getMonth()) - new Date(date2.getFullYear(), date2.getMonth());\n };\n\n ctrl.handleKeyDown = function(key, evt) {\n var date = ctrl.activeDate.getMonth();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 3; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 3;\n } else if (key === 'pageup' || key === 'pagedown') {\n var year = ctrl.activeDate.getFullYear() + (key === 'pageup' ? - 1 : 1);\n ctrl.activeDate.setFullYear(year);\n } else if (key === 'home') {\n date = 0;\n } else if (key === 'end') {\n date = 11;\n }\n ctrl.activeDate.setMonth(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.directive('yearpicker', ['dateFilter', function(dateFilter) {\n return {\n restrict: 'EA',\n replace: true,\n templateUrl: 'template/datepicker/year.html',\n require: '^datepicker',\n link: function(scope, element, attrs, ctrl) {\n var range = ctrl.yearRange;\n\n ctrl.step = { years: range };\n ctrl.element = element;\n\n function getStartingYear( year ) {\n return parseInt((year - 1) / range, 10) * range + 1;\n }\n\n ctrl._refreshView = function() {\n var years = new Array(range), date;\n\n for (var i = 0, start = getStartingYear(ctrl.activeDate.getFullYear()); i < range; i++) {\n date = new Date(start + i, 0, 1);\n ctrl.fixTimeZone(date);\n years[i] = angular.extend(ctrl.createDateObject(date, ctrl.formatYear), {\n uid: scope.uniqueId + '-' + i\n });\n }\n\n scope.title = [years[0].label, years[range - 1].label].join(' - ');\n scope.rows = ctrl.split(years, 5);\n };\n\n ctrl.compare = function(date1, date2) {\n return date1.getFullYear() - date2.getFullYear();\n };\n\n ctrl.handleKeyDown = function(key, evt) {\n var date = ctrl.activeDate.getFullYear();\n\n if (key === 'left') {\n date = date - 1; // up\n } else if (key === 'up') {\n date = date - 5; // down\n } else if (key === 'right') {\n date = date + 1; // down\n } else if (key === 'down') {\n date = date + 5;\n } else if (key === 'pageup' || key === 'pagedown') {\n date += (key === 'pageup' ? - 1 : 1) * ctrl.step.years;\n } else if (key === 'home') {\n date = getStartingYear(ctrl.activeDate.getFullYear());\n } else if (key === 'end') {\n date = getStartingYear(ctrl.activeDate.getFullYear()) + range - 1;\n }\n ctrl.activeDate.setFullYear(date);\n };\n\n ctrl.refreshView();\n }\n };\n}])\n\n.constant('datepickerPopupConfig', {\n datepickerPopup: 'yyyy-MM-dd',\n datepickerPopupTemplateUrl: 'template/datepicker/popup.html',\n datepickerTemplateUrl: 'template/datepicker/datepicker.html',\n html5Types: {\n date: 'yyyy-MM-dd',\n 'datetime-local': 'yyyy-MM-ddTHH:mm:ss.sss',\n 'month': 'yyyy-MM'\n },\n currentText: 'Today',\n clearText: 'Clear',\n closeText: 'Done',\n closeOnDateSelection: true,\n appendToBody: false,\n showButtonBar: true,\n onOpenFocus: true\n})\n\n.directive('datepickerPopup', ['$compile', '$parse', '$document', '$rootScope', '$position', 'dateFilter', 'dateParser', 'datepickerPopupConfig', '$timeout',\nfunction($compile, $parse, $document, $rootScope, $position, dateFilter, dateParser, datepickerPopupConfig, $timeout) {\n return {\n restrict: 'EA',\n require: 'ngModel',\n scope: {\n isOpen: '=?',\n currentText: '@',\n clearText: '@',\n closeText: '@',\n dateDisabled: '&',\n customClass: '&'\n },\n link: function(scope, element, attrs, ngModel) {\n var dateFormat,\n closeOnDateSelection = angular.isDefined(attrs.closeOnDateSelection) ? scope.$parent.$eval(attrs.closeOnDateSelection) : datepickerPopupConfig.closeOnDateSelection,\n appendToBody = angular.isDefined(attrs.datepickerAppendToBody) ? scope.$parent.$eval(attrs.datepickerAppendToBody) : datepickerPopupConfig.appendToBody,\n onOpenFocus = angular.isDefined(attrs.onOpenFocus) ? scope.$parent.$eval(attrs.onOpenFocus) : datepickerPopupConfig.onOpenFocus,\n datepickerPopupTemplateUrl = angular.isDefined(attrs.datepickerPopupTemplateUrl) ? attrs.datepickerPopupTemplateUrl : datepickerPopupConfig.datepickerPopupTemplateUrl,\n datepickerTemplateUrl = angular.isDefined(attrs.datepickerTemplateUrl) ? attrs.datepickerTemplateUrl : datepickerPopupConfig.datepickerTemplateUrl,\n cache = {};\n\n scope.showButtonBar = angular.isDefined(attrs.showButtonBar) ? scope.$parent.$eval(attrs.showButtonBar) : datepickerPopupConfig.showButtonBar;\n\n scope.getText = function(key) {\n return scope[key + 'Text'] || datepickerPopupConfig[key + 'Text'];\n };\n\n scope.isDisabled = function(date) {\n if (date === 'today') {\n date = new Date();\n }\n\n return ((scope.watchData.minDate && scope.compare(date, cache.minDate) < 0) ||\n (scope.watchData.maxDate && scope.compare(date, cache.maxDate) > 0));\n };\n\n scope.compare = function(date1, date2) {\n return (new Date(date1.getFullYear(), date1.getMonth(), date1.getDate()) - new Date(date2.getFullYear(), date2.getMonth(), date2.getDate()));\n };\n\n var isHtml5DateInput = false;\n if (datepickerPopupConfig.html5Types[attrs.type]) {\n dateFormat = datepickerPopupConfig.html5Types[attrs.type];\n isHtml5DateInput = true;\n } else {\n dateFormat = attrs.datepickerPopup || datepickerPopupConfig.datepickerPopup;\n attrs.$observe('datepickerPopup', function(value, oldValue) {\n var newDateFormat = value || datepickerPopupConfig.datepickerPopup;\n // Invalidate the $modelValue to ensure that formatters re-run\n // FIXME: Refactor when PR is merged: https://github.com/angular/angular.js/pull/10764\n if (newDateFormat !== dateFormat) {\n dateFormat = newDateFormat;\n ngModel.$modelValue = null;\n\n if (!dateFormat) {\n throw new Error('datepickerPopup must have a date format specified.');\n }\n }\n });\n }\n\n if (!dateFormat) {\n throw new Error('datepickerPopup must have a date format specified.');\n }\n\n if (isHtml5DateInput && attrs.datepickerPopup) {\n throw new Error('HTML5 date input types do not support custom formats.');\n }\n\n // popup element used to display calendar\n var popupEl = angular.element('
      ');\n popupEl.attr({\n 'ng-model': 'date',\n 'ng-change': 'dateSelection(date)',\n 'template-url': datepickerPopupTemplateUrl\n });\n\n function cameltoDash(string) {\n return string.replace(/([A-Z])/g, function($1) { return '-' + $1.toLowerCase(); });\n }\n\n // datepicker element\n var datepickerEl = angular.element(popupEl.children()[0]);\n datepickerEl.attr('template-url', datepickerTemplateUrl);\n\n if (isHtml5DateInput) {\n if (attrs.type === 'month') {\n datepickerEl.attr('datepicker-mode', '\"month\"');\n datepickerEl.attr('min-mode', 'month');\n }\n }\n\n if (attrs.datepickerOptions) {\n var options = scope.$parent.$eval(attrs.datepickerOptions);\n if (options && options.initDate) {\n scope.initDate = options.initDate;\n datepickerEl.attr('init-date', 'initDate');\n delete options.initDate;\n }\n angular.forEach(options, function(value, option) {\n datepickerEl.attr( cameltoDash(option), value );\n });\n }\n\n scope.watchData = {};\n angular.forEach(['minMode', 'maxMode', 'minDate', 'maxDate', 'datepickerMode', 'initDate', 'shortcutPropagation'], function(key) {\n if (attrs[key]) {\n var getAttribute = $parse(attrs[key]);\n scope.$parent.$watch(getAttribute, function(value) {\n scope.watchData[key] = value;\n if (key === 'minDate' || key === 'maxDate') {\n cache[key] = new Date(value);\n }\n });\n datepickerEl.attr(cameltoDash(key), 'watchData.' + key);\n\n // Propagate changes from datepicker to outside\n if (key === 'datepickerMode') {\n var setAttribute = getAttribute.assign;\n scope.$watch('watchData.' + key, function(value, oldvalue) {\n if (angular.isFunction(setAttribute) && value !== oldvalue) {\n setAttribute(scope.$parent, value);\n }\n });\n }\n }\n });\n if (attrs.dateDisabled) {\n datepickerEl.attr('date-disabled', 'dateDisabled({ date: date, mode: mode })');\n }\n\n if (attrs.showWeeks) {\n datepickerEl.attr('show-weeks', attrs.showWeeks);\n }\n\n if (attrs.customClass) {\n datepickerEl.attr('custom-class', 'customClass({ date: date, mode: mode })');\n }\n\n function parseDate(viewValue) {\n if (angular.isNumber(viewValue)) {\n // presumably timestamp to date object\n viewValue = new Date(viewValue);\n }\n\n if (!viewValue) {\n return null;\n } else if (angular.isDate(viewValue) && !isNaN(viewValue)) {\n return viewValue;\n } else if (angular.isString(viewValue)) {\n var date = dateParser.parse(viewValue, dateFormat, scope.date);\n if (isNaN(date)) {\n return undefined;\n } else {\n return date;\n }\n } else {\n return undefined;\n }\n }\n\n function validator(modelValue, viewValue) {\n var value = modelValue || viewValue;\n\n if (!attrs.ngRequired && !value) {\n return true;\n }\n\n if (angular.isNumber(value)) {\n value = new Date(value);\n }\n if (!value) {\n return true;\n } else if (angular.isDate(value) && !isNaN(value)) {\n return true;\n } else if (angular.isString(value)) {\n var date = dateParser.parse(value, dateFormat);\n return !isNaN(date);\n } else {\n return false;\n }\n }\n\n if (!isHtml5DateInput) {\n // Internal API to maintain the correct ng-invalid-[key] class\n ngModel.$$parserName = 'date';\n ngModel.$validators.date = validator;\n ngModel.$parsers.unshift(parseDate);\n ngModel.$formatters.push(function(value) {\n scope.date = value;\n return ngModel.$isEmpty(value) ? value : dateFilter(value, dateFormat);\n });\n } else {\n ngModel.$formatters.push(function(value) {\n scope.date = value;\n return value;\n });\n }\n\n // Inner change\n scope.dateSelection = function(dt) {\n if (angular.isDefined(dt)) {\n scope.date = dt;\n }\n var date = scope.date ? dateFilter(scope.date, dateFormat) : null; // Setting to NULL is necessary for form validators to function\n element.val(date);\n ngModel.$setViewValue(date);\n\n if (closeOnDateSelection) {\n scope.isOpen = false;\n element[0].focus();\n }\n };\n\n // Detect changes in the view from the text box\n ngModel.$viewChangeListeners.push(function() {\n scope.date = dateParser.parse(ngModel.$viewValue, dateFormat, scope.date);\n });\n\n var documentClickBind = function(event) {\n if (scope.isOpen && !(element[0].contains(event.target) || popupEl[0].contains(event.target))) {\n scope.$apply(function() {\n scope.isOpen = false;\n });\n }\n };\n\n var inputKeydownBind = function(evt) {\n if (evt.which === 27 && scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n scope.$apply(function() {\n scope.isOpen = false;\n });\n element[0].focus();\n } else if (evt.which === 40 && !scope.isOpen) {\n evt.preventDefault();\n evt.stopPropagation();\n scope.$apply(function() {\n scope.isOpen = true;\n });\n }\n };\n element.bind('keydown', inputKeydownBind);\n\n scope.keydown = function(evt) {\n if (evt.which === 27) {\n scope.isOpen = false;\n element[0].focus();\n }\n };\n\n scope.$watch('isOpen', function(value) {\n if (value) {\n scope.position = appendToBody ? $position.offset(element) : $position.position(element);\n scope.position.top = scope.position.top + element.prop('offsetHeight');\n\n $timeout(function() {\n if (onOpenFocus) {\n scope.$broadcast('datepicker.focus');\n }\n $document.bind('click', documentClickBind);\n }, 0, false);\n } else {\n $document.unbind('click', documentClickBind);\n }\n });\n\n scope.select = function(date) {\n if (date === 'today') {\n var today = new Date();\n if (angular.isDate(scope.date)) {\n date = new Date(scope.date);\n date.setFullYear(today.getFullYear(), today.getMonth(), today.getDate());\n } else {\n date = new Date(today.setHours(0, 0, 0, 0));\n }\n }\n scope.dateSelection(date);\n };\n\n scope.close = function() {\n scope.isOpen = false;\n element[0].focus();\n };\n\n var $popup = $compile(popupEl)(scope);\n // Prevent jQuery cache memory leak (template is now redundant after linking)\n popupEl.remove();\n\n if (appendToBody) {\n $document.find('body').append($popup);\n } else {\n element.after($popup);\n }\n\n scope.$on('$destroy', function() {\n if (scope.isOpen === true) {\n if (!$rootScope.$$phase) {\n scope.$apply(function() {\n scope.isOpen = false;\n });\n }\n }\n\n $popup.remove();\n element.unbind('keydown', inputKeydownBind);\n $document.unbind('click', documentClickBind);\n });\n }\n };\n}])\n\n.directive('datepickerPopupWrap', function() {\n return {\n restrict:'EA',\n replace: true,\n transclude: true,\n templateUrl: function(element, attrs) {\n return attrs.templateUrl || 'template/datepicker/popup.html';\n }\n };\n});\n\n\nangular.module(\"template/datepicker/datepicker.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/datepicker.html\",\n \"
      \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
      \");\n}]);\n\nangular.module(\"template/datepicker/day.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/day.html\",\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 \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \" \\n\" +\n \"
      {{::label.abbr}}
      {{ weekNumbers[$index] }}\\n\" +\n \" \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/month.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/month.html\",\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 \"
      \\n\" +\n \" \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/popup.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/popup.html\",\n \"
        \\n\" +\n \"\t
      • \\n\" +\n \"\t
      • \\n\" +\n \"\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t\t\\n\" +\n \"\t
      • \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\nangular.module(\"template/datepicker/year.html\", []).run([\"$templateCache\", function($templateCache) {\n $templateCache.put(\"template/datepicker/year.html\",\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 \"
      \\n\" +\n \" \\n\" +\n \"
      \\n\" +\n \"\");\n}]);\n\n","/**\n * AngularStrap - Twitter Bootstrap directives for AngularJS\n * @version v0.7.5 - 2013-07-21\n * @link http://mgcrea.github.com/angular-strap\n * @author Olivier Louvignes \n * @license MIT License, http://www.opensource.org/licenses/MIT\n */\nangular.module('$strap.config', []).value('$strapConfig', {});\nangular.module('$strap.filters', ['$strap.config']);\nangular.module('$strap.directives', ['$strap.config']);\nangular.module('$strap', [\n '$strap.filters',\n '$strap.directives',\n '$strap.config'\n]);\n'use strict';\nangular.module('$strap.directives').factory('$modal', [\n '$rootScope',\n '$compile',\n '$http',\n '$timeout',\n '$q',\n '$templateCache',\n '$strapConfig',\n function ($rootScope, $compile, $http, $timeout, $q, $templateCache, $strapConfig) {\n var ModalFactory = function ModalFactory(config) {\n function Modal(config) {\n var options = angular.extend({ show: true }, $strapConfig.modal, config);\n var scope = options.scope ? options.scope : $rootScope.$new()\n var templateUrl = options.template;\n return $q.when(options.templateHtml || $templateCache.get(templateUrl) || $http.get(templateUrl, { cache: true }).then(function (res) {\n return res.data;\n })).then(function onSuccess(template) {\n var id = scope.$id;\n if (templateUrl) {\n id += templateUrl.replace('.html', '').replace(/[\\/|\\.|:]/g, '-');\n }\n // grafana change, removed fade\n var $modal = $('
      ').attr('id', id).html(template);\n if (options.modalClass)\n $modal.addClass(options.modalClass);\n $('body').append($modal);\n $timeout(function () {\n $compile($modal)(scope);\n });\n scope.$modal = function (name) {\n $modal.modal(name);\n };\n angular.forEach([\n 'show',\n 'hide'\n ], function (name) {\n scope[name] = function () {\n $modal.modal(name);\n };\n });\n scope.dismiss = scope.hide;\n angular.forEach([\n 'show',\n 'shown',\n 'hide',\n 'hidden'\n ], function (name) {\n $modal.on(name, function (ev) {\n scope.$emit('modal-' + name, ev);\n });\n });\n $modal.on('shown', function (ev) {\n $('input[autofocus], textarea[autofocus]', $modal).first().trigger('focus');\n });\n $modal.on('hidden', function (ev) {\n if (!options.persist)\n scope.$destroy();\n });\n scope.$on('$destroy', function () {\n $modal.remove();\n });\n $modal.modal(options);\n return $modal;\n });\n }\n return new Modal(config);\n };\n return ModalFactory;\n }\n])\n\n'use strict';\nangular.module('$strap.directives').directive('bsTooltip', [\n '$parse',\n '$compile',\n function ($parse, $compile) {\n return {\n restrict: 'A',\n scope: true,\n link: function postLink(scope, element, attrs, ctrl) {\n var getter = $parse(attrs.bsTooltip), setter = getter.assign, value = getter(scope);\n scope.$watch(attrs.bsTooltip, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n // Grafana change, always hide other tooltips\n if (true) {\n element.on('show', function (ev) {\n $('.tooltip.in').each(function () {\n var $this = $(this), tooltip = $this.data('tooltip');\n if (tooltip && !tooltip.$element.is(element)) {\n $this.tooltip('hide');\n }\n });\n });\n }\n element.tooltip({\n title: function () {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n html: true,\n container: 'body', // Grafana change\n });\n var tooltip = element.data('tooltip');\n tooltip.show = function () {\n var r = $.fn.tooltip.Constructor.prototype.show.apply(this, arguments);\n this.tip().data('tooltip', this);\n return r;\n };\n scope._tooltip = function (event) {\n element.tooltip(event);\n };\n scope.hide = function () {\n element.tooltip('hide');\n };\n scope.show = function () {\n element.tooltip('show');\n };\n scope.dismiss = scope.hide;\n }\n };\n }\n]);\n\n'use strict';\nangular.module('$strap.directives').directive('bsTypeahead', [\n '$parse',\n function ($parse) {\n return {\n restrict: 'A',\n require: '?ngModel',\n link: function postLink(scope, element, attrs, controller) {\n var getter = $parse(attrs.bsTypeahead), setter = getter.assign, value = getter(scope);\n scope.$watch(attrs.bsTypeahead, function (newValue, oldValue) {\n if (newValue !== oldValue) {\n value = newValue;\n }\n });\n element.attr('data-provide', 'typeahead');\n element.typeahead({\n source: function (query) {\n return angular.isFunction(value) ? value.apply(null, arguments) : value;\n },\n minLength: attrs.minLength || 1,\n items: attrs.items,\n updater: function (value) {\n if (controller) {\n scope.$apply(function () {\n controller.$setViewValue(value);\n });\n }\n scope.$emit('typeahead-updated', value);\n return value;\n }\n });\n var typeahead = element.data('typeahead');\n typeahead.lookup = function (ev) {\n var items;\n this.query = this.$element.val() || '';\n if (this.query.length < this.options.minLength) {\n return this.shown ? this.hide() : this;\n }\n items = $.isFunction(this.source) ? this.source(this.query, $.proxy(this.process, this)) : this.source;\n return items ? this.process(items) : this;\n };\n if (!!attrs.matchAll) {\n typeahead.matcher = function (item) {\n return true;\n };\n }\n if (attrs.minLength === '0') {\n setTimeout(function () {\n element.on('focus', function () {\n element.val().length === 0 && setTimeout(element.typeahead.bind(element, 'lookup'), 200);\n });\n });\n }\n }\n };\n }\n]);\n","var map = {\n\t\"./af\": 327,\n\t\"./af.js\": 327,\n\t\"./ar\": 328,\n\t\"./ar-dz\": 329,\n\t\"./ar-dz.js\": 329,\n\t\"./ar-kw\": 330,\n\t\"./ar-kw.js\": 330,\n\t\"./ar-ly\": 331,\n\t\"./ar-ly.js\": 331,\n\t\"./ar-ma\": 332,\n\t\"./ar-ma.js\": 332,\n\t\"./ar-sa\": 333,\n\t\"./ar-sa.js\": 333,\n\t\"./ar-tn\": 334,\n\t\"./ar-tn.js\": 334,\n\t\"./ar.js\": 328,\n\t\"./az\": 335,\n\t\"./az.js\": 335,\n\t\"./be\": 336,\n\t\"./be.js\": 336,\n\t\"./bg\": 337,\n\t\"./bg.js\": 337,\n\t\"./bm\": 338,\n\t\"./bm.js\": 338,\n\t\"./bn\": 339,\n\t\"./bn.js\": 339,\n\t\"./bo\": 340,\n\t\"./bo.js\": 340,\n\t\"./br\": 341,\n\t\"./br.js\": 341,\n\t\"./bs\": 342,\n\t\"./bs.js\": 342,\n\t\"./ca\": 343,\n\t\"./ca.js\": 343,\n\t\"./cs\": 344,\n\t\"./cs.js\": 344,\n\t\"./cv\": 345,\n\t\"./cv.js\": 345,\n\t\"./cy\": 346,\n\t\"./cy.js\": 346,\n\t\"./da\": 347,\n\t\"./da.js\": 347,\n\t\"./de\": 348,\n\t\"./de-at\": 349,\n\t\"./de-at.js\": 349,\n\t\"./de-ch\": 350,\n\t\"./de-ch.js\": 350,\n\t\"./de.js\": 348,\n\t\"./dv\": 351,\n\t\"./dv.js\": 351,\n\t\"./el\": 352,\n\t\"./el.js\": 352,\n\t\"./en-au\": 353,\n\t\"./en-au.js\": 353,\n\t\"./en-ca\": 354,\n\t\"./en-ca.js\": 354,\n\t\"./en-gb\": 355,\n\t\"./en-gb.js\": 355,\n\t\"./en-ie\": 356,\n\t\"./en-ie.js\": 356,\n\t\"./en-il\": 357,\n\t\"./en-il.js\": 357,\n\t\"./en-nz\": 358,\n\t\"./en-nz.js\": 358,\n\t\"./eo\": 359,\n\t\"./eo.js\": 359,\n\t\"./es\": 360,\n\t\"./es-do\": 361,\n\t\"./es-do.js\": 361,\n\t\"./es-us\": 362,\n\t\"./es-us.js\": 362,\n\t\"./es.js\": 360,\n\t\"./et\": 363,\n\t\"./et.js\": 363,\n\t\"./eu\": 364,\n\t\"./eu.js\": 364,\n\t\"./fa\": 365,\n\t\"./fa.js\": 365,\n\t\"./fi\": 366,\n\t\"./fi.js\": 366,\n\t\"./fo\": 367,\n\t\"./fo.js\": 367,\n\t\"./fr\": 368,\n\t\"./fr-ca\": 369,\n\t\"./fr-ca.js\": 369,\n\t\"./fr-ch\": 370,\n\t\"./fr-ch.js\": 370,\n\t\"./fr.js\": 368,\n\t\"./fy\": 371,\n\t\"./fy.js\": 371,\n\t\"./gd\": 372,\n\t\"./gd.js\": 372,\n\t\"./gl\": 373,\n\t\"./gl.js\": 373,\n\t\"./gom-latn\": 374,\n\t\"./gom-latn.js\": 374,\n\t\"./gu\": 375,\n\t\"./gu.js\": 375,\n\t\"./he\": 376,\n\t\"./he.js\": 376,\n\t\"./hi\": 377,\n\t\"./hi.js\": 377,\n\t\"./hr\": 378,\n\t\"./hr.js\": 378,\n\t\"./hu\": 379,\n\t\"./hu.js\": 379,\n\t\"./hy-am\": 380,\n\t\"./hy-am.js\": 380,\n\t\"./id\": 381,\n\t\"./id.js\": 381,\n\t\"./is\": 382,\n\t\"./is.js\": 382,\n\t\"./it\": 383,\n\t\"./it.js\": 383,\n\t\"./ja\": 384,\n\t\"./ja.js\": 384,\n\t\"./jv\": 385,\n\t\"./jv.js\": 385,\n\t\"./ka\": 386,\n\t\"./ka.js\": 386,\n\t\"./kk\": 387,\n\t\"./kk.js\": 387,\n\t\"./km\": 388,\n\t\"./km.js\": 388,\n\t\"./kn\": 389,\n\t\"./kn.js\": 389,\n\t\"./ko\": 390,\n\t\"./ko.js\": 390,\n\t\"./ky\": 391,\n\t\"./ky.js\": 391,\n\t\"./lb\": 392,\n\t\"./lb.js\": 392,\n\t\"./lo\": 393,\n\t\"./lo.js\": 393,\n\t\"./lt\": 394,\n\t\"./lt.js\": 394,\n\t\"./lv\": 395,\n\t\"./lv.js\": 395,\n\t\"./me\": 396,\n\t\"./me.js\": 396,\n\t\"./mi\": 397,\n\t\"./mi.js\": 397,\n\t\"./mk\": 398,\n\t\"./mk.js\": 398,\n\t\"./ml\": 399,\n\t\"./ml.js\": 399,\n\t\"./mn\": 400,\n\t\"./mn.js\": 400,\n\t\"./mr\": 401,\n\t\"./mr.js\": 401,\n\t\"./ms\": 402,\n\t\"./ms-my\": 403,\n\t\"./ms-my.js\": 403,\n\t\"./ms.js\": 402,\n\t\"./mt\": 404,\n\t\"./mt.js\": 404,\n\t\"./my\": 405,\n\t\"./my.js\": 405,\n\t\"./nb\": 406,\n\t\"./nb.js\": 406,\n\t\"./ne\": 407,\n\t\"./ne.js\": 407,\n\t\"./nl\": 408,\n\t\"./nl-be\": 409,\n\t\"./nl-be.js\": 409,\n\t\"./nl.js\": 408,\n\t\"./nn\": 410,\n\t\"./nn.js\": 410,\n\t\"./pa-in\": 411,\n\t\"./pa-in.js\": 411,\n\t\"./pl\": 412,\n\t\"./pl.js\": 412,\n\t\"./pt\": 413,\n\t\"./pt-br\": 414,\n\t\"./pt-br.js\": 414,\n\t\"./pt.js\": 413,\n\t\"./ro\": 415,\n\t\"./ro.js\": 415,\n\t\"./ru\": 416,\n\t\"./ru.js\": 416,\n\t\"./sd\": 417,\n\t\"./sd.js\": 417,\n\t\"./se\": 418,\n\t\"./se.js\": 418,\n\t\"./si\": 419,\n\t\"./si.js\": 419,\n\t\"./sk\": 420,\n\t\"./sk.js\": 420,\n\t\"./sl\": 421,\n\t\"./sl.js\": 421,\n\t\"./sq\": 422,\n\t\"./sq.js\": 422,\n\t\"./sr\": 423,\n\t\"./sr-cyrl\": 424,\n\t\"./sr-cyrl.js\": 424,\n\t\"./sr.js\": 423,\n\t\"./ss\": 425,\n\t\"./ss.js\": 425,\n\t\"./sv\": 426,\n\t\"./sv.js\": 426,\n\t\"./sw\": 427,\n\t\"./sw.js\": 427,\n\t\"./ta\": 428,\n\t\"./ta.js\": 428,\n\t\"./te\": 429,\n\t\"./te.js\": 429,\n\t\"./tet\": 430,\n\t\"./tet.js\": 430,\n\t\"./tg\": 431,\n\t\"./tg.js\": 431,\n\t\"./th\": 432,\n\t\"./th.js\": 432,\n\t\"./tl-ph\": 433,\n\t\"./tl-ph.js\": 433,\n\t\"./tlh\": 434,\n\t\"./tlh.js\": 434,\n\t\"./tr\": 435,\n\t\"./tr.js\": 435,\n\t\"./tzl\": 436,\n\t\"./tzl.js\": 436,\n\t\"./tzm\": 437,\n\t\"./tzm-latn\": 438,\n\t\"./tzm-latn.js\": 438,\n\t\"./tzm.js\": 437,\n\t\"./ug-cn\": 439,\n\t\"./ug-cn.js\": 439,\n\t\"./uk\": 440,\n\t\"./uk.js\": 440,\n\t\"./ur\": 441,\n\t\"./ur.js\": 441,\n\t\"./uz\": 442,\n\t\"./uz-latn\": 443,\n\t\"./uz-latn.js\": 443,\n\t\"./uz.js\": 442,\n\t\"./vi\": 444,\n\t\"./vi.js\": 444,\n\t\"./x-pseudo\": 445,\n\t\"./x-pseudo.js\": 445,\n\t\"./yo\": 446,\n\t\"./yo.js\": 446,\n\t\"./zh-cn\": 447,\n\t\"./zh-cn.js\": 447,\n\t\"./zh-hk\": 448,\n\t\"./zh-hk.js\": 448,\n\t\"./zh-tw\": 449,\n\t\"./zh-tw.js\": 449\n};\n\n\nfunction webpackContext(req) {\n\tvar id = webpackContextResolve(req);\n\treturn __webpack_require__(id);\n}\nfunction webpackContextResolve(req) {\n\tvar id = map[req];\n\tif(!(id + 1)) { // check for number or string\n\t\tvar e = new Error(\"Cannot find module '\" + req + \"'\");\n\t\te.code = 'MODULE_NOT_FOUND';\n\t\tthrow e;\n\t}\n\treturn id;\n}\nwebpackContext.keys = function webpackContextKeys() {\n\treturn Object.keys(map);\n};\nwebpackContext.resolve = webpackContextResolve;\nmodule.exports = webpackContext;\nwebpackContext.id = 776;","(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 allready 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
      \\n
      0\\\">\\n \\n
      0\\\">\\n \\n \\n  {{tagName}}\\n \\n \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n \\n No dashboards matching your query were found.\\n \\n
      \\n\\n\\t
      \\n \\n No dashboards found.\\n \\n
      \\n\\n
      0\\\">\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n\\n
      \\n\\n
      \\n ',\\n proTipLink: 'dashboards',\\n proTipLinkTitle: 'Manage dashboards',\\n proTipTarget: ''\\n }\\\"/>\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/core/components/navbar/navbar.html';\nvar html = \"\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/core/components/search/search.html';\nvar html = \"\\n
      \\n\\n
      \\n\\n\\t
      \\n\\t\\t
      \\n\\n\\t\\t\\n\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n
      \\n
      \\n
      \\n
      No dashboards matching your query were found.
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n \\n Filter by:\\n \\n Clear\\n \\n
      \\n\\n \\n \\n
      \\n\\n \\n
      \\n
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/core/components/search/search_results.html';\nvar html = \"
      \\n
      \\n
      \\n \\n \\n
      \\n \\n {{::section.title}}\\n \\n \\n \\n \\n \\n
      \\n\\n
      \\n\\n \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/admin_home.html';\nvar html = \"\\n\\n
      \\n\\n
      \\n Grafana is a multi-tenant system where most can be configured per organization. These\\n admin pages are for server admins where you can manage orgs, & all users across all orgs.\\n
      \\n\\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/edit_org.html';\nvar html = \"\\n\\n
      \\n\\t

      Edit Organization

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tName\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t

      Organization Users

      \\n\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      UsernameEmailRole
      {{orgUser.login}}{{orgUser.email}}\\n
      \\n \\n \\n \\n
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/edit_user.html';\nvar html = \"\\n\\n
      \\n\\n\\t
      \\n\\t\\t

      Edit User

      \\n\\t
      \\n\\n\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tName\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tEmail\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tUsername\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t
      \\n\\n\\t

      Change password

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\tNew password\\n\\t\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t

      Permissions

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t

      Organizations

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tAdd\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n \\tRole\\n \\t\\n \\t\\n \\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      NameRole
      \\n\\t\\t\\t\\t{{org.name}} Current\\n\\t\\t\\t\\n
      \\n \\n \\n \\n
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/new_user.html';\nvar html = \"\\n\\n
      \\n\\t
      \\n\\t\\t

      Add new user

      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tName\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tEmail\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tUsername\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/orgs.html';\nvar html = \"\\n\\n
      \\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      IdName
      \\n \\n \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/settings.html';\nvar html = \"\\n\\n
      \\n\\n\\t
      \\n\\t\\tThese system settings are defined in grafana.ini or custom.ini (or overridden in ENV variables).\\n\\t\\tTo change these you currently need to restart grafana.\\n\\t
      \\n\\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      {{secName}}
      {{keyName}}{{keyValue}}
      \\n
      \\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/stats.html';\nvar html = \"\\n\\n
      \\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      NameValue
      Total dashboards{{ctrl.stats.dashboards}}
      Total users{{ctrl.stats.users}}
      Active users (seen last 14 days){{ctrl.stats.activeUsers}}
      Total organizations{{ctrl.stats.orgs}}
      Total datasources{{ctrl.stats.datasources}}
      Total playlists{{ctrl.stats.playlists}}
      Total snapshots{{ctrl.stats.snapshots}}
      Total dashboard tags{{ctrl.stats.tags}}
      Total starred dashboards{{ctrl.stats.stars}}
      Total alerts{{ctrl.stats.alerts}}
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/admin/partials/styleguide.html';\nvar html = \"\\n\\n
      \\n\\n\\t

      Buttons

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t

      Forms

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { Emitter } from './utils/emitter';\n\nconst appEvents = new Emitter();\nexport default appEvents;\n","import { Plugin, StoreState } from 'app/types';\nimport { ThunkAction } from 'redux-thunk';\nimport { getBackendSrv } from '../../../core/services/backend_srv';\nimport { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';\n\nexport enum ActionTypes {\n LoadPlugins = 'LOAD_PLUGINS',\n SetPluginsSearchQuery = 'SET_PLUGIN_SEARCH_QUERY',\n SetLayoutMode = 'SET_LAYOUT_MODE',\n}\n\nexport interface LoadPluginsAction {\n type: ActionTypes.LoadPlugins;\n payload: Plugin[];\n}\n\nexport interface SetPluginsSearchQueryAction {\n type: ActionTypes.SetPluginsSearchQuery;\n payload: string;\n}\n\nexport interface SetLayoutModeAction {\n type: ActionTypes.SetLayoutMode;\n payload: LayoutMode;\n}\n\nexport const setLayoutMode = (mode: LayoutMode): SetLayoutModeAction => ({\n type: ActionTypes.SetLayoutMode,\n payload: mode,\n});\n\nexport const setPluginsSearchQuery = (query: string): SetPluginsSearchQueryAction => ({\n type: ActionTypes.SetPluginsSearchQuery,\n payload: query,\n});\n\nconst pluginsLoaded = (plugins: Plugin[]): LoadPluginsAction => ({\n type: ActionTypes.LoadPlugins,\n payload: plugins,\n});\n\nexport type Action = LoadPluginsAction | SetPluginsSearchQueryAction | SetLayoutModeAction;\n\ntype ThunkResult = ThunkAction;\n\nexport function loadPlugins(): ThunkResult {\n return async dispatch => {\n const result = await getBackendSrv().get('api/plugins', { embedded: 0 });\n dispatch(pluginsLoaded(result));\n };\n}\n","var path = 'public/app/features/admin/partials/users.html';\nvar html = \"\\n\\n
      \\n\\t
      \\n \\n
      \\n \\n \\n Add new user\\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
      LoginEmail\\n Seen\\n Time since user was seen using Grafana\\n
      \\n \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n\\n
      \\n
        \\n
      1. \\n \\n
      2. \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/alerting/partials/alert_howto.html';\nvar html = \"\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/alerting/partials/alert_tab.html';\nvar html = \"
      \\n\\t\\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t {{ctrl.error}}\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      Alert Config
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tName\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tEvaluate every\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      Conditions
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tWHEN\\n\\t\\t\\t\\t\\t
      \\n \\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n \\t\\t\\tOF\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n \\t\\t\\t\\n \\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n \\t\\t\\tIf no data or all values are null\\n \\t\\t\\tSET STATE TO\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n \\t\\t\\tIf execution error or timeout\\n \\t\\t\\tSET STATE TO\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\tEvaluating rule \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Notifications
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tSend to\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t {{nc.name}} \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tMessage\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n \\t\\t
      \\n\\t\\t\\t\\tState history (last 50 state changes)\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\tNo state changes recorded\\n\\t\\t\\t
      \\n\\n
        \\n
      1. \\n
        \\n \\n
        \\n
        \\n
        \\n
        \\n {{al.stateModel.text}}\\n
        \\n
        \\n {{al.info}}\\n
        \\n
        \\n {{al.time}}\\n
        \\n
      2. \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/alerting/partials/notification_edit.html';\nvar html = \"\\n\\n
      \\n\\n

      Edit Notification Channel

      \\n

      New Notification Channel

      \\n\\n
      \\n
      \\n
      \\n Name\\n \\n
      \\n
      \\n Type\\n
      \\n \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n Send reminder every\\n \\n Specify how often reminders should be sent, e.g. every 30s, 1m, 10m, 30m or 1h etc.\\n \\n \\n \\n
      \\n
      \\n
      \\n \\n Alert reminders are sent after rules are evaluated. Therefore a reminder can never be sent more frequently than a configured alert rule evaluation interval.\\n \\n
      \\n
      \\n\\n
      \\n
      \\n\\n
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\tBack\\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/annotations/partials/editor.html';\nvar html = \"\\n
      \\n\\t

      \\n\\t\\tAnnotations\\n\\t\\t> New\\n\\t\\t> Edit\\n\\t

      \\n\\n\\t
      \\n\\t\\t
      1\\\">\\n\\t\\t\\t
      \\n\\t\\t\\t New\\n\\t\\t
      \\n\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      Query nameData source
      \\n\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t{{annotation.name}}\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t  \\n\\t\\t\\t\\t\\t\\t{{annotation.name}} (Built-in)\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t{{annotation.datasource || 'Default'}}\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      There are no custom annotation queries added yet
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tAdd Annotation Query\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      What are Annotations?
      \\n\\t\\t\\t\\t\\t

      \\n\\t\\t\\t\\t\\tAnnotations provide a way to integrate event data into your graphs. They are visualized as vertical lines and icons\\n\\t\\t\\t\\t\\ton all graph panels. When you hover over an annotation icon you can get event text & tags for the event. You can add annotation events\\n\\t\\t\\t\\t\\tdirectly from grafana by holding CTRL or CMD + click on graph (or drag region). These will be stored in Grafana's annotation database.\\n\\t\\t\\t\\t\\t

      \\n\\t\\t\\t\\t\\tCheckout the Annotations documentation for more information.\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      General
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tName\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tData source\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      Query
      \\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/annotations/partials/event_editor.html';\nvar html = \"\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tAdd Annotation\\n\\t\\t\\tEdit Annotation\\n\\t\\t
      \\n\\n
      {{ctrl.timeFormated}}
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tDescription\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\tTags\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tCancel\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/dashlinks/editor.html';\nvar html = \"

      \\n Dashboard Links\\n > New\\n > Edit\\n

      \\n\\n
      \\n
      \\n
      \\n
      \\n There are no dashboard links added yet\\n
      \\n \\n \\n Add Dashboard Link\\n \\n
      \\n
      What are Dashboard Links?
      \\n

      \\n\\t\\t\\t\\t\\tDashboard Links allow you to place links to other dashboards and web sites directly in below the dashboard header.\\n

      \\n
      \\n
      \\n
      \\n\\n
      0\\\">\\n
      \\n
      \\n \\n New\\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      TypeInfo
      \\n \\n {{link.type}}\\n \\n
      \\n {{link.title}}\\n
      \\n
      \\n {{link.url}}\\n
      \\n \\n {{tag}}\\n \\n
      \\n \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n
      \\n Type\\n
      \\n \\n
      \\n
      \\n\\n
      \\n With tags\\n \\n
      \\n\\n \\n
      \\n Title\\n \\n
      \\n
      \\n
      \\n
    • Url
    • \\n \\n
      \\n\\n
      \\n Title\\n \\n
      \\n\\n
      \\n Tooltip\\n \\n
      \\n\\n
      \\n Icon\\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      Include
      \\n
      \\n \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/dashnav/dashnav.html';\nvar html = \"\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/export/export_modal.html';\nvar html = \"\\n\\n\\n\\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { ThunkAction } from 'redux-thunk';\nimport { DataSource, StoreState } from 'app/types';\nimport { getBackendSrv } from '../../../core/services/backend_srv';\nimport { LayoutMode } from '../../../core/components/LayoutSelector/LayoutSelector';\n\nexport enum ActionTypes {\n LoadDataSources = 'LOAD_DATA_SOURCES',\n SetDataSourcesSearchQuery = 'SET_DATA_SOURCES_SEARCH_QUERY',\n SetDataSourcesLayoutMode = 'SET_DATA_SOURCES_LAYOUT_MODE',\n}\n\nexport interface LoadDataSourcesAction {\n type: ActionTypes.LoadDataSources;\n payload: DataSource[];\n}\n\nexport interface SetDataSourcesSearchQueryAction {\n type: ActionTypes.SetDataSourcesSearchQuery;\n payload: string;\n}\n\nexport interface SetDataSourcesLayoutModeAction {\n type: ActionTypes.SetDataSourcesLayoutMode;\n payload: LayoutMode;\n}\n\nconst dataSourcesLoaded = (dataSources: DataSource[]): LoadDataSourcesAction => ({\n type: ActionTypes.LoadDataSources,\n payload: dataSources,\n});\n\nexport const setDataSourcesSearchQuery = (searchQuery: string): SetDataSourcesSearchQueryAction => ({\n type: ActionTypes.SetDataSourcesSearchQuery,\n payload: searchQuery,\n});\n\nexport const setDataSourcesLayoutMode = (layoutMode: LayoutMode): SetDataSourcesLayoutModeAction => ({\n type: ActionTypes.SetDataSourcesLayoutMode,\n payload: layoutMode,\n});\n\nexport type Action = LoadDataSourcesAction | SetDataSourcesSearchQueryAction | SetDataSourcesLayoutModeAction;\n\ntype ThunkResult = ThunkAction;\n\nexport function loadDataSources(): ThunkResult {\n return async dispatch => {\n const response = await getBackendSrv().get('/api/datasources');\n dispatch(dataSourcesLoaded(response));\n };\n}\n","var path = 'public/app/features/dashboard/export_data/export_data_modal.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/folder_picker/folder_picker.html';\nvar html = \"
      \\n
      \\n \\n \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/history/history.html';\nvar html = \"

      \\n Versions\\n \\n > Comparing {{ctrl.baseInfo.version}}\\n \\n {{ctrl.newInfo.version}}\\n (Latest)\\n \\n

      \\n\\n
      \\n
      \\n \\n Fetching history list…\\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
      VersionDateUpdated ByNotes
      \\n \\n \\n {{revision.version}}{{revision.createdDateString}}{{revision.createdBy}}{{revision.message}}\\n \\n   Restore\\n \\n \\n   Latest\\n \\n
      \\n\\n
      \\n \\n Fetching more entries…\\n
      \\n\\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n \\n Fetching changes…\\n
      \\n\\n
      \\n \\n
      \\n

      \\n Version {{ctrl.newInfo.version}} updated by\\n {{ctrl.newInfo.createdBy}} \\n {{ctrl.newInfo.ageString}}\\n - {{ctrl.newInfo.message}}\\n

      \\n

      \\n Version {{ctrl.baseInfo.version}} updated by\\n {{ctrl.baseInfo.createdBy}} \\n {{ctrl.baseInfo.ageString}}\\n - {{ctrl.baseInfo.message}}\\n

      \\n
      \\n\\n
      \\n
      \\n
      \\n\\n
      \\n \\n
      \\n\\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/move_to_folder_modal/move_to_folder.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/create_folder.html';\nvar html = \"\\n\\n
      \\n\\n\\t

      New Dashboard Folder

      \\n\\n
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/dashboard_import.html';\nvar html = \"\\n\\n
      \\n
      \\n\\n
      \\n
      \\n \\n
      \\n\\n
      Grafana.com Dashboard
      \\n\\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n\\n
      Or paste JSON
      \\n\\n
      \\n
      \\n \\n
      \\n \\n \\n \\n {{ctrl.parseError}}\\n \\n
      \\n
      \\n\\n
      \\n
      \\n

      \\n Importing Dashboard from\\n Grafana.com\\n

      \\n\\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n

      \\n Options\\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 \\n Unique identifier (uid)\\n \\n The unique identifier (uid) of a dashboard can be used for uniquely identify a dashboard between multiple Grafana installs.\\n The uid allows having consistent URL’s for accessing dashboards so changing the title of a dashboard will not break any\\n bookmarked links to that dashboard.\\n \\n \\n \\n change\\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 \\n \\n Cancel\\n
      \\n\\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/folder_dashboards.html';\nvar html = \"\\n\\n
      \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/folder_permissions.html';\nvar html = \"\\n\\n
      \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/folder_settings.html';\nvar html = \"\\n\\n
      \\n\\t

      Folder Settings

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/inspector.html';\nvar html = \"\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/row_options.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/partials/shareModal.html';\nvar html = \"\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/settings/settings.html';\nvar html = \"\\n\\n
      \\n\\t

      \\n\\t\\tGeneral\\n\\t

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t\\n\\n\\t
      Panel Options
      \\n\\t
      \\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n
      \\n\\n
      \\n
      \\n\\n
      \\n\\t\\n
      \\n\\n
      \\n\\t\\n
      \\n\\n
      \\n\\t

      JSON Model

      \\n
      \\n The JSON Model below is data structure that defines the dashboard. Including settings, panel settings & layout,\\n queries etc.\\n
      \\n\\n\\t
      \\n\\t\\t\\n\\t
      \\n\\n
      \\n \\n
      \\n
      \\n\\n
      \\n \\n
      \\n
      You have changed folder, please save to view permissions.
      \\n
      \\n
      \\n\\n
      \\n

      Settings view not found

      \\n\\n
      \\n
      The settings page could not be found or you do not have permission to access it
      \\n
      \\n
      \\n\\n
      \\n

      Make Editable

      \\n\\n \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/submenu/submenu.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/timepicker/settings.html';\nvar html = \"
      \\n\\t
      Time Options
      \\n\\n
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tAuto-refresh\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tNow delay now-\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/dashboard/timepicker/timepicker.html';\nvar html = \"\\n\\n
      \\n
      \\n

      Custom range

      \\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
      \\n \\n
      \\n\\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n

      Quick ranges

      \\n
        \\n
      • \\n \\n
      • \\n
      \\n
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/manage-dashboards/partials/dashboard_list.html';\nvar html = \"\\n\\n
      \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/manage-dashboards/partials/snapshot_list.html';\nvar html = \"\\n\\n
      \\n \\n \\n \\n \\n \\n \\n\\t\\t\\n\\t\\t\\n \\n \\n \\n \\n \\n
      NameSnapshot url
      \\n\\t\\t\\t\\t{{snapshot.name}}\\n \\n dashboard/snapshot/{{snapshot.key}}\\n \\n \\n \\n View\\n \\n \\n \\n \\n \\n
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/change_password.html';\nvar html = \"\\n\\n
      \\n\\t

      \\n\\t\\tChange your password\\n\\t

      \\n\\n\\t
      \\n\\t\\tYou cannot change password when ldap or auth proxy authentication is enabled.\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tOld Password\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tNew Password\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tConfirm Password\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\tCancel\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/create_team.html';\nvar html = \"\\n\\n
      \\n\\t

      New Team

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tName\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\tEmail\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tThis is optional and is primarily used for allowing custom team avatars.\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/invite.html';\nvar html = \"\\n\\n
      \\n\\n\\t

      Invite User

      \\n\\n\\t
      \\n\\t\\tSend invite or add existing Grafana user to the organization\\n\\t\\t{{contextSrv.user.orgName}}\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tEmail or Username\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tName\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n Role\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t\\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\tBack\\n\\t\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/newOrg.html';\nvar html = \"\\n\\n
      \\n\\t

      \\n\\t\\tNew Organization\\n\\t

      \\n\\n\\t

      Each organization contains their own dashboards, data sources and configuration, and cannot be shared between orgs. While users may belong to more than one, multiple organization are most frequently used in multi-tenant deployments.

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tOrg. name\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/orgDetails.html';\nvar html = \"\\n\\n
      \\n

      Organization profile

      \\n\\n
      \\n
      \\n
      \\n Organization name\\n \\n
      \\n
      \\n\\n
      \\n \\n
      \\n
      \\n \\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/orgUsers.html';\nvar html = \"\\n\\n
      \\n
      \\n \\n\\n
      \\n \\n \\n
      \\n\\n
      \\n\\n \\n \\n Invite\\n \\n\\n \\n \\n {{ctrl.externalUserMngLinkName}}\\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 \\n
      LoginEmail\\n Seen\\n Time since user was seen using Grafana\\n Role
      \\n \\n {{user.login}}{{user.email}}{{user.lastSeenAtAge}}\\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
      EmailName
      {{invite.email}}{{invite.name}}\\n \\n  \\n \\n \\n
      \\n
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/profile.html';\nvar html = \"\\n\\n
      \\n

      User Profile

      \\n\\n
      \\n\\n
      \\n Name\\n \\n
      \\n
      \\n Email\\n \\n \\n
      \\n
      \\n Username\\n \\n \\n
      \\n
      \\n \\n
      \\n
      \\n\\n \\n\\n

      Teams

      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      NameEmailMembers
      {{team.name}}{{team.email}}{{team.memberCount}}
      \\n
      \\n\\n

      Organizations

      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      NameRole
      {{org.name}}{{org.role}}\\n \\n Current\\n \\n \\n Select\\n \\n
      \\n
      \\n
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/org/partials/select_org.html';\nvar html = \"\\n\\n
      \\n\\n\\t\\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/panel/partials/metrics_tab.html';\nvar html = \"
      \\n
      \\n
      \\n\\t\\t\\t\\n \\n\\n \\n \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\t\\tfor example 1m if your data is written every minute. Access auto interval via variable $__interval for time range\\n\\t\\t\\t\\t\\tstring and $__interval_ms for numeric variable that can be used in math expressions.\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tIf your time series store has a query cache this option can override the default\\n\\t\\t\\t\\t\\tcache timeout. Specify a numeric value in seconds.\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tThe maximum data points the query should return. For graphs this\\n\\t\\t\\t\\t\\tis automatically set to one data point per pixel.\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t\\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/panel/partials/panelTime.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\n\\t\\tOverride relative time\\n\\t\\tLast\\n\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t\\tAdd time shift\\n\\t\\tAmount\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/panel/partials/query_editor_row.html';\nvar html = \"\\n
      \\n\\t\\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n \\n\\t\\t\\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/panel/partials/soloPanel.html';\nvar html = \"
      \\n\\t\\n\\t\\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/playlist/partials/playlist.html';\nvar html = \"\\n\\n
      \\n\\n\\t

      Edit Playlist

      \\n\\t

      New Playlist

      \\n\\n\\t

      A playlist rotates through a pre-selected list of Dashboards. A Playlist can be a great way to build situational awareness, or just show off your metrics to your team or visitors.

      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tName\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tInterval\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t

      Dashboards

      \\n\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\t\\t  {{playlistItem.title}}\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t{{playlistItem.title}}\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      Playlist is empty, add dashboards below.
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t

      Add dashboards

      \\n\\t\\t\\n\\n\\t\\t
      0\\\">\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t  {{playlistItem.title}}\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      0;\\\">\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t{{tag.term}}  ({{tag.count}})\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\n\\t
      \\n\\t\\tCreate\\n\\t\\tSave\\n\\t\\tCancel\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/playlist/partials/playlist_search.html';\nvar html = \"
      \\n \\n \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\tstarred\\n\\t\\t\\t |\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\ttags\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t|\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t{{tagName}}\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/playlist/partials/playlists.html';\nvar html = \"\\n\\n
      \\n
      0\\\">\\n \\n\\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      Name
      \\n \\n \\n \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/import_list/import_list.html';\nvar html = \"
      \\n\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t{{dash.title}}\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t{{dash.title}}\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/partials/ds_dashboards.html';\nvar html = \"\\n\\n
      \\n\\n\\t\\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/partials/ds_edit.html';\nvar html = \"\\n\\n
      \\n\\n
      \\n
      \\n Disclaimer. This datasource was added by config and cannot be modified using the UI. Please contact your server admin to update this datasource.\\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n
      \\n Name\\n \\n \\n The name is used when you select the data source in panels.\\n The Default data source is preselected in new\\n panels.\\n \\n
      \\n \\n
      \\n\\n
      \\n Type\\n
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n This plugin is marked as being in alpha state, which means it is in early development phase and\\n updates will include breaking changes.\\n
      \\n\\n\\t\\t
      \\n This plugin is marked as being in a beta development state. This means it is in currently in active development and could be\\n missing important features.\\n
      \\n\\n \\n \\n \\n \\n\\n
      \\n

      Bundled Plugin Dashboards

      \\n
      \\n \\n
      \\n
      \\n\\n
      \\n
      Testing....
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      {{ctrl.testing.message}}
      \\n
      \\n
      \\n
      \\n\\n
      \\n \\n \\n Back\\n
      \\n\\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/partials/ds_http_settings.html';\nvar html = \"
      \\n

      HTTP

      \\n
      \\n
      \\n
      \\n URL\\n \\n \\n

      Specify a complete HTTP URL (for example http://your_server:8080)

      \\n \\n Your access method is Browser, this means the URL\\n needs to be accessible from the browser.\\n \\n \\n Your access method is Server, this means the URL\\n needs to be accessible from the grafana backend/server.\\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n Access\\n
      \\n \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n\\n
      \\n
      \\n

      \\n Access mode controls how requests to the data source will be handled.\\n Server should be the preferred way if nothing else stated.\\n

      \\n
      Server access mode (Default):
      \\n

      \\n All requests will be made from the browser to Grafana backend/server which in turn will forward the requests to the data source\\n and by that circumvent possible Cross-Origin Resource Sharing (CORS) requirements.\\n The URL needs to be accessible from the grafana backend/server if you select this access mode.\\n

      \\n
      Browser access mode:
      \\n

      \\n All requests will be made from the browser directly to the data source and may be subject to\\n Cross-Origin Resource Sharing (CORS) requirements. The URL needs to be accessible from the browser if you select this\\n access mode.\\n

      \\n
      \\n
      \\n
      \\n\\n

      Auth

      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n
      \\n \\n
      \\n
      \\n\\n
      \\n
      Basic Auth Details
      \\n
      \\n \\n User\\n \\n \\n
      \\n\\n
      \\n \\n Password\\n \\n \\n
      \\n
      \\n\\n
      \\n
      \\n
      TLS Auth Details
      \\n TLS Certs are encrypted and stored in the Grafana database.\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n\\n
      \\n \\n reset\\n
      \\n
      \\n
      \\n\\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n reset\\n
      \\n
      \\n\\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n reset\\n
      \\n
      \\n
      \\n
      \\n\\n

      Advanced HTTP Settings

      \\n
      \\n
      \\n
      \\n Whitelisted Cookies\\n \\n \\n \\n Grafana Proxy deletes forwarded cookies by default. Specify cookies by name that should be forwarded to the data source.\\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/partials/plugin_edit.html';\nvar html = \"
      \\n \\n\\n
      \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/plugins/partials/plugin_page.html';\nvar html = \"
      \\n \\n\\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash';\nimport tinycolor from 'tinycolor2';\n\nexport const PALETTE_ROWS = 4;\nexport const PALETTE_COLUMNS = 14;\nexport const DEFAULT_ANNOTATION_COLOR = 'rgba(0, 211, 255, 1)';\nexport const OK_COLOR = 'rgba(11, 237, 50, 1)';\nexport const ALERTING_COLOR = 'rgba(237, 46, 24, 1)';\nexport const NO_DATA_COLOR = 'rgba(150, 150, 150, 1)';\nexport const REGION_FILL_ALPHA = 0.09;\n\nconst colors = [\n '#7EB26D',\n '#EAB839',\n '#6ED0E0',\n '#EF843C',\n '#E24D42',\n '#1F78C1',\n '#BA43A9',\n '#705DA0',\n '#508642',\n '#CCA300',\n '#447EBC',\n '#C15C17',\n '#890F02',\n '#0A437C',\n '#6D1F62',\n '#584477',\n '#B7DBAB',\n '#F4D598',\n '#70DBED',\n '#F9BA8F',\n '#F29191',\n '#82B5D8',\n '#E5A8E2',\n '#AEA2E0',\n '#629E51',\n '#E5AC0E',\n '#64B0C8',\n '#E0752D',\n '#BF1B00',\n '#0A50A1',\n '#962D82',\n '#614D93',\n '#9AC48A',\n '#F2C96D',\n '#65C5DB',\n '#F9934E',\n '#EA6460',\n '#5195CE',\n '#D683CE',\n '#806EB7',\n '#3F6833',\n '#967302',\n '#2F575E',\n '#99440A',\n '#58140C',\n '#052B51',\n '#511749',\n '#3F2B5B',\n '#E0F9D7',\n '#FCEACA',\n '#CFFAFF',\n '#F9E2D2',\n '#FCE2DE',\n '#BADFF4',\n '#F9D9F9',\n '#DEDAF7',\n];\n\nexport function sortColorsByHue(hexColors) {\n const hslColors = _.map(hexColors, hexToHsl);\n\n let sortedHSLColors = _.sortBy(hslColors, ['h']);\n sortedHSLColors = _.chunk(sortedHSLColors, PALETTE_ROWS);\n sortedHSLColors = _.map(sortedHSLColors, chunk => {\n return _.sortBy(chunk, 'l');\n });\n sortedHSLColors = _.flattenDeep(_.zip(...sortedHSLColors));\n\n return _.map(sortedHSLColors, hslToHex);\n}\n\nexport function hexToHsl(color) {\n return tinycolor(color).toHsl();\n}\n\nexport function hslToHex(color) {\n return tinycolor(color).toHexString();\n}\n\nexport let sortedColors = sortColorsByHue(colors);\nexport default colors;\n","var path = 'public/app/features/plugins/partials/update_instructions.html';\nvar html = \"\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/features/templating/partials/editor.html';\nvar html = \"
      \\n\\n\\t

      \\n\\t\\tVariables\\n\\t\\t> New\\n\\t\\t> Edit\\n\\t

      \\n\\n\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      There are no variables added yet
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tAdd variable\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      What do variables do?
      \\n\\t\\t\\t\\t\\t

      Variables enable more interactive and dynamic dashboards. Instead of hard-coding things like server or sensor names\\n\\t\\t\\t\\t\\tin your metric queries you can use variables in their place. Variables are shown as dropdown select boxes at the top of\\n\\t\\t\\t\\t\\tthe dashboard. These dropdowns make it easy to change the data being displayed in your dashboard.\\n\\n\\t\\t\\t\\t\\tCheck out the\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tTemplating documentation\\n\\t\\t\\t\\t\\t for more information.\\n\\t\\t\\t\\t

      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t New\\n\\t\\t\\t
      \\n\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      VariableDefinition
      \\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t${{variable.name}}\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t{{variable.query}}\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\tDuplicate\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      General
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tName\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tType\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t{{variableTypes[current.type].description}}\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\tTemplate names cannot begin with '__', that's reserved for Grafana's global variables\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tLabel\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tHide\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Interval Options
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\tValues\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tStep count How many times should the current time range be divided to calculate the value\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tMin interval The calculated value will not go below this threshold\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Custom Options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tValues separated by comma\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Constant options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tValue\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Text options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tDefault value\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Query Options
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\tData source\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tRefresh\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\tWhen to update the values of this variable.\\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tQuery\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tRegex\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tOptional, if you want to extract part of a series name or metric node segment.\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\tSort\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\tHow to sort the values of this variable.\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Data source options
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tData source\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Selection Options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tCustom all value\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Value groups/tags (Experimental feature)
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\tTags query\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
    • Tag values query
    • \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Preview of values
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n {{option.text}}\\n
      \\n
      optionsLimit\\\">\\n Show more\\n
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t{{infoText}}\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/confirm_modal.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/edit_json.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t

      \\n\\t\\t\\tJSON\\n\\t\\t

      \\n\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/dashboard.html';\nvar html = \"
      \\n\\t\\n\\n\\t
      \\n \\n \\n\\n
      \\n \\n \\n\\n \\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/error.html';\nvar html = \"\\n\\n
      \\n
      \\n
      \\n
      \\n
      \\n

      100%

      \\n

      80%

      \\n

      60%

      \\n

      40%

      \\n

      20%

      \\n

      0%

      \\n
      \\n
      \\n \\n
      \\n

      Then

      \\n

      Now

      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n

      current

      \\n
      \\n
      \\n \\n
      \\n
      \\n

      Chances you are on the page you are looking for.

      \\n

      0%

      \\n
      \\n
      \\n

      Sorry for the inconvenience

      \\n

      Please go back to your\\n home dashboard and try again.

      \\n

      If the error persists, seek help on the\\n community site.

      \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/login.html';\nvar html = \"
      \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/modal.html';\nvar html = \"\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/panelgeneral.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      Info
      \\n\\t\\t
      \\n\\t\\t\\tTitle\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tDescription\\n\\t\\t\\t\\n\\t\\t
      \\n \\n\\t
      \\n\\n
      \\n
      Repeat
      \\n\\t\\t
      \\n\\t\\t\\tFor each value of\\n\\t\\t\\t\\n\\t\\t
      \\n
      \\n\\t\\t\\tDirection\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin width\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t\\n\\n\\n
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/reset_password.html';\nvar html = \"\\n\\n
      \\n\\t\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/signup_invited.html';\nvar html = \"\\n\\n
      \\n\\t

      Hello {{greeting}}.

      \\n\\n\\t
      \\n\\t\\t{{invitedBy}} has invited you to join Grafana and the organization {{contextSrv.user.orgName}}
      Please complete the following to accept your invitation and continue:\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tEmail\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tName\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tUsername\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/signup_step2.html';\nvar html = \"\\n\\n
      \\n \\n
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/partials/valueSelectDropdown.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/cloudwatch/partials/annotations.editor.html';\nvar html = \"\\n\\n
      \\n\\t
      \\n\\t\\t
      Prefix matching
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\tAction\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tAlarm Name\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/cloudwatch/partials/config.html';\nvar html = \"

      CloudWatch details

      \\n\\n
      \\n
      \\n \\n \\n
      \\n\\n
      \\n \\n \\n \\n Credentials profile name, as specified in ~/.aws/credentials, leave blank for default\\n \\n
      \\n\\n
      \\n \\n \\n Reset\\n \\n
      \\n\\n
      \\n \\n \\n Reset\\n \\n
      \\n\\n
      \\n \\n \\n \\n ARN of Assume Role\\n \\n
      \\n\\n
      \\n \\n
      \\n \\n \\n Specify the region, such as for US West (Oregon) use ` us-west-2 ` as the region.\\n \\n
      \\n
      \\n
      \\n \\n \\n \\n Namespaces of Custom Metrics\\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/cloudwatch/partials/query.editor.html';\nvar html = \"\\n\\t\\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/cloudwatch/partials/query.parameter.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t\\n\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\tAlias replacement variables:\\n\\t\\t\\t
        \\n\\t\\t\\t\\t
      • {{metric}}
      • \\n\\t\\t\\t\\t
      • {{stat}}
      • \\n\\t\\t\\t\\t
      • {{namespace}}
      • \\n\\t\\t\\t\\t
      • {{region}}
      • \\n\\t\\t\\t\\t
      • {{period}}
      • \\n\\t\\t\\t\\t
      • {{YOUR_DIMENSION_NAME}}
      • \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/elasticsearch/partials/annotations.editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\tIndex name\\n\\t\\t\\n\\t
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      Field mappings
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tTime\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tText\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTags\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTitle (deprecated)\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/elasticsearch/partials/bucket_agg.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t\\n\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t\\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/elasticsearch/partials/config.html';\nvar html = \"\\n\\n\\n

      Elasticsearch details

      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tIndex name\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n Pattern\\n \\n \\n \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\tTime field name\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n Version\\n \\n \\n \\n\\t
      \\n
      =56\\\">\\n Max concurrent Shard Requests\\n \\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin time interval\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\tfor example 1m if your data is written every minute.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/elasticsearch/partials/metric_agg.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t\\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\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\\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 \\n
      \\n\\n
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/elasticsearch/partials/query.editor.html';\nvar html = \"\\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/grafana-live/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/grafana/partials/annotations.editor.html';\nvar html = \"\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\tFilter by\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t
        \\n\\t\\t\\t\\t\\t\\t
      • Dashboard: This will fetch annotation and alert state changes for whole dashboard and show them only on the event's originating panel.
      • \\n\\t\\t\\t\\t\\t\\t
      • All: This will fetch any annotation events that match the tags filter.
      • \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tMax limit\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTags\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/grafana/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/graphite/partials/annotations.editor.html';\nvar html = \"
      \\n
      \\n Graphite query\\n \\n
      \\n\\n\\t
      Or
      \\n\\n
      \\n Graphite events tags\\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/graphite/partials/config.html';\nvar html = \"\\n\\n\\n

      Graphite details

      \\n\\n
      \\n\\t
      \\n\\t\\t\\n Version\\n \\n This option controls what functions are available in the Graphite query editor.\\n \\n \\n \\n \\n \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/graphite/partials/query.editor.html';\nvar html = \"\\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
      \\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\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/influxdb/partials/annotations.editor.html';\nvar html = \"\\n
      \\n\\t
      \\n\\t\\t\\n\\t
      \\n
      \\n\\n
      Field mappings If your influxdb query returns more than one field you need to specify the column names below. An annotation event is composed of a title, tags, and an additional text field.
      \\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tText\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTags\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTitle (deprecated)\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/influxdb/partials/config.html';\nvar html = \"\\n\\n\\n

      InfluxDB Details

      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tDatabase\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tUser\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n\\n
      \\n\\t
      \\n\\t\\t
      Database Access
      \\n\\t\\t

      \\n\\t\\t\\tSetting the database for this datasource does not deny access to other databases. The InfluxDB query syntax allows\\n\\t\\t\\tswitching the database in the query. For example:\\n\\t\\t\\tSHOW MEASUREMENTS ON _internal or SELECT * FROM \\\"_internal\\\"..\\\"database\\\" LIMIT 10\\n\\t\\t\\t

      \\n\\t\\t\\tTo support data isolation and security, make sure appropriate permissions are configured in InfluxDB.\\n\\t\\t

      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin time interval\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\tfor example 1m if your data is written every minute.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/influxdb/partials/query.editor.html';\nvar html = \"\\n\\n\\t
      \\n
      \\n \\n
      \\n
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n
      \\n\\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n
      \\n\\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\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\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/logging/partials/config.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mssql/partials/annotations.editor.html';\nvar html = \"\\n
      \\n
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n
      \\n \\n\\t\\t
      \\n
      \\n\\n
      \\n\\t\\t
      Annotation Query Format
      \\nAn annotation is an event that is overlaid on top of graphs. The query can have up to three columns per row, the time column is mandatory. Annotation rendering is expensive so it is important to limit the number of rows returned.\\n\\n- column with alias: time for the annotation event time. Use epoch time or any native date data type.\\n- column with alias: text for the annotation text.\\n- column with alias: tags for annotation tags. This is a comma separated string of tags e.g. 'tag1,tag2'.\\n\\n\\nMacros:\\n- $__time(column) -> column AS time\\n- $__timeEpoch(column) -> DATEDIFF(second, '1970-01-01', column) AS time\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) -> column >= 1492750877 AND column <= 1492750877\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() -> '2017-04-21T05:01:17Z'\\n- $__timeTo() -> '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() -> 1492750877\\n- $__unixEpochTo() -> 1492750877\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mssql/partials/config.html';\nvar html = \"\\n

      MSSQL Connection

      \\n\\n
      \\n\\t
      \\n\\t\\tHost\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\tDatabase\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tUser\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t\\treset\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n

      MSSQL details

      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin time interval\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\tfor example 1m if your data is written every minute.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t
      User Permission
      \\n\\t\\t

      \\n\\t\\t\\tThe database user should only be granted SELECT permissions on the specified database & tables you want to query.\\n\\t\\t\\tGrafana does not validate that queries are safe so queries can contain any SQL statement. For example, statements\\n\\t\\t\\tlike USE otherdb; and DROP TABLE user; would be executed. To protect against this we\\n\\t\\t\\tHighly recommmend you create a specific MSSQL user with restricted permissions.\\n\\t\\t

      \\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mssql/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n \\n\\t\\t
      \\n\\t\\t
      \\n \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      {{ctrl.lastQueryMeta.sql}}
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      Time series:\\n- return column named time (in UTC), as a unix time stamp or any sql native date data type. You can use the macros below.\\n- any other columns returned will be the time point values.\\nOptional:\\n  - return column named metric to represent the series name.\\n  - If multiple value columns are returned the metric column is used as prefix.\\n  - If no column named metric is found the column name of the value column is used as series name\\n\\nResultsets of time series queries need to be sorted by time.\\n\\nTable:\\n- return any set of columns\\n\\nMacros:\\n- $__time(column) -> column AS time\\n- $__timeEpoch(column) -> DATEDIFF(second, '1970-01-01', column) AS time\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) -> column >= 1492750877 AND column <= 1492750877\\n- $__timeGroup(column, '5m'[, fillvalue]) -> CAST(ROUND(DATEDIFF(second, '1970-01-01', column)/300.0, 0) as bigint)*300.\\n     by setting fillvalue grafana will fill in missing values according to the interval\\n     fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet\\n- $__timeGroupAlias(column, '5m'[, fillvalue]) -> CAST(ROUND(DATEDIFF(second, '1970-01-01', column)/300.0, 0) as bigint)*300 AS [time]\\n- $__unixEpochGroup(column,'5m') -> FLOOR(column/300)*300\\n- $__unixEpochGroupAlias(column,'5m') -> FLOOR(column/300)*300 AS [time]\\n\\nExample of group by and order by with $__timeGroup:\\nSELECT\\n  $__timeGroup(date_time_col, '1h') AS time,\\n  sum(value) as value\\nFROM yourtable\\nGROUP BY $__timeGroup(date_time_col, '1h')\\nORDER BY 1\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() ->  '2017-04-21T05:01:17Z'\\n- $__timeTo() ->  '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() -> 1492750877\\n- $__unixEpochTo() -> 1492750877\\n\\t\\t
      \\n\\t
      \\n\\n\\t\\n\\n\\t
      \\n\\t\\t
      {{ctrl.lastQueryError}}
      \\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mysql/partials/annotations.editor.html';\nvar html = \"\\n
      \\n
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n
      \\n \\n\\t\\t
      \\n
      \\n\\n
      \\n\\t\\t
      Annotation Query Format
      \\nAn annotation is an event that is overlaid on top of graphs. The query can have up to three columns per row, the time or time_sec column is mandatory. Annotation rendering is expensive so it is important to limit the number of rows returned.\\n\\n- column with alias: time or time_sec for the annotation event time. Use epoch time or any native date data type.\\n- column with alias: text for the annotation text\\n- column with alias: tags for annotation tags. This is a comma separated string of tags e.g. 'tag1,tag2'\\n\\n\\nMacros:\\n- $__time(column) -> UNIX_TIMESTAMP(column) as time (or as time_sec)\\n- $__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time (or as time_sec)\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) -> time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() -> '2017-04-21T05:01:17Z'\\n- $__timeTo() -> '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() -> 1492750877\\n- $__unixEpochTo() -> 1492750877\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mysql/partials/config.html';\nvar html = \"\\n

      MySQL Connection

      \\n\\n
      \\n\\t
      \\n\\t\\tHost\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\tDatabase\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tUser\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n

      MySQL details

      \\n\\n
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin time interval\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\tfor example 1m if your data is written every minute.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n
      \\n\\t
      \\n\\t\\t
      User Permission
      \\n\\t\\t

      \\n\\t\\t\\tThe database user should only be granted SELECT permissions on the specified database & tables you want to query.\\n\\t\\t\\tGrafana does not validate that queries are safe so queries can contain any SQL statement. For example, statements\\n\\t\\t\\tlike USE otherdb; and DROP TABLE user; would be executed. To protect against this we\\n\\t\\t\\tHighly recommmend you create a specific MySQL user with restricted permissions.\\n\\n\\t\\t\\tCheckout the MySQL Data Source Docs for more information.\\n\\t\\t

      \\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/mysql/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n \\n\\t\\t
      \\n\\t\\t
      \\n \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      {{ctrl.lastQueryMeta.sql}}
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      Time series:\\n- return column named time or time_sec (in UTC), as a unix time stamp or any sql native date data type. You can use the macros below.\\n- return column(s) with numeric datatype as values\\nOptional:\\n  - return column named metric to represent the series name.\\n  - If multiple value columns are returned the metric column is used as prefix.\\n  - If no column named metric is found the column name of the value column is used as series name\\n\\nResultsets of time series queries need to be sorted by time.\\n\\nTable:\\n- return any set of columns\\n\\nMacros:\\n- $__time(column) -> UNIX_TIMESTAMP(column) as time_sec\\n- $__timeEpoch(column) -> UNIX_TIMESTAMP(column) as time_sec\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) ->  time_unix_epoch > 1492750877 AND time_unix_epoch < 1492750877\\n- $__timeGroup(column,'5m'[, fillvalue]) -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed)\\n     by setting fillvalue grafana will fill in missing values according to the interval\\n     fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet\\n- $__timeGroupAlias(column,'5m') -> cast(cast(UNIX_TIMESTAMP(column)/(300) as signed)*300 as signed) AS \\\"time\\\"\\n- $__unixEpochGroup(column,'5m') -> column DIV 300 * 300\\n- $__unixEpochGroupAlias(column,'5m') -> column DIV 300 * 300 AS \\\"time\\\"\\n\\nExample of group by and order by with $__timeGroup:\\nSELECT\\n  $__timeGroup(timestamp_col, '1h') AS time,\\n  sum(value_double) as value\\nFROM yourtable\\nGROUP BY 1\\nORDER BY 1\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() ->  '2017-04-21T05:01:17Z'\\n- $__timeTo() ->  '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() ->  1492750877\\n- $__unixEpochTo() ->  1492750877\\n\\t\\t
      \\n\\t
      \\n\\n\\t\\n\\n\\t
      \\n\\t\\t
      {{ctrl.lastQueryError}}
      \\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/opentsdb/partials/annotations.editor.html';\nvar html = \"
      \\n
      \\n OpenTSDB metrics query\\n \\n
      \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/opentsdb/partials/config.html';\nvar html = \"\\n\\n
      OpenTSDB settings
      \\n
      \\n \\n Version\\n \\n \\n \\n \\n
      \\n
      \\n \\n Resolution\\n \\n \\n \\n \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import { EventEmitter } from 'eventemitter3';\n\nexport class Emitter {\n emitter: any;\n\n constructor() {\n this.emitter = new EventEmitter();\n }\n\n emit(name, data?) {\n this.emitter.emit(name, data);\n }\n\n on(name, handler, scope?) {\n this.emitter.on(name, handler);\n\n if (scope) {\n const unbind = scope.$on('$destroy', () => {\n this.emitter.off(name, handler);\n unbind();\n });\n }\n }\n\n removeAllListeners(evt?) {\n this.emitter.removeAllListeners(evt);\n }\n\n off(name, handler) {\n this.emitter.off(name, handler);\n }\n}\n","var path = 'public/app/plugins/datasource/opentsdb/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tblank for auto, or for example 1m\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      = 2\\\">\\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t\\n\\t\\t\\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      = 2\\\">\\n\\t\\t
      \\n\\n\\t\\t\\t\\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t{{fil.tagk}} = {{fil.type}}({{fil.filter}}) , groupBy = {{fil.groupBy}}\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\n \\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n \\n\\t\\t\\t\\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\n\\t\\t\\n\\t\\t\\n\\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      2\\\">\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/postgres/partials/annotations.editor.html';\nvar html = \"\\n
      \\n
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n
      \\n
      \\n \\n\\t\\t
      \\n
      \\n\\n
      \\n\\t\\t
      Annotation Query Format
      \\nAn annotation is an event that is overlaid on top of graphs. The query can have up to three columns per row, the time column is mandatory. Annotation rendering is expensive so it is important to limit the number of rows returned.\\n\\n- column with alias: time for the annotation event time. Use epoch time or any native date data type.\\n- column with alias: text for the annotation text\\n- column with alias: tags for annotation tags. This is a comma separated string of tags e.g. 'tag1,tag2'\\n\\n\\nMacros:\\n- $__time(column) -> column as \\\"time\\\"\\n- $__timeEpoch -> extract(epoch from column) as \\\"time\\\"\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) -> column >= 1492750877 AND column <= 1492750877\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() -> '2017-04-21T05:01:17Z'\\n- $__timeTo() -> '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() -> 1492750877\\n- $__unixEpochTo() -> 1492750877\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/postgres/partials/config.html';\nvar html = \"\\n

      PostgreSQL Connection

      \\n\\n
      \\n\\t
      \\n\\t\\tHost\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\tDatabase\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tUser\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tPassword\\n\\t\\t\\t\\n
      \\n
      \\n Password\\n \\n reset\\n
      \\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tThis option determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n

      PostgreSQL details

      \\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\tVersion\\n\\t\\t\\t\\n\\t\\t\\t\\tThis option controls what functions are available in the PostgreSQL query builder.\\n\\t\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\n\\t
      \\n\\t
      \\n\\t\\t\\n \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMin time interval\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\tA lower limit for the auto group by time interval. Recommended to be set to write frequency,\\n\\t\\t\\t\\tfor example 1m if your data is written every minute.\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n
      \\n

      \\n\\t\\t\\tTimescaleDB is a time-series database built as a PostgreSQL extension. If enabled, Grafana will use time_bucket in the $__timeGroup macro and display TimescaleDB specific aggregate functions in the query builder.\\n

      \\n
      \\n
      \\n\\n
      \\n\\n\\n
      \\n\\t
      \\n\\t\\t
      User Permission
      \\n\\t\\t

      \\n\\t\\t\\tThe database user should only be granted SELECT permissions on the specified database & tables you want to query.\\n\\t\\t\\tGrafana does not validate that queries are safe so queries can contain any SQL statement. For example, statements\\n\\t\\t\\tlike DELETE FROM user; and DROP TABLE user; would be executed. To protect against this we\\n\\t\\t\\tHighly recommmend you create a specific PostgreSQL user with restricted permissions.\\n\\t\\t

      \\n\\t
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/prometheus/partials/annotations.editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\tSearch expression\\n\\t\\t\\n\\t
      \\n\\t
      \\n\\t\\tstep\\n\\t\\t\\n\\t
      \\n
      \\n\\n
      \\n\\t
      Field formats
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tTitle\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\tTags\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\tText\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      Other options
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/postgres/partials/query.editor.html';\nvar html = \"\\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\\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
      \\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
      \\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\\n
      \\n
      {{ctrl.lastQueryMeta.sql}}
      \\n
      \\n\\n
      \\n
      Time series:\\n- return column named time (UTC in seconds or timestamp)\\n- return column(s) with numeric datatype as values\\nOptional: \\n  - return column named metric to represent the series name. \\n  - If multiple value columns are returned the metric column is used as prefix. \\n  - If no column named metric is found the column name of the value column is used as series name\\n\\nResultsets of time series queries need to be sorted by time.\\n\\nTable:\\n- return any set of columns\\n\\nMacros:\\n- $__time(column) -> column as \\\"time\\\"\\n- $__timeEpoch -> extract(epoch from column) as \\\"time\\\"\\n- $__timeFilter(column) -> column BETWEEN '2017-04-21T05:01:17Z' AND '2017-04-21T05:01:17Z'\\n- $__unixEpochFilter(column) ->  column >= 1492750877 AND column <= 1492750877\\n- $__timeGroup(column,'5m'[, fillvalue]) -> (extract(epoch from column)/300)::bigint*300\\n     by setting fillvalue grafana will fill in missing values according to the interval\\n     fillvalue can be either a literal value, NULL or previous; previous will fill in the previous seen value or NULL if none has been seen yet\\n- $__timeGroupAlias(column,'5m') -> (extract(epoch from column)/300)::bigint*300 AS \\\"time\\\"\\n- $__unixEpochGroup(column,'5m') -> floor(column/300)*300\\n- $__unixEpochGroupAlias(column,'5m') -> floor(column/300)*300 AS \\\"time\\\"\\n\\nExample of group by and order by with $__timeGroup:\\nSELECT\\n  $__timeGroup(date_time_col, '1h'),\\n  sum(value) as value\\nFROM yourtable\\nGROUP BY time\\nORDER BY time\\n\\nOr build your own conditionals using these macros which just return the values:\\n- $__timeFrom() ->  '2017-04-21T05:01:17Z'\\n- $__timeTo() ->  '2017-04-21T05:01:17Z'\\n- $__unixEpochFrom() ->  1492750877\\n- $__unixEpochTo() ->  1492750877\\n    
      \\n
      \\n\\n \\n\\n
      \\n
      {{ctrl.lastQueryError}}
      \\n
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/prometheus/partials/config.html';\nvar html = \"\\n\\n\\n
      \\n
      \\n
      \\n Scrape interval\\n \\n \\n Set this to your global scrape interval defined in your Prometheus config file. This will be used as a lower limit for the\\n Prometheus step query parameter.\\n \\n
      \\n
      \\n\\n
      \\n
      \\n Query timeout\\n \\n \\n Set the Prometheus query timeout.\\n \\n
      \\n
      \\n\\n
      \\n \\n
      \\n \\n \\n Specify the HTTP Method to query Prometheus. (POST is only available in Prometheus >= v2.1.0)\\n \\n
      \\n
      \\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/prometheus/partials/query.editor.html';\nvar html = \"\\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n
      \\n
      \\n \\n \\n \\n \\n Controls the name of the time series, using name or pattern. For example\\n {{hostname}} will be replaced with label value for the label hostname.\\n \\n
      \\n\\n
      \\n \\n \\n \\n Leave blank for auto handling based on time range and panel width. Note that the actual dates used in the query will be adjusted\\n to a multiple of the interval step.\\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
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/stackdriver/partials/annotations.editor.html';\nvar html = \"\\n\\n
      \\n
      \\n Title\\n \\n
      \\n
      \\n Text\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      Annotation Query Format
      \\nAn annotation is an event that is overlaid on top of graphs. Annotation rendering is expensive so it is important to limit the number of rows returned.\\n\\nThe Title and Text fields support templating and can use data returned from the query. For example, the Title field could have the following text:\\n\\n{{metric.type}} has value: {{metric.value}}\\n\\nExample Result: monitoring.googleapis.com/uptime_check/http_status has this value: 502\\n\\n\\n{{metric.value}} = value of the metric/point\\n{{metric.type}} = metric type e.g. compute.googleapis.com/instance/cpu/usage_time\\n{{metric.name}} = name part of metric e.g. instance/cpu/usage_time\\n{{metric.service}} = service part of metric e.g. compute\\n\\n{{metric.label.label_name}} = Metric label metadata e.g. metric.label.instance_name\\n{{resource.label.label_name}} = Resource label metadata e.g. resource.label.zone\\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/stackdriver/partials/config.html';\nvar html = \"
      \\n
      \\n
      GCP Service Account
      \\n

      \\n To authenticate with the Stackdriver API, you need to create a Google Cloud Platform (GCP) Service Account for\\n the Project you want to show data for. A Grafana datasource integrates with one GCP Project. If you want to\\n visualize data from multiple GCP Projects then you need to create one datasource per GCP Project.\\n

      \\n

      \\n The Monitoring Viewer role provides all the permissions that Grafana needs.\\n

      \\n

      \\n The following APIs need to be enabled on GCP for the datasource to work:\\n

      \\n

      \\n

      Detailed instructions on how to create a Service Account can be found in\\n the documentation.

      \\n
      \\n
      \\n\\n
      \\n
      \\n

      Service Account Authentication

      \\n Upload your Service Account key file or paste in the contents of the file. The file\\n contents will be encrypted and saved in the Grafana database.\\n
      \\n\\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      Or paste Service Account key JSON
      \\n
      \\n \\n
      \\n
      \\n \\n {{valError}}\\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      Uploaded Key Details
      \\n\\n
      \\n Project\\n \\n
      \\n
      \\n Client Email\\n \\n
      \\n
      \\n Token URI\\n \\n
      \\n
      \\n Private Key\\n \\n
      \\n\\n
      \\n Reset Service\\n Account Key \\n \\n Reset to clear the uploaded key and upload a new file.\\n \\n
      \\n
      \\n\\n

      Do not forget to save your changes after uploading a file.

      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/stackdriver/partials/query.aggregation.html';\nvar html = \"
      \\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
      \\n\\n
      \\n \\n
      \\n
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import _ from 'lodash';\n\nexport interface BuildInfo {\n version: string;\n commit: string;\n isEnterprise: boolean;\n env: string;\n}\n\nexport class Settings {\n datasources: any;\n panels: any;\n appSubUrl: string;\n windowTitlePrefix: string;\n buildInfo: BuildInfo;\n newPanelTitle: string;\n bootData: any;\n externalUserMngLinkUrl: string;\n externalUserMngLinkName: string;\n externalUserMngInfo: string;\n allowOrgCreate: boolean;\n disableLoginForm: boolean;\n defaultDatasource: string;\n alertingEnabled: boolean;\n alertingErrorOrTimeout: string;\n alertingNoDataOrNullValues: string;\n authProxyEnabled: boolean;\n exploreEnabled: boolean;\n ldapEnabled: boolean;\n oauth: any;\n disableUserSignUp: boolean;\n loginHint: any;\n loginError: any;\n\n constructor(options) {\n const defaults = {\n datasources: {},\n windowTitlePrefix: 'Grafana - ',\n panels: {},\n newPanelTitle: 'Panel Title',\n playlist_timespan: '1m',\n unsaved_changes_warning: true,\n appSubUrl: '',\n buildInfo: {\n version: 'v1.0',\n commit: '1',\n env: 'production',\n isEnterprise: false,\n },\n };\n\n _.extend(this, defaults, options);\n }\n}\n\nconst bootData = (window as any).grafanaBootData || { settings: {} };\nconst options = bootData.settings;\noptions.bootData = bootData;\n\nconst config = new Settings(options);\nexport default config;\n","var path = 'public/app/plugins/datasource/stackdriver/partials/query.editor.html';\nvar html = \"\\n \\n \\n
      \\n
      \\n Alias By\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Project\\n \\n
      \\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      {{ctrl.lastQueryMeta.rawQueryString}}
      \\n
      \\n
      \\n
      Alias Patterns
      \\n\\n Format the legend keys any way you want by using alias patterns.

      \\n\\n Example: {{metric.name}} - {{metric.label.instance_name}}
      \\n Result:   cpu/usage_time - server1-europe-west-1

      \\n\\n Patterns
      \\n
        \\n
      • \\n {{metric.type}} = metric type e.g. compute.googleapis.com/instance/cpu/usage_time\\n
      • \\n
      • \\n {{metric.name}} = name part of metric e.g. instance/cpu/usage_time\\n
      • \\n
      • \\n {{metric.service}} = service part of metric e.g. compute\\n
      • \\n
      • \\n {{metric.label.label_name}} = Metric label metadata e.g.\\n metric.label.instance_name\\n
      • \\n
      • \\n {{resource.label.label_name}} = Resource label metadata e.g. resource.label.zone\\n
      • \\n
      \\n
      \\n
      \\n
      {{ctrl.lastQueryError}}
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/stackdriver/partials/query.filter.html';\nvar html = \"
      \\n
      \\n Service\\n \\n
      \\n
      \\n Metric\\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Filter\\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n Group By\\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/datasource/testdata/partials/query.editor.html';\nvar html = \"\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n \\n\\t\\t\\t\\n \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/alertlist/editor.html';\nvar html = \"
      \\n
      \\n
      Options
      \\n
      \\n Show\\n
      \\n \\n
      \\n
      \\n
      \\n Max items\\n \\n
      \\n
      \\n Sort order\\n
      \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      Filter
      \\n
      \\n Alert name\\n \\n
      \\n
      \\n Dashboard title\\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n Dashboard tags\\n \\n \\n
      \\n
      \\n
      \\n
      State filter
      \\n \\n \\n \\n \\n \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/alertlist/module.html';\nvar html = \"
      \\n
      \\n {{ctrl.noAlertsMessage}}\\n
      \\n\\n
      \\n
        \\n
      1. \\n
        \\n \\n
        \\n
        \\n
        \\n

        \\n \\n {{alert.name}}\\n \\n

        \\n
        \\n {{alert.stateModel.text}}\\n for {{alert.newStateDateAgo}}\\n
        \\n
        \\n
        \\n
      2. \\n
      \\n
      \\n\\n
      \\n
        \\n
      1. \\n
        \\n \\n
        \\n
        \\n
        \\n

        {{al.alertName}}

        \\n
        \\n {{al.stateModel.text}}\\n
        \\n
        \\n {{al.info}}\\n
        \\n
        \\n {{al.time}}\\n
        \\n
      2. \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/dashlist/editor.html';\nvar html = \"
      \\n
      \\n
      Options
      \\n\\n \\n \\n \\n\\n \\n\\n
      \\n Max items\\n \\n
      \\n
      \\n\\n
      \\n
      Search
      \\n\\n
      \\n Query\\n \\n
      \\n\\n
      \\n \\n\\t\\t\\t\\n
      \\n\\n
      \\n Tags\\n \\n \\n
      \\n
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/dashlist/module.html';\nvar html = \"
      \\n
      \\n
      \\n
      \\n {{group.header}}\\n
      \\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/gettingstarted/editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMode\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tSearch options\\n\\t\\t\\tQuery\\n\\n\\t\\t\\t\\n\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tTags\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tLimit number to\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/gettingstarted/module.html';\nvar html = \"
      \\n
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/graph/axes_editor.html';\nvar html = \"
      \\n\\t
      \\n\\n\\t\\t
      Left Y
      \\n\\t\\t
      Right Y
      \\n\\n\\t\\t\\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      X-Axis
      \\n\\t\\t\\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n \\n\\t\\t
      \\n\\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      Y-Axes
      \\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","import React from 'react';\nimport Transition from 'react-transition-group/Transition';\n\nconst defaultMaxHeight = '200px'; // When animating using max-height we need to use a static value.\n// If this is not enough, pass in {\n // There are 4 main states a Transition can be in:\n // ENTERING, ENTERED, EXITING, EXITED\n // https://reactcommunity.org/react-transition-group/\n const transitionStyles = {\n exited: { maxHeight: 0 },\n entering: { maxHeight: maxHeight },\n entered: { maxHeight: maxHeight, overflow: 'visible' },\n exiting: { maxHeight: 0 },\n };\n\n return (\n \n {state => (\n \n {children}\n
      \n )}\n \n );\n};\n","var path = 'public/app/plugins/panel/graph/tab_display.html';\nvar html = \"
      \\n\\t\\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      Draw Modes
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      Mode Options
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      Hover tooltip
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t
      Stacking & Null value
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\t
      Series specific overrides Regex match example: /server[0-3]/i
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t
      \\n\\n\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t
      \\n\\n\\t\\t\\n\\t
      \\n\\n\\t
      \\n\\t\\t\\n\\t
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/graph/tab_legend.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      Options
      \\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      Values
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\n\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      Hide series
      \\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/heatmap/module.html';\nvar html = \"
      \\n\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\t{{ctrl.dataWarning.title}}\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/heatmap/partials/axes_editor.html';\nvar html = \"
      \\n
      \\n
      Y Axis
      \\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 \\n
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      Buckets
      \\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 \\n
      \\n
      \\n
      \\n\\n
      \\n
      Data format
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/heatmap/partials/display_editor.html';\nvar html = \"
      \\n
      \\n
      Colors
      \\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
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n\\n
      \\n \\n
      \\n
      \\n\\n
      \\n
      Color scale
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n
      \\n
      Legend
      \\n \\n \\n
      \\n\\n
      \\n
      Buckets
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n\\n
      \\n
      Tooltip
      \\n \\n \\n
      \\n \\n \\n
      \\n \\n \\n
      \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/pluginlist/editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMode\\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t\\t
      \\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tSearch options\\n\\t\\t\\tQuery\\n\\n\\t\\t\\t\\n\\n\\t\\t
      \\n\\n\\t\\t
      \\n\\t\\t\\tTags\\n\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tLimit number to\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/pluginlist/module.html';\nvar html = \"\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/singlestat/editor.html';\nvar html = \"
      \\n
      \\n
      Value
      \\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 \\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
      Coloring
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n Invert\\n \\n \\n
      \\n
      \\n\\n
      \\n
      Spark lines
      \\n \\n
      \\n \\n
      \\n \\n \\n \\n \\n
      \\n
      \\n \\n \\n \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      Gauge
      \\n \\n
      \\n
      \\n \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n \\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/singlestat/mappings.html';\nvar html = \"
      \\n
      \\n
      \\n \\n Type\\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n
      Set value mappings
      \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n\\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      Set range mappings
      \\n
      \\n
      \\n \\n \\n \\n From\\n \\n To\\n \\n Text\\n \\n
      \\n\\n
      \\n \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/singlestat/module.html';\nvar html = \"
      \\n\\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/table/column_options.html';\nvar html = \"
      \\n \\n\\n
      \\n\\n
      \\n
      Options
      \\n
      \\n
      \\n \\n \\n
      \\n
      \\n
      \\n \\n \\n
      \\n \\n
      \\n\\n
      \\n
      Type
      \\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 \\n \\n
      \\n
      \\n
      \\n\\n
      \\n
      Value Mappings
      \\n
      \\n
      \\n
      \\n \\n Type\\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n \\n \\n \\n From\\n \\n To\\n \\n Text\\n \\n
      \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n
      \\n\\n
      \\n
      Thresholds
      \\n
      \\n \\n \\n
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n \\n
      \\n Invert\\n
      \\n
      \\n
      \\n\\n
      \\n
      Link
      \\n
      \\n \\n \\n
      \\n
      \\n \\n \\n
      \\n \\n
      \\n\\n
      \\n\\n \\n
      \\n
      \\n\\n
      \\n
      \";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/table/editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      Data
      \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n \\n
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t\\t
      \\n\\t\\t\\t\\t\\n\\t\\t\\t
      \\n\\t\\t
      \\n\\t
      \\n\\n\\t
      \\n\\t\\t
      Paging
      \\n
      \\n \\n \\n
      \\n \\n
      \\n \\n
      \\n \\n
      \\n
      \\n
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/table/module.html';\nvar html = \"\\n
      \\n\\t
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t\\t\\t{{col.title}}\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t\\t\\n\\t\\t\\t\\t\\t\\t
      \\n\\t\\t\\t\\t\\t
      \\n\\t
      \\n
      \\n
      \\n\\t\\n\\t\\tNo data to show Nothing returned by data query\\n\\t\\n
      \\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/text/editor.html';\nvar html = \"
      \\n\\t
      \\n\\t\\t
      \\n\\t\\t\\tMode\\n\\t\\t\\t\\n\\t\\t\\t\\t\\n\\t\\t\\t\\n\\t\\t
      \\n\\t
      \\n
      \\n\\n

      Content

      \\n\\n\\n\\t(This area uses Markdown. HTML is not supported)\\n\\n\\n
      \\n\\t
      \\n\\t\\t\\n\\t\\t\\n\\t
      \\n
      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/text/module.html';\nvar html = \"

      \\n

      \\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","var path = 'public/app/plugins/panel/unknown/module.html';\nvar html = \"
      \\n\\tUnknown panel type: {{ctrl.panel.type}}\\n
      \\n\\n\\n\";\nwindow.angular.module('ng').run(['$templateCache', function(c) { c.put(path, html) }]);\nmodule.exports = path;","/* jshint ignore:start */\n\nace.define(\"ace/theme/grafana-dark\",[\"require\",\"exports\",\"module\",\"ace/lib/dom\"], function(acequire, exports, module) {\n \"use strict\";\n\n exports.isDark = true;\n exports.cssClass = \"gf-code-dark\";\n exports.cssText = \".gf-code-dark .ace_gutter {\\\n background: #2f3129;\\\n color: #8f908a\\\n }\\\n .gf-code-dark .ace_print-margin {\\\n width: 1px;\\\n background: #555651\\\n }\\\n .gf-code-dark {\\\n background-color: #111;\\\n color: #e0e0e0\\\n }\\\n .gf-code-dark .ace_cursor {\\\n color: #f8f8f0\\\n }\\\n .gf-code-dark .ace_marker-layer .ace_selection {\\\n background: #49483e\\\n }\\\n .gf-code-dark.ace_multiselect .ace_selection.ace_start {\\\n box-shadow: 0 0 3px 0px #272822;\\\n }\\\n .gf-code-dark .ace_marker-layer .ace_step {\\\n background: rgb(102, 82, 0)\\\n }\\\n .gf-code-dark .ace_marker-layer .ace_bracket {\\\n margin: -1px 0 0 -1px;\\\n border: 1px solid #49483e\\\n }\\\n .gf-code-dark .ace_marker-layer .ace_active-line {\\\n background: #202020\\\n }\\\n .gf-code-dark .ace_gutter-active-line {\\\n background-color: #272727\\\n }\\\n .gf-code-dark .ace_marker-layer .ace_selected-word {\\\n border: 1px solid #49483e\\\n }\\\n .gf-code-dark .ace_invisible {\\\n color: #52524d\\\n }\\\n .gf-code-dark .ace_entity.ace_name.ace_tag,\\\n .gf-code-dark .ace_keyword,\\\n .gf-code-dark .ace_meta.ace_tag,\\\n .gf-code-dark .ace_storage {\\\n color: #66d9ef\\\n }\\\n .gf-code-dark .ace_punctuation,\\\n .gf-code-dark .ace_punctuation.ace_tag {\\\n color: #fff\\\n }\\\n .gf-code-dark .ace_constant.ace_character,\\\n .gf-code-dark .ace_constant.ace_language,\\\n .gf-code-dark .ace_constant.ace_numeric,\\\n .gf-code-dark .ace_constant.ace_other {\\\n color: #fe85fc\\\n }\\\n .gf-code-dark .ace_invalid {\\\n color: #f8f8f0;\\\n background-color: #f92672\\\n }\\\n .gf-code-dark .ace_invalid.ace_deprecated {\\\n color: #f8f8f0;\\\n background-color: #ae81ff\\\n }\\\n .gf-code-dark .ace_support.ace_constant,\\\n .gf-code-dark .ace_support.ace_function {\\\n color: #59e6e3\\\n }\\\n .gf-code-dark .ace_fold {\\\n background-color: #a6e22e;\\\n border-color: #f8f8f2\\\n }\\\n .gf-code-dark .ace_storage.ace_type,\\\n .gf-code-dark .ace_support.ace_class,\\\n .gf-code-dark .ace_support.ace_type {\\\n font-style: italic;\\\n color: #66d9ef\\\n }\\\n .gf-code-dark .ace_entity.ace_name.ace_function,\\\n .gf-code-dark .ace_entity.ace_other,\\\n .gf-code-dark .ace_entity.ace_other.ace_attribute-name,\\\n .gf-code-dark .ace_variable {\\\n color: #a6e22e\\\n }\\\n .gf-code-dark .ace_variable.ace_parameter {\\\n font-style: italic;\\\n color: #fd971f\\\n }\\\n .gf-code-dark .ace_string {\\\n color: #74e680\\\n }\\\n .gf-code-dark .ace_paren {\\\n color: #f0a842\\\n }\\\n .gf-code-dark .ace_operator {\\\n color: #FFF\\\n }\\\n .gf-code-dark .ace_comment {\\\n color: #75715e\\\n }\\\n .gf-code-dark .ace_indent-guide {\\\n background: url(data:image/png;base64,ivborw0kggoaaaansuheugaaaaeaaaaccayaaaczgbynaaaaekleqvqimwpq0fd0zxbzd/wpaajvaoxesgneaaaaaelftksuqmcc) right repeat-y\\\n }\";\n\n var dom = acequire(\"../lib/dom\");\n dom.importCssString(exports.cssText, exports.cssClass);\n});\n\n/* jshint ignore:end */\n","import { ThunkAction } from 'redux-thunk';\nimport { getBackendSrv } from 'app/core/services/backend_srv';\nimport { StoreState, ApiKey } from 'app/types';\n\nexport enum ActionTypes {\n LoadApiKeys = 'LOAD_API_KEYS',\n SetApiKeysSearchQuery = 'SET_API_KEYS_SEARCH_QUERY',\n}\n\nexport interface LoadApiKeysAction {\n type: ActionTypes.LoadApiKeys;\n payload: ApiKey[];\n}\n\nexport interface SetSearchQueryAction {\n type: ActionTypes.SetApiKeysSearchQuery;\n payload: string;\n}\n\nexport type Action = LoadApiKeysAction | SetSearchQueryAction;\n\ntype ThunkResult = ThunkAction;\n\nconst apiKeysLoaded = (apiKeys: ApiKey[]): LoadApiKeysAction => ({\n type: ActionTypes.LoadApiKeys,\n payload: apiKeys,\n});\n\nexport function addApiKey(apiKey: ApiKey, openModal: (key: string) => void): ThunkResult {\n return async dispatch => {\n const result = await getBackendSrv().post('/api/auth/keys', apiKey);\n dispatch(setSearchQuery(''));\n dispatch(loadApiKeys());\n openModal(result.key);\n };\n}\n\nexport function loadApiKeys(): ThunkResult {\n return async dispatch => {\n const response = await getBackendSrv().get('/api/auth/keys');\n dispatch(apiKeysLoaded(response));\n };\n}\n\nexport function deleteApiKey(id: number): ThunkResult {\n return async dispatch => {\n getBackendSrv()\n .delete('/api/auth/keys/' + id)\n .then(dispatch(loadApiKeys()));\n };\n}\n\nexport const setSearchQuery = (searchQuery: string): SetSearchQueryAction => ({\n type: ActionTypes.SetApiKeysSearchQuery,\n payload: searchQuery,\n});\n","import config from 'app/core/config';\n\nexport const stripBaseFromUrl = url => {\n const appSubUrl = config.appSubUrl;\n const stripExtraChars = appSubUrl.endsWith('/') ? 1 : 0;\n const urlWithoutBase =\n url.length > 0 && url.indexOf(appSubUrl) === 0 ? url.slice(appSubUrl.length - stripExtraChars) : url;\n\n return urlWithoutBase;\n};\n\nexport default { stripBaseFromUrl };\n","// based on http://www.paciellogroup.com/blog/2012/04/how-to-remove-css-outlines-in-an-accessible-manner/\nfunction outlineFixer() {\n const d: any = document;\n\n const styleElement = d.createElement('STYLE');\n const domEvents = 'addEventListener' in d;\n\n const addEventListener = (type, callback) => {\n // Basic cross-browser event handling\n if (domEvents) {\n d.addEventListener(type, callback);\n } else {\n d.attachEvent('on' + type, callback);\n }\n };\n\n const setCss = cssText => {\n // Handle setting of