| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176 |
- /**
- * @Author: Caven
- * @Date: 2019-12-31 17:58:01
- */
-
- const CHARS = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'.split(
- ''
- )
-
- /**
- * Some of the code borrows from leaflet
- * https://github.com/Leaflet/Leaflet/tree/master/src/core
- */
- class Util {
- /**
- * Generates uuid
- * @param prefix
- * @returns {string}
- */
- static uuid(prefix = 'D') {
- let uuid = []
- uuid[8] = uuid[13] = uuid[18] = uuid[23] = '-'
- uuid[14] = '4'
- let r
- for (let i = 0; i < 36; i++) {
- if (!uuid[i]) {
- r = 0 | (Math.random() * 16)
- uuid[i] = CHARS[i === 19 ? (r & 0x3) | 0x8 : r]
- }
- }
- return prefix + '-' + uuid.join('')
- }
-
- /**
-
- * Merges the properties of the `src` object (or multiple objects) into `dest` object and returns the latter.
- * @param dest
- * @param sources
- * @returns {*}
- */
- static merge(dest, ...sources) {
- let i, j, len, src
- for (j = 0, len = sources.length; j < len; j++) {
- src = sources[j]
- for (i in src) {
- dest[i] = src[i]
- }
- }
- return dest
- }
-
- /**
- * @function splitWords(str: String): String[]
- * Trims and splits the string on whitespace and returns the array of parts.
- * @param {*} str
- */
- static splitWords(str) {
- return this.trim(str).split(/\s+/)
- }
-
- /**
- * @function setOptions(obj: Object, options: Object): Object
- * Merges the given properties to the `options` of the `obj` object, returning the resulting options. See `Class options`.
- * @param {*} obj
- * @param {*} options
- */
- static setOptions(obj, options) {
- if (!obj.hasOwnProperty('options')) {
- obj.options = obj.options ? Object.create(obj.options) : {}
- }
- for (let i in options) {
- obj.options[i] = options[i]
- }
- return obj.options
- }
-
- /**
- * @function formatNum(num: Number, digits?: Number): Number
- * Returns the number `num` rounded to `digits` decimals, or to 6 decimals by default.
- * @param num
- * @param digits
- * @returns {number}
- */
- static formatNum(num, digits) {
- let pow = Math.pow(10, digits === undefined ? 6 : digits)
- return Math.round(num * pow) / pow
- }
-
- /**
- * @function trim(str: String): String
- * Compatibility polyfill for [String.prototype.trim](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/String/Trim)
- * @param {*} str
- */
- static trim(str) {
- return str.trim ? str.trim() : str.replace(/^\s+|\s+$/g, '')
- }
-
- /**
- * Data URI string containing a base64-encoded empty GIF image.
- * Used as a hack to free memory from unused images on WebKit-powered
- * mobile devices (by setting image `src` to this string).
- * @returns {string}
- */
- static emptyImageUrl() {
- return (function() {
- return 'data:image/gif;base64,R0lGODlhAQABAAD/ACwAAAAAAQABAAACADs='
- })()
- }
-
- /**
- * @function checkPosition(position: Object): Boolean
- * Check position for validity
- * @param {*} position
- */
- static checkPosition(position) {
- return (
- position &&
- position.hasOwnProperty('_lng') &&
- position.hasOwnProperty('_lat') &&
- position.hasOwnProperty('_alt')
- )
- }
-
- /**
- * Creates a debounced function that delays invoking `fn` until after `delay`
- * @param fn
- * @param delay
- * @returns {function(): void}
- */
- static debounce(fn, delay) {
- let timer = null
- return function() {
- timer && clearTimeout(timer)
- timer = setTimeout(fn, delay)
- }
- }
-
- /**
- * Creates a throttled function that only invokes `fn` at most once per
- * @param fn
- * @param delay
- * @returns {function(): void}
- */
- static throttle(fn, delay) {
- let valid = true
- return function() {
- if (!valid) {
- return false
- }
- valid = false
- setTimeout(() => {
- fn()
- valid = true
- }, delay)
- }
- }
-
- /**
- *
- * @param dataUrl
- * @returns {Blob}
- */
- static dataURLtoBlob(dataUrl) {
- let arr = dataUrl.split(',')
- let mime = arr[0].match(/:(.*?);/)[1]
- let bStr = atob(arr[1])
- let len = bStr.length
- let u8Arr = new Uint8Array(len)
- while (len--) {
- u8Arr[len] = bStr.charCodeAt(len)
- }
- return new Blob([u8Arr], { type: mime })
- }
- }
-
- export default Util
|