From f555e272eb328f0df36e3670b686d2633238c227 Mon Sep 17 00:00:00 2001 From: rtemred Date: Tue, 3 Sep 2019 21:58:11 +0700 Subject: [PATCH] modal_autoclosable: don't close if click end on another target --- .../modal/_autoclosable/modal_autoclosable.js | 24 ++++++++++++++++++- 1 file changed, 23 insertions(+), 1 deletion(-) diff --git a/common.blocks/modal/_autoclosable/modal_autoclosable.js b/common.blocks/modal/_autoclosable/modal_autoclosable.js index c19240cbb..75b54d42c 100644 --- a/common.blocks/modal/_autoclosable/modal_autoclosable.js +++ b/common.blocks/modal/_autoclosable/modal_autoclosable.js @@ -13,14 +13,28 @@ modules.define( * @bem */ provide(Modal.declMod({ modName : 'autoclosable', modVal : true }, /** @lends modal.prototype */{ + beforeSetMod : { + 'visible' : { + '' : function() { + return this._pointerDownTarget === this._pointerUpTarget; + } + } + }, + onSetMod : { 'visible' : { 'true' : function() { this.__base.apply(this, arguments); + this._pointerDownTarget = null; + this._pointerUpTarget = null; + this ._nextTick(function() { - this._domEvents().on('pointerclick', this._onPointerClick); + this._domEvents() + .on('pointerdown', this._onPointerDown) + .on('pointerup', this._onPointerUp) + .on('pointerclick', this._onPointerClick); }) ._popup._events().on({ modName : 'visible', modVal : '' }, this._onPopupHide, this); } @@ -31,6 +45,14 @@ provide(Modal.declMod({ modName : 'autoclosable', modVal : true }, /** @lends mo dom.contains(this._elem('content').domElem, $(e.target)) || this.delMod('visible'); }, + _onPointerDown : function(e) { + this._pointerDownTarget = e.target; + }, + + _onPointerUp : function(e) { + this._pointerUpTarget = e.target; + }, + _onPopupHide : function() { this.delMod('visible'); }