devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
100 lines (94 loc) • 4.78 kB
JavaScript
/**
* DevExtreme (cjs/__internal/ui/form/components/m_label.js)
* Version: 24.2.7
* Build date: Mon Apr 28 2025
*
* Copyright (c) 2012 - 2025 Developer Express Inc. ALL RIGHTS RESERVED
* Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/
*/
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.GET_LABEL_WIDTH_BY_TEXT_CLASS = exports.FIELD_ITEM_REQUIRED_MARK_CLASS = exports.FIELD_ITEM_OPTIONAL_MARK_CLASS = exports.FIELD_ITEM_LABEL_TEXT_CLASS = exports.FIELD_ITEM_LABEL_LOCATION_CLASS = void 0;
exports.renderLabel = renderLabel;
exports.setLabelWidthByMaxLabelWidth = setLabelWidthByMaxLabelWidth;
var _element = require("../../../../core/element");
var _renderer = _interopRequireDefault(require("../../../../core/renderer"));
var _type = require("../../../../core/utils/type");
var _constants = require("../constants");
var _m_formLayout_manager = require("../m_form.layout_manager.utils");
function _interopRequireDefault(e) {
return e && e.__esModule ? e : {
default: e
}
}
const GET_LABEL_WIDTH_BY_TEXT_CLASS = exports.GET_LABEL_WIDTH_BY_TEXT_CLASS = "dx-layout-manager-hidden-label";
const FIELD_ITEM_REQUIRED_MARK_CLASS = exports.FIELD_ITEM_REQUIRED_MARK_CLASS = "dx-field-item-required-mark";
const FIELD_ITEM_LABEL_LOCATION_CLASS = exports.FIELD_ITEM_LABEL_LOCATION_CLASS = "dx-field-item-label-location-";
const FIELD_ITEM_OPTIONAL_MARK_CLASS = exports.FIELD_ITEM_OPTIONAL_MARK_CLASS = "dx-field-item-optional-mark";
const FIELD_ITEM_LABEL_TEXT_CLASS = exports.FIELD_ITEM_LABEL_TEXT_CLASS = "dx-field-item-label-text";
function renderLabel(_ref) {
let {
text: text,
id: id,
location: location,
alignment: alignment,
labelID: labelID = null,
markOptions: markOptions = {},
labelTemplate: labelTemplate,
labelTemplateData: labelTemplateData,
onLabelTemplateRendered: onLabelTemplateRendered
} = _ref;
if ((!(0, _type.isDefined)(text) || text.length <= 0) && !(0, _type.isDefined)(labelTemplate)) {
return null
}
const $label = (0, _renderer.default)("<label>").addClass(`${_constants.FIELD_ITEM_LABEL_CLASS} ${FIELD_ITEM_LABEL_LOCATION_CLASS}${location}`).attr("for", id).attr("id", labelID).css("textAlign", alignment);
const $labelContainer = (0, _renderer.default)("<span>").addClass(_constants.FIELD_ITEM_LABEL_CONTENT_CLASS);
let $labelContent = (0, _renderer.default)("<span>").addClass(FIELD_ITEM_LABEL_TEXT_CLASS).text(text);
if (labelTemplate) {
$labelContent = (0, _renderer.default)("<div>").addClass("dx-field-item-custom-label-content");
labelTemplateData.text = text;
labelTemplate.render({
container: (0, _element.getPublicElement)($labelContent),
model: labelTemplateData,
onRendered() {
null === onLabelTemplateRendered || void 0 === onLabelTemplateRendered || onLabelTemplateRendered()
}
})
}
return $label.append($labelContainer.append($labelContent, _renderLabelMark(markOptions)))
}
function _renderLabelMark(markOptions) {
const markText = (0, _m_formLayout_manager.getLabelMarkText)(markOptions);
if ("" === markText) {
return null
}
return (0, _renderer.default)("<span>").addClass(markOptions.showRequiredMark ? FIELD_ITEM_REQUIRED_MARK_CLASS : FIELD_ITEM_OPTIONAL_MARK_CLASS).text(markText)
}
function setLabelWidthByMaxLabelWidth($targetContainer, labelsSelector, labelMarkOptions) {
const FIELD_ITEM_LABEL_CONTENT_CLASS_Selector = `${labelsSelector} > .${_constants.FIELD_ITEM_LABEL_CLASS}:not(.${FIELD_ITEM_LABEL_LOCATION_CLASS}top) > .${_constants.FIELD_ITEM_LABEL_CONTENT_CLASS}`;
const $FIELD_ITEM_LABEL_CONTENT_CLASS_Items = $targetContainer.find(FIELD_ITEM_LABEL_CONTENT_CLASS_Selector);
const FIELD_ITEM_LABEL_CONTENT_CLASS_Length = $FIELD_ITEM_LABEL_CONTENT_CLASS_Items.length;
let labelWidth;
let i;
let maxWidth = 0;
for (i = 0; i < FIELD_ITEM_LABEL_CONTENT_CLASS_Length; i++) {
labelWidth = getLabelWidthByHTML($FIELD_ITEM_LABEL_CONTENT_CLASS_Items[i]);
if (labelWidth > maxWidth) {
maxWidth = labelWidth
}
}
for (i = 0; i < FIELD_ITEM_LABEL_CONTENT_CLASS_Length; i++) {
$FIELD_ITEM_LABEL_CONTENT_CLASS_Items[i].style.width = `${maxWidth}px`
}
}
function getLabelWidthByHTML(labelContent) {
let result = 0;
const itemsCount = labelContent.children.length;
for (let i = 0; i < itemsCount; i++) {
const child = labelContent.children[i];
result += child.offsetWidth
}
return result
}