You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
200 lines
4.3 KiB
200 lines
4.3 KiB
"use strict";
|
|
|
|
var _interopRequireDefault = require("@babel/runtime/helpers/interopRequireDefault");
|
|
|
|
exports.__esModule = true;
|
|
exports.default = void 0;
|
|
|
|
var _extends2 = _interopRequireDefault(require("@babel/runtime/helpers/extends"));
|
|
|
|
var _vue = _interopRequireDefault(require("vue"));
|
|
|
|
var _Toast = _interopRequireDefault(require("./Toast"));
|
|
|
|
var _utils = require("../utils");
|
|
|
|
var _node = require("../utils/dom/node");
|
|
|
|
var defaultOptions = {
|
|
icon: '',
|
|
type: 'text',
|
|
// @deprecated
|
|
mask: false,
|
|
value: true,
|
|
message: '',
|
|
className: '',
|
|
overlay: false,
|
|
onClose: null,
|
|
onOpened: null,
|
|
duration: 2000,
|
|
iconPrefix: undefined,
|
|
position: 'middle',
|
|
transition: 'van-fade',
|
|
forbidClick: false,
|
|
loadingType: undefined,
|
|
getContainer: 'body',
|
|
overlayStyle: null,
|
|
closeOnClick: false,
|
|
closeOnClickOverlay: false
|
|
}; // default options of specific type
|
|
|
|
var defaultOptionsMap = {};
|
|
var queue = [];
|
|
var multiple = false;
|
|
var currentOptions = (0, _extends2.default)({}, defaultOptions);
|
|
|
|
function parseOptions(message) {
|
|
if ((0, _utils.isObject)(message)) {
|
|
return message;
|
|
}
|
|
|
|
return {
|
|
message: message
|
|
};
|
|
}
|
|
|
|
function isInDocument(element) {
|
|
return document.body.contains(element);
|
|
}
|
|
|
|
function createInstance() {
|
|
/* istanbul ignore if */
|
|
if (_utils.isServer) {
|
|
return {};
|
|
}
|
|
|
|
queue = queue.filter(function (item) {
|
|
return !item.$el.parentNode || isInDocument(item.$el);
|
|
});
|
|
|
|
if (!queue.length || multiple) {
|
|
var toast = new (_vue.default.extend(_Toast.default))({
|
|
el: document.createElement('div')
|
|
});
|
|
toast.$on('input', function (value) {
|
|
toast.value = value;
|
|
});
|
|
queue.push(toast);
|
|
}
|
|
|
|
return queue[queue.length - 1];
|
|
} // transform toast options to popup props
|
|
|
|
|
|
function transformOptions(options) {
|
|
return (0, _extends2.default)({}, options, {
|
|
overlay: options.mask || options.overlay,
|
|
mask: undefined,
|
|
duration: undefined
|
|
});
|
|
}
|
|
|
|
function Toast(options) {
|
|
if (options === void 0) {
|
|
options = {};
|
|
}
|
|
|
|
var toast = createInstance(); // should add z-index if previous toast has not disappeared
|
|
|
|
if (toast.value) {
|
|
toast.updateZIndex();
|
|
}
|
|
|
|
options = parseOptions(options);
|
|
options = (0, _extends2.default)({}, currentOptions, defaultOptionsMap[options.type || currentOptions.type], options);
|
|
|
|
if (process.env.NODE_ENV === 'development' && options.mask) {
|
|
console.warn('[Vant] Toast: "mask" option is deprecated, use "overlay" option instead.');
|
|
}
|
|
|
|
options.clear = function () {
|
|
toast.value = false;
|
|
|
|
if (options.onClose) {
|
|
options.onClose();
|
|
options.onClose = null;
|
|
}
|
|
|
|
if (multiple && !_utils.isServer) {
|
|
toast.$on('closed', function () {
|
|
clearTimeout(toast.timer);
|
|
queue = queue.filter(function (item) {
|
|
return item !== toast;
|
|
});
|
|
(0, _node.removeNode)(toast.$el);
|
|
toast.$destroy();
|
|
});
|
|
}
|
|
};
|
|
|
|
(0, _extends2.default)(toast, transformOptions(options));
|
|
clearTimeout(toast.timer);
|
|
|
|
if (options.duration > 0) {
|
|
toast.timer = setTimeout(function () {
|
|
toast.clear();
|
|
}, options.duration);
|
|
}
|
|
|
|
return toast;
|
|
}
|
|
|
|
var createMethod = function createMethod(type) {
|
|
return function (options) {
|
|
return Toast((0, _extends2.default)({
|
|
type: type
|
|
}, parseOptions(options)));
|
|
};
|
|
};
|
|
|
|
['loading', 'success', 'fail'].forEach(function (method) {
|
|
Toast[method] = createMethod(method);
|
|
});
|
|
|
|
Toast.clear = function (all) {
|
|
if (queue.length) {
|
|
if (all) {
|
|
queue.forEach(function (toast) {
|
|
toast.clear();
|
|
});
|
|
queue = [];
|
|
} else if (!multiple) {
|
|
queue[0].clear();
|
|
} else {
|
|
queue.shift().clear();
|
|
}
|
|
}
|
|
};
|
|
|
|
Toast.setDefaultOptions = function (type, options) {
|
|
if (typeof type === 'string') {
|
|
defaultOptionsMap[type] = options;
|
|
} else {
|
|
(0, _extends2.default)(currentOptions, type);
|
|
}
|
|
};
|
|
|
|
Toast.resetDefaultOptions = function (type) {
|
|
if (typeof type === 'string') {
|
|
defaultOptionsMap[type] = null;
|
|
} else {
|
|
currentOptions = (0, _extends2.default)({}, defaultOptions);
|
|
defaultOptionsMap = {};
|
|
}
|
|
};
|
|
|
|
Toast.allowMultiple = function (value) {
|
|
if (value === void 0) {
|
|
value = true;
|
|
}
|
|
|
|
multiple = value;
|
|
};
|
|
|
|
Toast.install = function () {
|
|
_vue.default.use(_Toast.default);
|
|
};
|
|
|
|
_vue.default.prototype.$toast = Toast;
|
|
var _default = Toast;
|
|
exports.default = _default; |