zmp-core
Version:
Full featured mobile HTML framework for building iOS & Android apps
103 lines (80 loc) • 3.15 kB
JavaScript
"use strict";
exports.__esModule = true;
exports.default = void 0;
var _zmpDom = _interopRequireDefault(require("../../shared/zmp-dom"));
var _viewClass = _interopRequireDefault(require("../../components/view/view-class"));
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function initClicks(app) {
function handleClicks(e) {
var $clickedEl = (0, _zmpDom.default)(e.target);
var $clickedLinkEl = $clickedEl.closest('a');
var isLink = $clickedLinkEl.length > 0;
var url = isLink && $clickedLinkEl.attr('href'); // Check if link is external
if (isLink && url && url !== '#') {
e.stopImmediatePropagation();
e.stopPropagation();
e.preventDefault();
return;
} // Modules Clicks
Object.keys(app.modules).forEach(function (moduleName) {
var moduleClicks = app.modules[moduleName].clicks;
if (!moduleClicks) return;
if (e.preventZMPRouter) return;
Object.keys(moduleClicks).forEach(function (clickSelector) {
var matchingClickedElement = $clickedEl.closest(clickSelector).eq(0);
if (matchingClickedElement.length > 0) {
moduleClicks[clickSelector].call(app, matchingClickedElement, matchingClickedElement.dataset(), e);
}
});
}); // Load Page
var clickedLinkData = {};
if (isLink) {
e.preventDefault();
clickedLinkData = $clickedLinkEl.dataset();
}
clickedLinkData.clickedEl = $clickedLinkEl[0]; // Prevent Router
if (e.preventZMPRouter) return;
if ($clickedLinkEl.hasClass('prevent-router') || $clickedLinkEl.hasClass('router-prevent')) return;
var validUrl = url && url.length > 0 && url[0] !== '#';
if (validUrl || $clickedLinkEl.hasClass('back')) {
var view;
if (clickedLinkData.view && clickedLinkData.view === 'current') {
view = app.views.current;
} else if (clickedLinkData.view) {
view = (0, _zmpDom.default)(clickedLinkData.view)[0].zmpView;
} else {
view = $clickedEl.parents('.view')[0] && $clickedEl.parents('.view')[0].zmpView;
if (!$clickedLinkEl.hasClass('back') && view && view.params.linksView) {
if (typeof view.params.linksView === 'string') view = (0, _zmpDom.default)(view.params.linksView)[0].zmpView;else if (view.params.linksView instanceof _viewClass.default) view = view.params.linksView;
}
}
if (!view) {
if (app.views.main) view = app.views.main;
}
if (!view || !view.router) return;
if ($clickedLinkEl[0].zmpRouteProps) {
clickedLinkData.props = $clickedLinkEl[0].zmpRouteProps;
}
if ($clickedLinkEl.hasClass('back')) view.router.back(url, clickedLinkData);else view.router.navigate(url, clickedLinkData);
}
}
app.on('click', handleClicks);
}
var _default = {
name: 'clicks',
params: {
clicks: {
// External Links
externalLinks: '.external'
}
},
on: {
init: function init() {
var app = this;
if (!app.params.clicks.nativeBehavior) {
initClicks(app);
}
}
}
};
exports.default = _default;