in src/Clients/Web/winjs/js/winjs.js [60572:60682]
render: function overflowState_render(goPrevious) {
var pivot = this.pivot;
if (this._blocked || pivot._pendingRefresh || !pivot._items) {
return;
}
var restoreFocus = pivot._headersContainerElement.contains(_Global.document.activeElement);
_Dispose._disposeElement(pivot._headersContainerElement);
_ElementUtilities.empty(pivot._headersContainerElement);
var maxHeaderWidth = (pivot._viewportWidth * 0.8) + "px";
if (pivot._items.length === 1) {
var header = headersStates.common.renderHeader(pivot, 0, true);
header.classList.add(Pivot._ClassName.pivotHeaderSelected);
pivot._headersContainerElement.appendChild(header);
pivot._viewportElement.style.overflow = "hidden";
pivot._headersContainerElement.style.marginLeft = "0px";
pivot._headersContainerElement.style.marginRight = "0px";
} else if (pivot._items.length > 1) {
// We always render 1 additional header before the current item.
// When going backwards, we render 2 additional headers, the first one as usual, and the second one for
// fading out the previous last header.
var numberOfHeadersToRender = pivot._items.length + (goPrevious ? 2 : 1);
var indexToRender = pivot.selectedIndex - 1;
if (pivot._viewportElement.style.overflow) {
pivot._viewportElement.style.overflow = "";
}
for (var i = 0; i < numberOfHeadersToRender; i++) {
if (indexToRender === -1) {
indexToRender = pivot._items.length - 1;
} else if (indexToRender === pivot._items.length) {
indexToRender = 0;
}
var header = headersStates.common.renderHeader(pivot, indexToRender, true);
header.style.maxWidth = maxHeaderWidth;
pivot._headersContainerElement.appendChild(header);
if (indexToRender === pivot.selectedIndex) {
header.classList.add(Pivot._ClassName.pivotHeaderSelected);
}
indexToRender++;
}
if (!pivot._firstLoad && !this._firstRender) {
var start, end;
if (goPrevious) {
start = "";
end = "0";
} else {
start = "0";
end = "";
}
var lastHeader = pivot._headersContainerElement.children[numberOfHeadersToRender - 1];
lastHeader.style.opacity = start;
var lastHeaderFadeInDuration = 0.167;
lastHeader.style[_BaseUtils._browserStyleEquivalents["transition"].scriptName] = "opacity " + _TransitionAnimation._animationTimeAdjustment(lastHeaderFadeInDuration) + "s";
_Global.getComputedStyle(lastHeader).opacity;
lastHeader.style.opacity = end;
}
pivot._headersContainerElement.children[0].setAttribute("aria-hidden", "true");
pivot._headersContainerElement.style.marginLeft = "0px";
pivot._headersContainerElement.style.marginRight = "0px";
var leadingMargin = pivot._rtl ? "marginRight" : "marginLeft";
var trailingPadding = pivot._rtl ? "paddingLeft" : "paddingRight";
var firstHeader = pivot._headersContainerElement.children[0];
var leadingSpace = firstHeader.offsetWidth + parseFloat(_Global.getComputedStyle(firstHeader)[leadingMargin]) - parseFloat(_Global.getComputedStyle(firstHeader)[trailingPadding]);
if (firstHeader !== pivot._headersContainerElement.children[0]) {
// Calling offsetWidth caused a layout which can trigger a synchronous resize which in turn
// calls renderHeaders. We can ignore this one since its the old headers which are not in the DOM.
return;
}
pivot._headersContainerElement.style[leadingMargin] = (-1 * leadingSpace) + "px";
// Create header track nav button elements
pivot._prevButton = _Global.document.createElement("button");
_ElementUtilities.addClass(pivot._prevButton, Pivot._ClassName.pivotNavButton);
_ElementUtilities.addClass(pivot._prevButton, Pivot._ClassName.pivotNavButtonPrev);
pivot._prevButton.addEventListener("click", function () {
if (pivot.locked) {
return;
}
pivot._rtl ? pivot._goNext() : pivot._goPrevious();
});
pivot._headersContainerElement.appendChild(pivot._prevButton);
pivot._prevButton.style.left = pivot._rtl ? "0px" : leadingSpace + "px";
pivot._nextButton = _Global.document.createElement("button");
_ElementUtilities.addClass(pivot._nextButton, Pivot._ClassName.pivotNavButton);
_ElementUtilities.addClass(pivot._nextButton, Pivot._ClassName.pivotNavButtonNext);
pivot._nextButton.addEventListener("click", function () {
if (pivot.locked) {
return;
}
pivot._rtl ? pivot._goPrevious() : pivot._goNext();
});
pivot._headersContainerElement.appendChild(pivot._nextButton);
pivot._nextButton.style.right = pivot._rtl ? leadingSpace + "px" : "0px";
}
var firstHeaderIndex = pivot._headersContainerElement.children.length > 1 ? 1 : 0;
pivot._tabContainer.childFocus = pivot._headersContainerElement.children[firstHeaderIndex];
if (restoreFocus) {
pivot._headersContainerElement.children[firstHeaderIndex].focus();
}
this._firstRender = false;
},