vimo-dt
Version:
A Vue2.x UI Project For Mobile & HyBrid
125 lines (94 loc) • 3.08 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
var _vue = require('vue');
var _vue2 = _interopRequireDefault(_vue);
var _registerListener = require('../../util/register-listener');
var _registerListener2 = _interopRequireDefault(_registerListener);
var _modal = require('./modal.vue');
var _modal2 = _interopRequireDefault(_modal);
var _getInsertPosition = require('../../util/get-insert-position');
var _getInsertPosition2 = _interopRequireDefault(_getInsertPosition);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
var modalArr = [];
var unRegisterUrlChange = [];
var isModalEnable = true;
var scrollTop = 0;
function ModalFactory(options) {
var Modal = _vue2.default.extend(_modal2.default);
options.dismissOnPageChange = false;
options.recordInHistory = false;
options.scrollControl = false;
return new Modal({
el: (0, _getInsertPosition2.default)('modalPortal').appendChild(document.createElement('div')),
propsData: options
});
}
function present() {
var options = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : {};
isModalEnable = false;
return new Promise(function (resolve) {
var modalInstance = ModalFactory(options);
var presentPromise = modalInstance.present();
window.history.pushState({
id: new Date().getTime(),
name: 'Modal-' + modalInstance._uid
}, '', '');
modalArr.push(modalInstance);
if (unRegisterUrlChange.length === 0) {
(0, _registerListener2.default)(window, 'popstate', function () {
isModalEnable && dismiss(null, false);
}, {}, unRegisterUrlChange);
_disableScroll();
}
presentPromise.then(function () {
isModalEnable = true;
resolve();
});
});
}
function dismiss(dataBack) {
var changeLocalHistory = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
isModalEnable = false;
if (changeLocalHistory) {
window.history.back();
}
return new Promise(function (resolve) {
var lastModalInstance = modalArr.pop();
if (modalArr.length === 0) {
unRegisterAllListener();
_enableScroll();
}
lastModalInstance.dismiss(dataBack).then(function () {
isModalEnable = true;
resolve();
});
});
}
function unRegisterAllListener() {
unRegisterUrlChange.forEach(function (item) {
return item && item();
});
unRegisterUrlChange = [];
}
function _disableScroll() {
var scrollHeight = window.document.documentElement.scrollHeight;
var clientHeight = window.document.documentElement.clientHeight;
if (scrollHeight > clientHeight) {
scrollTop = window.scrollY;
window.document.body.style.position = 'fixed';
window.document.body.style.top = -scrollTop + 'px';
}
}
function _enableScroll() {
scrollTop = window.scrollY;
window.document.body.style.position = '';
window.document.body.style.top = '';
window.scrollTo(0, scrollTop);
scrollTop = 0;
}
exports.default = {
present: present,
dismiss: dismiss
};