mirror of
https://github.com/grafana/grafana.git
synced 2025-02-25 18:55:37 -06:00
Merge branch 'master' into 10630_folder_api
This commit is contained in:
@@ -15,8 +15,7 @@ const template = `
|
||||
</a>
|
||||
</div>
|
||||
|
||||
<div class="modal-content">
|
||||
<div class="gf-form-group">
|
||||
<div class="modal-content modal-content--has-scroll" grafana-scrollbar>
|
||||
<table class="filter-table form-inline">
|
||||
<thead>
|
||||
<tr>
|
||||
|
||||
@@ -20,7 +20,7 @@
|
||||
<div class="search-section__header" ng-show="section.hideHeader"></div>
|
||||
|
||||
<div ng-if="section.expanded">
|
||||
<a ng-repeat="item in section.items" class="search-item" ng-class="{'selected': item.selected}" ng-href="{{::item.url}}">
|
||||
<a ng-repeat="item in section.items" class="search-item" ng-class="{'selected': item.selected}" ng-href="{{::item.url}}" >
|
||||
<div ng-click="ctrl.toggleSelection(item, $event)">
|
||||
<gf-form-switch
|
||||
ng-show="ctrl.editable"
|
||||
|
||||
@@ -12,7 +12,7 @@ export class InvitedCtrl {
|
||||
icon: 'gicon gicon-branding',
|
||||
text: 'Invite',
|
||||
subTitle: 'Register your Grafana account',
|
||||
breadcrumbs: [{ title: 'Login', url: '/login' }],
|
||||
breadcrumbs: [{ title: 'Login', url: 'login' }],
|
||||
},
|
||||
};
|
||||
|
||||
|
||||
@@ -10,6 +10,13 @@ export class SignUpCtrl {
|
||||
$scope.formModel = {};
|
||||
|
||||
var params = $location.search();
|
||||
|
||||
// validate email is semi ok
|
||||
if (params.email && !params.email.match(/^\S+@\S+$/)) {
|
||||
console.log('invalid email');
|
||||
return;
|
||||
}
|
||||
|
||||
$scope.formModel.orgName = params.email;
|
||||
$scope.formModel.email = params.email;
|
||||
$scope.formModel.username = params.email;
|
||||
|
||||
@@ -75,7 +75,7 @@ export class AlertTabCtrl {
|
||||
|
||||
getAlertHistory() {
|
||||
this.backendSrv
|
||||
.get(`/api/annotations?dashboardId=${this.panelCtrl.dashboard.id}&panelId=${this.panel.id}&limit=50`)
|
||||
.get(`/api/annotations?dashboardId=${this.panelCtrl.dashboard.id}&panelId=${this.panel.id}&limit=50&type=alert`)
|
||||
.then(res => {
|
||||
this.alertHistory = _.map(res, ah => {
|
||||
ah.time = this.dashboardSrv.getCurrent().formatDate(ah.time, 'MMM D, YYYY HH:mm:ss');
|
||||
|
||||
@@ -63,11 +63,17 @@ export class DashboardMigrator {
|
||||
}
|
||||
|
||||
if (panel.y_format) {
|
||||
if (!panel.y_formats) {
|
||||
panel.y_formats = [];
|
||||
}
|
||||
panel.y_formats[0] = panel.y_format;
|
||||
delete panel.y_format;
|
||||
}
|
||||
|
||||
if (panel.y2_format) {
|
||||
if (!panel.y_formats) {
|
||||
panel.y_formats = [];
|
||||
}
|
||||
panel.y_formats[1] = panel.y2_format;
|
||||
delete panel.y2_format;
|
||||
}
|
||||
|
||||
@@ -1,44 +1,26 @@
|
||||
<div class="container">
|
||||
<page-header model="navModel"></page-header>
|
||||
|
||||
<div class="signup-page-background">
|
||||
</div>
|
||||
<div class="page-container page-body">
|
||||
|
||||
<div class="login-content">
|
||||
|
||||
<div class="login-branding">
|
||||
<img src="img/logo_transparent_200x75.png">
|
||||
</div>
|
||||
|
||||
<div class="invite-box">
|
||||
<h3>
|
||||
<i class="fa fa-users"></i>
|
||||
Change active organization
|
||||
</h3>
|
||||
<div class="signup">
|
||||
<div class="login-form">
|
||||
|
||||
<div class="modal-tagline">
|
||||
You have been added to another Organization <br>
|
||||
due to an open invitation!
|
||||
<br><br>
|
||||
You have been added to another Organization due to an open invitation!
|
||||
|
||||
Please select which organization you want to <br>
|
||||
use right now (you can change this later at any time).
|
||||
</div>
|
||||
|
||||
<div style="display: inline-block; width: 400px; margin: 30px 0">
|
||||
<table class="filter-table">
|
||||
<tr ng-repeat="org in orgs">
|
||||
<td class="nobg max-width-btns">
|
||||
<a ng-click="setUsingOrg(org)" class="btn btn-inverse">
|
||||
{{org.name}} ({{org.role}})
|
||||
</a>
|
||||
</td>
|
||||
</tr>
|
||||
</table>
|
||||
<div ng-repeat="org in orgs">
|
||||
<a ng-click="setUsingOrg(org)" class="btn btn-success">
|
||||
{{org.name}} ({{org.role}})
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
</div>
|
||||
|
||||
|
||||
|
||||
@@ -6,6 +6,14 @@ export class SelectOrgCtrl {
|
||||
constructor($scope, backendSrv, contextSrv) {
|
||||
contextSrv.sidemenu = false;
|
||||
|
||||
$scope.navModel = {
|
||||
main: {
|
||||
icon: 'gicon gicon-branding',
|
||||
subTitle: 'Preferences',
|
||||
text: 'Select active organization',
|
||||
},
|
||||
};
|
||||
|
||||
$scope.init = function() {
|
||||
$scope.getUserOrgs();
|
||||
};
|
||||
|
||||
@@ -9,9 +9,7 @@
|
||||
<a href="{{dash.importedUrl}}" ng-show="dash.imported">
|
||||
{{dash.title}}
|
||||
</a>
|
||||
<span ng-show="!dash.imported">
|
||||
{{dash.title}}
|
||||
</span>
|
||||
<span ng-show="!dash.imported">{{dash.title}}</span>
|
||||
</td>
|
||||
<td style="text-align: right">
|
||||
<button class="btn btn-secondary btn-small" ng-click="ctrl.import(dash, false)" ng-show="!dash.imported">
|
||||
|
||||
@@ -151,7 +151,11 @@ module.directive('graphLegend', function(popoverSrv, $timeout) {
|
||||
|
||||
if (panel.legend.sort) {
|
||||
seriesList = _.sortBy(seriesList, function(series) {
|
||||
return series.stats[panel.legend.sort];
|
||||
let sort = series.stats[panel.legend.sort];
|
||||
if (sort === null) {
|
||||
sort = -Infinity;
|
||||
}
|
||||
return sort;
|
||||
});
|
||||
if (panel.legend.sortDesc) {
|
||||
seriesList = seriesList.reverse();
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
<div class="gf-form">
|
||||
<label class="gf-form-label width-8">Point Radius</label>
|
||||
<div class="gf-form-select-wrapper max-width-5">
|
||||
<select class="gf-form-input" ng-model="ctrl.panel.pointradius" ng-options="f for f in [1,2,3,4,5,6,7,8,9,10]" ng-change="ctrl.render()" ng-disabled="!ctrl.panel.points"></select>
|
||||
<select class="gf-form-input" ng-model="ctrl.panel.pointradius" ng-options="f for f in [0.5,1,2,3,4,5,6,7,8,9,10]" ng-change="ctrl.render()" ng-disabled="!ctrl.panel.points"></select>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@@ -8,13 +8,18 @@ import { getColorScale, getOpacityScale } from './color_scale';
|
||||
|
||||
let module = angular.module('grafana.directives');
|
||||
|
||||
const LEGEND_HEIGHT_PX = 6;
|
||||
const LEGEND_WIDTH_PX = 100;
|
||||
const LEGEND_TICK_SIZE = 0;
|
||||
const LEGEND_VALUE_MARGIN = 0;
|
||||
|
||||
/**
|
||||
* Color legend for heatmap editor.
|
||||
*/
|
||||
module.directive('colorLegend', function() {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: '<div class="heatmap-color-legend"><svg width="16.8rem" height="24px"></svg></div>',
|
||||
template: '<div class="heatmap-color-legend"><svg width="16.5rem" height="24px"></svg></div>',
|
||||
link: function(scope, elem, attrs) {
|
||||
let ctrl = scope.ctrl;
|
||||
let panel = scope.ctrl.panel;
|
||||
@@ -50,7 +55,7 @@ module.directive('colorLegend', function() {
|
||||
module.directive('heatmapLegend', function() {
|
||||
return {
|
||||
restrict: 'E',
|
||||
template: '<div class="heatmap-color-legend"><svg width="100px" height="14px"></svg></div>',
|
||||
template: `<div class="heatmap-color-legend"><svg width="${LEGEND_WIDTH_PX}px" height="${LEGEND_HEIGHT_PX}px"></svg></div>`,
|
||||
link: function(scope, elem, attrs) {
|
||||
let ctrl = scope.ctrl;
|
||||
let panel = scope.ctrl.panel;
|
||||
@@ -163,10 +168,10 @@ function drawLegendValues(elem, colorScale, rangeFrom, rangeTo, maxValue, minVal
|
||||
let xAxis = d3
|
||||
.axisBottom(legendValueScale)
|
||||
.tickValues(ticks)
|
||||
.tickSize(2);
|
||||
.tickSize(LEGEND_TICK_SIZE);
|
||||
|
||||
let colorRect = legendElem.find(':first-child');
|
||||
let posY = getSvgElemHeight(legendElem) + 2;
|
||||
let posY = getSvgElemHeight(legendElem) + LEGEND_VALUE_MARGIN;
|
||||
let posX = getSvgElemX(colorRect);
|
||||
|
||||
d3
|
||||
|
||||
@@ -66,8 +66,7 @@ export default function link(scope, elem, attrs, ctrl) {
|
||||
height = parseInt(height.replace('px', ''), 10);
|
||||
}
|
||||
|
||||
height -= 5; // padding
|
||||
height -= panel.title ? 24 : 9; // subtract panel title bar
|
||||
height -= panel.legend.show ? 28 : 11; // bottom padding and space for legend
|
||||
|
||||
$heatmap.css('height', height + 'px');
|
||||
|
||||
|
||||
@@ -51,6 +51,9 @@ describe('grafanaHeatmap', function() {
|
||||
colorScheme: 'interpolateOranges',
|
||||
fillBackground: false,
|
||||
},
|
||||
legend: {
|
||||
show: false,
|
||||
},
|
||||
xBucketSize: 1000,
|
||||
xBucketNumber: null,
|
||||
yBucketSize: 1,
|
||||
|
||||
@@ -67,6 +67,11 @@
|
||||
|
||||
.modal-content {
|
||||
padding: $spacer*2;
|
||||
|
||||
&--has-scroll {
|
||||
max-height: calc(100vh - 400px);
|
||||
position: relative;
|
||||
}
|
||||
}
|
||||
|
||||
// Remove bottom margin if need be
|
||||
|
||||
@@ -1,3 +1,5 @@
|
||||
$font-size-heatmap-tick: 11px;
|
||||
|
||||
.heatmap-canvas-wrapper {
|
||||
// position: relative;
|
||||
cursor: crosshair;
|
||||
@@ -10,7 +12,7 @@
|
||||
text {
|
||||
fill: $text-color;
|
||||
color: $text-color;
|
||||
font-size: $font-size-sm;
|
||||
font-size: $font-size-heatmap-tick;
|
||||
}
|
||||
|
||||
line {
|
||||
@@ -56,12 +58,12 @@
|
||||
.heatmap-legend-wrapper {
|
||||
@include clearfix();
|
||||
margin: 0 $spacer;
|
||||
padding-top: 10px;
|
||||
padding-top: 4px;
|
||||
|
||||
svg {
|
||||
width: 100%;
|
||||
max-width: 300px;
|
||||
height: 33px;
|
||||
height: 18px;
|
||||
float: left;
|
||||
white-space: nowrap;
|
||||
padding-left: 10px;
|
||||
@@ -75,7 +77,7 @@
|
||||
text {
|
||||
fill: $text-color;
|
||||
color: $text-color;
|
||||
font-size: $font-size-sm;
|
||||
font-size: $font-size-heatmap-tick;
|
||||
}
|
||||
|
||||
line {
|
||||
|
||||
@@ -75,7 +75,7 @@
|
||||
border-radius: 6px;
|
||||
width: 6px;
|
||||
/* there must be 'right' for ps__thumb-y */
|
||||
right: 2px;
|
||||
right: 0px;
|
||||
/* please don't change 'position' */
|
||||
position: absolute;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user