var Notification = function(options) { if (Vue.prototype.$isServer) return; options = options || {}; let userOnClose = options.onClose; let id = 'notification_' + seed++; options.onClose = function() { Notification.close(id, userOnClose); }; instance = new NotificationConstructor({ data: options }); if (isVNode(options.message)) { instance.$slots.default = [options.message]; options.message = ''; } instance.id = id; instance.vm = instance.$mount(); document.body.appendChild(instance.vm.$el); instance.vm.visible = true; instance.dom = instance.vm.$el; instance.dom.style.zIndex = PopupManager.nextZIndex(); const offset = options.offset || 0; let topDist = offset; for (let i = 0, len = instances.length; i < len; i++) { topDist += instances[i].$el.offsetHeight + 16; } topDist += 16; instance.top = topDist; instances.push(instance); return instance.vm; };
const Notification = function(options) { if (Vue.prototype.$isServer) return; options = options || {}; const userOnClose = options.onClose; const id = 'notification_' + seed++; const position = options.position || 'top-right'; options.onClose = function() { Notification.close(id, userOnClose); }; instance = new NotificationConstructor({ data: options }); if (isVNode(options.message)) { instance.$slots.default = [options.message]; options.message = 'REPLACED_BY_VNODE'; } instance.id = id; instance.vm = instance.$mount(); document.body.appendChild(instance.vm.$el); instance.vm.visible = true; instance.dom = instance.vm.$el; instance.dom.style.zIndex = PopupManager.nextZIndex(); let verticalOffset = options.offset || 0; instances.filter(item => item.position === position).forEach(item => { verticalOffset += item.$el.offsetHeight + 16; }); verticalOffset += 16; instance.verticalOffset = verticalOffset; instances.push(instance); return instance.vm; };
const MessageBox = function(options, callback) { if (Vue.prototype.$isServer) return; if (typeof options === 'string' || isVNode(options)) { options = { message: options }; if (typeof arguments[1] === 'string') { options.title = arguments[1]; } } else if (options.callback && !callback) { callback = options.callback; } if (typeof Promise !== 'undefined') { return new Promise((resolve, reject) => { // eslint-disable-line msgQueue.push({ options: merge({}, defaults, MessageBox.defaults, options), callback: callback, resolve: resolve, reject: reject }); showNextMsg(); }); } else { msgQueue.push({ options: merge({}, defaults, MessageBox.defaults, options), callback: callback }); showNextMsg(); } };
Notification[type] = options => { if (typeof options === 'string' || isVNode(options)) { options = { message: options }; } options.type = type; return Notification(options); };
const showNextMsg = () => { if (!instance) { initInstance(); } instance.action = ''; if (!instance.visible || instance.closeTimer) { if (msgQueue.length > 0) { currentMsg = msgQueue.shift(); let options = currentMsg.options; for (let prop in options) { if (options.hasOwnProperty(prop)) { instance[prop] = options[prop]; } } if (options.callback === undefined) { instance.callback = defaultCallback; } let oldCb = instance.callback; instance.callback = (action, instance) => { oldCb(action, instance); showNextMsg(); }; if (isVNode(instance.message)) { instance.$slots.default = [instance.message]; instance.message = null; } else { delete instance.$slots.default; } ['modal', 'showClose', 'closeOnClickModal', 'closeOnPressEscape'].forEach(prop => { if (instance[prop] === undefined) { instance[prop] = true; } }); document.body.appendChild(instance.$el); Vue.nextTick(() => { instance.visible = true; }); } } };