Преглед изворни кода

Merge branch 'master' into dashboard_folders

Torkel Ödegaard пре 8 година
родитељ
комит
0ad4a0faa9

+ 3 - 1
public/app/core/components/form_dropdown/form_dropdown.ts

@@ -72,7 +72,9 @@ export class FormDropdownCtrl {
 
 
     this.inputElement.keydown(evt => {
     this.inputElement.keydown(evt => {
       if (evt.keyCode === 13) {
       if (evt.keyCode === 13) {
-        this.inputElement.blur();
+        setTimeout(() => {
+          this.inputElement.blur();
+        }, 100);
       }
       }
     });
     });
 
 

+ 3 - 3
public/app/core/components/navbar/navbar.html

@@ -8,9 +8,9 @@
 		<i class="fa fa-chevron-left"></i>
 		<i class="fa fa-chevron-left"></i>
 	</a>
 	</a>
 
 
-  <a class="navbar-page-btn navbar-page-btn--search" ng-click="ctrl.showSearch()">
-		<i class="fa fa-search"></i>
-	</a>
+  <!-- <a class="navbar&#45;page&#45;btn navbar&#45;page&#45;btn&#45;&#45;search" ng&#45;click="ctrl.showSearch()"> -->
+	<!-- 	<i class="fa fa&#45;search"></i> -->
+	<!-- </a> -->
 
 
 	<div ng-if="::!ctrl.hasMenu">
 	<div ng-if="::!ctrl.hasMenu">
 		<a href="{{::ctrl.section.url}}" class="navbar-page-btn">
 		<a href="{{::ctrl.section.url}}" class="navbar-page-btn">

+ 1 - 1
public/app/core/components/search/search.html

@@ -96,7 +96,7 @@
 
 
     <a class="btn btn-inverse" ng-click="ctrl.showNewFolderModal()" ng-show="ctrl.contextSrv.isEditor" ng-click="ctrl.isOpen = false;">
     <a class="btn btn-inverse" ng-click="ctrl.showNewFolderModal()" ng-show="ctrl.contextSrv.isEditor" ng-click="ctrl.isOpen = false;">
 			<i class="fa fa-plus"></i>
 			<i class="fa fa-plus"></i>
-			Create New Folder
+			New Folder
 		</a>
 		</a>
 
 
 		<a class="btn btn-inverse" href="dashboard/new/?editview=import" ng-show="ctrl.contextSrv.isEditor" ng-click="ctrl.isOpen = false;">
 		<a class="btn btn-inverse" href="dashboard/new/?editview=import" ng-show="ctrl.contextSrv.isEditor" ng-click="ctrl.isOpen = false;">

+ 83 - 51
public/app/features/dashboard/dashnav/dashnav.html

@@ -1,63 +1,95 @@
-<navbar model="ctrl.navModel">
+<div class="navbar">
+	<div class="navbar-inner">
+		<a class="navbar-brand-btn pointer" ng-click="ctrl.toggleSideMenu()">
+			<span class="navbar-brand-btn-background">
+				<img src="public/img/grafana_icon.svg"></img>
+			</span>
+			<i class="icon-gf icon-gf-grafana_wordmark"></i>
+			<i class="fa fa-caret-down"></i>
+			<i class="fa fa-chevron-left"></i>
+		</a>
 
 
-<ul class="nav dash-playlist-actions" ng-if="ctrl.playlistSrv.isPlaying">
-	<li>
-		<a ng-click="ctrl.playlistSrv.prev()"><i class="fa fa-step-backward"></i></a>
-	</li>
-	<li>
-		<a ng-click="ctrl.playlistSrv.stop()"><i class="fa fa-stop"></i></a>
-	</li>
-	<li>
-		<a ng-click="ctrl.playlistSrv.next()"><i class="fa fa-step-forward"></i></a>
-	</li>
-</ul>
+		<div class="navbar-section-wrapper">
+			<a class="navbar-page-btn" ng-click="ctrl.showSearch()">
+				<i class="icon-gf icon-gf-dashboard"></i>
+				{{ctrl.dashboard.title}}
+				<i class="fa fa-caret-down"></i>
+			</a>
+		</div>
 
 
-<ul class="nav pull-left dashnav-action-icons">
-	<li ng-show="::ctrl.dashboard.meta.canStar">
-		<a class="pointer" ng-click="ctrl.starDashboard()">
-			<i class="fa" ng-class="{'fa-star-o': !ctrl.dashboard.meta.isStarred, 'fa-star': ctrl.dashboard.meta.isStarred}" style="color: orange;"></i>
-		</a>
-	</li>
-	<li ng-show="::ctrl.dashboard.meta.canShare" class="dropdown">
-		<a class="pointer" ng-click="ctrl.hideTooltip($event)" bs-tooltip="'Share dashboard'" data-placement="bottom" data-toggle="dropdown"><i class="fa fa-share-square-o"></i></a>
-		<ul class="dropdown-menu">
+		<ul class="nav dash-playlist-actions" ng-if="ctrl.playlistSrv.isPlaying">
 			<li>
 			<li>
-				<a class="pointer" ng-click="ctrl.shareDashboard(0)">
-					<i class="fa fa-link"></i> Link to Dashboard
-					<div class="dropdown-desc">Share an internal link to the current dashboard. Some configuration options available.</div>
-				</a>
+				<a ng-click="ctrl.playlistSrv.prev()"><i class="fa fa-step-backward"></i></a>
 			</li>
 			</li>
 			<li>
 			<li>
-				<a class="pointer" ng-click="ctrl.shareDashboard(1)">
-					<i class="icon-gf icon-gf-snapshot"></i>Snapshot
-					<div class="dropdown-desc">Interactive, publically accessible dashboard. Sensitive data is stripped out.</div>
-				</a>
+				<a ng-click="ctrl.playlistSrv.stop()"><i class="fa fa-stop"></i></a>
 			</li>
 			</li>
 			<li>
 			<li>
-				<a class="pointer" ng-click="ctrl.shareDashboard(2)">
-					<i class="fa fa-cloud-upload"></i>Export
-					<div class="dropdown-desc">Export the dashboard to a JSON file for others and to share on Grafana.com</div>
+				<a ng-click="ctrl.playlistSrv.next()"><i class="fa fa-step-forward"></i></a>
+			</li>
+		</ul>
+
+		<ul class="nav pull-left dashnav-action-icons">
+			<li ng-show="::ctrl.dashboard.meta.canStar">
+				<a class="pointer" ng-click="ctrl.starDashboard()">
+					<i class="fa" ng-class="{'fa-star-o': !ctrl.dashboard.meta.isStarred, 'fa-star': ctrl.dashboard.meta.isStarred}" style="color: orange;"></i>
+				</a>
+			</li>
+			<li ng-show="::ctrl.dashboard.meta.canShare" class="dropdown">
+				<a class="pointer" ng-click="ctrl.hideTooltip($event)" bs-tooltip="'Share dashboard'" data-placement="bottom" data-toggle="dropdown"><i class="fa fa-share-square-o"></i></a>
+				<ul class="dropdown-menu">
+					<li>
+						<a class="pointer" ng-click="ctrl.shareDashboard(0)">
+							<i class="fa fa-link"></i> Link to Dashboard
+							<div class="dropdown-desc">Share an internal link to the current dashboard. Some configuration options available.</div>
+						</a>
+					</li>
+					<li>
+						<a class="pointer" ng-click="ctrl.shareDashboard(1)">
+							<i class="icon-gf icon-gf-snapshot"></i>Snapshot
+							<div class="dropdown-desc">Interactive, publically accessible dashboard. Sensitive data is stripped out.</div>
+						</a>
+					</li>
+					<li>
+						<a class="pointer" ng-click="ctrl.shareDashboard(2)">
+							<i class="fa fa-cloud-upload"></i>Export
+							<div class="dropdown-desc">Export the dashboard to a JSON file for others and to share on Grafana.com</div>
+						</a>
+					</li>
+				</ul>
+			</li>
+			<li ng-show="::ctrl.dashboard.meta.canSave">
+				<a ng-click="ctrl.saveDashboard()" bs-tooltip="'Save dashboard <br> CTRL+S'" data-placement="bottom"><i class="fa fa-save"></i></a>
+			</li>
+			<li ng-if="::ctrl.dashboard.snapshot.originalUrl">
+				<a ng-href="{{ctrl.dashboard.snapshot.originalUrl}}" bs-tooltip="'Open original dashboard'" data-placement="bottom"><i class="fa fa-link"></i></a>
+			</li>
+			<li class="dropdown">
+				<a class="pointer" data-toggle="dropdown">
+					<i class="fa fa-cog"></i>
 				</a>
 				</a>
+				<ul class="dropdown-menu dropdown-menu--navbar">
+					<li ng-repeat="navItem in ::ctrl.navModel.menu" ng-class="{active: navItem.active}">
+						<a class="pointer" ng-href="{{::navItem.url}}" ng-click="ctrl.navItemClicked(navItem, $event)">
+							<i class="{{::navItem.icon}}" ng-show="::navItem.icon"></i>
+							{{::navItem.title}}
+						</a>
+					</li>
+				</ul>
 			</li>
 			</li>
 		</ul>
 		</ul>
-	</li>
-	<li ng-show="::ctrl.dashboard.meta.canSave">
-		<a ng-click="ctrl.saveDashboard()" bs-tooltip="'Save dashboard <br> CTRL+S'" data-placement="bottom"><i class="fa fa-save"></i></a>
-	</li>
-	<li ng-if="::ctrl.dashboard.snapshot.originalUrl">
-		<a ng-href="{{ctrl.dashboard.snapshot.originalUrl}}" bs-tooltip="'Open original dashboard'" data-placement="bottom"><i class="fa fa-link"></i></a>
-	</li>
-</ul>
 
 
-<ul class="nav pull-right">
-	<li ng-show="ctrl.dashboard.meta.fullscreen" class="dashnav-back-to-dashboard">
-		<a ng-click="ctrl.exitFullscreen()">
-			Back to dashboard
-		</a>
-	</li>
-	<li>
-		<gf-time-picker dashboard="ctrl.dashboard"></gf-time-picker>
-	</li>
-</ul>
+		<ul class="nav pull-right">
+			<li ng-show="ctrl.dashboard.meta.fullscreen" class="dashnav-back-to-dashboard">
+				<a ng-click="ctrl.exitFullscreen()">
+					Back to dashboard
+				</a>
+			</li>
+			<li>
+				<gf-time-picker dashboard="ctrl.dashboard"></gf-time-picker>
+			</li>
+		</ul>
+	</div>
+</div>
 
 
-</navbar>
+<dashboard-search></dashboard-search>

+ 17 - 2
public/app/features/dashboard/dashnav/dashnav.ts

@@ -22,8 +22,8 @@ export class DashNavCtrl {
     private backendSrv,
     private backendSrv,
     private $timeout,
     private $timeout,
     private datasourceSrv,
     private datasourceSrv,
-    private navModelSrv) {
-
+    private navModelSrv,
+    private contextSrv) {
       this.navModel = navModelSrv.getDashboardNav(this.dashboard, this);
       this.navModel = navModelSrv.getDashboardNav(this.dashboard, this);
 
 
       appEvents.on('save-dashboard', this.saveDashboard.bind(this), $scope);
       appEvents.on('save-dashboard', this.saveDashboard.bind(this), $scope);
@@ -38,6 +38,10 @@ export class DashNavCtrl {
       }
       }
     }
     }
 
 
