/** * DevExtreme (ui/switch.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 eventsEngine = require("../events/core/events_engine"); var devices = require("../core/devices"); var extend = require("../core/utils/extend").extend; var inkRipple = require("./widget/utils.ink_ripple"); var registerComponent = require("../core/component_registrator"); var Editor = require("./editor/editor"); var eventUtils = require("../events/utils"); var feedbackEvents = require("../events/core/emitter.feedback"); var themes = require("./themes"); var fx = require("../animation/fx"); var messageLocalization = require("../localization/message"); var clickEvent = require("../events/click"); var Swipeable = require("../events/gesture/swipeable"); var Deferred = require("../core/utils/deferred").Deferred; var SWITCH_CLASS = "dx-switch"; var SWITCH_WRAPPER_CLASS = SWITCH_CLASS + "-wrapper"; var SWITCH_CONTAINER_CLASS = SWITCH_CLASS + "-container"; var SWITCH_INNER_CLASS = SWITCH_CLASS + "-inner"; var SWITCH_HANDLE_CLASS = SWITCH_CLASS + "-handle"; var SWITCH_ON_VALUE_CLASS = SWITCH_CLASS + "-on-value"; var SWITCH_ON_CLASS = SWITCH_CLASS + "-on"; var SWITCH_OFF_CLASS = SWITCH_CLASS + "-off"; var SWITCH_ANIMATION_DURATION = 100; var Switch = Editor.inherit({ _supportedKeys: function() { var isRTL = this.option("rtlEnabled"); var click = function(e) { e.preventDefault(); this._clickAction({ event: e }) }; var move = function(value, e) { e.preventDefault(); e.stopPropagation(); this._animateValue(value) }; return extend(this.callBase(), { space: click, enter: click, leftArrow: move.bind(this, isRTL ? true : false), rightArrow: move.bind(this, isRTL ? false : true) }) }, _getDefaultOptions: function() { return extend(this.callBase(), { hoverStateEnabled: true, activeStateEnabled: true, switchedOnText: this._getLocalizationMessage("On"), switchedOffText: this._getLocalizationMessage("Off"), value: false, useInkRipple: false, _animateHandle: true }) }, _defaultOptionsRules: function() { var themeName = themes.current(); return this.callBase().concat([{ device: function() { return "desktop" === devices.real().deviceType && !devices.isSimulator() }, options: { focusStateEnabled: true } }, { device: function(_device) { return themes.isIos7(themeName) }, options: { _animateHandle: false } }]) }, _setDeprecatedOptions: function() { this.callBase(); extend(this._deprecatedOptions, { onText: { since: "18.2", alias: "switchedOnText" }, offText: { since: "18.2", alias: "switchedOffText" } }) }, _getLocalizationMessage: function(state) { var newMessage = messageLocalization.format("dxSwitch-switched" + state + "Text"); var oldMessage = messageLocalization.format("dxSwitch-" + state.toLowerCase() + "Text"); return newMessage || oldMessage }, _feedbackHideTimeout: 0, _animating: false, _initMarkup: function() { this._renderContainers(); this.option("useInkRipple") && this._renderInkRipple(); this.$element().addClass(SWITCH_CLASS).append(this._$switchWrapper); this._renderSubmitElement(); this._renderClick(); this.setAria("role", "button"); this._renderSwipeable(); this.callBase(); this._renderSwitchInner(); this._renderLabels(); this._renderValue() }, _getInnerOffset: function(value, offset) { var ratio = (offset - this._offsetDirection() * Number(!value)) / 2; return 100 * ratio + "%" }, _getHandleOffset: function(value, offset) { if (this.option("rtlEnabled")) { value = !value } if (value) { var calcValue = -100 + 100 * -offset; return calcValue + "%" } else { return 100 * -offset + "%" } }, _renderSwitchInner: function() { this._$switchInner = $("