UNPKG

@openui5/sap.m

Version:

OpenUI5 UI Library sap.m

225 lines (180 loc) 7.23 kB
/*! * 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([ "sap/m/semantic/SemanticConfiguration", "sap/ui/base/ManagedObject", "sap/ui/core/Element", "sap/ui/thirdparty/jquery" ], function(SemanticConfiguration, ManagedObject, Element, jQuery) { "use strict"; /** * Constructor for a new SemanticControl. * @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 * A semantic control is an abstraction for either a {@link sap.m.semantic.SemanticButton} or {@link sap.m.semantic.SemanticSelect} , * eligible for aggregation content of a {@link sap.m.semantic.SemanticPage}. * * @extends sap.ui.core.Element * @abstract * * @author SAP SE * @version 1.146.0 * * @constructor * @public * @since 1.30.0 * @alias sap.m.semantic.SemanticControl */ var SemanticControl = Element.extend("sap.m.semantic.SemanticControl", /** @lends sap.m.semantic.SemanticControl.prototype */ { metadata: { library: "sap.m", "abstract": true, properties: { /** * See {@link sap.ui.core.Control#visible} */ visible: { type: "boolean", group: "Appearance", defaultValue: true } }, aggregations: { /** * The internal control instance, that is abstracted by the semantic control. * Can be {@link sap.m.Button}, {@link sap.m.semantic.SemanticOverflowToolbarButton} or {@link sap.m.Select} */ _control: { type: "sap.ui.core.Control", multiple: false, visibility: "hidden" } } } }); SemanticControl.prototype.setProperty = function (key, value, bSuppressInvalidate) { ManagedObject.prototype.setProperty.call(this, key, value, true); this._applyProperty(key, value, bSuppressInvalidate); return this; }; SemanticControl.prototype.updateAggregation = function (sName) { this._getControl().updateAggregation(sName); }; SemanticControl.prototype.refreshAggregation = function (sName) { this._getControl().refreshAggregation(sName); }; SemanticControl.prototype.setAggregation = function (sAggregationName, oObject, bSuppressInvalidate) { if (sAggregationName === '_control') { return ManagedObject.prototype.setAggregation.call(this, sAggregationName, oObject, bSuppressInvalidate); } return this._getControl().setAggregation(sAggregationName, oObject, bSuppressInvalidate); }; SemanticControl.prototype.getAggregation = function (sAggregationName, oDefaultForCreation) { if (sAggregationName === '_control') { return ManagedObject.prototype.getAggregation.call(this, sAggregationName, oDefaultForCreation); } return this._getControl().getAggregation(sAggregationName, oDefaultForCreation); }; SemanticControl.prototype.indexOfAggregation = function (sAggregationName, oObject) { return this._getControl().indexOfAggregation(sAggregationName, oObject); }; SemanticControl.prototype.insertAggregation = function (sAggregationName, oObject, iIndex, bSuppressInvalidate) { return this._getControl().insertAggregation(sAggregationName, oObject, iIndex, bSuppressInvalidate); }; SemanticControl.prototype.addAggregation = function (sAggregationName, oObject, bSuppressInvalidate) { return this._getControl().addAggregation(sAggregationName, oObject, bSuppressInvalidate); }; SemanticControl.prototype.removeAggregation = function (sAggregationName, vObject, bSuppressInvalidate) { return this._getControl().removeAggregation(sAggregationName, vObject, bSuppressInvalidate); }; SemanticControl.prototype.removeAllAggregation = function (sAggregationName, bSuppressInvalidate) { return this._getControl().removeAllAggregation(sAggregationName, bSuppressInvalidate); }; SemanticControl.prototype.destroyAggregation = function (sAggregationName, bSuppressInvalidate) { return this._getControl().destroyAggregation(sAggregationName, bSuppressInvalidate); }; SemanticControl.prototype.bindAggregation = function (sName, oBindingInfo) { return this._getControl().bindAggregation(sName, oBindingInfo); }; SemanticControl.prototype.unbindAggregation = function (sName, bSuppressReset) { return this._getControl().unbindAggregation(sName, bSuppressReset); }; SemanticControl.prototype.clone = function (sIdSuffix, aLocalIds) { var oClone = Element.prototype.clone.apply(this, arguments); // need to clone the private oControl as well var oPrivateControlClone = this._getControl().clone(sIdSuffix, aLocalIds); oClone.setAggregation('_control', oPrivateControlClone); return oClone; }; SemanticControl.prototype.destroy = function () { var vResult = Element.prototype.destroy.apply(this, arguments); if (this.getAggregation("_control")) { this.getAggregation("_control").destroy(); } return vResult; }; /** * Implementation of a commonly used function that adapts <code>sap.ui.core.Element</code> * to provide DOM reference for opening popovers. * @returns {Element} The DOM reference of the actual wrapped control * @public */ SemanticControl.prototype.getPopupAnchorDomRef = function() { return this._getControl().getDomRef(); }; SemanticControl.prototype.getDomRef = function(sSuffix) { return this._getControl().getDomRef(sSuffix); }; SemanticControl.prototype.addEventDelegate = function (oDelegate, oThis) { jQuery.each(oDelegate, function(sEventType, fnCallback) { if (typeof fnCallback === 'function') { /* replace oEvent.srcControl with the semantic control to prevent exposing the inner control */ var fnProxy = function(oEvent) { oEvent.srcControl = this; fnCallback.call(oThis, oEvent); }.bind(this); oDelegate[sEventType] = fnProxy; } }.bind(this)); this._getControl().addEventDelegate(oDelegate, oThis); return this; }; SemanticControl.prototype.removeEventDelegate = function (oDelegate) { this._getControl().removeEventDelegate(oDelegate); return this; }; SemanticControl.prototype._getConfiguration = function () { return SemanticConfiguration.getConfiguration(this.getMetadata().getName()); }; SemanticControl.prototype._onPageStateChanged = function (oEvent) { this._updateState(oEvent.sId); }; SemanticControl.prototype._updateState = function (oStateName) { if (this._getConfiguration() && this._getControl()) { var oSettings = this._getConfiguration().states[oStateName]; if (oSettings) { this._getControl().applySettings(oSettings); } } }; /** * Applies the property value according to semantic logic * @private */ SemanticControl.prototype._applyProperty = function(key, value, bSuppressInvalidate) { var sSetter = "set" + this._capitalize(key); //we call the setter, rather than setProperty on the control, // to make sure we cover the case when the control has // overwritten the setter with custom implementation this._getControl()[sSetter](value, bSuppressInvalidate); }; SemanticControl.prototype._capitalize = function(sName) { return sName.charAt(0).toUpperCase() + sName.slice(1); }; return SemanticControl; });