From 4244c05a1de33f86dd037c65825886cd51c68c64 Mon Sep 17 00:00:00 2001 From: Zhen Ou Yun <yunzhenou@126.com> Date: Thu, 13 Apr 2017 14:31:58 +0800 Subject: [PATCH 1/2] Update ui-layout.js calculate issue when after button click. the root cause due to do not update the uncollapsedSize of prevContainer when toggleAfter. --- src/ui-layout.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/ui-layout.js b/src/ui-layout.js index 41253c8..731d217 100644 --- a/src/ui-layout.js +++ b/src/ui-layout.js @@ -524,6 +524,7 @@ angular.module('ui.layout', []) } if(prevContainer) { prevContainer.size += (c.uncollapsedSize + endDiff); + prevContainer.uncollapsedSize += c.uncollapsedSize; } } else { @@ -538,6 +539,7 @@ angular.module('ui.layout', []) } if(prevContainer) { prevContainer.size -= (c.uncollapsedSize + endDiff); + prevContainer.uncollapsedSize -= c.uncollapsedSize; } } }); From 6082fa8615f565088f39b99c74c0f85e6fb2eb61 Mon Sep 17 00:00:00 2001 From: Zhen Ou Yun <yunzhenou@126.com> Date: Wed, 19 Apr 2017 17:42:54 +0800 Subject: [PATCH 2/2] add a feature which support remove after button --- src/ui-layout.js | 144 +++++++++++++++++++++++++++-------------------- 1 file changed, 83 insertions(+), 61 deletions(-) diff --git a/src/ui-layout.js b/src/ui-layout.js index 731d217..c32c93b 100644 --- a/src/ui-layout.js +++ b/src/ui-layout.js @@ -1,3 +1,4 @@ + 'use strict'; /** @@ -694,7 +695,10 @@ angular.module('ui.layout', []) //icon <span> elements var prevIcon = angular.element(prevButton.children()[0]); - var afterIcon = angular.element(afterButton.children()[0]); + if(!!afterButton){ + var afterIcon = angular.element(afterButton.children()[0]); + } + //icon classes var iconLeft = 'ui-splitbar-icon-left'; @@ -706,7 +710,9 @@ angular.module('ui.layout', []) var afterIconClass = ctrl.isUsingColumnFlow ? iconRight : iconDown; prevIcon.addClass(prevIconClass); - afterIcon.addClass(afterIconClass); + if(!!afterButton){ + afterIcon.addClass(afterIconClass); + } prevButton.on('click', function() { @@ -721,7 +727,9 @@ angular.module('ui.layout', []) if(ctrl.isUsingColumnFlow) { if(result) { - afterButton.css('display', 'none'); + if(!!afterButton){ + afterButton.css('display', 'none'); + } prevIcon.removeClass(iconLeft); prevIcon.addClass(iconRight); @@ -731,7 +739,9 @@ angular.module('ui.layout', []) prevSplitbarAfterButton.css('display', 'none'); } } else { - afterButton.css('display', 'inline'); + if(!!afterButton){ + afterButton.css('display', 'inline'); + } prevIcon.removeClass(iconRight); prevIcon.addClass(iconLeft); @@ -743,7 +753,9 @@ angular.module('ui.layout', []) } } else { if(result) { - afterButton.css('display', 'none'); + if(!!afterButton){ + afterButton.css('display', 'none'); + } prevIcon.removeClass(iconUp); prevIcon.addClass(iconDown); @@ -753,7 +765,9 @@ angular.module('ui.layout', []) prevSplitbarAfterButton.css('display', 'none'); } } else { - afterButton.css('display', 'inline'); + if(!!afterButton){ + afterButton.css('display', 'inline'); + } prevIcon.removeClass(iconDown); prevIcon.addClass(iconUp); @@ -768,66 +782,67 @@ angular.module('ui.layout', []) ctrl.calculate(); }); }); + if(!!afterButton){ + afterButton.on('click', function() { + var nextSplitbarBeforeButton, nextSplitbarAfterButton; + var result = ctrl.toggleAfter(scope.splitbar); + var nextSplitbar = ctrl.getNextSplitbarContainer(scope.splitbar); + + if(nextSplitbar !== null) { + nextSplitbarBeforeButton = angular.element(nextSplitbar.element.children()[0]); + nextSplitbarAfterButton = angular.element(nextSplitbar.element.children()[1]); + } - afterButton.on('click', function() { - var nextSplitbarBeforeButton, nextSplitbarAfterButton; - var result = ctrl.toggleAfter(scope.splitbar); - var nextSplitbar = ctrl.getNextSplitbarContainer(scope.splitbar); - - if(nextSplitbar !== null) { - nextSplitbarBeforeButton = angular.element(nextSplitbar.element.children()[0]); - nextSplitbarAfterButton = angular.element(nextSplitbar.element.children()[1]); - } + if(ctrl.isUsingColumnFlow) { + if(result) { + prevButton.css('display', 'none'); + afterIcon.removeClass(iconRight); + afterIcon.addClass(iconLeft); - if(ctrl.isUsingColumnFlow) { - if(result) { - prevButton.css('display', 'none'); - afterIcon.removeClass(iconRight); - afterIcon.addClass(iconLeft); - - // hide next splitbar buttons - if(nextSplitbar !== null) { - nextSplitbarBeforeButton.css('display', 'none'); - nextSplitbarAfterButton.css('display', 'none'); - } - } else { - prevButton.css('display', 'inline'); - afterIcon.removeClass(iconLeft); - afterIcon.addClass(iconRight); - - // show next splitbar buttons - if(nextSplitbar !== null) { - nextSplitbarBeforeButton.css('display', 'inline'); - nextSplitbarAfterButton.css('display', 'inline'); - } - } - } else { - if(result) { - prevButton.css('display', 'none'); - afterIcon.removeClass(iconDown); - afterIcon.addClass(iconUp); - - // hide next splitbar buttons - if(nextSplitbar !== null) { - nextSplitbarBeforeButton.css('display', 'none'); - nextSplitbarAfterButton.css('display', 'none'); + // hide next splitbar buttons + if(nextSplitbar !== null) { + nextSplitbarBeforeButton.css('display', 'none'); + nextSplitbarAfterButton.css('display', 'none'); + } + } else { + prevButton.css('display', 'inline'); + afterIcon.removeClass(iconLeft); + afterIcon.addClass(iconRight); + + // show next splitbar buttons + if(nextSplitbar !== null) { + nextSplitbarBeforeButton.css('display', 'inline'); + nextSplitbarAfterButton.css('display', 'inline'); + } } } else { - prevButton.css('display', 'inline'); - afterIcon.removeClass(iconUp); - afterIcon.addClass(iconDown); - - // show next splitbar buttons - if(nextSplitbar !== null) { - nextSplitbarBeforeButton.css('display', 'inline'); - nextSplitbarAfterButton.css('display', 'inline'); + if(result) { + prevButton.css('display', 'none'); + afterIcon.removeClass(iconDown); + afterIcon.addClass(iconUp); + + // hide next splitbar buttons + if(nextSplitbar !== null) { + nextSplitbarBeforeButton.css('display', 'none'); + nextSplitbarAfterButton.css('display', 'none'); + } + } else { + prevButton.css('display', 'inline'); + afterIcon.removeClass(iconUp); + afterIcon.addClass(iconDown); + + // show next splitbar buttons + if(nextSplitbar !== null) { + nextSplitbarBeforeButton.css('display', 'inline'); + nextSplitbarAfterButton.css('display', 'inline'); + } } } - } - scope.$evalAsync(function() { - ctrl.calculate(); + scope.$evalAsync(function() { + ctrl.calculate(); + }); }); - }); + } element.on('mousedown touchstart', function(e) { if (e.button === 0 || e.type === 'touchstart') { @@ -885,6 +900,7 @@ angular.module('ui.layout', []) scope: { collapsed: '=', resizable: '=', + hasAfterButton: '@', size: '@', minSize: '@', maxSize: '@' @@ -953,10 +969,16 @@ angular.module('ui.layout', []) var parent = element.parent(); var children = parent.children(); var index = ctrl.indexOfElement(element); - var splitbar = angular.element('<div ui-splitbar>' + + var splitbarEle = '<div ui-splitbar>' + '<a><span class="ui-splitbar-icon"></span></a>' + '<a><span class="ui-splitbar-icon"></span></a>' + - '</div>'); + '</div>'; + if("false" === scope.hasAfterButton){ + splitbarEle = '<div ui-splitbar>' + + '<a><span class="ui-splitbar-icon"></span></a>' + + '</div>'; + } + var splitbar = angular.element(splitbarEle); if(0 < index && !ctrl.hasSplitbarBefore(scope.container)) { angular.element(children[index-1]).after(splitbar); $compile(splitbar)(scope);