Files
backend-mm/public/web/shella/scripts/module.notifications.min.js
2025-09-25 03:03:31 +05:00

1 line
4.0 KiB
JavaScript

theme.Notifications=function(){function t(){this.selectors={elems:".js-notification"},this.settings={close_limit:40,translate_limit:50,opacity_limit:.4},this.load()}t.prototype=$.extend({},t.prototype,{load:function(){var s,a=this;$body.on("mousedown",this.selectors.elems,function(t){if("A"!==t.target.tagName&&!$(t.target).parents("[data-js-action]").length){a.is_holded=!0;var e=$(this),o=t.screenX;return s=0,e.addClass("animate"),setTimeout(function(){e.addClass("pressed")},0),$body.on("mousemove.notification",function(t){var i=t.screenX,n=Math.min(o+a.settings.translate_limit,Math.max(o-a.settings.translate_limit,i));s=n-o,e.removeClass("animate"),setTimeout(function(){e.css({transform:"translateX("+s+"px) scale(0.95)",opacity:Math.max((a.settings.translate_limit-Math.abs(s))/a.settings.translate_limit,a.settings.opacity_limit)})},0),setTimeout(function(){e.addClass("animate")},0)}),$body.one("mouseup.notification",function(){e.trigger("mouseup")}),t.preventDefault(),!1}}),$body.on("mouseup",this.selectors.elems,function(){var n=$(this);a.is_holded=!1,$body.unbind("mousemove.notification mouseup.notification"),setTimeout(function(){if(Math.abs(s)>a.settings.close_limit){var t=n.find("[data-js-notification-inner]"),i=t.find('[data-js-action="close"]').first();if(t.hasClass("d-none"))return;n.one("transitionend",function(){s=0,n.trigger("mouseup").trigger("transitionend"),i.trigger("click"),t.trigger("transitionend"),n.trigger("onpressedend")}),n.css({transform:"translateX("+(s+20)+"px) scale(0.95)",opacity:0})}else n.removeClass("pressed"),n.one("transitionend",function(){n.removeClass("animate"),n.trigger("onpressedend")}),n.css({transform:"",opacity:""});"0s"===n.css("transition-duration")&&n.trigger("transitionend")},0)}),$body.on("close",this.selectors.elems,function(){var t=$(this);$body.unbind("mousemove.notification"),t.trigger("mouseup").trigger("transitionend")})},_cookies:function(t){var n=this,e=t.find(".js-notification-cookies");if(e.length){var i=e.find('[data-js-action="close"]'),o=$.cookie("notification-cookies"),s=e.attr("data-js-show-once"),a=+e.attr("data-js-delay"),r=+e.attr("data-js-cookies-life");return"off"!==o&&setTimeout(function(){n._show(e,function(){i.one("click",function(){if("true"===s){var t=new Date,i=864e5*r;t.setTime(t.getTime()+i),$.cookie("notification-cookies","off",{expires:t,path:"/"})}$(this).off(),n._hide(e,function(){e.remove()})})})},1e3*a),i}},_products:function(t){var i=this,n=t.find(".js-notification-products");if(n.length){var e,o,s,a=n.find('[data-js-action="close"]'),r=n.find("[data-js-notification-products-item]"),c=+n.attr("data-js-delay"),d=+n.attr("data-js-interval-min"),f=+n.attr("data-js-interval-max"),u=+n.attr("data-js-max-time-life");return setTimeout(function(){h()},1e3*c),a.on("click",function(){i._hide(n)}),a}function l(t,i){return Math.round(t-.5+Math.random()*(i-t+1))}function m(){i._hide(n,function(){h()})}function h(){clearInterval(s),!n.hasClass("d-none")||i.is_holded?i.is_holded?n.parents(".js-notification").one("onpressedend",function(){m()}):n.is(":hover")?n.one("mouseleave",function(){m()}):m():(e=r.eq(l(0,r.length-1)),o=l(d,f),r.addClass("d-none"),e.removeClass("d-none"),i._show(n,function(){setTimeout(function(){h()},1e3*o),0!==u&&(s=setTimeout(function(){i._hide(n)},1e3*u))},function(t){t()}))}},_show:function(t,i,n){function e(){setTimeout(function(){t.addClass("visible")},0),"0s"===t.css("transition-duration")&&t.trigger("transitionend")}t.unbind("transitionend"),i&&t.one("transitionend",function(){i()}),t.removeClass("d-none"),t.addClass("animate"),n?n(e):e()},_hide:function(t,i){t.unbind("transitionend"),t.one("transitionend",function(){t.addClass("d-none").removeClass("animate").removeAttr("style"),t.parents(".js-notification").trigger("close"),i&&i()}),t.removeClass("visible"),"0s"===t.css("transition-duration")&&t.trigger("transitionend")},init:function(t){this._products(t),this._cookies(t)},destroy:function(t){t.find(".js-notification-cookies, .js-notification-products").find('[data-js-action="close"]').off()}}),theme.Notifications=new t},$(function(){theme.Notifications()});