+    toggleSideMenu() {
+      this.contextSrv.toggleSideMenu();
+    }
+
     openEditView(editview) {
     openEditView(editview) {
       var search = _.extend(this.$location.search(), {editview: editview});
       var search = _.extend(this.$location.search(), {editview: editview});
       this.$location.search(search);
       this.$location.search(search);
@@ -139,6 +143,17 @@ export class DashNavCtrl {
     onFolderChange(parentId) {
     onFolderChange(parentId) {
       this.dashboard.parentId = parentId;
       this.dashboard.parentId = parentId;
     }
     }
+
+    showSearch() {
+      this.$rootScope.appEvent('show-dash-search');
+    }
+
+    navItemClicked(navItem, evt) {
+      if (navItem.clickHandler) {
+        navItem.clickHandler();
+        evt.preventDefault();
+      }
+    }
 }
 }
 
 
 export function dashNavDirective() {
 export function dashNavDirective() {

+ 2 - 2
public/app/features/dashboard/folder_picker/picker.ts

@@ -45,7 +45,7 @@ export class FolderPickerCtrl {
   folderChanged() {
   folderChanged() {
     const selected = _.find(this.folders, {title: this.selectedFolderSegment.value});
     const selected = _.find(this.folders, {title: this.selectedFolderSegment.value});
     if (selected) {
     if (selected) {
-      this.onChange(selected.id);
+      this.onChange({$folderId: selected.id});
     }
     }
   }
   }
 }
 }
@@ -70,7 +70,7 @@ export function folderPicker() {
     controllerAs: 'ctrl',
     controllerAs: 'ctrl',
     scope: {
     scope: {
       selectedFolder: "<",
       selectedFolder: "<",
-      onChange: "<",
+      onChange: "&",
       rootFolderName: "@"
       rootFolderName: "@"
     }
     }
   };
   };

+ 1 - 1
public/app/features/dashboard/partials/settings.html

@@ -45,7 +45,7 @@
 				</div>
 				</div>
 			</div>
 			</div>
 
 
-      <folder-picker ng-if="!dashboardMeta.isFolder" selected-folder="dashboardMeta.parentId" on-change="onFolderChange"></folder-picker>
+      <folder-picker ng-if="!dashboardMeta.isFolder" selected-folder="dashboardMeta.parentId" on-change="onFolderChange($folderId)"></folder-picker>
 		</div>
 		</div>
 
 
     <div class="section">
     <div class="section">

+ 2 - 1
public/app/features/dashboard/save_as_modal.ts

@@ -22,7 +22,8 @@ const  template = `
 				<input type="text" class="gf-form-input" ng-model="ctrl.clone.title" give-focus="true" required>
 				<input type="text" class="gf-form-input" ng-model="ctrl.clone.title" give-focus="true" required>
 			</div>
 			</div>
       <div class="gf-form">
       <div class="gf-form">
-        <folder-picker ng-if="!clone.meta.isFolder" selected-folder="clone.meta.parentId" on-change="onFolderChange"></folder-picker>
+        <folder-picker ng-if="!ctrl.clone.meta.isFolder" selected-folder="ctrl.clone.meta.parentId" on-change="ctrl.onFolderChange($folderId)">
+        </folder-picker>
       </div>
       </div>
 		</div>
 		</div>
 
 

+ 7 - 2
public/app/plugins/panel/heatmap/heatmap_data_converter.ts

@@ -207,15 +207,20 @@ function pushToXBuckets(buckets, point, bucketNum, seriesName) {
 }
 }
 
 
 function pushToYBuckets(buckets, bucketNum, value, point, bounds) {
 function pushToYBuckets(buckets, bucketNum, value, point, bounds) {
+  var count = 1;
+  // Use the 3rd argument as scale/count
+  if (point.length > 2) {
+    count = parseInt(point[2]);
+  }
   if (buckets[bucketNum]) {
   if (buckets[bucketNum]) {
     buckets[bucketNum].values.push(value);
     buckets[bucketNum].values.push(value);
-    buckets[bucketNum].count += 1;
+    buckets[bucketNum].count += count;
   } else {
   } else {
     buckets[bucketNum] = {
     buckets[bucketNum] = {
       y: bucketNum,
       y: bucketNum,
       bounds: bounds,
       bounds: bounds,
       values: [value],
       values: [value],
-      count: 1,
+      count: count,
     };
     };
   }
   }
 }
 }