@openui5/sap.m
Version:
OpenUI5 UI Library sap.m
135 lines (109 loc) • 3.88 kB
JavaScript
/*!
* UI development toolkit for HTML5 (OpenUI5)
* (c) Copyright 2009-2022 SAP SE or an SAP affiliate company.
* Licensed under the Apache License, Version 2.0 - see LICENSE.txt.
*/
sap.ui.define(['sap/ui/Device', 'sap/ui/core/InvisibleText'],
function(Device, InvisibleText) {
"use strict";
/**
* Tokenizer renderer.
* @namespace
*/
var TokenizerRenderer = {
};
/**
* 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.ui.core.Control} oControl an object representation of the control that should be rendered
*/
TokenizerRenderer.render = function(oRm, oControl){
//write the HTML into the render manager
if (oControl.getParent() && (oControl.getParent() instanceof sap.m.MultiInput || oControl.getParent() instanceof sap.m.MultiComboBox)) {
oRm.write("<div ");
} else {
oRm.write("<div tabindex=\"0\"");
}
oRm.writeControlData(oControl);
oRm.addClass("sapMTokenizer");
if (!oControl.getEditable()) {
oRm.addClass("sapMTokenizerReadonly");
}
var aTokens = oControl.getTokens();
if (!aTokens.length) {
oRm.addClass("sapMTokenizerEmpty");
}
oRm.addStyle("max-width", oControl.getMaxWidth());
var sPixelWdth = oControl.getWidth();
if (sPixelWdth) {
oRm.addStyle("width", sPixelWdth);
}
oRm.writeStyles();
oRm.writeClasses();
oRm.writeAttribute("role", "list");
var oAccAttributes = {}; // additional accessibility attributes
//ARIA attributes
oAccAttributes.labelledby = {
value: InvisibleText.getStaticId("sap.m", "TOKENIZER_ARIA_LABEL"),
append: true
};
oRm.writeAccessibilityState(oControl, oAccAttributes);
oRm.write(">"); // div element
oRm.renderControl(oControl.getAggregation("_tokensInfo"));
oControl._bCopyToClipboardSupport = false;
if ((Device.system.desktop || Device.system.combi) && aTokens.length) {
oRm.write("<div id='" + oControl.getId() + "-clip' class='sapMTokenizerClip'");
if (window.clipboardData) { //IE
/* TODO remove after 1.62 version */
oRm.writeAttribute("contenteditable", "true");
oRm.writeAttribute("tabindex", "-1");
}
oRm.write("> </div>");
oControl._bCopyToClipboardSupport = true;
}
var sClass = "class=\"sapMTokenizerScrollContainer\">";
var sSpace = " ";
var sIdScrollContainer = "id=" + oControl.getId() + "-scrollContainer";
oRm.write("<div" + sSpace + sIdScrollContainer + sSpace + sClass);
TokenizerRenderer._renderTokens(oRm, oControl);
oRm.write("</div>");
TokenizerRenderer._renderIndicator(oRm, oControl);
oRm.write("</div>");
};
/**
* renders the tokens
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
*/
TokenizerRenderer._renderTokens = function(oRm, oControl){
var i = 0,
tokens = oControl.getTokens(),
length = tokens.length;
if (oControl.getReverseTokens()) {
for (i = length - 1; i > -1; i--) {
oRm.renderControl(tokens[i]);
}
} else {
for (i = 0; i < length; i++) {
oRm.renderControl(tokens[i]);
}
}
};
/**
* Renders the N-more indicator
*
* @param {sap.ui.core.RenderManager} oRm the RenderManager that can be used for writing to the render output buffer
* @param {sap.ui.core.Control} oControl an object representation of the control that should be rendered
*/
TokenizerRenderer._renderIndicator = function(oRm, oControl){
oRm.write("<span");
oRm.addClass("sapMTokenizerIndicator");
oRm.addClass("sapUiHidden");
oRm.writeClasses();
oRm.write(">");
oRm.write("</span>");
};
return TokenizerRenderer;
}, /* bExport= */ true);