@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
143 lines (109 loc) • 3.77 kB
JavaScript
/*!
* 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/ui/core/library", "sap/ui/core/InvisibleText"],
function(coreLibrary, InvisibleText) {
"use strict";
// shortcut for sap.ui.core.TextDirection
var TextDirection = coreLibrary.TextDirection;
/**
* Token renderer.
* @namespace
*/
var TokenRenderer = {
apiVersion: 2
};
/**
* Renders the HTML for the given control, using the provided {@link sap.ui.core.RenderManager}.
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.m.Token} oControl an object representation of the control that should be rendered
*/
TokenRenderer.render = function(oRm, oControl){
var sTooltip = oControl._getTooltip(oControl, oControl.getEditable() && oControl.getProperty("editableParent"));
var oDeleteIcon = oControl.getAggregation("deleteIcon");
var aAccDescribebyValues = []; // additional accessibility attributes
var oAccAttributes = {
role: "option"
};
var vPosinset = oControl.getProperty("posinset");
var vSetSize = oControl.getProperty("setsize");
// write the HTML into the render manager
oRm.openStart("div", oControl).class("sapMToken");
this._setAttributes(oRm, oControl);
if (oControl.getSelected()) {
oRm.class("sapMTokenSelected");
}
if (vPosinset !== undefined) {
oRm.attr("aria-posinset", oControl.getProperty("posinset"));
}
if (vSetSize !== undefined) {
oRm.attr("aria-setsize", oControl.getProperty("setsize"));
}
if (!oControl.getEditable()) {
oRm.class("sapMTokenReadOnly");
}
if (oControl.getTruncated()) {
oRm.class("sapMTokenTruncated");
}
// add tooltip if available
if (sTooltip) {
oRm.attr("title", sTooltip);
}
// ARIA attributes
aAccDescribebyValues.push(InvisibleText.getStaticId("sap.m", "TOKEN_ARIA_LABEL"));
if (oControl.getEditable() && oControl.getProperty("editableParent")) {
aAccDescribebyValues.push(InvisibleText.getStaticId("sap.m", "TOKEN_ARIA_DELETABLE"));
}
oRm.attr("aria-selected", oControl.getSelected());
//ARIA attributes
oAccAttributes.describedby = {
value: aAccDescribebyValues.join(" "),
append: true
};
oRm.accessibilityState(oControl, oAccAttributes);
oRm.openEnd();
TokenRenderer._renderInnerControl(oRm, oControl);
if (oControl.getEditable() && oDeleteIcon) {
oRm.renderControl(oDeleteIcon);
}
oRm.close("div");
};
/**
* Renders the inner HTML for the given control, using the provided {@link sap.ui.core.RenderManager}.
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.m.Token} oControl an object representation of the control that should be rendered
*/
TokenRenderer._renderInnerControl = function(oRm, oControl){
var sTextDir = oControl.getTextDirection();
oRm.openStart("span").class("sapMTokenText");
// set text direction
if (sTextDir !== TextDirection.Inherit) {
oRm.attr("dir", sTextDir.toLowerCase());
}
oRm.openEnd();
var title = oControl.getText();
if (title) {
oRm.text(title);
}
oRm.close("span");
};
/**
* Callback for specific rendering of token tabindex attributes.
*
* @param {sap.ui.core.RenderManager}
* oRm the RenderManager currently rendering this control
* @param {sap.m.Token}
* oControl the Token that should be rendered
* @private
*
* @ui5-restricted sap.ui.mdc.field.TokenDisplayRenderer
*/
TokenRenderer._setAttributes = function(oRm, oControl) {
oRm.attr("tabindex", "-1");
};
return TokenRenderer;
}, /* bExport= */ true);