You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ambari.apache.org by at...@apache.org on 2014/11/02 19:54:20 UTC
git commit: AMBARI-8107 Configs: not prompted when changes are not
saved when clicking on scv. (atkach)
Repository: ambari
Updated Branches:
refs/heads/branch-1.7.0 ef47f5179 -> 63b8b4b2b
AMBARI-8107 Configs: not prompted when changes are not saved when clicking on scv. (atkach)
Project: http://git-wip-us.apache.org/repos/asf/ambari/repo
Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/63b8b4b2
Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/63b8b4b2
Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/63b8b4b2
Branch: refs/heads/branch-1.7.0
Commit: 63b8b4b2be0d53e37bf0f58285ad844fc62f6c02
Parents: ef47f51
Author: atkach <at...@hortonworks.com>
Authored: Sun Nov 2 20:53:59 2014 +0200
Committer: atkach <at...@hortonworks.com>
Committed: Sun Nov 2 20:53:59 2014 +0200
----------------------------------------------------------------------
.../controllers/main/service/info/configs.js | 24 ++++++++--
.../common/configs/config_history_flow.hbs | 12 ++---
.../common/configs/service_version_box.hbs | 8 ++--
.../views/common/configs/config_history_flow.js | 44 ++++++++++++++++--
.../main/service/info/config_test.js | 49 ++++++++------------
5 files changed, 87 insertions(+), 50 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/controllers/main/service/info/configs.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/controllers/main/service/info/configs.js b/ambari-web/app/controllers/main/service/info/configs.js
index 3a873e0..2b194ae 100644
--- a/ambari-web/app/controllers/main/service/info/configs.js
+++ b/ambari-web/app/controllers/main/service/info/configs.js
@@ -2692,12 +2692,26 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
* @method selectConfigGroup
*/
selectConfigGroup: function (event) {
+ var self = this;
+
+ function callback() {
+ self.doSelectConfigGroup(event);
+ }
+
if (!this.get('isInit')) {
if (this.hasUnsavedChanges()) {
- this.showSavePopup(null, event);
+ this.showSavePopup(null, callback);
return;
}
}
+ callback();
+ },
+ /**
+ * switch view to selected group
+ * @param event
+ * @method selectConfigGroup
+ */
+ doSelectConfigGroup: function (event) {
//clean when switch config group
this.loadedGroupToOverrideSiteToTagMap = {};
if (App.get('supports.configHistory')) {
@@ -2724,10 +2738,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
/**
* If some configs are changed and user navigates away or select another config-group, show this popup with propose to save changes
* @param {String} path
- * @param {object} event - triggered event for selecting another config-group
+ * @param {object} callback - callback with action to change configs view(change group or version)
* @method showSavePopup
*/
- showSavePopup: function (path, event) {
+ showSavePopup: function (path, callback) {
var self = this;
return App.ModalPopup.show({
header: Em.I18n.t('common.warning'),
@@ -2756,10 +2770,10 @@ App.MainServiceInfoConfigsController = Em.Controller.extend(App.ServerValidatorM
if (path) {
self.set('forceTransition', true);
App.router.route(path);
- } else if (event) {
+ } else if (callback) {
// Prevent multiple popups
self.set('hash', self.getHash());
- self.selectConfigGroup(event);
+ callback();
}
this.hide();
},
http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/templates/common/configs/config_history_flow.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/config_history_flow.hbs b/ambari-web/app/templates/common/configs/config_history_flow.hbs
index 68d6b11..def5820 100644
--- a/ambari-web/app/templates/common/configs/config_history_flow.hbs
+++ b/ambari-web/app/templates/common/configs/config_history_flow.hbs
@@ -48,7 +48,7 @@
<strong>{{view.compareServiceVersion.createdDate}}</strong>
</div>
<div class="pull-right operations-button">
- <button class="btn btn-success" {{action revert view.serviceVersionsReferences.compare target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.isCurrent:hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button>
+ <button class="btn btn-success" {{action doAction view.serviceVersionsReferences.compare view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.isCurrent:hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button>
</div>
</div>
</div>
@@ -63,7 +63,7 @@
<ul class="dropdown-menu">
{{#each serviceVersion in view.dropDownList}}
<li {{bindAttr class=":pointer :dropdown-submenu serviceVersion.isDisplayed:not-allowed"}}>
- <div class="row-fluid version-in-dropdown " {{action switchVersion serviceVersion target="view"}}>
+ <div class="row-fluid version-in-dropdown " {{action doAction serviceVersion view.actionTypes.SWITCH target="view"}}>
<div class="span2">{{serviceVersion.versionText}}</div>
<div class="span6">{{serviceVersion.createdDate}}</div>
<div class="span3">{{serviceVersion.author}}</div>
@@ -77,10 +77,10 @@
<div class="notes">{{{serviceVersion.fullNotes}}}</div>
</div>
<div class="version-operations-buttons">
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action switchVersion serviceVersion target="view"}}><i class="icon-search"></i> {{t common.view}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view"}}><i class="icon-search"></i> {{t common.view}}</button>
{{#if App.isManager}}
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action compare serviceVersion target="view"}}><i class="icon-copy"></i> {{t common.compare}}</button>
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action revert serviceVersion target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action doAction serviceVersion view.actionTypes.COMPARE target="view"}}><i class="icon-copy"></i> {{t common.compare}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
{{/if}}
</div>
</ul>
@@ -109,7 +109,7 @@
<button class="btn" {{action doCancel target="controller"}} {{bindAttr disabled="view.isDiscardDisabled"}}>{{t common.discard}}</button>
<button class="btn btn-success" {{action save target="view"}} {{bindAttr disabled="view.isSaveDisabled"}}>{{t common.save}}</button>
</div>
- <button class="btn btn-success" {{action revert view.serviceVersionsReferences.displayed target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.isCurrent:hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button>
+ <button class="btn btn-success" {{action doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.isCurrent:hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button>
</div>
{{/if}}
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/templates/common/configs/service_version_box.hbs
----------------------------------------------------------------------
diff --git a/ambari-web/app/templates/common/configs/service_version_box.hbs b/ambari-web/app/templates/common/configs/service_version_box.hbs
index 8bd8434..749cb1d 100644
--- a/ambari-web/app/templates/common/configs/service_version_box.hbs
+++ b/ambari-web/app/templates/common/configs/service_version_box.hbs
@@ -19,7 +19,7 @@
<div {{bindAttr class=":flow-element :pull-left serviceVersion.first:first"}}>
<div class="arrow-box pull-left"></div>
<div class="version-box">
- <div {{bindAttr class=":version-info :box :pull-right serviceVersion.isDisplayed:displayed serviceVersion.isDisabled:grayedOut"}} {{action switchVersion serviceVersion target="view.parentView"}}>
+ <div {{bindAttr class=":version-info :box :pull-right serviceVersion.isDisplayed:displayed serviceVersion.isDisabled:grayedOut"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view.parentView"}}>
<div class="top-label">
<span class="label label-info">{{serviceVersion.versionText}}</span>
<span class="author pull-right">{{serviceVersion.author}}</span>
@@ -42,10 +42,10 @@
<div class="notes">{{{serviceVersion.fullNotes}}}</div>
</div>
<div class="version-operations-buttons">
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action switchVersion serviceVersion target="view.parentView"}}><i class="icon-search"></i> {{t common.view}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.view" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.view"}} {{action doAction serviceVersion view.actionTypes.SWITCH target="view.parentView"}}><i class="icon-search"></i> {{t common.view}}</button>
{{#if App.isManager}}
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action compare serviceVersion target="view.parentView"}}><i class="icon-copy"></i> {{t common.compare}}</button>
- <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action revert serviceVersion target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.compare" class=":btn serviceVersion.isDisplayed:not-allowed-cursor" title="serviceVersion.disabledActionMessages.compare"}} {{action doAction serviceVersion view.actionTypes.COMPARE target="view.parentView"}}><i class="icon-copy"></i> {{t common.compare}}</button>
+ <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button>
{{/if}}
</div>
</div>
http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/app/views/common/configs/config_history_flow.js
----------------------------------------------------------------------
diff --git a/ambari-web/app/views/common/configs/config_history_flow.js b/ambari-web/app/views/common/configs/config_history_flow.js
index 2e3a3e4..00c7a13 100644
--- a/ambari-web/app/views/common/configs/config_history_flow.js
+++ b/ambari-web/app/views/common/configs/config_history_flow.js
@@ -42,6 +42,15 @@ App.ConfigHistoryFlowView = Em.View.extend({
compareServiceVersion: null,
/**
+ * types of actions that can't be done to service config versions
+ */
+ actionTypes: {
+ SWITCH: 'switchVersion',
+ COMPARE: 'compare',
+ REVERT: 'revert'
+ },
+
+ /**
* In reason of absence of properties dynamic values support which passed to an action,
* used property map to get latest values of properties for action
*/
@@ -157,6 +166,9 @@ App.ConfigHistoryFlowView = Em.View.extend({
},
serviceVersionBox: Em.View.extend({
+ actionTypes: function() {
+ return this.get('parentView.actionTypes');
+ }.property('parentView.actionTypes'),
templateName: require('templates/common/configs/service_version_box'),
didInsertElement: function () {
$('.version-box').hoverIntent(function() {
@@ -314,10 +326,36 @@ App.ConfigHistoryFlowView = Em.View.extend({
},
/**
+ * check action constraints prior to invoke it
+ * @param event
+ */
+ doAction: function (event) {
+ var type = event.contexts[1],
+ controller = this.get('controller'),
+ self = this;
+
+ if (type === 'switchVersion') {
+ if (event.context.get("isDisplayed")) return;
+ } else {
+ var isDisabled = event.context ? event.context.get('isDisabled') : false;
+ if (isDisabled) return;
+ }
+
+ function callback() {
+ self[type].call(self, event);
+ }
+
+ if (controller.hasUnsavedChanges()) {
+ controller.showSavePopup(null, callback);
+ return;
+ }
+ callback();
+ },
+
+ /**
* switch configs view version to chosen
*/
switchVersion: function (event) {
- if (event.context.get("isDisplayed")) return;
var version = event.context.get('version');
var versionIndex = 0;
@@ -339,8 +377,6 @@ App.ConfigHistoryFlowView = Em.View.extend({
* add a second version-info-bar for the chosen version
*/
compare: function (event) {
- var isDisabled = event.context ? event.context.get('isDisabled') : false;
- if (isDisabled) return;
this.set('controller.compareServiceVersion', event.context);
this.set('compareServiceVersion', event.context);
this.get('controller').onConfigGroupChange();
@@ -369,8 +405,6 @@ App.ConfigHistoryFlowView = Em.View.extend({
*/
revert: function (event) {
var self = this;
- var isDisabled = event.context ? event.context.get('isDisabled') : false;
- if (isDisabled) return;
var serviceConfigVersion = event.context || Em.Object.create({
version: this.get('displayedServiceVersion.version'),
serviceName: this.get('displayedServiceVersion.serviceName'),
http://git-wip-us.apache.org/repos/asf/ambari/blob/63b8b4b2/ambari-web/test/controllers/main/service/info/config_test.js
----------------------------------------------------------------------
diff --git a/ambari-web/test/controllers/main/service/info/config_test.js b/ambari-web/test/controllers/main/service/info/config_test.js
index aace90b..56e0195 100644
--- a/ambari-web/test/controllers/main/service/info/config_test.js
+++ b/ambari-web/test/controllers/main/service/info/config_test.js
@@ -30,64 +30,52 @@ describe("App.MainServiceInfoConfigsController", function () {
var tests = [
{
path: false,
- event: false,
+ callback: null,
action: "onSave",
- m: "save configs without path/event",
+ m: "save configs without path/callback",
results: [
{
method: "restartServicePopup",
called: true
- },
- {
- method: "selectConfigGroup",
- called: false
}
]
},
{
path: true,
- event: true,
+ callback: true,
action: "onSave",
- m: "save configs with path/event",
+ m: "save configs with path/callback",
results: [
{
method: "restartServicePopup",
called: true
- },
- {
- method: "selectConfigGroup",
- called: false
}
]
},
{
path: false,
- event: false,
+ callback: false,
action: "onDiscard",
- m: "discard changes without path/event",
+ m: "discard changes without path/callback",
results: [
{
method: "restartServicePopup",
called: false
- },
- {
- method: "selectConfigGroup",
- called: false
}
]
},
{
path: false,
- event: true,
+ callback: true,
action: "onDiscard",
- m: "discard changes with event",
+ m: "discard changes with callback",
results: [
{
method: "restartServicePopup",
called: false
},
{
- method: "selectConfigGroup",
+ method: "callback",
called: true
},
{
@@ -98,7 +86,7 @@ describe("App.MainServiceInfoConfigsController", function () {
},
{
path: true,
- event: false,
+ callback: null,
action: "onDiscard",
m: "discard changes with path",
results: [
@@ -107,10 +95,6 @@ describe("App.MainServiceInfoConfigsController", function () {
called: false
},
{
- method: "selectConfigGroup",
- called: false
- },
- {
field: "forceTransition",
value: true
}
@@ -120,7 +104,6 @@ describe("App.MainServiceInfoConfigsController", function () {
beforeEach(function () {
sinon.stub(mainServiceInfoConfigsController, "restartServicePopup", Em.K);
- sinon.stub(mainServiceInfoConfigsController, "selectConfigGroup", Em.K);
sinon.stub(mainServiceInfoConfigsController, "getHash", function () {
return "hash"
});
@@ -128,16 +111,22 @@ describe("App.MainServiceInfoConfigsController", function () {
});
afterEach(function () {
mainServiceInfoConfigsController.restartServicePopup.restore();
- mainServiceInfoConfigsController.selectConfigGroup.restore();
mainServiceInfoConfigsController.getHash.restore();
});
tests.forEach(function (t) {
t.results.forEach(function (r) {
it(t.m + " " + r.method + " " + r.field, function () {
- mainServiceInfoConfigsController.showSavePopup(t.path, t.event)[t.action]();
+ if (t.callback) {
+ t.callback = sinon.stub();
+ }
+ mainServiceInfoConfigsController.showSavePopup(t.path, t.callback)[t.action]();
if (r.method) {
- expect(mainServiceInfoConfigsController[r.method].calledOnce).to.equal(r.called);
+ if (r.method === 'callback') {
+ expect(t.callback.calledOnce).to.equal(r.called);
+ } else {
+ expect(mainServiceInfoConfigsController[r.method].calledOnce).to.equal(r.called);
+ }
} else if (r.field) {
expect(mainServiceInfoConfigsController.get(r.field)).to.equal(r.value);
}