Commit 16fc6e8b by Torkel Ödegaard

More work on editable false dashboards, #1834

parent af277f56
...@@ -119,6 +119,8 @@ function (angular, _) { ...@@ -119,6 +119,8 @@ function (angular, _) {
$scope.saveDashboardAs = function() { $scope.saveDashboardAs = function() {
var newScope = $rootScope.$new(); var newScope = $rootScope.$new();
newScope.clone = $scope.dashboard.getSaveModelClone(); newScope.clone = $scope.dashboard.getSaveModelClone();
newScope.clone.editable = true;
newScope.clone.hideControls = false;
$scope.appEvent('show-modal', { $scope.appEvent('show-modal', {
src: './app/features/dashboard/partials/saveDashboardAs.html', src: './app/features/dashboard/partials/saveDashboardAs.html',
......
...@@ -66,6 +66,8 @@ function (angular, $, kbn, _, moment) { ...@@ -66,6 +66,8 @@ function (angular, $, kbn, _, moment) {
if (!this.editable) { if (!this.editable) {
meta.canEdit = false; meta.canEdit = false;
meta.canDelete = false; meta.canDelete = false;
meta.canSave = false;
this.hideControls = true;
} }
this.meta = meta; this.meta = meta;
......
...@@ -27,7 +27,7 @@ ...@@ -27,7 +27,7 @@
<li ng-show="dashboardMeta.canShare"> <li ng-show="dashboardMeta.canShare">
<a class="pointer" ng-click="shareDashboard()" bs-tooltip="'Share dashboard'" data-placement="bottom"><i class="fa fa-share-square-o"></i></a> <a class="pointer" ng-click="shareDashboard()" bs-tooltip="'Share dashboard'" data-placement="bottom"><i class="fa fa-share-square-o"></i></a>
</li> </li>
<li ng-show="dashboardMeta.canEdit"> <li ng-show="dashboardMeta.canSave">
<a ng-click="saveDashboard()" bs-tooltip="'Save dashboard'" data-placement="bottom"><i class="fa fa-save"></i></a> <a ng-click="saveDashboard()" bs-tooltip="'Save dashboard'" data-placement="bottom"><i class="fa fa-save"></i></a>
</li> </li>
<li class="dropdown"> <li class="dropdown">
...@@ -38,7 +38,7 @@ ...@@ -38,7 +38,7 @@
<li ng-if="dashboardMeta.canEdit"><a class="pointer" ng-click="openEditView('templating');">Templating</a></li> <li ng-if="dashboardMeta.canEdit"><a class="pointer" ng-click="openEditView('templating');">Templating</a></li>
<li><a class="pointer" ng-click="exportDashboard();">Export</a></li> <li><a class="pointer" ng-click="exportDashboard();">Export</a></li>
<li><a class="pointer" ng-click="editJson();">View JSON</a></li> <li><a class="pointer" ng-click="editJson();">View JSON</a></li>
<li ng-if="dashboardMeta.canSave"><a class="pointer" ng-click="saveDashboardAs();">Save As...</a></li> <li ng-if="contextSrv.isEditor"><a class="pointer" ng-click="saveDashboardAs();">Save As...</a></li>
<li ng-if="dashboardMeta.canDelete"><a class="pointer" ng-click="deleteDashboard();">Delete dashboard</a></li> <li ng-if="dashboardMeta.canDelete"><a class="pointer" ng-click="deleteDashboard();">Delete dashboard</a></li>
</ul> </ul>
</li> </li>
......
...@@ -59,12 +59,15 @@ function (angular, _, kbn, moment, $) { ...@@ -59,12 +59,15 @@ function (angular, _, kbn, moment, $) {
$location.path(''); $location.path('');
return; return;
} }
$scope.initDashboard({meta: {}, model: window.grafanaImportDashboard }, $scope); $scope.initDashboard({
meta: { canShare: false, canStar: false },
model: window.grafanaImportDashboard
}, $scope);
}); });
module.controller('NewDashboardCtrl', function($scope) { module.controller('NewDashboardCtrl', function($scope) {
$scope.initDashboard({ $scope.initDashboard({
meta: {}, meta: { canStar: false, canShare: false },
model: { model: {
title: "New dashboard", title: "New dashboard",
rows: [{ height: '250px', panels:[] }] rows: [{ height: '250px', panels:[] }]
...@@ -93,7 +96,10 @@ function (angular, _, kbn, moment, $) { ...@@ -93,7 +96,10 @@ function (angular, _, kbn, moment, $) {
}; };
file_load($routeParams.jsonFile).then(function(result) { file_load($routeParams.jsonFile).then(function(result) {
$scope.initDashboard({meta: {fromFile: true}, model: result}, $scope); $scope.initDashboard({
meta: { canSave: false, canDelete: false },
model: result
}, $scope);
}); });
}); });
...@@ -138,7 +144,10 @@ function (angular, _, kbn, moment, $) { ...@@ -138,7 +144,10 @@ function (angular, _, kbn, moment, $) {
}; };
script_load($routeParams.jsFile).then(function(result) { script_load($routeParams.jsFile).then(function(result) {
$scope.initDashboard({meta: {fromScript: true, canDelete: false}, model: result.data}, $scope); $scope.initDashboard({
meta: {fromScript: true, canDelete: false, canSave: false},
model: result.data
}, $scope);
}); });
}); });
......
...@@ -18,13 +18,6 @@ function (angular, _, store, config) { ...@@ -18,13 +18,6 @@ function (angular, _, store, config) {
} }
} }
this.version = config.buildInfo.version;
this.lightTheme = false;
this.user = new User();
this.isSignedIn = this.user.isSignedIn;
this.isGrafanaAdmin = this.user.isGrafanaAdmin;
this.sidemenu = store.getBool('grafana.sidemenu');
// events // events
$rootScope.$on('toggle-sidemenu', function() { $rootScope.$on('toggle-sidemenu', function() {
self.toggleSideMenu(); self.toggleSideMenu();
...@@ -47,6 +40,12 @@ function (angular, _, store, config) { ...@@ -47,6 +40,12 @@ function (angular, _, store, config) {
}, 50); }, 50);
}; };
this.version = config.buildInfo.version;
this.lightTheme = false;
this.user = new User();
this.isSignedIn = this.user.isSignedIn;
this.isGrafanaAdmin = this.user.isGrafanaAdmin;
this.sidemenu = store.getBool('grafana.sidemenu');
this.isEditor = this.hasRole('Editor') || this.hasRole('Admin');
}); });
}); });
...@@ -185,10 +185,26 @@ define([ ...@@ -185,10 +185,26 @@ define([
expect(model.annotations.list.length).to.be(0); expect(model.annotations.list.length).to.be(0);
expect(model.templating.list.length).to.be(0); expect(model.templating.list.length).to.be(0);
}); });
}); });
describe('Given editable false dashboard', function() {
var model;
beforeEach(function() {
model = _dashboardSrv.create({
editable: false,
});
}); });
it('Should set meta canEdit and canSave to false', function() {
expect(model.meta.canSave).to.be(false);
expect(model.meta.canEdit).to.be(false);
});
it('getSaveModelClone should remove meta', function() {
var clone = model.getSaveModelClone();
expect(clone.meta).to.be(undefined);
});
});
});
}); });
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment