util.js 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. function isValidUrl(url) {
  2. return isOnlineUrl(url) || isDataUrl(url);
  3. }
  4. function isOnlineUrl(url) {
  5. return /((ht|f)tp(s?)|cloud):\/\/([^ \\/]*\.)+[^ \\/]*(:[0-9]+)?\/?/.test(url)
  6. }
  7. function isDataUrl(url) {
  8. return /data:image\/(\w+);base64,(.*)/.test(url);
  9. }
  10. /**
  11. * 深度对比两个对象是否一致
  12. * from: https://github.com/epoberezkin/fast-deep-equal
  13. * @param {Object} a 对象a
  14. * @param {Object} b 对象b
  15. * @return {Boolean} 是否相同
  16. */
  17. /* eslint-disable */
  18. function equal(a, b) {
  19. if (a === b) return true;
  20. if (a && b && typeof a == 'object' && typeof b == 'object') {
  21. var arrA = Array.isArray(a)
  22. , arrB = Array.isArray(b)
  23. , i
  24. , length
  25. , key;
  26. if (arrA && arrB) {
  27. length = a.length;
  28. if (length != b.length) return false;
  29. for (i = length; i-- !== 0;)
  30. if (!equal(a[i], b[i])) return false;
  31. return true;
  32. }
  33. if (arrA != arrB) return false;
  34. var dateA = a instanceof Date
  35. , dateB = b instanceof Date;
  36. if (dateA != dateB) return false;
  37. if (dateA && dateB) return a.getTime() == b.getTime();
  38. var regexpA = a instanceof RegExp
  39. , regexpB = b instanceof RegExp;
  40. if (regexpA != regexpB) return false;
  41. if (regexpA && regexpB) return a.toString() == b.toString();
  42. var keys = Object.keys(a);
  43. length = keys.length;
  44. if (length !== Object.keys(b).length)
  45. return false;
  46. for (i = length; i-- !== 0;)
  47. if (!Object.prototype.hasOwnProperty.call(b, keys[i])) return false;
  48. for (i = length; i-- !== 0;) {
  49. key = keys[i];
  50. if (!equal(a[key], b[key])) return false;
  51. }
  52. return true;
  53. }
  54. return a!==a && b!==b;
  55. }
  56. module.exports = {
  57. isValidUrl,
  58. isOnlineUrl,
  59. isDataUrl,
  60. equal
  61. };