Repository: ambari Updated Branches: refs/heads/branch-2.5 4db1a1e98 -> 2c96b3344
AMBARI-17636 Service Configs page: can't see all config versions in dropdown (Vivek Ratnavel Subramanian via zhewang) Project: http://git-wip-us.apache.org/repos/asf/ambari/repo Commit: http://git-wip-us.apache.org/repos/asf/ambari/commit/2c96b334 Tree: http://git-wip-us.apache.org/repos/asf/ambari/tree/2c96b334 Diff: http://git-wip-us.apache.org/repos/asf/ambari/diff/2c96b334 Branch: refs/heads/branch-2.5 Commit: 2c96b3344606236d7865744bdb426aec625ec491 Parents: 4db1a1e Author: Zhe (Joe) Wang <zhew...@apache.org> Authored: Fri Jul 15 13:17:32 2016 -0700 Committer: Zhe (Joe) Wang <zhew...@apache.org> Committed: Tue Sep 13 13:24:22 2016 -0700 ---------------------------------------------------------------------- ambari-web/app/styles/config_history_flow.less | 70 +++++++- .../configs/config_history_dropdown_row.hbs | 24 +++ .../common/configs/config_history_flow.hbs | 167 +++++++++---------- .../views/common/configs/config_history_flow.js | 125 +++++++++++--- 4 files changed, 281 insertions(+), 105 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/ambari/blob/2c96b334/ambari-web/app/styles/config_history_flow.less ---------------------------------------------------------------------- diff --git a/ambari-web/app/styles/config_history_flow.less b/ambari-web/app/styles/config_history_flow.less index fff3151..0b6dc3f 100644 --- a/ambari-web/app/styles/config_history_flow.less +++ b/ambari-web/app/styles/config_history_flow.less @@ -239,12 +239,33 @@ padding: 5px; } } + + ul#dropdown_menu { + position: absolute; + top: 0; + left: 0; + z-index: 1000; + float: left; + min-width: 400px; + height: 300px; + overflow: hidden; + overflow-y: scroll; + padding: 5px 0; + margin: 5px 0; + } + + #dropdown_content { + height: 300px; + overflow: hidden; + overflow-y: scroll; + } + .dropdown-menu { min-width: 400px; margin-top: 4px !important; font-size: 13px; li { - line-height: 30px; + line-height: 12px; .icon-caret-right { font-size: 18px; margin-right: 20px; @@ -305,6 +326,33 @@ } } } + + #config_version_popup { + z-index: 1001; + line-height: 20px; + padding: 8px; + font-size: 13px; + .content { + padding: 1px 5px 15px 5px; + .group { + text-align: right; + margin-top: -20px; + } + .date{ + color: #808080; + font-size: 11px; + white-space: nowrap; + } + .notes{ + word-wrap: break-word; + overflow-wrap: break-word; + white-space: pre-wrap; + } + } + .version-operations-buttons .btn { + font-size: 13px; + } + } .stack { padding: 1px 10px; font-size: 11px; @@ -362,3 +410,23 @@ cursor: pointer; } } + +.version-in-dropdown [class*="span"] { + min-height: 24px; +} + +// Firefox specific styles +body:not(:-moz-handler-blocked) { + #config_history_flow { + .version-info-bar { + .dropdown-menu { + li { + line-height: 30px; + } + } + } + } + .version-in-dropdown [class*="span"] { + min-height: 30px; + } +} http://git-wip-us.apache.org/repos/asf/ambari/blob/2c96b334/ambari-web/app/templates/common/configs/config_history_dropdown_row.hbs ---------------------------------------------------------------------- diff --git a/ambari-web/app/templates/common/configs/config_history_dropdown_row.hbs b/ambari-web/app/templates/common/configs/config_history_dropdown_row.hbs new file mode 100644 index 0000000..dcc6b31 --- /dev/null +++ b/ambari-web/app/templates/common/configs/config_history_dropdown_row.hbs @@ -0,0 +1,24 @@ +{{! +* Licensed to the Apache Software Foundation (ASF) under one +* or more contributor license agreements. See the NOTICE file +* distributed with this work for additional information +* regarding copyright ownership. The ASF licenses this file +* to you under the Apache License, Version 2.0 (the +* "License"); you may not use this file except in compliance +* with the License. You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +}} + +<div class="row-fluid version-in-dropdown" {{action doAction view.serviceVersion view.actionTypes.SWITCH target="view"}}> + <div class="span2">{{view.serviceVersion.versionText}}</div> + <div class="span6">{{view.serviceVersion.createdDate}}</div> + <div class="span3">{{view.serviceVersion.authorFormatted}}</div> + <div class="pull-right"><i class="icon-caret-right"></i></div> +</div> http://git-wip-us.apache.org/repos/asf/ambari/blob/2c96b334/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 73d6913..fa67786 100644 --- a/ambari-web/app/templates/common/configs/config_history_flow.hbs +++ b/ambari-web/app/templates/common/configs/config_history_flow.hbs @@ -31,97 +31,94 @@ <div class="version-info-bar-wrapper"> {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}} <div {{bindAttr class="view.showCompareVersionBar::hidden :version-info-bar"}}> - <div class="row-fluid"> - <div class="span1 remove-compare-bar" {{action removeCompareVersionBar target="view"}} data-toggle="arrow-tooltip" {{translateAttr data-original-title="services.service.config.configHistory.dismissIcon.tooltip"}}> - <i class="icon-remove-circle icon-large"></i> - </div> - <div class="label-wrapper span8" - data-toggle="tooltip" {{bindAttr data-original-title="view.compareServiceVersion.fullNotes"}}> - {{t services.service.config.configHistory.comparing}} - <span class="label label-info current-version-label">{{view.displayedServiceVersion.versionText}}</span> - ... - <span class="label label-info compare-version-label">{{view.compareServiceVersion.versionText}}</span> - {{#if view.compareServiceVersion.isCurrent}} - <span class="label label-success">{{t common.current}}</span> - {{/if}} - <strong>{{view.compareServiceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} - <strong>{{view.compareServiceVersion.createdDate}}</strong> - </div> - {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}} - <div class="pull-right operations-button"> - <button class="btn btn-success" {{action doAction view.serviceVersionsReferences.compare view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.canBeMadeCurrent::hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button> - </div> - {{/isAuthorized}} - </div> - </div> - {{/isAuthorized}} - <div class="version-info-bar"> <div class="row-fluid"> - <div class="btn-group pull-left"> - <button id="toggle-dropdown-button" class="btn dropdown-toggle" data-toggle="dropdown" href="#" {{action hideFullList target="view"}} {{bindAttr disabled="view.versionActionsDisabled"}}> - <i class="icon-random"></i> - <span class="caret"></span> - </button> - <ul class="dropdown-menu"> - {{#each serviceVersion in view.dropDownList}} - <li {{bindAttr class=":pointer :dropdown-submenu serviceVersion.isDisplayed:not-allowed"}} {{action computePosition on="mouseEnter" 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.authorFormatted}}</div> - <div class="pull-right"><i class="icon-caret-right"></i></div> - </div> - <ul class="dropdown-menu version-info-operations"> - <div class="content"> - <span class="label label-info">{{serviceVersion.versionText}}</span> - <span class="stack">{{serviceVersion.stackVersion}}</span> - <div class="group"><strong>{{serviceVersion.configGroupName}}</strong></div> - <div class="date"><strong>{{serviceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} <strong>{{serviceVersion.createdDate}}</strong></div> - <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 doAction serviceVersion view.actionTypes.SWITCH target="view"}}><i class="icon-search"></i> {{t common.view}}</button> - {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}} - <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> - {{/isAuthorized}} - {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}} - <button {{bindAttr disabled="serviceVersion.disabledActionAttr.revert" class=":btn serviceVersion.isCurrent:not-allowed-cursor serviceVersion.isCompatible::hidden" title="serviceVersion.disabledActionMessages.revert"}} {{action doAction serviceVersion view.actionTypes.REVERT target="view"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button> - {{/isAuthorized}} - </div> - </ul> - </li> - {{/each}} - {{#unless view.showFullList}} - <li class="align-center pointer" id="show_more"> - <a {{action openFullList target="view"}}> - {{t dashboard.configHistory.info-bar.showMore}} {{view.displayName}} - <span class="lowercase ellipsis">{{t dashboard.configHistory.title}}</span> - </a> - </li> - {{/unless}} - </ul> - </div> - <div class="label-wrapper span8" data-toggle="tooltip" {{bindAttr data-original-title="view.displayedServiceVersion.fullNotes"}}> - {{#if view.displayedServiceVersion.versionText}} - <span class="label label-info current-version-label">{{view.displayedServiceVersion.versionText}}</span> - {{/if}} - {{#if view.displayedServiceVersion.isCurrent}} - <span class="label-current label label-success icon-ok" data-toggle="tooltip" {{translateAttr title="common.current"}}></span> - {{/if}} - {{#if view.displayedServiceVersion.author}} - <strong>{{view.displayedServiceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} <strong>{{view.displayedServiceVersion.createdDate}}</strong> - {{/if}} - </div> + <div class="span1 remove-compare-bar" {{action removeCompareVersionBar target="view"}} data-toggle="arrow-tooltip" {{translateAttr data-original-title="services.service.config.configHistory.dismissIcon.tooltip"}}> + <i class="icon-remove-circle icon-large"></i> + </div> + <div class="label-wrapper span8" data-toggle="tooltip" {{bindAttr data-original-title="view.compareServiceVersion.fullNotes"}}> + {{t services.service.config.configHistory.comparing}} + <span class="label label-info current-version-label">{{view.displayedServiceVersion.versionText}}</span> + ... + <span class="label label-info compare-version-label">{{view.compareServiceVersion.versionText}}</span> + {{#if view.compareServiceVersion.isCurrent}} + <span class="label label-success">{{t common.current}}</span> + {{/if}} + <strong>{{view.compareServiceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} + <strong>{{view.compareServiceVersion.createdDate}}</strong> + </div> {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}} <div class="pull-right operations-button"> - <div {{bindAttr class="view.displayedServiceVersion.isCurrent::hidden"}}> - <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 doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.canBeMadeCurrent::hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button> + <button class="btn btn-success" {{action doAction view.serviceVersionsReferences.compare view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.compareServiceVersion.canBeMadeCurrent::hidden"}}>{{view.compareServiceVersion.makeCurrentButtonText}}</button> </div> {{/isAuthorized}} </div> </div> + {{/isAuthorized}} + {{#view App.ConfigHistoryDropdownSubMenuView id="config_version_popup"}} + {{#if view.parentView.hoveredServiceVersion}} + <div class="content"> + <span class="label label-info">{{view.parentView.hoveredServiceVersion.versionText}}</span> + <span class="stack">{{view.parentView.hoveredServiceVersion.stackVersion}}</span> + <div class="group"><strong>{{view.parentView.hoveredServiceVersion.configGroupName}}</strong></div> + <div class="date"><strong>{{view.parentView.hoveredServiceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} <strong>{{view.parentView.hoveredServiceVersion.createdDate}}</strong></div> + <div class="notes">{{view.parentView.hoveredServiceVersion.fullNotes}}</div> + </div> + <div class="version-operations-buttons"> + <button {{bindAttr disabled="view.parentView.hoveredServiceVersion.disabledActionAttr.view" class=":btn view.parentView.hoveredServiceVersion.isDisplayed:not-allowed-cursor" title="view.parentView.hoveredServiceVersion.disabledActionMessages.view"}} {{action doAction view.parentView.hoveredServiceVersion view.parentView.actionTypes.SWITCH target="view.parentView"}}><i class="icon-search"></i> {{t common.view}}</button> + {{#isAuthorized "SERVICE.COMPARE_CONFIGS"}} + <button {{bindAttr disabled="view.parentView.hoveredServiceVersion.disabledActionAttr.compare" class=":btn view.parentView.hoveredServiceVersion.isDisplayed:not-allowed-cursor" title="view.parentView.hoveredServiceVersion.disabledActionMessages.compare"}} {{action doAction view.parentView.hoveredServiceVersion view.parentView.actionTypes.COMPARE target="view.parentView"}}><i class="icon-copy"></i> {{t common.compare}}</button> + {{/isAuthorized}} + {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}} + <button {{bindAttr disabled="view.parentView.hoveredServiceVersion.disabledActionAttr.revert" class=":btn view.parentView.hoveredServiceVersion.isCurrent:not-allowed-cursor view.parentView.hoveredServiceVersion.isCompatible::hidden" title="view.parentView.hoveredServiceVersion.disabledActionMessages.revert"}} {{action doAction view.parentView.hoveredServiceVersion view.parentView.actionTypes.REVERT target="view.parentView"}}>{{t dashboard.configHistory.info-bar.revert.button}}</button> + {{/isAuthorized}} + </div> + {{/if}} + {{/view}} + <div class="version-info-bar"> + <div class="row-fluid"> + <div class="btn-group pull-left"> + <button id="toggle-dropdown-button" class="btn dropdown-toggle" data-toggle="dropdown" href="#" {{action hideFullList target="view"}} {{bindAttr disabled="view.versionActionsDisabled"}}> + <i class="icon-random"></i> + <span class="caret"></span> + </button> + <div id="dropdown_content" class="dropdown-menu"> + <ul id="dropdown_menu"> + {{#each serviceVersion in view.dropDownList}} + {{view App.ConfigHistoryDropdownRowView serviceVersionBinding="serviceVersion"}} + {{/each}} + + {{#unless view.showFullList}} + <li class="align-center pointer" id="show_more"> + <a {{action openFullList target="view"}}> + {{t dashboard.configHistory.info-bar.showMore}} {{view.displayName}} + <span class="lowercase ellipsis">{{t dashboard.configHistory.title}}</span> + </a> + </li> + {{/unless}} + </ul> + </div> + </div> + <div class="label-wrapper span8" data-toggle="tooltip" {{bindAttr data-original-title="view.displayedServiceVersion.fullNotes"}}> + {{#if view.displayedServiceVersion.versionText}} + <span class="label label-info current-version-label">{{view.displayedServiceVersion.versionText}}</span> + {{/if}} + {{#if view.displayedServiceVersion.isCurrent}} + <span class="label-current label label-success icon-ok" data-toggle="tooltip" {{translateAttr title="common.current"}}></span> + {{/if}} + {{#if view.displayedServiceVersion.author}} + <strong>{{view.displayedServiceVersion.authorFormatted}}</strong> {{t dashboard.configHistory.info-bar.authoredOn}} <strong>{{view.displayedServiceVersion.createdDate}}</strong> + {{/if}} + </div> + {{#isAuthorized "SERVICE.MODIFY_CONFIGS"}} + <div class="pull-right operations-button"> + <div {{bindAttr class="view.displayedServiceVersion.isCurrent::hidden"}}> + <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 doAction view.serviceVersionsReferences.displayed view.actionTypes.REVERT target="view"}} {{bindAttr disabled="view.versionActionsDisabled" class="view.displayedServiceVersion.canBeMadeCurrent::hidden"}}>{{view.displayedServiceVersion.makeCurrentButtonText}}</button> + </div> + {{/isAuthorized}} + </div> + </div> </div> </div> http://git-wip-us.apache.org/repos/asf/ambari/blob/2c96b334/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 ad2b1ab..07f111a 100644 --- a/ambari-web/app/views/common/configs/config_history_flow.js +++ b/ambari-web/app/views/common/configs/config_history_flow.js @@ -30,7 +30,7 @@ App.ConfigHistoryFlowView = Em.View.extend({ leftArrowTooltip: Em.computed.ifThenElse('showLeftArrow', Em.I18n.t('services.service.config.configHistory.leftArrow.tooltip'), null), rightArrowTooltip: Em.computed.ifThenElse('showRightArrow', Em.I18n.t('services.service.config.configHistory.rightArrow.tooltip'), null), VERSIONS_IN_FLOW: 6, - VERSIONS_IN_DROPDOWN: 6, + VERSIONS_IN_DROPDOWN: 25, /** * flag identify whether to show all versions or short list of them */ @@ -47,6 +47,19 @@ App.ConfigHistoryFlowView = Em.View.extend({ }, /** + * serviceVersion object that is currently being hovered in the dropdown menu + */ + hoveredServiceVersion: null, + /** + * flag to check if sub-menu popup is currently being hovered + */ + displaySubMenuFlag: false, + /** + * flag to check if any dropdown item is currently hovered by the user + */ + isHovered: false, + + /** * 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 */ @@ -151,21 +164,6 @@ App.ConfigHistoryFlowView = Em.View.extend({ this.set('showFullList', !(this.get('serviceVersions.length') > this.VERSIONS_IN_DROPDOWN)); }, - computePosition: function(event) { - var $el = this.$('.dropdown-menu', event.currentTarget); - // remove existing style - in case user scrolls the page - $el.removeAttr('style'); - var elHeight = $el.outerHeight(), - parentHeight = $el.parent().outerHeight(), - pagePosition = window.innerHeight + window.pageYOffset, - elBottomPosition = $el.offset().top + elHeight, - shouldShowUp = elBottomPosition > pagePosition ; - if (shouldShowUp) { - $el.css('margin-top', -(elHeight - parentHeight)); - } - $el = null; - }, - didInsertElement: function () { App.tooltip(this.$('[data-toggle=tooltip]'),{ placement: 'bottom', @@ -297,6 +295,7 @@ App.ConfigHistoryFlowView = Em.View.extend({ self.disableVersions(); callback(); }); + $("#config_version_popup").removeAttr('style'); }, /** @@ -304,6 +303,9 @@ App.ConfigHistoryFlowView = Em.View.extend({ */ switchVersion: function (event) { var version = event.context.get('version'); + if(this.get('hoveredServiceVersion')) { + version = this.get('hoveredServiceVersion.version'); + } var versionIndex = 0; this.set('compareServiceVersion', null); @@ -324,8 +326,10 @@ App.ConfigHistoryFlowView = Em.View.extend({ * add a second version-info-bar for the chosen version */ compare: function (event) { - this.set('controller.compareServiceVersion', event.context); - this.set('compareServiceVersion', event.context); + this.set('controller.compareServiceVersion', this.get('hoveredServiceVersion')); + var serviceConfigVersion = this.get('hoveredServiceVersion') || event.context; + this.set('compareServiceVersion', serviceConfigVersion); + var controller = this.get('controller'); controller.get('stepConfigs').clear(); controller.loadCompareVersionConfigs(controller.get('allConfigs')).done(function() { @@ -359,7 +363,7 @@ App.ConfigHistoryFlowView = Em.View.extend({ */ revert: function (event) { var self = this; - var serviceConfigVersion = event.context || Em.Object.create({ + var serviceConfigVersion = this.get('hoveredServiceVersion') || event.context || Em.Object.create({ version: this.get('displayedServiceVersion.version'), serviceName: this.get('displayedServiceVersion.serviceName'), notes:'' @@ -555,3 +559,86 @@ App.ConfigsServiceVersionBoxView = Em.View.extend({ this.$('[data-toggle=arrow-tooltip]').tooltip('destroy'); } }); + +App.ConfigHistoryDropdownRowView = Em.View.extend({ + + templateName: require('templates/common/configs/config_history_dropdown_row'), + + tagName: "li", + + classNameBindings: [':pointer', ':dropdown-submenu', 'isDisplayed:not-allowed'], + + serviceVersion: null, + + isDisplayed: function() { + var serviceVersion = this.get('serviceVersion'); + if(serviceVersion) { + return serviceVersion.get('isDisplayed'); + } + return false; + }.property('serviceVersion'), + + actionTypesBinding: 'parentView.actionTypes', + + doAction: function(event) { + this.get('parentView').doAction(event); + }, + + eventManager: Ember.Object.create({ + mouseEnter: function(event, view) { + var serviceVersion = view.get('serviceVersion'); + var version = serviceVersion.get('version'); + var $el = $('#config_version_popup'); + var $currentTarget = $(event.currentTarget); + var parentView = view.get('parentView'); + if (!serviceVersion.get("isDisplayed")) { + parentView.set('hoveredServiceVersion', serviceVersion); + parentView.set('isHovered', true); + var elHeight = $el.outerHeight(), + pagePosition = window.innerHeight + window.pageYOffset, + elBottomPosition = $currentTarget[0].getBoundingClientRect().top + elHeight, + shouldShowUp = elBottomPosition > pagePosition; + $el.css({ + "position": "fixed", + "top": $currentTarget[0].getBoundingClientRect().top, + "left": $currentTarget[0].getBoundingClientRect().left + 400, + "margin-top": -(elHeight/3), + "display": "block" + }); + if (shouldShowUp) { + $el.css('margin-top', -(elHeight - $currentTarget.outerHeight())); + } + } + $el = null; + }, + mouseLeave: function(event, view) { + var parentView = view.get('parentView'); + parentView.set('isHovered', false); + Em.run.later(function() { + if(!parentView.get('displaySubMenuFlag') && !parentView.get('isHovered')) { + parentView.set('hoveredServiceVersion', null); + $('#config_version_popup').removeAttr('style'); + } + }, 200); + } + }) +}); + +App.ConfigHistoryDropdownSubMenuView = Em.View.extend({ + + tagName: 'ul', + + classNameBindings: [':dropdown-menu', ':version-info-operations'], + + eventManager: Ember.Object.create({ + mouseEnter: function(event, view) { + view.get('parentView').set('displaySubMenuFlag', true); + }, + mouseLeave: function(event, view) { + var parentView = view.get('parentView'); + parentView.set('displaySubMenuFlag', false); + parentView.set('hoveredServiceVersion', null); + $("#config_version_popup").removeAttr('style'); + } + }) +}); \ No newline at end of file