/** * DevExtreme (core/utils/dom.js) * Version: 19.1.16 * Build date: Tue Oct 18 2022 * * Copyright (c) 2012 - 2022 Developer Express Inc. ALL RIGHTS RESERVED * Read about DevExtreme licensing here: https://js.devexpress.com/Licensing/ */ "use strict"; var $ = require("../../core/renderer"); var config = require("../../core/config"); var domAdapter = require("../../core/dom_adapter"); var windowUtils = require("./window"); var window = windowUtils.getWindow(); var eventsEngine = require("../../events/core/events_engine"); var inArray = require("./array").inArray; var typeUtils = require("./type"); var isDefined = typeUtils.isDefined; var isRenderer = typeUtils.isRenderer; var htmlParser = require("../../core/utils/html_parser"); var elementStrategy; var resetActiveElement = function() { var activeElement = domAdapter.getActiveElement(); var body = domAdapter.getBody(); if (activeElement && activeElement !== body && activeElement.blur) { try { activeElement.blur() } catch (e) { body.blur() } } }; var clearSelection = function() { var selection = window.getSelection(); if (!selection) { return } if ("Caret" === selection.type) { return } if (selection.empty) { selection.empty() } else { if (selection.removeAllRanges) { try { selection.removeAllRanges() } catch (e) {} } } }; var closestCommonParent = function(startTarget, endTarget) { var $startTarget = $(startTarget); var $endTarget = $(endTarget); if ($startTarget[0] === $endTarget[0]) { return $startTarget[0] } var $startParents = $startTarget.parents(); var $endParents = $endTarget.parents(); var startingParent = Math.min($startParents.length, $endParents.length); for (var i = -startingParent; i < 0; i++) { if ($startParents.get(i) === $endParents.get(i)) { return $startParents.get(i) } } }; var triggerVisibilityChangeEvent = function(eventName) { var VISIBILITY_CHANGE_SELECTOR = ".dx-visibility-change-handler"; return function(element) { var $element = $(element || "body"); var changeHandlers = $element.filter(VISIBILITY_CHANGE_SELECTOR).add($element.find(VISIBILITY_CHANGE_SELECTOR)); for (var i = 0; i < changeHandlers.length; i++) { eventsEngine.triggerHandler(changeHandlers[i], eventName) } } }; var uniqueId = function() { var counter = 0; return function(prefix) { return (prefix || "") + counter++ } }(); var dataOptionsAttributeName = "data-options"; var getElementOptions = function(element) { var optionsString = $(element).attr(dataOptionsAttributeName) || ""; return config().optionsParser(optionsString) }; var createComponents = function(elements, componentTypes) { var result = []; var selector = "[" + dataOptionsAttributeName + "]"; var $items = elements.find(selector).add(elements.filter(selector)); $items.each(function(index, element) { var $element = $(element); var options = getElementOptions(element); for (var componentName in options) { if (!componentTypes || inArray(componentName, componentTypes) > -1) { if ($element[componentName]) { $element[componentName](options[componentName]); result.push($element[componentName]("instance")) } } } }); return result }; var createMarkupFromString = function(str) { if (!window.WinJS) { return $(htmlParser.parseHTML(str)) } var tempElement = $("