mo-framework
Version:
Hybrid mobile app framework with generators
70 lines (55 loc) • 1.54 kB
JavaScript
const modalsContext = require.context('views/modals/', true, /\/[A-Z][A-Za-z]+$/);
define([
'lodash', 'jquery',
'./pages', './analytics'
], function (_, $, pages, analytics) {
var views = [],
currentView = null,
isShown = false;
function init () {
modalsContext.keys().forEach(function (key) {
var modalClass = modalsContext(key),
name = key.split('/')[1];
views[name] = new modalClass();
});
}
function show (name, content, handlers) {
if (!isShown || currentView != views[name]) {
analytics.hitModal(name, { referrer: pages.getCurrentUrl() });
}
if (isShown) {
if (currentView != views[name]) {
hide();
} else {
currentView.events.off();
}
}
currentView = views[name];
currentView.update(content);
if (handlers) {
currentView.events.on(handlers);
}
$('body').addClass('modal-opened');
isShown = true;
}
function hide (name) {
if (!isShown) {
return;
}
if (name && currentView != views[name]) {
return;
}
currentView.events.off();
currentView.clear();
$('body').removeClass('modal-opened');
isShown = false;
}
return {
init: init,
show: show,
hide: hide,
isShown: function () {
return isShown;
}
}
});