UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

1,143 lines (1,034 loc) 33.2 kB
/*! * OpenUI5 * (c) Copyright 2009-2023 SAP SE or an SAP affiliate company. * Licensed under the Apache License, Version 2.0 - see LICENSE.txt. */ sap.ui.define([ "sap/base/Log", "sap/ui/core/library", "sap/ui/core/Element", "sap/ui/core/Icon", "sap/ui/core/IconPool", "sap/ui/core/HTML", "sap/m/library", "sap/m/Button", "sap/m/CustomListItem", "sap/m/Image", "sap/m/Input", "sap/m/Label", "sap/m/Link", "sap/m/ProgressIndicator", "sap/m/VBox", "sap/m/HBox" ], function (Log, CoreLibrary, Element, Icon, IconPool, HTML, MobileLibrary, Button, CustomListItem, Image, Input, Label, Link, ProgressIndicator, VBox, HBox) { "use strict"; var UploadType = MobileLibrary.UploadType; /** * Constructor for a new UploadSetItem. * * @param {string} [sId] ID for the new control, will be generated automatically if no ID is provided. * @param {object} [mSettings] Initial settings for the new control. * @class Item that represents one file to be uploaded using the {@link sap.m.upload.UploadSet} control. * @extends sap.ui.core.Element * @author SAP SE * @version 1.117.4 * @constructor * @public * @since 1.63 * @alias sap.m.upload.UploadSetItem */ var UploadSetItem = Element.extend("sap.m.upload.UploadSetItem", { metadata: { library: "sap.m", properties: { /** * Enables or disables the remove button. */ enabledRemove: {type: "boolean", defaultValue: true}, /** * Enables or disables the edit button. */ enabledEdit: {type: "boolean", defaultValue: true}, /** * Specifies the name of the uploaded file. */ fileName: {type: "string", defaultValue: null}, /** * Specifies the MIME type of the file. */ mediaType: {type: "string", defaultValue: null}, /** * Specifies the URL where the thumbnail of the file is located. Can also be set to an SAPUI5 icon URL. */ thumbnailUrl: {type: "string", defaultValue: null}, /** * State of the item relevant to its upload process. */ uploadState: {type: "sap.m.UploadState", defaultValue: null}, /** * Specifies the URL where the file is located. * <br>If the application doesn't provide a value for this property, the icon and * the file name are not clickable in {@link sap.m.upload.UploadSet}. */ url: {type: "string", defaultValue: null}, /** * Shows or hides the remove button. */ visibleRemove: {type: "boolean", defaultValue: true}, /** * Shows or hides the edit button. */ visibleEdit: {type: "boolean", defaultValue: true}, /** * URL where the uploaded files will be stored. If empty, uploadUrl from the uploader is considered. * @since 1.90 */ uploadUrl: {type: "string", defaultValue: null}, /** * Defines the selected state of the UploadSetItem. * @since 1.100.0 */ selected: { type: "boolean", group: "Behavior", defaultValue: false } }, defaultAggregation: "attributes", aggregations: { /** * Attributes of the item. */ attributes: { type: "sap.m.ObjectAttribute", multiple: true, singularName: "attribute" }, /** * Markers of the item. */ markers: { type: "sap.m.ObjectMarker", multiple: true, singularName: "marker" }, /** * Statuses of the item. */ statuses: { type: "sap.m.ObjectStatus", multiple: true, singularName: "status" }, /** * Statuses of the item, but it would be appearing in the markers section * @since 1.117 */ markersAsStatus: { type: "sap.m.ObjectStatus", multiple: true, singularName: "markerAsStatus" }, /** * Header fields to be included in the header section of an XMLHttpRequest (XHR) request * @since 1.90 */ headerFields: {type: "sap.ui.core.Item", multiple: true, singularName: "headerField"} }, events: { /** * This event is fired when an open action is invoked on an item. */ openPressed: { parameters: { /** * The item on which the open action has been invoked. */ item: {type: "sap.m.upload.UploadSetItem"} }, allowPreventDefault: true }, /** * This event is fired when a remove action is invoked on an item. */ removePressed: { parameters: { /** * The item on which the open action has been invoked. */ item: {type: "sap.m.upload.UploadSetItem"} }, allowPreventDefault: true } } } }); var UploadState = MobileLibrary.UploadState, FlexJustifyContent = MobileLibrary.FlexJustifyContent, ValueState = CoreLibrary.ValueState; var DynamicItemContent = HTML.extend("sap.m.upload.DynamicItemContent", { metadata: { library: "sap.m", properties: { item: {type: "sap.m.upload.UploadSetItem"} } }, renderer: { apiVersion: 2, render: function (oRm, oControl) { var oItem = oControl.getItem(); oRm.openStart("div"); oRm.class("sapMUCTextContainer"); if (this._bInEditMode) { oRm.class("sapMUCEditMode"); } oRm.attr("id", oControl.getId()); oRm.openEnd(); oRm.openStart("div").class("sapMUSTextInnerContainer").openEnd(); oRm.renderControl(oItem._bInEditMode ? oItem._getFileNameEdit() : oItem._getFileNameLink()); oItem._renderMarkers(oRm); oItem._renderMarkersAsStatus(oRm); oRm.close("div"); oItem._renderAttributes(oRm); oItem._renderStatuses(oRm); oRm.close("div"); oItem._renderStateAndProgress(oRm); oItem._renderButtons(oRm); } } }); /* ========= */ /* Constants */ /* ========= */ UploadSetItem.MEGABYTE = 1048576; UploadSetItem.IMAGE_FILE_ICON = "sap-icon://card"; /* ================== */ /* Lifecycle handling */ /* ================== */ UploadSetItem.prototype.init = function () { this._oRb = sap.ui.getCore().getLibraryResourceBundle("sap.m"); // Inner controls this._oListItem = null; this._oIcon = null; this._oFileNameLink = null; this._oFileNameEdit = null; this._oDynamicContent = null; // Buttons this._oRestartButton = null; this._oEditButton = null; this._oDeleteButton = null; this._oTerminateButton = null; this._oConfirmRenameButton = null; this._oCancelRenameButton = null; // State & progress this._oProgressBox = null; this._oProgressIndicator = null; this._oStateLabel = null; this._oProgressLabel = null; this._oFileObject = null; this._fFileSize = null; this._bInEditMode = false; this._bContainsError = false; // Restriction flags this._bFileTypeRestricted = false; this._bNameLengthRestricted = false; this._bSizeRestricted = false; this._bMediaTypeRestricted = false; //Deafult upload type this._sUploadType = UploadType.Native; }; /* ===================== */ /* Overriden API methods */ /* ===================== */ UploadSetItem.prototype.setFileName = function (sFileName) { var oFile; if (this.getFileName() !== sFileName) { this.setProperty("fileName", sFileName, true); // File name related controls available no sooner than a parent is set if (this.getParent()) { this._getFileNameLink().setText(sFileName); oFile = UploadSetItem._splitFileName(sFileName); this._getFileNameEdit().setValue(oFile.name); this._checkNameLengthRestriction(this.getParent().getMaxFileNameLength()); this._checkTypeRestriction(this.getParent().getFileTypes()); } } return this; }; UploadSetItem.prototype.setUploadState = function (sUploadState) { var oIndy = this._getProgressIndicator(), oState = this._getStateLabel(), bIncomplete = (sUploadState !== UploadState.Complete), bUploading = (sUploadState === UploadState.Uploading); this.setProperty("uploadState", sUploadState, true); oIndy.setVisible(bIncomplete); oState.setVisible(bIncomplete); this._getProgressLabel().setVisible(bIncomplete); switch (sUploadState) { case UploadState.Complete: oIndy.setState(ValueState.None); oState.setText(""); break; case UploadState.Error: oIndy.setState(ValueState.Error); oState.setText(this._oRb.getText("UPLOAD_SET_ITEM_ERROR_STATE")); break; case UploadState.Ready: oIndy.setState(ValueState.None); oState.setText(this._oRb.getText("UPLOAD_SET_ITEM_READY_STATE")); break; case UploadState.Uploading: oIndy.setState(ValueState.Information); oState.setText(this._oRb.getText("UPLOAD_SET_ITEM_UPLOADING_STATE")); break; } if (this.getParent()) { this._getRestartButton().setVisible(sUploadState === UploadState.Error); if (this.getVisibleEdit()) { this._getEditButton().setVisible(!bUploading); } if (this.getVisibleRemove()) { this._getDeleteButton().setVisible(!bUploading); } this._getTerminateButton().setVisible(this.getParent().getTerminationEnabled() && bUploading); } return this; }; UploadSetItem.prototype.setEnabledRemove = function (bEnable) { if (this.getEnabledRemove() !== bEnable) { this.setProperty("enabledRemove", bEnable, true); if (this.getParent()) { this._getDeleteButton().setEnabled(bEnable); } } return this; }; UploadSetItem.prototype.setVisibleRemove = function (bVisible) { if (this.getVisibleRemove() !== bVisible) { this.setProperty("visibleRemove", bVisible, true); if (this.getParent()) { this._getDeleteButton().setVisible(bVisible); } } return this; }; UploadSetItem.prototype.setEnabledEdit = function (bEnable) { if (this.getEnabledEdit() !== bEnable) { this.setProperty("enabledEdit", bEnable, true); if (this.getParent()) { this._getEditButton().setEnabled(bEnable); if (!bEnable) { this.getParent().handleItemGetDisabled(this); } } } return this; }; UploadSetItem.prototype.setVisibleEdit = function (bVisible) { if (this.getVisibleEdit() !== bVisible) { this.setProperty("visibleEdit", bVisible, true); if (this.getParent()) { this._getEditButton().setVisible(bVisible); if (!bVisible) { this.getParent().handleItemGetDisabled(this); } } } return this; }; UploadSetItem.prototype.setThumbnailUrl = function(sUrl) { if (this.getThumbnailUrl() != sUrl) { this.setProperty("thumbnailUrl", sUrl, true); // Below we handle change of icon case for existing uploadSetItem.For creation of uploadSetItem icon is created using _getIcon method. if (this._oListItem && sUrl) { for (var i = 0; i < this._oListItem.getContent().length; i++) { var oItem = this._oListItem.getContent()[i]; if (oItem && oItem.isA(["sap.ui.core.Icon", "sap.m.Image"])) { this._oListItem.removeContent(oItem); if (this._oIcon) { this._oIcon.destroy(); this._oIcon = null; } this._oIcon = IconPool.createControlByURI({ id: this.getId() + "-thumbnail", src: sUrl, decorative: false }, Image); this._oIcon.addStyleClass("sapMUCItemImage sapMUCItemIcon"); this._oListItem.insertContent(this._oIcon, 0); } } } } return this; }; UploadSetItem.prototype.setSelected = function(selected) { if (this.getSelected() !== selected) { this.setProperty("selected", selected, true); this.fireEvent("selected"); } return this; }; /* ============== */ /* Public methods */ /* ============== */ /** * Returns file object. * * @public * @returns {File|Blob} File object. * */ UploadSetItem.prototype.getFileObject = function () { return this._oFileObject; }; /** * Returns list item. * * @public * @returns {sap.m.CustomListItem} List item. * */ UploadSetItem.prototype.getListItem = function () { return this._getListItem(); }; /** * Set current progress. * @param {int} iProgress Current progress. * * @public * @returns {this} Returns instance for chaining. * */ UploadSetItem.prototype.setProgress = function (iProgress) { var $busyIndicator; this._getProgressLabel().setText(iProgress + "%"); $busyIndicator = this.$("-busyIndicator"); if (iProgress === 100) { $busyIndicator.attr("aria-label", this._oRb.getText("UPLOAD_SET_UPLOAD_COMPLETED")); } else { $busyIndicator.attr("aria-valuenow", iProgress); } this._getProgressIndicator().setPercentValue(iProgress); return this; }; /** * Downloads the item. Only possible when the item has a valid URL specified in the <code>url</code> property. * @param {boolean} bAskForLocation Whether to ask for a location where to download the file or not. * @public * @returns {boolean} <code>true</code> if download is possible, <code>false</code> otherwise. */ UploadSetItem.prototype.download = function (bAskForLocation) { var oParent = this.getParent(); if (!oParent) { Log.warning("Download cannot proceed without a parent association."); return false; } return oParent._getActiveUploader().downloadItem(this, [], bAskForLocation); }; /** * Validates if the item is restricted, which means that it is restricted for the file type, media type, maximum file name length and maximum file size limit. * * @public * @since 1.98 * @returns {boolean} <code>true</code> if item is restricted, <code>false</code> otherwise. * */ UploadSetItem.prototype.isRestricted = function () { return this._isRestricted(); }; /** * Returns edit state of the item. * * @public * @since 1.104.0 * @returns {boolean} edit state of uploadSetItem * */ UploadSetItem.prototype.getEditState = function () { return this._bInEditMode; }; /** * Returns the upload type of the item * The method by default returns Native * It is recommended to use this method, when the user has uploded the instance * * @public * @since 1.117.0 * @returns {sap.m.UploadType} edit state of uploadSetItem * */ UploadSetItem.prototype.getUploadType = function () { return this._sUploadType; }; /* ============== */ /* Event handlers */ /* ============== */ UploadSetItem.prototype._handleFileNamePressed = function () { if (this.fireOpenPressed({item: this})) { MobileLibrary.URLHelper.redirect(this.getUrl(), true); } }; /* =============== */ /* Private methods */ /* =============== */ UploadSetItem.prototype._getListItem = function () { if (!this._oListItem) { this._oListItem = new CustomListItem(this.getId() + "-listItem", { content: [ this._getIcon(), this._getDynamicContent() ] }); this._oListItem.addStyleClass("sapMUCItem"); this._oListItem.setTooltip(this.getTooltip_Text()); } return this._oListItem; }; UploadSetItem.prototype._setFileObject = function (oFileObject) { this._oFileObject = oFileObject; if (oFileObject) { this._fFileSize = oFileObject.size / UploadSetItem.MEGABYTE; this.setMediaType(oFileObject.type); } else { this._fFileSize = null; this.setMediaType(null); } if (this.getParent()) { this._checkSizeRestriction(this.getParent().getMaxFileSize()); this._checkMediaTypeRestriction(this.getParent().getMediaTypes()); } }; UploadSetItem.prototype._getIcon = function () { if (!this._oIcon) { if (this.getThumbnailUrl()) { this._oIcon = IconPool.createControlByURI({ id: this.getId() + "-thumbnail", src: this.getThumbnailUrl(), decorative: false }, Image); this._oIcon.addStyleClass("sapMUCItemImage sapMUCItemIcon"); } else { this._oIcon = new Icon(this.getId() + "-icon", { src: this._getIconByMimeType(this.getMediaType()), decorative: false, useIconTooltip: false }); this._oIcon.addStyleClass("sapMUCItemIcon"); } this.addDependent(this._oIcon); } return this._oIcon; }; UploadSetItem.prototype._getIconByMimeType = function(sMimeType) { var mimeTypeForImages = ["image/png", "image/tiff", "image/bmp", "image/jpeg", "image/gif"]; if (sMimeType) { if (mimeTypeForImages.indexOf(sMimeType) === -1) { return IconPool.getIconForMimeType(sMimeType); } return this._getIconByFileType(); } else { return this._getIconByFileType(); } }; UploadSetItem.prototype._getIconByFileType = function () { var sFileExtension = UploadSetItem._splitFileName(this.getFileName()).extension; if (!sFileExtension) { return "sap-icon://document"; } switch (sFileExtension.toLowerCase()) { case "bmp" : case "jpg" : case "jpeg" : case "png" : return UploadSetItem.IMAGE_FILE_ICON; case "csv" : case "xls" : case "xlsx" : return "sap-icon://excel-attachment"; case "doc" : case "docx" : case "odt" : return "sap-icon://doc-attachment"; case "pdf" : return "sap-icon://pdf-attachment"; case "ppt" : case "pptx" : return "sap-icon://ppt-attachment"; case "txt" : return "sap-icon://document-text"; default : return "sap-icon://document"; } }; UploadSetItem.prototype._getFileNameLink = function () { if (!this._oFileNameLink) { this._oFileNameLink = new Link({ id: this.getId() + "-fileNameLink", press: [this, this._handleFileNamePressed, this] }); this._oFileNameLink.setText(this.getFileName());//For handling curly braces in file name we have to use setter.Otherwise it will be treated as binding. this._oFileNameLink.addStyleClass("sapMUCFileName"); this._oFileNameLink.addStyleClass("sapMUSFileName"); this.addDependent(this._oFileNameLink); } this._oFileNameLink.setEnabled(!!this.getUrl()); return this._oFileNameLink; }; UploadSetItem.prototype._getDynamicContent = function () { if (!this._oDynamicContent) { this._oDynamicContent = new DynamicItemContent({item: this}); this.addDependent(this._oDynamicContent); } return this._oDynamicContent; }; UploadSetItem.prototype._getRestartButton = function () { var oParent = this.getParent(); if (!this._oRestartButton) { this._oRestartButton = new Button({ id: this.getId() + "-restartButton", icon: "sap-icon://refresh", type: MobileLibrary.ButtonType.Standard, visible: this.getUploadState() === UploadState.Error, tooltip: this._oRb.getText("UPLOAD_SET_RESTART_BUTTON_TEXT"), press: [this, oParent._handleItemRestart, oParent] }); this.addDependent(this._oRestartButton); } return this._oRestartButton; }; UploadSetItem.prototype._getEditButton = function () { var oParent = this.getParent(); if (!this._oEditButton) { this._oEditButton = new Button({ id: this.getId() + "-editButton", icon: "sap-icon://edit", type: MobileLibrary.ButtonType.Standard, enabled: this.getEnabledEdit(), visible: this.getVisibleEdit(), tooltip: this._oRb.getText("UPLOAD_SET_EDIT_BUTTON_TEXT"), press: [this, oParent._handleItemEdit, oParent] }); this._oEditButton.addStyleClass("sapMUCEditBtn"); this.addDependent(this._oEditButton); } return this._oEditButton; }; UploadSetItem.prototype._getFileNameEdit = function () { var oSplit; if (!this._oFileNameEdit) { oSplit = UploadSetItem._splitFileName(this.getFileName()); this._oFileNameEdit = new Input({ id: this.getId() + "-fileNameEdit", type: MobileLibrary.InputType.Text }); this._oFileNameEdit.addStyleClass("sapMUCEditBox"); this._oFileNameEdit.setFieldWidth("75%"); this._oFileNameEdit.setDescription(oSplit.extension); this.addDependent(this._oFileNameEdit); } return this._oFileNameEdit; }; /** * Determines if the fileName is already in usage. * @param {string} filename inclusive file extension * @param {array} items Collection of uploaded files * @returns {boolean} true for an already existing item with the same file name(independent of the path) * @private * @static */ UploadSetItem._checkDoubleFileName = function(filename, items) { if (items.length === 0 || !filename) { return false; } var iLength = items.length; filename = filename.replace(/^\s+/, ""); for (var i = 0; i < iLength; i++) { if (filename === items[i].getProperty("fileName")) { return true; } } return false; }; /** * Retrieves the sap.m.ListItem from the internal sap.m.List based on the ID * @param {string} listItemId The item ID used for finding the UploadSetItem * @param {sap.m.ListItemBase[]} listItems The array of list items to search in * @returns {sap.m.upload.UploadSetItem|null} The matching UploadSetItem or null if none is found * @private */ UploadSetItem._findById = function(listItemId, listItems) { for (var i = 0; i < listItems.length; i++) { if (listItems[i].getId() === listItemId) { return listItems[i]; } } return null; }; UploadSetItem.prototype._setInEditMode = function (bInEditMode) { if (bInEditMode && !this._bInEditMode) { var oSplit = UploadSetItem._splitFileName(this.getFileName()), iMaxLength = this.getParent().getMaxFileNameLength(), iFileExtensionLength = oSplit.extension ? oSplit.extension.length + 1 : 0; iMaxLength = iMaxLength ? iMaxLength : 0; var iNameMaxLength = iMaxLength - iFileExtensionLength; iNameMaxLength = iNameMaxLength < 0 ? 0 : iNameMaxLength; this._getFileNameEdit().setProperty("maxLength", iNameMaxLength, true); this._getFileNameEdit().setValue(oSplit.name); } this._bInEditMode = bInEditMode; this._setContainsError(false); this._getFileNameEdit().setShowValueStateMessage(false); this._getFileNameEdit().setProperty("valueState", "None", true); this.invalidate(); }; UploadSetItem.prototype._getContainsError = function () { return this._bContainsError; }; /** * Sets the upload type *@param {string} sType indicates the type of the upload * @private * @since 1.117 * */ UploadSetItem.prototype._setUploadType = function (sType) { this._sUploadType = sType; }; UploadSetItem.prototype._setContainsError = function (bContainsError) { this._bContainsError = bContainsError; }; UploadSetItem._splitFileName = function (sFileName, bWithDot) { var oResult = {}; var oRegex = /(?:\.([^.]+))?$/; var aFileExtension = oRegex.exec(sFileName); if (!aFileExtension[0]) { aFileExtension[0] = ""; oResult.name = sFileName; } else { oResult.name = sFileName ? sFileName.slice(0, sFileName.indexOf(aFileExtension[0])) : ""; } if (bWithDot) { oResult.extension = aFileExtension[0]; } else { oResult.extension = aFileExtension[1]; } return oResult; }; UploadSetItem.prototype._getDeleteButton = function () { var oParent = this.getParent(); if (!this._oDeleteButton) { this._oDeleteButton = new Button({ id: this.getId() + "-deleteButton", icon: "sap-icon://decline", type: MobileLibrary.ButtonType.Standard, enabled: this.getEnabledRemove(), visible: this.getVisibleRemove(), tooltip: this._oRb.getText("UPLOAD_SET_DELETE_BUTTON_TEXT"), press: [this, oParent._handleItemDelete, oParent] }); this._oDeleteButton.addStyleClass("sapMUCDeleteBtn"); this.addDependent(this._oDeleteButton); } return this._oDeleteButton; }; UploadSetItem.prototype._getTerminateButton = function () { var oParent = this.getParent(); if (!this._oTerminateButton) { this._oTerminateButton = new Button({ id: this.getId() + "-terminateButton", icon: "sap-icon://stop", type: MobileLibrary.ButtonType.Standard, visible: oParent.getTerminationEnabled() && this.getUploadState() === UploadState.Uploading, tooltip: this._oRb.getText("UPLOAD_SET_TERMINATE_BUTTON_TEXT"), press: [this, oParent._handleTerminateRequest, oParent] }); this._oTerminateButton.addStyleClass("sapMUCDeleteBtn"); this.addDependent(this._oTerminateButton); } return this._oTerminateButton; }; UploadSetItem.prototype._getConfirmRenameButton = function () { var oParent = this.getParent(); if (!this._oConfirmRenameButton) { this._oConfirmRenameButton = new Button({ id: this.getId() + "-okButton", text: this._oRb.getText("UPLOAD_SET_RENAME_BUTTON_TEXT"), type: MobileLibrary.ButtonType.Transparent, press: [this, oParent._handleItemEditConfirmation, oParent] }); this._oConfirmRenameButton.addStyleClass("sapMUCOkBtn"); this.addDependent(this._oConfirmRenameButton); } return this._oConfirmRenameButton; }; UploadSetItem.prototype._getCancelRenameButton = function () { var oParent = this.getParent(); if (!this._oCancelRenameButton) { this._oCancelRenameButton = new Button({ id: this.getId() + "-cancelButton", text: this._oRb.getText("UPLOAD_SET_CANCEL_BUTTON_TEXT"), type: MobileLibrary.ButtonType.Transparent, press: [this, oParent._handleItemEditCancelation, oParent] }); this._oCancelRenameButton.addStyleClass("sapMUCCancelBtn"); this.addDependent(this._oCancelRenameButton); } return this._oCancelRenameButton; }; UploadSetItem.prototype._getProgressBox = function () { if (!this._oProgressBox) { this._oProgressBox = new VBox({ id: this.getId() + "-progressBox", items: [ this._getProgressIndicator(), new HBox({ justifyContent: FlexJustifyContent.SpaceBetween, items: [ this._getStateLabel(), this._getProgressLabel() ] }) ], width: "20%" }); this._oProgressBox.addStyleClass("sapMUSProgressBox"); this.addDependent(this._oProgressBox); } if (this._oProgressBox) { this._oProgressBox.setVisible(this.getUploadState() !== UploadState.Complete); } return this._oProgressBox; }; UploadSetItem.prototype._getProgressIndicator = function () { if (!this._oProgressIndicator) { this._oProgressIndicator = new ProgressIndicator({ id: this.getId() + "-progressIndicator", percentValue: 0, state: ValueState.Information, visible: this.getUploadState() !== UploadState.Complete }); this._oProgressIndicator.addStyleClass("sapMUSProgressIndicator"); } return this._oProgressIndicator; }; UploadSetItem.prototype._getStateLabel = function () { if (!this._oStateLabel) { this._oStateLabel = new Label({ id: this.getId() + "-stateLabel", text: "Pending", // TODO: All states and localization visible: this.getUploadState() !== UploadState.Complete }); } return this._oStateLabel; }; UploadSetItem.prototype._getProgressLabel = function () { if (!this._oProgressLabel) { this._oProgressLabel = new Label({ id: this.getId() + "-progressLabel", visible: this.getUploadState() !== UploadState.Complete }); // this._oProgressLabel.addStyleClass("sapMUCProgress"); this.setProgress(0); this.addDependent(this._oProgressLabel); } return this._oProgressLabel; }; UploadSetItem.prototype._renderAttributes = function (oRm) { if (this.getAttributes().length === 0) { return; } var bFirstVisible = false; oRm.openStart("div").class("sapMUCAttrContainer").openEnd(); this.getAttributes().forEach(function (oAttribute, iIndex) { if (bFirstVisible && oAttribute.getVisible()) { oRm.openStart("div").class("sapMUCSeparator").openEnd(); oRm.text("\u00a0\u00B7\u00a0").close("div"); } bFirstVisible = bFirstVisible || oAttribute.getVisible(); oRm.renderControl(oAttribute.addStyleClass("sapMUCAttr")); }); oRm.close("div"); }; UploadSetItem.prototype._renderMarkers = function (oRm) { if (this.getMarkers().length > 0) { oRm.openStart("div").class("sapMUSObjectMarkerContainer").openEnd(); this.getMarkers().forEach(function (oMarker) { oRm.renderControl(oMarker.addStyleClass("sapMUCObjectMarker")); }); oRm.close("div"); } }; UploadSetItem.prototype._renderMarkersAsStatus = function (oRm) { if (this.getMarkersAsStatus().length > 0) { oRm.openStart("div").class("sapMUSObjectMarkersAsStatusContainer").openEnd(); this.getMarkersAsStatus().forEach(function (oStatus) { oRm.renderControl(oStatus.addStyleClass("sapMUCObjectMarkersAsStatus")); }); oRm.close("div"); } }; UploadSetItem.prototype._renderStatuses = function (oRm) { if (this.getStatuses().length === 0) { return; } var bFirstVisible = false; oRm.openStart("div").class("sapMUCStatusContainer").openEnd(); this.getStatuses().forEach(function (oStatus, iIndex) { if (bFirstVisible && oStatus.getVisible()) { oRm.openStart("div").class("sapMUCSeparator").openEnd(); oRm.text("\u00a0\u00B7\u00a0").close("div"); } bFirstVisible = bFirstVisible || oStatus.getVisible(); oRm.renderControl(oStatus); }); oRm.close("div"); }; UploadSetItem.prototype._renderStateAndProgress = function (oRm) { oRm.renderControl(this._getProgressBox()); }; UploadSetItem.prototype._renderButtons = function (oRm) { var aButtonsToRender; if (this._bInEditMode) { aButtonsToRender = [ this._getConfirmRenameButton(), this._getCancelRenameButton() ]; } else { aButtonsToRender = [ this._getRestartButton(), this._getEditButton(), this._getDeleteButton(), this._getTerminateButton() ]; } // Render div container only if there is at least one button if (aButtonsToRender.length > 0) { oRm.openStart("div").class("sapMUCButtonContainer").openEnd(); aButtonsToRender.forEach(function (oBtn, iIndex) { if (iIndex < (aButtonsToRender.length)) { oBtn.addStyleClass("sapMUCFirstButton"); } oRm.renderControl(oBtn); }); oRm.close("div"); } }; /** * Checks if and how compliance with the file type restriction changed for this item. * @param {string[]} aTypes List of allowed file types. * @private */ UploadSetItem.prototype._checkTypeRestriction = function (aTypes) { var oFile = UploadSetItem._splitFileName(this.getFileName()), bRestricted = (!!this.getFileName() && !!aTypes && (aTypes.length > 0) && oFile.extension && aTypes.indexOf(oFile.extension.toLowerCase()) === -1); if (bRestricted !== this._bFileTypeRestricted) { this._bFileTypeRestricted = bRestricted; this.invalidate(); if (bRestricted && this.getParent()) { this.getParent().fireFileTypeMismatch({item: this}); } } }; /** * Checks if and how compliance with the file name length restriction changed for this item. * @param {int} iMaxLength Maximum length of file name. * @private */ UploadSetItem.prototype._checkNameLengthRestriction = function (iMaxLength) { var bRestricted = (iMaxLength && !!this.getFileName() && this.getFileName().length > iMaxLength); if (bRestricted !== this._bNameLengthRestricted) { this._bNameLengthRestricted = bRestricted; this.invalidate(); if (bRestricted && this.getParent()) { this.getParent().fireFileNameLengthExceeded({item: this}); } } }; /** * Checks if and how compliance with the file size restriction changed for this item. * @param {float} fMaxSize Maximum file size allowed in megabytes. * @private */ UploadSetItem.prototype._checkSizeRestriction = function (fMaxSize) { var bRestricted = (fMaxSize && this._fFileSize > fMaxSize); if (bRestricted !== this._bSizeRestricted) { this._bSizeRestricted = bRestricted; this.invalidate(); if (bRestricted && this.getParent()) { this.getParent().fireFileSizeExceeded({item: this}); } } }; /** * Checks if and how compliance with the mime type restriction changed for this item. * @param {string[]} aTypes List of allowed mime types. * @private */ UploadSetItem.prototype._checkMediaTypeRestriction = function (aTypes) { var bRestricted = (!!aTypes && (aTypes.length > 0) && !!this.getMediaType() && aTypes.indexOf(this.getMediaType()) === -1); if (bRestricted !== this._bMediaTypeRestricted) { this._bMediaTypeRestricted = bRestricted; this.invalidate(); if (bRestricted && this.getParent()) { this.getParent().fireMediaTypeMismatch({item: this}); } } }; UploadSetItem.prototype._isRestricted = function () { return this._bFileTypeRestricted || this._bNameLengthRestricted || this._bSizeRestricted || this._bMediaTypeRestricted; }; UploadSetItem.prototype.exit = function() { if (this._oProgressIndicator) { this._oProgressIndicator.destroy(); this._oProgressIndicator = null; } if (this._oStateLabel) { this._oStateLabel.destroy(); this._oStateLabel = null; } if (this._oProgressBox) { this._oProgressBox.destroy(); this._oProgressBox = null; } if (this._oListItem) { this._oListItem.destroy(); this._oListItem = null; } if (this._oIcon) { this._oIcon.destroy(); this._oIcon = null; } if (this._oDynamicContent) { this._oDynamicContent.destroy(); this._oDynamicContent = null; } }; /** * Resets item flags to initial state, that can be used to recreate the item * @private */ UploadSetItem.prototype._reset = function() { if (this._oListItem) { this._oListItem.destroy(); this._oListItem = null; } this._oListItem = null; if (this._oIcon) { this.removeDependent(this._oIcon); this._oIcon.destroy(); this._oIcon = null; } if (this._oFileNameLink) { this.removeDependent(this._oFileNameLink); this._oFileNameLink.destroy(); this._oFileNameLink = null; } this._oDynamicContent = null; }; return UploadSetItem; });