UNPKG

devextreme

Version:

HTML5 JavaScript Component Suite for Responsive Web Development

151 lines (150 loc) 5.43 kB
/** * DevExtreme (esm/ui/validation_message.js) * Version: 21.1.4 * Build date: Mon Jun 21 2021 * * Copyright (c) 2012 - 2021 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ import $ from "../core/renderer"; import registerComponent from "../core/component_registrator"; import Overlay from "./overlay/ui.overlay"; import { extend } from "../core/utils/extend"; import { encodeHtml } from "../core/utils/string"; import { getDefaultAlignment } from "../core/utils/position"; var INVALID_MESSAGE = "dx-invalid-message"; var INVALID_MESSAGE_AUTO = "dx-invalid-message-auto"; var INVALID_MESSAGE_ALWAYS = "dx-invalid-message-always"; var INVALID_MESSAGE_CONTENT = "dx-invalid-message-content"; var VALIDATION_MESSAGE_MIN_WIDTH = 100; var ValidationMessage = Overlay.inherit({ _getDefaultOptions() { return extend(this.callBase(), { integrationOptions: {}, templatesRenderAsynchronously: false, shading: false, width: "auto", height: "auto", closeOnOutsideClick: false, closeOnTargetScroll: false, animation: null, visible: true, propagateOutsideClick: true, _checkParentVisibility: false, rtlEnabled: false, contentTemplate: this._renderInnerHtml, maxWidth: "100%", mode: "auto", validationErrors: void 0, positionRequest: void 0, describedElement: void 0, boundary: void 0, offset: { h: 0, v: 0 } }) }, _init() { this.callBase(); this.updateMaxWidth(); this._updatePosition() }, _initMarkup() { this.callBase(); this.$element().addClass(INVALID_MESSAGE); this.$wrapper().addClass(INVALID_MESSAGE); this._toggleModeClass(); this._updateContentId() }, _updateContentId() { var describedElement = this.option("describedElement") || this.option("container"); var contentId = $(describedElement).attr("aria-describedby"); this.$content().addClass(INVALID_MESSAGE_CONTENT).attr("id", contentId) }, _renderInnerHtml(element) { var $element = element && $(element); var validationErrors = this.option("validationErrors") || []; var validationErrorMessage = ""; validationErrors.forEach(err => { var separator = validationErrorMessage ? "<br />" : ""; validationErrorMessage += separator + encodeHtml((null === err || void 0 === err ? void 0 : err.message) || "") }); null === $element || void 0 === $element ? void 0 : $element.html(validationErrorMessage) }, _toggleModeClass() { var mode = this.option("mode"); this.$wrapper().toggleClass(INVALID_MESSAGE_AUTO, "auto" === mode).toggleClass(INVALID_MESSAGE_ALWAYS, "always" === mode) }, updateMaxWidth() { var _target$outerWidth; var target = this.option("target"); var targetWidth = (null === target || void 0 === target ? void 0 : null === (_target$outerWidth = target.outerWidth) || void 0 === _target$outerWidth ? void 0 : _target$outerWidth.call(target)) || $(target).outerWidth(); var maxWidth = "100%"; if (targetWidth) { maxWidth = Math.max(targetWidth, VALIDATION_MESSAGE_MIN_WIDTH) } this.option({ maxWidth: maxWidth }) }, _updatePosition: function() { var { positionRequest: positionRequest, rtlEnabled: rtlEnabled, offset: offset, boundary: boundary } = this.option(); var positionSide = getDefaultAlignment(rtlEnabled); var verticalPositions = "below" === positionRequest ? [" top", " bottom"] : [" bottom", " top"]; if (rtlEnabled) { offset.h = -offset.h } if ("below" !== positionRequest) { offset.v = -offset.v } this.option("position", { offset: offset, boundary: boundary, my: positionSide + verticalPositions[0], at: positionSide + verticalPositions[1], collision: "none flip" }) }, _optionChanged(args) { var { name: name, value: value } = args; switch (name) { case "target": this.updateMaxWidth(); this.callBase(args); break; case "boundary": this.option("position.boundary", value); break; case "mode": this._toggleModeClass(value); break; case "rtlEnabled": case "offset": case "positionRequest": this._updatePosition(); break; case "validationErrors": this._renderInnerHtml(this.$content()); break; default: this.callBase(args) } } }); registerComponent("dxValidationMessage", ValidationMessage); export default ValidationMessage;