/** * DevExtreme (ui/date_box/ui.date_view_roller.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 registerComponent = require("../../core/component_registrator"); var extend = require("../../core/utils/extend").extend; var each = require("../../core/utils/iterator").each; var eventUtils = require("../../events/utils"); var clickEvent = require("../../events/click"); var Scrollable = require("../scroll_view/ui.scrollable"); var fx = require("../../animation/fx"); var translator = require("../../animation/translator"); var DATEVIEW_ROLLER_CLASS = "dx-dateviewroller"; var DATEVIEW_ROLLER_ACTIVE_CLASS = "dx-state-active"; var DATEVIEW_ROLLER_CURRENT_CLASS = "dx-dateviewroller-current"; var DATEVIEW_ROLLER_ITEM_CLASS = "dx-dateview-item"; var DATEVIEW_ROLLER_ITEM_SELECTED_CLASS = "dx-dateview-item-selected"; var DATEVIEW_ROLLER_ITEM_SELECTED_FRAME_CLASS = "dx-dateview-item-selected-frame"; var DATEVIEW_ROLLER_ITEM_SELECTED_BORDER_CLASS = "dx-dateview-item-selected-border"; var DateViewRoller = Scrollable.inherit({ _getDefaultOptions: function() { return extend(this.callBase(), { showScrollbar: false, useNative: false, selectedIndex: 0, bounceEnabled: false, items: [], showOnClick: false, onClick: null, onSelectedIndexChanged: null }) }, _defaultOptionsRules: function() { return this.callBase().concat([{ device: function(_device) { return "win" === _device.platform && _device.version && 8 === _device.version[0] }, options: { showOnClick: true } }, { device: { platform: "generic" }, options: { scrollByContent: true } }]) }, _init: function() { this.callBase(); this._renderSelectedItemFrame() }, _render: function() { this.callBase(); this.$element().addClass(DATEVIEW_ROLLER_CLASS); this._renderContainerClick(); this._renderItems(); this._renderSelectedValue(); this._renderItemsClick(); this._wrapAction("_endAction", this._endActionHandler.bind(this)); this._renderSelectedIndexChanged() }, _renderSelectedIndexChanged: function() { this._selectedIndexChanged = this._createActionByOption("onSelectedIndexChanged") }, _renderContainerClick: function() { if (!this.option("showOnClick")) { return } var eventName = eventUtils.addNamespace(clickEvent.name, this.NAME); var clickAction = this._createActionByOption("onClick"); eventsEngine.off(this._$container, eventName); eventsEngine.on(this._$container, eventName, function(e) { clickAction({ event: e }) }) }, _wrapAction: function(actionName, callback) { var strategy = this._strategy; var originalAction = strategy[actionName]; strategy[actionName] = function() { callback.apply(this, arguments); return originalAction.apply(this, arguments) } }, _renderItems: function() { var items = this.option("items") || []; var $items = $(); this._$content.empty(); items.forEach(function(item) { $items = $items.add($("