/*! * UI development toolkit for HTML5 (OpenUI5) * (c) Copyright 2009-2018 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ sap.ui.define(['./library','sap/ui/core/Control','sap/ui/core/EnabledPropagator','sap/ui/core/delegate/ItemNavigation','sap/ui/core/IconPool','sap/ui/core/delegate/ScrollEnablement','./IconTabBarSelectList','./Button','./ResponsivePopover','./IconTabFilter','sap/ui/Device','sap/ui/core/ResizeHandler','sap/ui/core/Icon','./IconTabBarDragAndDropUtil','./IconTabHeaderRenderer',"sap/ui/thirdparty/jquery","sap/base/Log"],function(l,C,E,I,a,S,b,B,R,c,D,d,e,f,g,q,L){"use strict";var t=l.touch;var h=l.ImageHelper;var P=l.PlacementType;var j=l.ButtonType;var k=l.BackgroundDesign;var m=l.IconTabHeaderMode;var n=l.IconTabDensityMode;var o=C.extend("sap.m.IconTabHeader",{metadata:{library:"sap.m",properties:{showSelection:{type:"boolean",group:"Misc",defaultValue:true,deprecated:true},selectedKey:{type:"string",group:"Data",defaultValue:null},visible:{type:"boolean",group:"Behavior",defaultValue:true},mode:{type:"sap.m.IconTabHeaderMode",group:"Appearance",defaultValue:m.Standard},showOverflowSelectList:{type:"boolean",group:"Appearance",defaultValue:false},backgroundDesign:{type:"sap.m.BackgroundDesign",group:"Appearance",defaultValue:k.Solid},enableTabReordering:{type:"boolean",group:"Behavior",defaultValue:false},tabDensityMode:{type:"sap.m.IconTabDensityMode",group:"Appearance",defaultValue:n.Cozy}},aggregations:{items:{type:"sap.m.IconTab",multiple:true,singularName:"item",dnd:{draggable:true,droppable:true,layout:"Horizontal"}},_overflowButton:{type:"sap.m.Button",multiple:false,visibility:"hidden"}},events:{select:{parameters:{item:{type:"sap.m.IconTabFilter"},key:{type:"string"}}}}}});E.apply(o.prototype,[true]);o.SCROLL_STEP=264;o.prototype.init=function(){this._bPreviousScrollForward=false;this._bPreviousScrollBack=false;this._iCurrentScrollLeft=0;this.startScrollX=0;this.startTouchX=0;this._scrollable=null;this._aTabKeys=[];this._oItemNavigation=new I().setCycling(false);this._oItemNavigation.attachEvent(I.Events.FocusLeave,this._onItemNavigationFocusLeave,this);this._oItemNavigation.attachEvent(I.Events.AfterFocus,this._onItemNavigationAfterFocus,this);this._oItemNavigation.setDisabledModifiers({sapnext:["alt","meta"],sapprevious:["alt","meta"]});this.addDelegate(this._oItemNavigation);this._oScroller=new S(this,this.getId()+"-head",{horizontal:true,vertical:false,nonTouchScrolling:true});};o.prototype.isTouchScrollingDisabled=function(){return this.getShowOverflowSelectList()&&this.getParent().getMetadata().getName()=='sap.tnt.ToolHeader';};o.prototype._getSelectList=function(){var i=this;if(!this._oSelectList){this._oSelectList=new b({selectionChange:function(p){var T=p.getParameter('selectedItem');i.setSelectedItem(T._tabFilter);}});this._oSelectList._iconTabHeader=this;}return this._oSelectList;};o.prototype._getOverflowButton=function(){var O=this.getAggregation("_overflowButton");if(!O){O=new B({id:this.getId()+'-overflow',icon:"sap-icon://slim-arrow-down",type:j.Transparent,press:this._overflowButtonPress.bind(this)});O.addEventDelegate(this._onOverflowButtonEventDelegate);this.setAggregation("_overflowButton",O);}return O;};o.prototype._overflowButtonPress=function(i){if(!this._oPopover){this._oPopover=new R({showArrow:false,showHeader:false,placement:P.Vertical,offsetX:0,offsetY:0}).addStyleClass('sapMITBPopover');if(D.system.phone){this._oPopover._oControl.addButton(this._createPopoverCloseButton());}this.addDependent(this._oPopover);this._oPopover._oControl._adaptPositionParams=function(){var p=q("body").hasClass("sapUiSizeCompact");this._arrowOffset=0;if(p){this._offsets=["0 0","0 0","0 2","0 0"];}else{this._offsets=["0 0","0 0","0 3","0 0"];}this._myPositions=["end bottom","begin top","end top","end top"];this._atPositions=["end top","end top","end bottom","begin top"];};}var s=this._getSelectList();this._setSelectListItems();this._oPopover.removeAllContent();this._oPopover.addContent(s);this._oPopover.setInitialFocus(s.getSelectedItem());this._oPopover.openBy(this._getOverflowButton());};o.prototype._createPopoverCloseButton=function(){var i=this;var r=sap.ui.getCore().getLibraryResourceBundle("sap.m");return new B({text:r.getText("SELECT_CANCEL_BUTTON"),press:function(){i._closeOverflow();}});};o.prototype._closeOverflow=function(){if(!D.system.desktop){this._oPopover.close();}if(this.oSelectedItem){this.oSelectedItem.$().focus();}};o.prototype._setSelectListItems=function(){if(!this.getShowOverflowSelectList()){return;}var s,T,p=this._getSelectList(),r=this.getTabFilters();p.destroyItems();for(var i=0;i0){if(!this.oSelectedItem||s&&s!==this.oSelectedItem._getNonEmptyKey()){if(s){for(;i0){K=K||p[0]._getNonEmptyKey();}if(this.$().length){for(;i0){p._rerenderContent(v);}else{if(!u){p._rerenderContent(p.getContent());}}if(!A&&p.getExpandable()&&!p.getExpanded()){p._toggleExpandCollapse(true);}}}if(this.oSelectedItem.$().length>0){this._scrollIntoView(i,500);}else{this._scrollAfterRendering=true;}}this.oSelectedItem=i;var w=this.oSelectedItem._getNonEmptyKey();this.setProperty("selectedKey",w,true);if(r){p.setProperty("selectedKey",w,true);}if(!A){if(r){p.fireSelect({selectedItem:this.oSelectedItem,selectedKey:w,item:this.oSelectedItem,key:w});}else{this.fireSelect({selectedItem:this.oSelectedItem,selectedKey:w,item:this.oSelectedItem,key:w});}}return this;};o.prototype.getVisibleTabFilters=function(){var p=this.getTabFilters(),v=[],r;for(var i=0;i0){for(var i=0;i0){for(var i=0;i0){return false;}}}}return true;};o.prototype._checkInLine=function(p){var r;if(p.length>0){for(var i=0;ii.offsetWidth){s=true;}}if(this._scrollable!==s){$.toggleClass("sapMITBScrollable",s);$.toggleClass("sapMITBNotScrollable",!s);this._scrollable=s;}this._setTabsVisibility();return s;};o.prototype._getScrollingArrow=function(N){var s=a.getIconURI("slim-arrow-"+N);var p={src:s,useIconTooltip:false};var i=this._bTextOnly?"TextOnly":"";var r="sapMITBArrowScrollLeft"+i;var u="sapMITBArrowScrollRight"+i;var v=["sapMITBArrowScroll",r];var w=["sapMITBArrowScroll",u];if(this._bInLine){v.push('sapMITBArrowScrollLeftInLine');w.push('sapMITBArrowScrollRightInLine');}if(N==="left"){if(!this._oArrowLeft){this._oArrowLeft=h.getImageControl(this.getId()+"-arrowScrollLeft",this._oArrowLeft,this,p,v);}return this._oArrowLeft;}if(N==="right"){if(!this._oArrowRight){this._oArrowRight=h.getImageControl(this.getId()+"-arrowScrollRight",this._oArrowRight,this,p,w);}return this._oArrowRight;}};o.prototype._checkOverflow=function(){var i=this.getDomRef("head");var $=this.$();if(this._checkScrolling(i)&&i){var s=false;var p=false;var r=this.getDomRef("scrollContainer");var u=this.getDomRef("head");if(this._oScroller.getScrollLeft()>0){s=true;}if((this._oScroller.getScrollLeft()+r.offsetWidth)-1){}else{if(T){var u=this.getId();i.preventDefault();if(T==u+"-arrowScrollLeft"&&D.system.desktop){var v=this._oScroller.getScrollLeft()-o.SCROLL_STEP;if(v<0){v=0;}this._scrollPreparation();setTimeout(this._oScroller["scrollTo"].bind(this._oScroller,v,0,500),0);setTimeout(this["_afterIscroll"].bind(this),500);}else if(T==u+"-arrowScrollRight"&&D.system.desktop){var v=this._oScroller.getScrollLeft()+o.SCROLL_STEP;var w=this.$("scrollContainer").width();var H=this.$("head").width();if(v>(H-w)){v=H-w;}this._scrollPreparation();setTimeout(this._oScroller["scrollTo"].bind(this._oScroller,v,0,500),0);setTimeout(this["_afterIscroll"].bind(this),500);}else{if($.hasClass('sapMITBFilterIcon')||$.hasClass('sapMITBCount')||$.hasClass('sapMITBText')||$.hasClass('sapMITBTab')||$.hasClass('sapMITBContentArrow')||$.hasClass('sapMITBSep')||$.hasClass('sapMITBSepIcon')){s=i.srcControl.getId().replace(/-icon$/,"");p=sap.ui.getCore().byId(s);if(p.getMetadata().isInstanceOf("sap.m.IconTab")&&!(p instanceof sap.m.IconTabSeparator)){this.setSelectedItem(p);}}else if(p.getMetadata().isInstanceOf("sap.m.IconTab")&&!(p instanceof sap.m.IconTabSeparator)){this.setSelectedItem(p);}}}else{if(p.getMetadata().isInstanceOf("sap.m.IconTab")&&!(p instanceof sap.m.IconTabSeparator)){this.setSelectedItem(p);}}}};o.prototype._scrollIntoView=function(i,p){var $=i.$(),s,N,r;if($.length>0){var u=this.$('head');var H=u.innerWidth()-u.width();var v=$.outerWidth(true);var w=$.position().left-H/2;s=this._oScroller.getScrollLeft();r=this.$("scrollContainer").width();N=0;if(w-s<0||w-s>r-v){if(w-s<0){N+=w;}else{N+=Math.min(w,w+v-r);N=Math.round(N);}this._scrollPreparation();this._iCurrentScrollLeft=N;setTimeout(this._oScroller["scrollTo"].bind(this._oScroller,N,0,p),0);setTimeout(this["_afterIscroll"].bind(this),p);}}return this;};o.prototype._scroll=function(i,p){this._scrollPreparation();var r=this.getDomRef("head");var s=r.scrollLeft;var u=D.browser.msie||D.browser.edge;if(!u&&this._bRtl){i=-i;}var v=s+i;q(r).stop(true,true).animate({scrollLeft:v},p,q.proxy(this._adjustAndShowArrow,this));this._iCurrentScrollLeft=v;};o.prototype._adjustAndShowArrow=function(){this._$bar&&this._$bar.toggleClass("sapMITBScrolling",false);this._$bar=null;if(D.system.desktop){this._checkOverflow();}};o.prototype._scrollPreparation=function(){if(!this._$bar){this._$bar=this.$().toggleClass("sapMITBScrolling",true);}};o.prototype._afterIscroll=function(){this._checkOverflow();this._adjustAndShowArrow();this._setTabsVisibility();};o.prototype._fnResize=function(){this._checkOverflow();if(this.oSelectedItem&&this._bCheckIfIntoView){this._scrollIntoView(this.oSelectedItem,0);if(!this._isTouchScrollingDisabled){this._bCheckIfIntoView=false;}}this._setTabsVisibility();};o.prototype._setTabsVisibility=function(){if(!this._isTouchScrollingDisabled){return;}var T=this.getItems(),p,$,H,i;for(i=0;ip))){return false;}return true;};o.prototype._moveVisibleTabs=function(){if(!this._oScroller){return;}var s=this._oScroller.getScrollLeft(),$=this.$('head'),H=$.innerWidth()-$.width(),i=this.$().find('.sapMITBFilter:not(.sapMITBFilterHidden)').first(),p,r;if(!i.length){return;}r=i.position().left-H/2;if(!this._bRtl&&r-s>2){p=s-r;$.css('transform','translate('+p+'px)');}else{$.css('transform','');}return true;};o.prototype.getFocusDomRef=function(F){var T=F||this.oSelectedItem;if(!T){return null;}return T.getDomRef();};o.prototype.applyFocusInfo=function(F){if(F.focusDomRef){q(F.focusDomRef).focus();}};o.prototype.ontouchstart=function(i){var T=i.targetTouches[0];this._iActiveTouch=T.identifier;this._iTouchStartPageX=T.pageX;this._iTouchStartPageY=T.pageY;this._iTouchDragX=0;this._iTouchDragY=0;var $=q(i.target);if($.hasClass('sapMITBArrowScroll')){i.preventDefault();}};o.prototype.ontouchmove=function(i){if(this._iActiveTouch===undefined){return;}var T=t.find(i.changedTouches,this._iActiveTouch);if(!T||T.pageX===this._iTouchStartPageX){return;}this._iTouchDragX+=Math.abs(this._iTouchStartPageX-T.pageX);this._iTouchDragY+=Math.abs(this._iTouchStartPageY-T.pageY);this._iTouchStartPageX=T.pageX;this._iTouchStartPageY=T.pageY;};o.prototype.ontouchend=function(i){if(this._iActiveTouch===undefined){return;}var M=D.system.desktop?5:15;if((this._scrollable&&this._iTouchDragX>M)||this._iTouchDragY>M){return;}var p=0;var r=1;var s;if(i.which===s||i.which===p||i.which===r){this._handleActivation(i);}this._iActiveTouch=undefined;};o.prototype.ontouchcancel=o.prototype.ontouchend;o.prototype.onsapselect=function(i){this._handleActivation(i);};o.prototype._handleDragAndDrop=function(i){var s=i.getParameter("dropPosition"),p=i.getParameter("draggedControl"),r=i.getParameter("droppedControl"),u=p.getParent().getMetadata().getName()==="sap.m.IconTabBarSelectList";if(u){this._handleDragAndDropBetweenHeaderAndList(s,r,p);}else{f.handleDrop(this,s,p,r,false);}this._initItemNavigation();p.$().focus();};o.prototype._handleDragAndDropBetweenHeaderAndList=function(s,i,p){var r=this._getSelectList(),u=f.getDraggedDroppedItemsFromList(r.getAggregation("items"),p,i);if(!u){return;}f.handleDrop(this,s,p._tabFilter,i,false);f.handleDrop(r,s,p,u.oDroppedControlFromList,false);r._initItemNavigation();};o.prototype._moveTab=function(T,K){var r=f.moveItem.call(this,T,K);this._initItemNavigation();if(r){this._scrollIntoView(T,0);}};o.prototype.ondragrearranging=function(i){if(!this.getEnableTabReordering()){return;}var T=i.srcControl;this._moveTab(T,i.keyCode);T.$().focus();};o.prototype.onsaphomemodifiers=o.prototype.ondragrearranging;o.prototype.onsapendmodifiers=o.prototype.ondragrearranging;o.prototype.onsapincreasemodifiers=o.prototype.ondragrearranging;o.prototype.onsapdecreasemodifiers=o.prototype.ondragrearranging;return o;});