|
|
'use strict';
|
|
|
|
|
|
function noop() {
|
|
|
|
|
|
}
|
|
|
|
|
|
exports.noop = noop;
|
|
|
|
|
|
function bind(func, context) {
|
|
|
return function boundFunc() {
|
|
|
return func.apply(context, arguments);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
exports.bind = bind;
|
|
|
|
|
|
function debounce(func, wait, immediate) {
|
|
|
var timeout;
|
|
|
|
|
|
return function debouncedFunc() {
|
|
|
var callNow = immediate && !timeout,
|
|
|
context = this,
|
|
|
args = arguments;
|
|
|
|
|
|
clearTimeout(timeout);
|
|
|
|
|
|
timeout = setTimeout(function() {
|
|
|
timeout = null;
|
|
|
|
|
|
if (!immediate) func.apply(context, args);
|
|
|
}, wait);
|
|
|
|
|
|
if (callNow) func.apply(context, args);
|
|
|
};
|
|
|
}
|
|
|
|
|
|
exports.debounce = debounce;
|
|
|
|
|
|
function encodeHTMLEntities(str) {
|
|
|
if (typeof str !== 'string') return str;
|
|
|
|
|
|
str = str.replace(/&/g, '&')
|
|
|
.replace(/'/g, ''')
|
|
|
.replace(/"/g, '"')
|
|
|
.replace(/</g, '<')
|
|
|
.replace(/>/g, '>');
|
|
|
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
exports.encodeHTMLEntities = encodeHTMLEntities;
|
|
|
|
|
|
function decodeHTMLEntities(str) {
|
|
|
if (typeof str !== 'string') return str;
|
|
|
|
|
|
str = str.replace(/'|'/g, '\'')
|
|
|
.replace(/"|"/g, '"')
|
|
|
.replace(/&/g, '&')
|
|
|
.replace(/</g, '<')
|
|
|
.replace(/>/g, '>');
|
|
|
|
|
|
return str;
|
|
|
}
|
|
|
|
|
|
exports.decodeHTMLEntities = decodeHTMLEntities;
|
|
|
|
|
|
function clone(obj, options) {
|
|
|
options = options || {};
|
|
|
|
|
|
if (options.deep === undefined) options.deep = false;
|
|
|
if (options.exclude === undefined) options.exclude = [];
|
|
|
|
|
|
function copy(obj, level) {
|
|
|
if (obj == null || typeof obj !== 'object') return obj;
|
|
|
|
|
|
var clone, i;
|
|
|
|
|
|
if (obj instanceof Array) {
|
|
|
clone = [];
|
|
|
|
|
|
for (i = 0; i < obj.length; i++) {
|
|
|
if (!obj.hasOwnProperty(i)) continue;
|
|
|
if (options.deep && level < 4) clone.push(copy(obj[i], level + 1));
|
|
|
else clone.push(obj[i]);
|
|
|
}
|
|
|
} else {
|
|
|
clone = {};
|
|
|
|
|
|
for (i in obj) {
|
|
|
if (!obj.hasOwnProperty(i)) continue;
|
|
|
if (options.exclude[level] !== undefined && options.exclude[level].indexOf(i) !== -1) continue;
|
|
|
if (options.deep && level < 4) clone[i] = copy(obj[i], level + 1);
|
|
|
else clone[i] = obj[i];
|
|
|
}
|
|
|
}
|
|
|
|
|
|
return clone;
|
|
|
}
|
|
|
|
|
|
return copy(obj, 0);
|
|
|
}
|
|
|
|
|
|
exports.clone = clone;
|
|
|
|