184 lines
3.7 KiB
JavaScript
184 lines
3.7 KiB
JavaScript
/**
|
|
* Utility functions.
|
|
*/
|
|
|
|
import Promise from './promise';
|
|
|
|
var {hasOwnProperty} = {}, {slice} = [], debug = false, ntick;
|
|
|
|
export const inBrowser = typeof window !== 'undefined';
|
|
|
|
export default function ({config, nextTick}) {
|
|
ntick = nextTick;
|
|
debug = config.debug || !config.silent;
|
|
}
|
|
|
|
export function warn(msg) {
|
|
if (typeof console !== 'undefined' && debug) {
|
|
console.warn('[VueResource warn]: ' + msg);
|
|
}
|
|
}
|
|
|
|
export function error(msg) {
|
|
if (typeof console !== 'undefined') {
|
|
console.error(msg);
|
|
}
|
|
}
|
|
|
|
export function nextTick(cb, ctx) {
|
|
return ntick(cb, ctx);
|
|
}
|
|
|
|
export function trim(str) {
|
|
return str ? str.replace(/^\s*|\s*$/g, '') : '';
|
|
}
|
|
|
|
export function trimEnd(str, chars) {
|
|
|
|
if (str && chars === undefined) {
|
|
return str.replace(/\s+$/, '');
|
|
}
|
|
|
|
if (!str || !chars) {
|
|
return str;
|
|
}
|
|
|
|
return str.replace(new RegExp(`[${chars}]+$`), '');
|
|
}
|
|
|
|
export function toLower(str) {
|
|
return str ? str.toLowerCase() : '';
|
|
}
|
|
|
|
export function toUpper(str) {
|
|
return str ? str.toUpperCase() : '';
|
|
}
|
|
|
|
export const isArray = Array.isArray;
|
|
|
|
export function isString(val) {
|
|
return typeof val === 'string';
|
|
}
|
|
|
|
export function isBoolean(val) {
|
|
return val === true || val === false;
|
|
}
|
|
|
|
export function isFunction(val) {
|
|
return typeof val === 'function';
|
|
}
|
|
|
|
export function isObject(obj) {
|
|
return obj !== null && typeof obj === 'object';
|
|
}
|
|
|
|
export function isPlainObject(obj) {
|
|
return isObject(obj) && Object.getPrototypeOf(obj) == Object.prototype;
|
|
}
|
|
|
|
export function isBlob(obj) {
|
|
return typeof Blob !== 'undefined' && obj instanceof Blob;
|
|
}
|
|
|
|
export function isFormData(obj) {
|
|
return typeof FormData !== 'undefined' && obj instanceof FormData;
|
|
}
|
|
|
|
export function when(value, fulfilled, rejected) {
|
|
|
|
var promise = Promise.resolve(value);
|
|
|
|
if (arguments.length < 2) {
|
|
return promise;
|
|
}
|
|
|
|
return promise.then(fulfilled, rejected);
|
|
}
|
|
|
|
export function options(fn, obj, opts) {
|
|
|
|
opts = opts || {};
|
|
|
|
if (isFunction(opts)) {
|
|
opts = opts.call(obj);
|
|
}
|
|
|
|
return merge(fn.bind({$vm: obj, $options: opts}), fn, {$options: opts});
|
|
}
|
|
|
|
export function each(obj, iterator) {
|
|
|
|
var i, key;
|
|
|
|
if (isArray(obj)) {
|
|
for (i = 0; i < obj.length; i++) {
|
|
iterator.call(obj[i], obj[i], i);
|
|
}
|
|
} else if (isObject(obj)) {
|
|
for (key in obj) {
|
|
if (hasOwnProperty.call(obj, key)) {
|
|
iterator.call(obj[key], obj[key], key);
|
|
}
|
|
}
|
|
}
|
|
|
|
return obj;
|
|
}
|
|
|
|
export const assign = Object.assign || _assign;
|
|
|
|
export function merge(target) {
|
|
|
|
var args = slice.call(arguments, 1);
|
|
|
|
args.forEach(source => {
|
|
_merge(target, source, true);
|
|
});
|
|
|
|
return target;
|
|
}
|
|
|
|
export function defaults(target) {
|
|
|
|
var args = slice.call(arguments, 1);
|
|
|
|
args.forEach(source => {
|
|
|
|
for (var key in source) {
|
|
if (target[key] === undefined) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
|
|
});
|
|
|
|
return target;
|
|
}
|
|
|
|
function _assign(target) {
|
|
|
|
var args = slice.call(arguments, 1);
|
|
|
|
args.forEach(source => {
|
|
_merge(target, source);
|
|
});
|
|
|
|
return target;
|
|
}
|
|
|
|
function _merge(target, source, deep) {
|
|
for (var key in source) {
|
|
if (deep && (isPlainObject(source[key]) || isArray(source[key]))) {
|
|
if (isPlainObject(source[key]) && !isPlainObject(target[key])) {
|
|
target[key] = {};
|
|
}
|
|
if (isArray(source[key]) && !isArray(target[key])) {
|
|
target[key] = [];
|
|
}
|
|
_merge(target[key], source[key], deep);
|
|
} else if (source[key] !== undefined) {
|
|
target[key] = source[key];
|
|
}
|
|
}
|
|
}
|