@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
719 lines (613 loc) • 25 kB
JavaScript
/*!
* OpenUI5
* (c) Copyright 2026 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/Lib",
"sap/ui/core/ResizeHandler",
"sap/ui/core/delegate/ItemNavigation",
"sap/ui/Device",
"sap/m/ActionSheet",
"sap/ui/core/InvisibleText",
"./WizardProgressNavigatorRenderer",
"./Button",
"sap/ui/thirdparty/jquery"
],
function(
library,
Control,
Library,
ResizeHandler,
ItemNavigation,
Device,
ActionSheet,
InvisibleText,
WizardProgressNavigatorRenderer,
Button,
jQuery
) {
"use strict";
/**
* Constructor for a new WizardProgressNavigator.
*
* @param {string} [sId] ID for the new control, generated automatically if no ID is given
* @param {object} [mSettings] Initial settings for the new control
*
* @class
* The WizardProgressNavigator is used mainly for displaying the number of steps in the Wizard control.
* It provides a way to navigate between those steps by clicking on each separate step.
* Note: This is a private control that is instantiated and controlled by the Wizard control.
* @extends sap.ui.core.Control
*
* @author SAP SE
* @version 1.146.0
*
* @constructor
* @private
* @since 1.30
* @alias sap.m.WizardProgressNavigator
*/
var WizardProgressNavigator = Control.extend("sap.m.WizardProgressNavigator", /** @lends sap.m.WizardProgressNavigator.prototype */ {
metadata: {
properties: {
/**
* Sets the total number of steps.
* Minimum number of steps is 3.
* Maximum number of steps is 8.
*/
stepCount: {type: "int", group: "Data", defaultValue: 3},
/**
* Sets a title to be displayed for each step.
* The title for each step is visible on hover.
* <b>Note:</b> The number of titles should equal the number of steps,
* otherwise no titles will be rendered.
* @since 1.32
*/
stepTitles: {type: "string[]", group: "Appearance", defaultValue: []},
/**
* Sets an icon to be displayed for each step.
* The icon for each step is directly visible in the WizardProgressNavigator.
* <b>Note:</b> The number of icons should equal the number of steps,
* otherwise no icons will be rendered.
* @since 1.32
*/
stepIcons: {type: "sap.ui.core.URI[]", group: "Appearance", defaultValue: []},
/**
* Indicates that number of steps can vary.
* A dashed line is displayed after the last concrete step (set by the <code>stepCount</code> property).
*/
varyingStepCount: {type: "boolean", group: "Appearance", defaultValue: false}
},
events: {
/**
* This event is fired when the current step changes.
*/
stepChanged: {
parameters: {
/**
* The number of the current step. One-based.
*/
current: {type: "int"}
}
}
}
},
renderer: WizardProgressNavigatorRenderer
});
WizardProgressNavigator.CONSTANTS = {
MINIMUM_STEPS: 3,
MAXIMUM_STEPS: 8,
MIN_STEP_WIDTH_NO_TITLE: 64,
MIN_STEP_WIDTH_WITH_TITLE: 200
};
WizardProgressNavigator.TEXT = {
STEP: "WIZARD_PROG_NAV_STEP_TITLE",
OPTIONAL_STEP: "WIZARD_STEP_OPTIONAL_STEP_TEXT"
};
/**************************************** LIFECYCLE METHODS ***************************************/
WizardProgressNavigator.prototype.init = function () {
this._iCurrentStep = 1;
this._iActiveStep = 1;
this._aCachedSteps = [];
this._aStepOptionalIndication = [];
this._oResourceBundle = Library.getResourceBundleFor("sap.m");
this._oActionSheet = new ActionSheet();
this._aStepIds = [];
this._createStepNavigation();
};
WizardProgressNavigator.prototype.onBeforeRendering = function () {
// show no icons if an icon is not defined for each step
if (this.getStepCount() !== this.getStepIcons().filter(String).length) {
this.setStepIcons([]);
}
// show no titles if a title is not defined for each step
if (this.getStepCount() !== this.getStepTitles().filter(String).length) {
this.setStepTitles([]);
}
};
WizardProgressNavigator.prototype.onAfterRendering = function () {
var $oProgressNavStep,
iZeroBasedActiveStep = this._iActiveStep - 1,
iZeroBasedCurrentStep = this._iCurrentStep - 1;
this._cacheDOMElements();
this._updateStepZIndex();
this._updateStepNavigation(iZeroBasedActiveStep);
this._updateStepActiveAttribute(iZeroBasedActiveStep);
this._updateStepCurrentAttribute(iZeroBasedCurrentStep);
this._updateStepAriaCurrentAttribute(iZeroBasedCurrentStep);
this._updateOpenSteps();
ResizeHandler.register(this.getDomRef(), this._updateOpenSteps.bind(this));
// iOS is not able to render/calculate properly the table-cell property
// Moving to flexbox is not suitable as we should ensure backwards compatibility with IE9
if (Device.os.name === Device.os.OS.IOS) {
$oProgressNavStep = this.$().find(".sapMWizardProgressNavStep").css("display", "block");
setTimeout($oProgressNavStep["css"].bind($oProgressNavStep, "display", ""), 0);
}
};
WizardProgressNavigator.prototype.ontap = function (oEvent) {
if (this._isGroupAtStart(oEvent.target)) {
return this._showActionSheet(oEvent.target, true);
}
if (this._isGroupAtEnd(oEvent.target)) {
return this._showActionSheet(oEvent.target, false);
}
if (!this._isOpenStep(oEvent.target) || !this._isActiveStep(this._getStepNumber(oEvent.target))) {
return;
}
this._updateCurrentStep(this._getStepNumber(oEvent.target));
this.fireStepChanged({ current: this._getStepNumber(oEvent.target) });
};
WizardProgressNavigator.prototype.onsapspace = function (oEvent) {
oEvent.preventDefault();
if (this._onEnter) {
this._onEnter(oEvent, this._oStepNavigation.getFocusedIndex());
}
this.ontap(oEvent);
};
WizardProgressNavigator.prototype.onsapenter = WizardProgressNavigator.prototype.onsapspace;
WizardProgressNavigator.prototype.exit = function () {
ResizeHandler.deregisterAllForControl(this.getId());
this.removeDelegate(this._oStepNavigation);
this._oStepNavigation.destroy();
this._oStepNavigation = null;
if (this._oActionSheetInvisibleText) {
this._oActionSheetInvisibleText.destroy();
this._oActionSheetInvisibleText = null;
}
this._oActionSheet.destroy();
this._oActionSheet = null;
this._iCurrentStep = null;
this._iActiveStep = null;
this._aCachedSteps = null;
this._aStepIds = null;
this._aStepOptionalIndication = null;
};
/**************************************** PUBLIC METHODS ***************************************/
/**
* Returns the number of the currently selected step. One-based.
* @returns {number} The currently selected step.
* @public
*/
WizardProgressNavigator.prototype.getCurrentStep = function () {
return this._iCurrentStep;
};
/**
* Returns the number of the last step that still requires input.
* @returns {number} The last step that still requires input.
* @public
*/
WizardProgressNavigator.prototype.getProgress = function () {
return this._iActiveStep;
};
/**
* Moves the selection backwards by one step.
* @returns {this} Pointer to the control instance for chaining.
* @public
*/
WizardProgressNavigator.prototype.previousStep = function () {
var iCurrentStep = this.getCurrentStep();
if (iCurrentStep < 2) {
return this;
}
return this._moveToStep(iCurrentStep - 1);
};
/**
* Moves the selection forwards by one step.
* @returns {this} Pointer to the control instance for chaining.
* @public
*/
WizardProgressNavigator.prototype.nextStep = function () {
return this._moveToStep(this.getCurrentStep() + 1);
};
/**
* Moves the selection forwards to the next step that requires input.
* @returns {this} Pointer to the control instance for chaining.
* @public
*/
WizardProgressNavigator.prototype.incrementProgress = function () {
return this._moveToStep(this.getProgress() + 1);
};
/**
* Discards all input done after the step which is being edited.
* @param {number} iIndex The index after which all input will be discarded. One-based.
* @public
*/
WizardProgressNavigator.prototype.discardProgress = function (iIndex) {
if (iIndex <= 0 || iIndex > this._iActiveStep) {
return this;
}
this._updateCurrentStep(iIndex, this._iCurrentStep);
this._updateStepActiveAttribute(iIndex - 1, this._iActiveStep - 1);
this._updateStepNavigation(iIndex - 1);
this._iCurrentStep = iIndex;
this._iActiveStep = iIndex;
};
/**************************************** PRIVATE METHODS ***************************************/
WizardProgressNavigator.prototype._setOnEnter = function (fnCallback) {
this._onEnter = fnCallback;
};
/**
* Creates an ItemNavigation delegate for navigating between active steps.
* @private
*/
WizardProgressNavigator.prototype._createStepNavigation = function () {
var that = this;
this._oStepNavigation = new ItemNavigation();
this._oStepNavigation.setCycling(false);
this._oStepNavigation.setDisabledModifiers({
// Alt + arrow keys are reserved for browser navigation
sapnext: [
"alt", // Windows and Linux
"meta" // Apple (⌘)
],
sapprevious: [
"alt",
"meta"
]
});
this._oStepNavigation.attachEvent("AfterFocus", function (params) {
var oEvent = params.mParameters.oEvent;
if (!oEvent || !oEvent.relatedTarget || jQuery(oEvent.relatedTarget).hasClass(WizardProgressNavigatorRenderer.CLASSES.STEP)) {
return;
}
that._oStepNavigation.focusItem(that._iCurrentStep - 1);
});
this.addDelegate(this._oStepNavigation);
};
/**
* Caches a reference to the DOM elements which represent the steps and the separators.
* Cached reference is in the form of static NodeList retrieved using querySelectorAll method.
* @private
*/
WizardProgressNavigator.prototype._cacheDOMElements = function () {
var oDomRef = this.getDomRef();
this._aCachedSteps = oDomRef.querySelectorAll("." + WizardProgressNavigatorRenderer.CLASSES.STEP);
};
/**
* Sets z-index to all steps so that they stack in the correct order on phone.
* The leftmost step after the current step is with the highest z-index
* while the rightmost is with the lowest z-index.
* @private
*/
WizardProgressNavigator.prototype._updateStepZIndex = function () {
var iZeroBasedCurrentStep = this._iCurrentStep - 1,
iStepsLength = this._aCachedSteps.length,
iZIndex = WizardProgressNavigator.CONSTANTS.MAXIMUM_STEPS;
for (var i = 0; i < iStepsLength; i++) {
if (i <= iZeroBasedCurrentStep) {
this._aCachedSteps[i].style.zIndex = 0;
} else {
this._aCachedSteps[i].style.zIndex = iZIndex;
iZIndex -= 1;
}
}
};
/**
* Allows focus on active steps.
* @param {number} iIndex The index of the last focusable step. Zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateStepNavigation = function (iIndex) {
var oNavDomRef = this.getDomRef(),
aFocusableSteps = [];
for (var i = 0; i <= iIndex; i++) {
if (this._aCachedSteps[i]) {
aFocusableSteps.push(this._aCachedSteps[i]);
}
}
this._oStepNavigation.setRootDomRef(oNavDomRef);
this._oStepNavigation.setItemDomRefs(aFocusableSteps);
this._oStepNavigation.setPageSize(iIndex);
this._oStepNavigation.setFocusedIndex(iIndex);
};
/**
* Updates the step active attribute in the DOM structure of the Control.
* @param {number} iNewIndex The new index at which the attribute should be set. Zero-based.
* @param {number} iOldIndex The old index at which the attribute was set. Zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateStepActiveAttribute = function (iNewIndex, iOldIndex) {
if (iOldIndex !== undefined && this._aCachedSteps[iOldIndex]) {
this._aCachedSteps[iOldIndex]
.removeAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.ACTIVE_STEP);
}
if (this._aCachedSteps[iNewIndex]) {
this._aCachedSteps[iNewIndex]
.setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.ACTIVE_STEP, true);
}
};
/**
* Updates the step current attribute in the DOM structure of the Control.
* @param {number} iNewIndex The new index at which the attribute should be set. Zero-based.
* @param {number} iOldIndex The old index at which the attribute was set. Zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateStepCurrentAttribute = function (iNewIndex, iOldIndex) {
if (iOldIndex !== undefined && this._aCachedSteps[iOldIndex]) {
this._aCachedSteps[iOldIndex]
.removeAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.CURRENT_STEP);
}
if (this._aCachedSteps[iNewIndex]) {
this._aCachedSteps[iNewIndex]
.setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.CURRENT_STEP, true);
}
};
/**
* Updates the step aria-current attribute in the DOM structure of the Control.
* @param {number} iNewIndex The new index at which the attribute should be set. Zero-based.
* @param {number} iOldIndex The old index at which the attribute was set. Zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateStepAriaCurrentAttribute = function (iNewIndex, iOldIndex) {
var oStepNew = this._aCachedSteps[iNewIndex];
if (iOldIndex !== undefined && this._aCachedSteps[iOldIndex]) {
this._aCachedSteps[iOldIndex]
.removeAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.ARIA_CURRENT);
}
if (oStepNew) {
oStepNew
.setAttribute(
WizardProgressNavigatorRenderer.ATTRIBUTES.ARIA_CURRENT, true);
}
};
/**
* Updates the step aria-label attribute in the DOM structure of the Control.
* @param {number} iIndex The index at which the attribute should be set. Zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateStepAriaLabelAttribute = function (iIndex) {
var oStep = this._aCachedSteps[iIndex];
var sStepActive = this._isActiveStep(iIndex) ? "ACTIVE" : "INACTIVE";
var sStepOptional = this._aStepOptionalIndication[iIndex] ? this._oResourceBundle.getText("WIZARD_STEP_OPTIONAL_STEP_TEXT") : "";
var sValueText = this._oResourceBundle.getText("WIZARD_STEP_" + sStepActive + "_LABEL", [iIndex + 1, this.getStepTitles()[iIndex], sStepOptional]);
if (oStep) {
oStep
.setAttribute(
WizardProgressNavigatorRenderer.ATTRIBUTES.ARIA_LABEL, sValueText);
}
};
/**
* Move to the specified step while updating the current step and active step.
* @param {number} iNewStep The step number to which current step will be set. Non zero-based.
* @returns {this} Pointer to the control instance for chaining.
* @private
*/
WizardProgressNavigator.prototype._moveToStep = function (iNewStep) {
var iStepCount = this.getStepCount(),
iOldStep = this.getCurrentStep();
if (iNewStep > iStepCount) {
return this;
}
if (iNewStep > this._iActiveStep) {
this._updateActiveStep(iNewStep);
}
return this._updateCurrentStep(iNewStep, iOldStep);
};
/**
* Updates the active step in the control instance as well as the DOM structure.
* @param {number} iNewStep The step number to which active step will be set. Non zero-based.
* @param {number} iOldStep The step number to which active step was set. Non zero-based.
* @private
*/
WizardProgressNavigator.prototype._updateActiveStep = function (iNewStep, iOldStep) {
var iZeroBasedNewStep = iNewStep - 1,
iZeroBasedOldStep = (iOldStep || this._iActiveStep) - 1;
this._iActiveStep = iNewStep;
this._updateStepNavigation(iZeroBasedNewStep);
this._updateStepActiveAttribute(iZeroBasedNewStep, iZeroBasedOldStep);
this._updateStepAriaLabelAttribute(iZeroBasedNewStep);
};
/**
* Updates the current step in the control instance as well as the DOM structure.
* @param {number} iNewStep The step number to which current step will be set. Non zero-based.
* @param {number} iOldStep The step number to which current step was set. Non zero-based.
* @returns {this} Pointer to the control instance for chaining.
* @private
*/
WizardProgressNavigator.prototype._updateCurrentStep = function (iNewStep, iOldStep) {
var iZeroBasedNewStep = iNewStep - 1,
iZeroBasedOldStep = (iOldStep || this.getCurrentStep()) - 1;
this._iCurrentStep = iNewStep;
this._updateStepZIndex();
this._updateOpenSteps();
this._updateStepCurrentAttribute(iZeroBasedNewStep, iZeroBasedOldStep);
this._updateStepAriaCurrentAttribute(iZeroBasedNewStep, iZeroBasedOldStep);
return this;
};
/**
* Updates the open step attribute for each step in the DOM structure of the control.
* The algorithm is as follows:
* 1. A step towards the end is opened
* 1.2. If there are no available steps towards the end a step towards the beginning is opened
* 2. A step towards the beginning is opened
* 2.2. If there are no available steps towards the beginning a step towards the end is opened
* @private
*/
WizardProgressNavigator.prototype._updateOpenSteps = function () {
var iWidth = this.$().width(),
iCurrStep = this._iCurrentStep - 1,
iCounter = 0,
bIsForward = true,
iStepsToShow = this.getStepTitles().length ?
Math.floor(iWidth / WizardProgressNavigator.CONSTANTS.MIN_STEP_WIDTH_WITH_TITLE) :
Math.floor(iWidth / WizardProgressNavigator.CONSTANTS.MIN_STEP_WIDTH_NO_TITLE);
if (!this._aCachedSteps) {
return;
}
[].forEach.call(this._aCachedSteps, function (step) {
step.setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, false);
step.setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_PREV, false);
step.setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_NEXT, false);
});
if (this._aCachedSteps[iCurrStep]) {
this._aCachedSteps[iCurrStep].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, true);
}
for (var i = 1; i < iStepsToShow; i++) {
if (bIsForward) {
iCounter += 1;
}
if (bIsForward && this._aCachedSteps[iCurrStep + iCounter]) {
this._aCachedSteps[iCurrStep + iCounter].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, true);
bIsForward = !bIsForward;
} else if (!bIsForward && this._aCachedSteps[iCurrStep - iCounter]) {
this._aCachedSteps[iCurrStep - iCounter].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, true);
bIsForward = !bIsForward;
} else if (this._aCachedSteps[iCurrStep + iCounter + 1]) {
iCounter += 1;
this._aCachedSteps[iCurrStep + iCounter].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, true);
bIsForward = true;
} else if (this._aCachedSteps[iCurrStep - iCounter]) {
this._aCachedSteps[iCurrStep - iCounter].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP, true);
iCounter += 1;
bIsForward = false;
}
}
// mark the topmost steps of both groups (in the beginning and the end)
for (i = 0; i < this._aCachedSteps.length; i++) {
if (this._aCachedSteps[i].getAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) == "true" &&
this._aCachedSteps[i - 1] &&
this._aCachedSteps[i - 1].getAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) == "false") {
this._aCachedSteps[i - 1].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_PREV, true);
}
if (this._aCachedSteps[i].getAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) == "false" &&
this._aCachedSteps[i - 1] &&
this._aCachedSteps[i - 1].getAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) == "true") {
this._aCachedSteps[i].setAttribute(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_NEXT, true);
break;
}
}
};
/**
* Checks whether the argument has data-sap-ui-wpn-step-open-prev attribute set to true.
* This means this is the topmost step of the group at the start of the navigator.
* It is a group if there is more than one step in the group - the step is not the first one.
* @param {HTMLElement} oDomTarget The target of the click/tap event.
* @returns {boolean} Returns true when data-sap-ui-wpn-step-open-prev=true, false otherwise.
* @private
*/
WizardProgressNavigator.prototype._isGroupAtStart = function (oDomTarget) {
var $oStep = jQuery(oDomTarget).closest("." + WizardProgressNavigatorRenderer.CLASSES.STEP);
var iStepNumber = this._getStepNumber($oStep);
return $oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_PREV) === "true" &&
iStepNumber > 1;
};
/**
* Checks whether the argument has data-sap-ui-wpn-step-open attribute set to false.
* This means this is the topmost step of the group at the end of the navigator.
* It is a group if there is more than one step in the group - the step is not the last one.
* @param {HTMLElement} oDomTarget The target of the click/tap event.
* @returns {boolean} Returns true when data-sap-ui-wpn-step-open=false, false otherwise.
* @private
*/
WizardProgressNavigator.prototype._isGroupAtEnd = function (oDomTarget) {
var $oStep = jQuery(oDomTarget).closest("." + WizardProgressNavigatorRenderer.CLASSES.STEP);
var iStepNumber = this._getStepNumber($oStep);
return $oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_NEXT) === "true" &&
iStepNumber <= this._aCachedSteps.length;
};
/**
* Opens an ActionSheet control with buttons for each grouped step.
* @param {HTMLElement} oDomTarget The target of the click/tap event.
* @param {boolean} bAtStart The position of the group (at the start or at the end).
* @private
*/
WizardProgressNavigator.prototype._showActionSheet = function (oDomTarget, bAtStart) {
var iFromStep = bAtStart ? 0 : this._getStepNumber(oDomTarget) - 1;
var iToStep = bAtStart ? this._getStepNumber(oDomTarget) : this._aCachedSteps.length;
var sIcon, sStepNumber, sStepTextContent, sTitle, oStepTitleSpan, oActionSheetParent, sActionSheetAriaLabelId;
this._oActionSheetInvisibleText = new InvisibleText({
text: this._oResourceBundle.getText("WIZARD_STEPS")
}).toStatic();
this._oActionSheet.removeAllButtons();
for (var i = iFromStep; i < iToStep; i++) {
sIcon = this.getStepIcons()[i];
sStepNumber = (i + 1) + ".";
oStepTitleSpan = this._aCachedSteps[i].querySelector(".sapMWizardProgressNavStepTitle");
sStepTextContent = oStepTitleSpan && oStepTitleSpan.textContent;
sTitle = sStepNumber + " " + sStepTextContent;
this._oActionSheet.addButton(new Button({
text: sTitle,
icon: sIcon,
enabled: this._iActiveStep >= (i + 1),
press: function (stepNumber) {
this._moveToStep(stepNumber);
this.fireStepChanged({ current: stepNumber});
}.bind(this, i + 1)
}));
}
this._oActionSheet.openBy(oDomTarget);
sActionSheetAriaLabelId = this._oActionSheetInvisibleText.getId();
oActionSheetParent = this._oActionSheet.getParent();
if (oActionSheetParent && oActionSheetParent.getAriaLabelledBy().indexOf(sActionSheetAriaLabelId) === -1) {
oActionSheetParent.addAriaLabelledBy(sActionSheetAriaLabelId);
}
};
/**
* Checks whether the argument has the open step attribute set to true.
* If not it checks whether it is an only step in a group - therefore navigate to it directly.
* @param {HTMLElement} oDomTarget The target of the click/tap event.
* @returns {boolean} Returns true when sapMWizardProgressNavIcon class is present, false otherwise.
* @private
*/
WizardProgressNavigator.prototype._isOpenStep = function (oDomTarget) {
var $oStep = jQuery(oDomTarget).closest("." + WizardProgressNavigatorRenderer.CLASSES.STEP);
return $oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) === "true" ||
($oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) === "false" &&
$oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_PREV) === "true") ||
($oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP) === "false" &&
$oStep.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.OPEN_STEP_NEXT) === "true");
};
/**
* Checks whether the step is active.
* @param {number} iStepNumber The step number to be checked.
* @returns {boolean} True when the step number has been activated, false otherwise.
* @private
*/
WizardProgressNavigator.prototype._isActiveStep = function (iStepNumber) {
return iStepNumber <= this._iActiveStep;
};
/**
* Extracts the step attribute from the argument.
* @param {HTMLElement} oDomStep The DOM element which represents the list item tag in each step.
* @returns {number} Returns parsed step number. Non-zero based.
* @private
*/
WizardProgressNavigator.prototype._getStepNumber = function (oDomStep) {
var $iStepNumber = jQuery(oDomStep)
.closest("." + WizardProgressNavigatorRenderer.CLASSES.STEP)
.attr(WizardProgressNavigatorRenderer.ATTRIBUTES.STEP);
return parseInt($iStepNumber);
};
WizardProgressNavigator.prototype._setStepIds = function (aSteps) {
if (!aSteps.length) {
return;
}
this._aStepIds = aSteps.map(function (oStep) {
return oStep.getId();
});
};
return WizardProgressNavigator;
});