devextreme
Version:
HTML5 JavaScript Component Suite for Responsive Web Development
142 lines (110 loc) • 4.98 kB
JavaScript
"use strict";
var $ = require("../../core/renderer"),
fx = require("../../animation/fx"),
Button = require("../button"),
messageLocalization = require("../../localization/message"),
registerDecorator = require("./ui.list.edit.decorator_registry").register,
SwitchableEditDecorator = require("./ui.list.edit.decorator.switchable");
var SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS = "dx-list-switchable-delete-button-container",
SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS = "dx-list-switchable-delete-button-wrapper",
SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS = "dx-list-switchable-delete-button-inner-wrapper",
SWITCHABLE_DELETE_BUTTON_CLASS = "dx-list-switchable-delete-button",
SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION = 200;
var SwitchableButtonEditDecorator = SwitchableEditDecorator.inherit({
_init: function _init() {
this.callBase.apply(this, arguments);
var $buttonContainer = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_CONTAINER_CLASS),
$buttonWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_WRAPPER_CLASS),
$buttonInnerWrapper = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_INNER_WRAPPER_CLASS),
$button = $("<div>").addClass(SWITCHABLE_DELETE_BUTTON_CLASS);
this._list._createComponent($button, Button, {
text: messageLocalization.format("dxListEditDecorator-delete"),
type: "danger",
onClick: function (e) {
this._deleteItem();
e.event.stopPropagation();
}.bind(this),
integrationOptions: {}
});
$buttonContainer.append($buttonWrapper);
$buttonWrapper.append($buttonInnerWrapper);
$buttonInnerWrapper.append($button);
this._$buttonContainer = $buttonContainer;
},
_enablePositioning: function _enablePositioning($itemElement) {
this.callBase.apply(this, arguments);
fx.stop(this._$buttonContainer, true);
this._$buttonContainer.appendTo($itemElement);
},
_disablePositioning: function _disablePositioning() {
this.callBase.apply(this, arguments);
this._$buttonContainer.detach();
},
_animatePrepareDeleteReady: function _animatePrepareDeleteReady() {
var rtl = this._isRtlEnabled(),
listWidth = this._list.$element().width(),
buttonWidth = this._buttonWidth(),
fromValue = rtl ? listWidth : -buttonWidth,
toValue = rtl ? listWidth - buttonWidth : 0;
return fx.animate(this._$buttonContainer, {
type: "custom",
duration: SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION,
from: { right: fromValue },
to: { right: toValue }
});
},
_animateForgetDeleteReady: function _animateForgetDeleteReady() {
var rtl = this._isRtlEnabled(),
listWidth = this._list.$element().width(),
buttonWidth = this._buttonWidth(),
fromValue = rtl ? listWidth - buttonWidth : 0,
toValue = rtl ? listWidth : -buttonWidth;
return fx.animate(this._$buttonContainer, {
type: "custom",
duration: SWITCHABLE_DELETE_BUTTON_ANIMATION_DURATION,
from: { right: fromValue },
to: { right: toValue }
});
},
_buttonWidth: function _buttonWidth() {
if (!this._buttonContainerWidth) {
this._buttonContainerWidth = this._$buttonContainer.outerWidth();
}
return this._buttonContainerWidth;
},
dispose: function dispose() {
if (this._$buttonContainer) {
this._$buttonContainer.remove();
}
this.callBase.apply(this, arguments);
}
});
var TOGGLE_DELETE_SWITCH_CONTAINER_CLASS = "dx-list-toggle-delete-switch-container",
TOGGLE_DELETE_SWITCH_CLASS = "dx-list-toggle-delete-switch";
registerDecorator("delete", "toggle", SwitchableButtonEditDecorator.inherit({
beforeBag: function beforeBag(config) {
var $itemElement = config.$itemElement,
$container = config.$container;
var $toggle = $("<div>").addClass(TOGGLE_DELETE_SWITCH_CLASS);
this._list._createComponent($toggle, Button, {
icon: "toggle-delete",
onClick: function (e) {
this._toggleDeleteReady($itemElement);
e.event.stopPropagation();
}.bind(this),
integrationOptions: {}
});
$container.addClass(TOGGLE_DELETE_SWITCH_CONTAINER_CLASS);
$container.append($toggle);
}
}));
registerDecorator("delete", "slideButton", SwitchableButtonEditDecorator.inherit({
_shouldHandleSwipe: true,
_swipeEndHandler: function _swipeEndHandler($itemElement, args) {
if (args.targetOffset !== 0) {
this._toggleDeleteReady($itemElement);
}
return true;
}
}));
module.exports = SwitchableButtonEditDecorator;