framework7
Version:
Full featured mobile HTML framework for building iOS & Android apps
269 lines (218 loc) • 8.36 kB
JavaScript
;
exports.__esModule = true;
exports.default = void 0;
var _dom = _interopRequireDefault(require("../../shared/dom7"));
var _utils = require("../../shared/utils");
var _modalClass = _interopRequireDefault(require("../modal/modal-class"));
var _$jsx = _interopRequireDefault(require("../../shared/$jsx"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _assertThisInitialized(self) { if (self === void 0) { throw new ReferenceError("this hasn't been initialised - super() hasn't been called"); } return self; }
function _inheritsLoose(subClass, superClass) { subClass.prototype = Object.create(superClass.prototype); subClass.prototype.constructor = subClass; _setPrototypeOf(subClass, superClass); }
function _setPrototypeOf(o, p) { _setPrototypeOf = Object.setPrototypeOf || function _setPrototypeOf(o, p) { o.__proto__ = p; return o; }; return _setPrototypeOf(o, p); }
var Notification = /*#__PURE__*/function (_Modal) {
_inheritsLoose(Notification, _Modal);
function Notification(app, params) {
var _this;
var extendedParams = (0, _utils.extend)({
on: {}
}, app.params.notification, params); // Extends with open/close Modal methods;
_this = _Modal.call(this, app, extendedParams) || this;
var notification = _assertThisInitialized(_this);
notification.app = app;
notification.params = extendedParams;
var _notification$params = notification.params,
icon = _notification$params.icon,
title = _notification$params.title,
titleRightText = _notification$params.titleRightText,
subtitle = _notification$params.subtitle,
text = _notification$params.text,
closeButton = _notification$params.closeButton,
closeTimeout = _notification$params.closeTimeout,
cssClass = _notification$params.cssClass,
closeOnClick = _notification$params.closeOnClick;
var $el;
if (!notification.params.el) {
// Find Element
var notificationHtml = notification.render({
icon: icon,
title: title,
titleRightText: titleRightText,
subtitle: subtitle,
text: text,
closeButton: closeButton,
cssClass: cssClass
});
$el = (0, _dom.default)(notificationHtml);
} else {
$el = (0, _dom.default)(notification.params.el);
}
if ($el && $el.length > 0 && $el[0].f7Modal) {
return $el[0].f7Modal || _assertThisInitialized(_this);
}
if ($el.length === 0) {
return notification.destroy() || _assertThisInitialized(_this);
}
(0, _utils.extend)(notification, {
$el: $el,
el: $el[0],
type: 'notification'
});
$el[0].f7Modal = notification;
if (closeButton) {
$el.find('.notification-close-button').on('click', function () {
notification.close();
});
}
$el.on('click', function (e) {
if (closeButton && (0, _dom.default)(e.target).closest('.notification-close-button').length) {
return;
}
notification.emit('local::click notificationClick', notification);
if (closeOnClick) notification.close();
});
notification.on('beforeDestroy', function () {
$el.off('click');
});
/* Touch Events */
var isTouched;
var isMoved;
var isScrolling;
var touchesDiff;
var touchStartTime;
var notificationHeight;
var touchesStart = {};
function handleTouchStart(e) {
if (isTouched) return;
isTouched = true;
isMoved = false;
isScrolling = undefined;
touchStartTime = (0, _utils.now)();
touchesStart.x = e.type === 'touchstart' ? e.targetTouches[0].pageX : e.pageX;
touchesStart.y = e.type === 'touchstart' ? e.targetTouches[0].pageY : e.pageY;
}
function handleTouchMove(e) {
if (!isTouched) return;
var pageX = e.type === 'touchmove' ? e.targetTouches[0].pageX : e.pageX;
var pageY = e.type === 'touchmove' ? e.targetTouches[0].pageY : e.pageY;
if (typeof isScrolling === 'undefined') {
isScrolling = !!(isScrolling || Math.abs(pageY - touchesStart.y) < Math.abs(pageX - touchesStart.x));
}
if (isScrolling) {
isTouched = false;
return;
}
e.preventDefault();
if (!isMoved) {
notification.$el.removeClass('notification-transitioning');
notification.$el.transition(0);
notificationHeight = notification.$el[0].offsetHeight / 2;
}
isMoved = true;
touchesDiff = pageY - touchesStart.y;
var newTranslate = touchesDiff;
if (touchesDiff > 0) {
newTranslate = Math.pow(touchesDiff, 0.8);
}
notification.$el.transform("translate3d(0, " + newTranslate + "px, 0)");
}
function handleTouchEnd() {
if (!isTouched || !isMoved) {
isTouched = false;
isMoved = false;
return;
}
isTouched = false;
isMoved = false;
if (touchesDiff === 0) {
return;
}
var timeDiff = (0, _utils.now)() - touchStartTime;
notification.$el.transition('');
notification.$el.addClass('notification-transitioning');
notification.$el.transform('');
if (touchesDiff < -10 && timeDiff < 300 || -touchesDiff >= notificationHeight / 1) {
notification.close();
}
}
function attachTouchEvents() {
notification.$el.on(app.touchEvents.start, handleTouchStart, {
passive: true
});
app.on('touchmove:active', handleTouchMove);
app.on('touchend:passive', handleTouchEnd);
}
function detachTouchEvents() {
notification.$el.off(app.touchEvents.start, handleTouchStart, {
passive: true
});
app.off('touchmove:active', handleTouchMove);
app.off('touchend:passive', handleTouchEnd);
}
var timeoutId;
function closeOnTimeout() {
timeoutId = (0, _utils.nextTick)(function () {
if (isTouched && isMoved) {
closeOnTimeout();
return;
}
notification.close();
}, closeTimeout);
}
notification.on('open', function () {
if (notification.params.swipeToClose) {
attachTouchEvents();
}
(0, _dom.default)('.notification.modal-in').each(function (openedEl) {
var notificationInstance = app.notification.get(openedEl);
if (openedEl !== notification.el && notificationInstance) {
notificationInstance.close();
}
});
if (closeTimeout) {
closeOnTimeout();
}
});
notification.on('close beforeDestroy', function () {
if (notification.params.swipeToClose) {
detachTouchEvents();
}
clearTimeout(timeoutId);
});
return notification || _assertThisInitialized(_this);
}
var _proto = Notification.prototype;
_proto.render = function render() {
var notification = this;
if (notification.params.render) return notification.params.render.call(notification, notification);
var _notification$params2 = notification.params,
icon = _notification$params2.icon,
title = _notification$params2.title,
titleRightText = _notification$params2.titleRightText,
subtitle = _notification$params2.subtitle,
text = _notification$params2.text,
closeButton = _notification$params2.closeButton,
cssClass = _notification$params2.cssClass;
return (0, _$jsx.default)("div", {
class: "notification " + (cssClass || '')
}, (0, _$jsx.default)("div", {
class: "notification-header"
}, icon && (0, _$jsx.default)("div", {
class: "notification-icon"
}, icon), title && (0, _$jsx.default)("div", {
class: "notification-title"
}, title), titleRightText && (0, _$jsx.default)("div", {
class: "notification-title-right-text"
}, titleRightText), closeButton && (0, _$jsx.default)("span", {
class: "notification-close-button"
})), (0, _$jsx.default)("div", {
class: "notification-content"
}, subtitle && (0, _$jsx.default)("div", {
class: "notification-subtitle"
}, subtitle), text && (0, _$jsx.default)("div", {
class: "notification-text"
}, text)));
};
return Notification;
}(_modalClass.default);
var _default = Notification;
exports.default = _default;