From 6a5175eccaa5e43750aaad38b46dbef8701b2030 Mon Sep 17 00:00:00 2001 From: halldwang Date: Mon, 29 Jun 2020 10:10:00 +0800 Subject: [PATCH] fix: isempty & 1.1.18 --- README.md | 4 --- README_ZH.md | 4 --- dist/bbo.js | 55 ++++++++++++++++++++++++++++++------------ dist/bbo.min.js | 4 +-- dist/bbo.min.js.map | 2 +- package.json | 2 +- src/collection/size.js | 2 +- src/lodash/is_empty.js | 31 ++++++++++++++++++++++-- src/util/version.js | 2 +- 9 files changed, 74 insertions(+), 32 deletions(-) diff --git a/README.md b/README.md index d8e5791..010ee83 100755 --- a/README.md +++ b/README.md @@ -179,10 +179,6 @@ Then a global variable `bbo` is exposed for the entire library: [jsDelivr](https://www.jsdelivr.com/package/npm/bbo) & [UNPKG](https://unpkg.com/bbo/) -```js - -``` - ## Building **node is a dependency, use terminal/iTerm to install it with** diff --git a/README_ZH.md b/README_ZH.md index a76cd78..8e0d0c4 100755 --- a/README_ZH.md +++ b/README_ZH.md @@ -169,10 +169,6 @@ import storage from 'bbo/storage'; [jsDelivr](https://www.jsdelivr.com/package/npm/bbo) & [UNPKG](https://unpkg.com/bbo/) -```js - -``` - ### 开发 **依赖 nodejs, 请使用 terminal/iTerm 安装环境。** diff --git a/dist/bbo.js b/dist/bbo.js index a4b29d5..d8e76df 100644 --- a/dist/bbo.js +++ b/dist/bbo.js @@ -3,7 +3,7 @@ * bbo is a utility library of zero dependencies for javascript. * (c) 2011 - 2020 * https://github.com/tnfe/bbo.git - * version 1.1.17 + * version 1.1.18 */ (function (global, factory) { @@ -96,7 +96,7 @@ throw new TypeError("Invalid attempt to destructure non-iterable instance"); } - var version = '1.1.17'; + var version = '1.1.18'; var globalObject = null; @@ -844,7 +844,42 @@ var isDate = d => d instanceof Date; - var isEmpty = o => Object.keys(o).length === 0; + function isString(str) { + return getTag(str) === '[object String]'; + } + + function isMap(map) { + return getTag(map) === '[object Map]'; + } + + function isSet(set) { + return getTag(set) === '[object Set]'; + } + + function isEmpty(obj) { + if (obj === null) { + return true; + } + + if (isArray(obj)) { + return !obj.length; + } + + if (isString(obj)) { + return !obj.length; + } + + if (isObject(obj)) { + return !Object.keys(obj).length; + } + + if (isMap(obj) || isSet(obj)) { + return !obj.size; + } // other primitive || unidentifed object type + + + return Object(obj) !== obj || !Object.keys(obj).length; + } // https://github.com/mattphillips/deep-object-diff @@ -1105,10 +1140,6 @@ } }; - function isString(str) { - return getTag(str) === '[object String]'; - } - /* eslint-disable no-invalid-this */ /** * load js @@ -2493,14 +2524,6 @@ return !val || !isObject(val) && !isFunction(val); } - function isMap(map) { - return getTag(map) === '[object Map]'; - } - - function isSet(set) { - return getTag(set) === '[object Set]'; - } - /** * Gets the size of `collection` by returning its length for array-like * values or the number of own enumerable string keyed properties for objects. @@ -2511,7 +2534,7 @@ */ function size(collection) { - if (collection === null) { + if (collection === null || collection === undefined) { return 0; } diff --git a/dist/bbo.min.js b/dist/bbo.min.js index 46b2d78..987a5f5 100644 --- a/dist/bbo.min.js +++ b/dist/bbo.min.js @@ -3,8 +3,8 @@ * bbo is a utility library of zero dependencies for javascript. * (c) 2011 - 2020 * https://github.com/tnfe/bbo.git - * version 1.1.17 + * version 1.1.18 */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?module.exports=t():"function"==typeof define&&define.amd?define(t):(e=e||self).bbo=t()}(this,(function(){"use strict";function e(){return(e=Object.assign||function(e){for(var t=1;t0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var n=e.indexOf("rv:");return parseInt(e.substring(n+3,e.indexOf(".",n)),10)}var r=e.indexOf("Edge/");return r>0?parseInt(l.substring(r+5,e.indexOf(".",r)),10):""}function p(e,t,n){e.setAttribute(t,n)}function v(e,t,n,r){var o=document.createElement(e);return t&&p(o,"class",t),n&&(o.innerHTML=n),r&&p(o,"id",r),o}function g(e){return document.getElementById(e)}function m(e,t){return Array.prototype.slice.call(e,t||0)}var y={};var w=()=>{};var b={clear:function(){for(var e in b)"log"!==e&&"clear"!==e&&delete b[e]},log:function(){for(var e in b)"log"!==e&&"clear"!==e&&console.log("bbo.trash:: ",e,b[e])}};function x(e,t,n){e.style[t]=n}var O=(e,t,n)=>{if(document.createEventObject){var r=document.createEventObject();return e.fireEvent("on"+t,r)}var o=document.createEvent(n||"HTMLEvents");o.initEvent(t,!0,!0),e.dispatchEvent(o)};function S(e){var t,n=String(e),r=0;if(0===n.length)return r;for(t=0;tObject.prototype.toString.call(e).slice(8,-1).toLowerCase()===t;function C(e,t,n){if(!j(t,"array"))return!1;for(var r in t)if(n){if(e===t[r])return!0}else if(e===t[r])return!0;return!1}function E(e){return Object.prototype.toString.call(e)}function I(e){return"[object Function]"===E(e)}function A(e){return"[object Object]"===E(e)}function T(e){return"[object Array]"===E(e)}function M(e,t){var n=0;if(T(e))for(;n{if(I(t)){if(!0===t(e,r,o))return n=r,!1}else{if(_(e,t))return n=r,!1;if(A(e)&&A(t)){var i=!0;if(M(t,(t,n)=>i=k(e[n],t)),i)return n=r,!1}}}),n}function R(){this.__events={}}var N=R.prototype;N.on=function(e,t){if(e&&t){if(!function e(t){return!!I(t)||!(!t||!A(t))&&e(t.listener)}(t))throw new TypeError("listener is a function");var n=this.__events,r=n[e]=n[e]||[],o=A(t);if(-1===P(r,t)){var i={listener:t,once:!1};r.push(o?t:i),console.log(r)}return this}},N.once=function(e,t){return this.on(e,{listener:t,once:!0})},N.off=function(e,t){var n=this.__events[e];if(n){for(var r,o=0,i=n.length;oA(e)&&!e.hasOwnProperty?{...e}:e,U=e=>e instanceof Date,$=e=>0===Object.keys(e).length,D=(e,t)=>{if(e===t)return{};if(!A(e)||!A(t))return t;var n=L(e),r=L(t),o=Object.keys(n).reduce((e,t)=>r.hasOwnProperty(t)?e:{...e,[t]:void 0},{});return U(n)||U(r)?n.valueOf()==r.valueOf()?{}:r:Object.keys(r).reduce((e,t)=>{if(!n.hasOwnProperty(t))return{...e,[t]:r[t]};var o=D(n[t],r[t]);return A(o)&&$(o)&&!U(o)?e:{...e,[t]:o}},o)},B=(e,t)=>{if(e===t||!A(e)||!A(t))return{};var n=L(e),r=L(t);return Object.keys(r).reduce((e,t)=>{if(n.hasOwnProperty(t)){var o=B(n[t],r[t]);return A(o)&&$(o)?e:{...e,[t]:o}}return{...e,[t]:r[t]}},{})},F=(e,t)=>{if(e===t||!A(e)||!A(t))return{};var n=L(e),r=L(t);return Object.keys(n).reduce((e,t)=>{if(r.hasOwnProperty(t)){var o=F(n[t],r[t]);return A(o)&&$(o)?e:{...e,[t]:o}}return{...e,[t]:void 0}},{})},q=(e,t)=>{if(e===t)return{};if(!A(e)||!A(t))return t;var n=L(e),r=L(t);return U(n)||U(r)?n.valueOf()==r.valueOf()?{}:r:Object.keys(r).reduce((e,t)=>{if(n.hasOwnProperty(t)){var o=q(n[t],r[t]);return A(o)&&$(o)&&!U(o)?e:{...e,[t]:o}}return e},{})};function z(e,t){var n=this;n.img=new Image;var r=function(){a(),console.info("onReadyStateChange"),t(n,"onReadyStateChange")},o=function(){console.info("onError"),a(),t(n,"onError")},i=function(){a(),t(n,"onload")},a=function(){n.unbind("load",i),n.unbind("readystatechange",r),n.unbind("error",o)};this.start=function(){this.bind("load",i),this.bind("readystatechange",r),this.bind("error",o),this.img.src=e,n.img.complete&&(a(),t(this,"onload"))}}function J(e){return"[object String]"===E(e)}z.prototype.bind=function(e,t){this.img.addEventListener?this.img.addEventListener(e,t,!1):this.img.attachEvent&&this.img.attachEvent("on"+e,t)},z.prototype.unbind=function(e,t){this.img.removeEventListener?this.img.removeEventListener(e,t,!1):this.img.detachEvent&&this.img.detachEvent("on"+e,t)};var W={urls:{},logs:{}},H=function(e,t){for(var n=0;n=e.length&&t&&t()}},G=function(e,t){var n=v("script");p(n,"type","text/javascript"),p(n,"src",e),p(n,"charset","utf-8"),document.getElementsByTagName("head")[0].appendChild(n),/msie/.test(l("l"))?n.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||t()}:/gecko/.test(l("l"))?n.onload=function(){t()}:setTimeout((function(){t()}),50)};var V=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:32,t="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",n="",r=0;r{if(!e)return null;if("string"!=typeof e)return j(e.json,"function")?e.json():e;try{return JSON.parse(e)}catch(t){return new Function("return "+("("+e+")"))()}};var Z=(e,t,n)=>{var r=n&&n.raw?t:encodeURIComponent(t),o=encodeURIComponent(e)+"="+r;if(n){if(n.days){var i=new Date,a=24*n.days*3600*1e3;i.setTime(i.getTime()+a),o+="; expires="+i.toGMTString()}else if(n.hour){var u=new Date,c=3600*n.hour*1e3;u.setTime(u.getTime()+c),o+="; expires="+u.toGMTString()}else{var s=new Date;s.setTime(s.getTime()+31536e7),o+="; expires="+s.toGMTString()}n.path&&(o+="; path="+n.path),n.domain&&(o+="; domain="+n.domain),n.secure&&(o+="; true")}document.cookie=o},Q=e=>{Z(e,"",{hour:-1})};function K(e,t){return-1!==String(e).indexOf(t)}var Y=window.localStorage,ee=window.sessionStorage;class te{constructor(e){var t=e.type,n=void 0===t?"local":t,r=e.prefix,o=void 0===r?"bbo.storage":r,i=e.message,a=void 0===i?{setItem:"write in",getItem:"read",removeAll:"remove all",removeItem:"remove item"}:i;this.prefix=o,this.type=n,this.message=a,"local"===n?this._storage=Y:"session"===n&&(this._storage=ee)}doItem(e,t){try{if("function"==typeof e)return e()}catch(e){return this._warn(t),null}return!0}setItem(e,t){"object"==typeof e?Object.keys(e).forEach((t,n)=>{this.doItem(()=>this._storage.setItem(`${this.prefix}.${t}`,JSON.stringify(e[t])),"setItem")}):this.doItem(()=>this._storage.setItem(`${this.prefix}.${e}`,JSON.stringify(t)),"setItem")}has(){for(var e=arguments.length,t=new Array(e),n=0;nthis._storage.getItem(`${this.prefix}.${e}`))}get(){for(var e={},t=arguments.length,n=new Array(t),r=0;r{if("null"!==`${this._storage.getItem(`${this.prefix}.${t}`)}`)try{e[t]=JSON.parse(this._storage.getItem(`${this.prefix}.${t}`))}catch(e){console.warn(this._warn("getItem"))}}),e}getItem(e){return this.doItem(()=>JSON.parse(this._storage.getItem(`${this.prefix}.${e}`)),"getItem")}removeAll(){Object.keys(this._storage).forEach(e=>{K(e,this.prefix)&&this._remove(`${e}`)})}removeItem(){for(var e=arguments.length,t=new Array(e),n=0;nthis.doItem(()=>this._storage.removeItem(`${this.prefix}.${e}`),"removeItem"))}_warn(e){var t=this.message;console.warn(`Unable to ${t[e]||""} ${this.type} Storage`)}_remove(e){this.doItem(()=>this._storage.removeItem(`${e}`),"removeItem")}}var ne=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.href,n=t.split("?");if(n.length>=2){for(var r=encodeURIComponent(e)+"=",o=n[1].split(/[&;]/g),i=o.length;i-- >0;)-1!==o[i].lastIndexOf(r,0)&&o.splice(i,1);return n[0]+(o.length>0?"?"+o.join("&"):"")}return t},re=e=>Array.isArray(e)?e.map((function(e){return e.name+"="+e.value})).join("&"):re(oe(e)),oe=e=>{var t=[];return Object.keys(e).forEach((function(n){Array.isArray(e[n])?t=t.concat(e[n].map((function(e){return{name:n,value:e}}))):t.push({name:n,value:e[n]})})),t};function ie(e){var t=parseFloat(e);return t<10?"0"+t:t}var ae=setTimeout;function ue(e,t){var n=t.useCachedSetTimeout?ae:setTimeout;return new Promise(t=>{n(t,e)})}var ce=(e,t,n)=>{var r=Math.random()*(t-e)+e;return n?Math.floor(r):r};var se={enabledMaxSize:!1,enabledNatural:!1,ratio:1},le={enabledType:!1};function fe(e){if(I(e))return e;var t=T(e)?[]:{};for(var n in e){var r=e[n],o={}.toString.call(r).slice(8,-1);t[n]="Array"==o||"Object"==o?fe(r):"Date"==o?new Date(r.getTime()):"RegExp"==o?RegExp(r.source,de(r)):r}return t}function de(e){if("string"==typeof e.source.flags)return e.source.flags;var t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}function he(e){return"[object Boolean]"===E(e)}function pe(e){return T(e)||A(e)}function ve(e){return!e||!A(e)&&!I(e)}function ge(e){return"[object Map]"===E(e)}function me(e){return"[object Set]"===E(e)}function ye(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function we(e){return"[object Number]"===E(e)}function be(e){return"[object Symbol]"===E(e)}var xe=".".charCodeAt(0),Oe=/\\(\\)?/g,Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g;function je(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}var Ce={version:"1.1.17",noConflict:function(){return this===c.bbo&&(c.bbo=s),this},ua:l,isIos:f,isIOS:f,isiPhone:function(){return/iPhone/.test(l())},isIPad:function(){return/iPad/.test(l())},isAndroid:function(){return l("l").indexOf("android")>-1},isMobile:d,isPC:function(){return!d()},isWeixin:function(){return/MicroMessenger/i.test(l("l"))},isNewsApp:function(){return/qqnews/.test(l())},isQQ:function(){return/qq\//.test(l())},mqqbrowser:function(){return/mqqbrowser\//.test(l())},isTenvideo:function(){return/qqlivebrowser/.test(l("l"))},isWeiShi:function(){return/weishi/.test(l("l"))},isIphoneXmodel:function(){if("undefined"!=typeof window&&window){var e=window,t=e.devicePixelRatio,n=e.screen,r=n.width,o=n.height;return[{devicePixelRatio:3,width:375,height:812},{devicePixelRatio:3,width:414,height:896},{devicePixelRatio:2,width:414,height:896}].some(e=>e.devicePixelRatio===t&&e.width===r&&e.height===o)}return!1},ieVersion:h,isIE:function(){return h()>0},log:function(e,t){var n=g("_bbo_log");if(null===n&&(p(n=v("div"),"id","_bbo_log"),p("style","position:fixed;left:0;top:0;z-index:9999;padding:4px;"),document.body.appendChild(n)),t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n.style[r]=t[r]);n.innerHTML=e},logs:function(){if(window.console&&window.console.log){var e=String(arguments[0]),t=parseInt(e.split("&")[1],10)||10,n=y;n[e]||(n[e]={}),n[e].once||(n[e].once=1),n[e].once<=t&&(console.log.apply(console,m(arguments,1)),n[e].once++)}},removeConsole:function(e){try{window.console||(window.console={}),window.console.log=window.console.info=window.console.dir=window.console.warn=window.console.trace=w,"clear"===e&&window.console.clear&&window.console.clear()}catch(e){}},args:m,trash:b,noop:w,merge:function(){for(var e=arguments.length,t=new Array(e),n=0;nObject.keys(t).reduce((n,r)=>(e[r]=e.hasOwnProperty(r)?[].concat(e[r]).concat(t[r]):t[r],e),{}),{})},over:function(){for(var e=arguments.length,t=new Array(e),n=0;ne.apply(null,n))}},call:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;rt[e].apply(t,n)},trigger:O,stopPropagation:e=>{var t=e||window.event;t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},g:g,gc:function(e){return document.getElementsByClassName(e)},c:v,query:function(e){return document.querySelector(e)},show:function(){for(var e=arguments.length,t=new Array(e),n=0;n{e.style.display=""})},hide:function(){for(var e=arguments.length,t=new Array(e),n=0;n{e.style.display="none"})},elementContains:(e,t)=>e!==t&&e.contains(t),getStyle:(e,t)=>getComputedStyle(e)[t],setStyle:x,attr:p,uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},hash:S,judge:C,judgment:C,getType:e=>void 0===e?"undefined":null===e?"null":e.constructor.name.toLowerCase(),isTypeof:j,construct:function(){var e=arguments[0];return new(Function.prototype.bind.apply(e,arguments))},paramsName:function(e){return/\(\s*([\s\S]*?)\s*\)/.exec(e.toString())[1].split(/\s*,\s*/)},eventEmitter:R,properObject:L,objectDiff:D,addedDiff:B,deletedDiff:F,updatedDiff:q,detailedDiff:(e,t)=>({added:B(e,t),deleted:F(e,t),updated:q(e,t)}),loadImages:function(e){var t,n=0,r=0,o=null,i=0,a=0,u=e.data||[],c=e.step||function(){},s=e.complete||function(){},l=e.needOneStep||!1,f=e.path||!1;if("object"!=typeof u||0===u.length)return c(100),!1;if(t=u.length,f)for(var d=t-1;d>-1;d--)u[d]=f+u[d];var h=function(){i++,c(i),i{function e(){for(var e=0,t={};e1){var u=e({path:"/"},r.defaults,i);if("number"==typeof u.expires){var c=new Date;c.setMilliseconds(c.getMilliseconds()+864e5*u.expires),u.expires=c}var s=o;try{a=JSON.stringify(s),/^[\{\[]/.test(a)&&(s=a)}catch(e){}s=n.write?n.write(s,t):encodeURIComponent(String(s)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);var l=encodeURIComponent(String(t)),f=l.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),d=f.replace(/[\(\)]/g,escape),h=document.cookie=[d,"=",o,i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("");return h}t||(a={});for(var p=document.cookie?document.cookie.split("; "):[],v=/(%[0-9A-Z]{2})+/g,g=0;g{for(var t=encodeURIComponent(e)+"=",n=document.cookie.split(";"),r=0;re.split(";").map(e=>e.split("=")).reduce((e,t)=>(e[decodeURIComponent(t[0].trim())]=decodeURIComponent(t[1].trim()),e),{}),storage:e=>{var t=e.type,n=e.prefix;return new te({type:t,prefix:n})},open:e=>{var t="_bbo_open_proxy",n=g(t)||v("a",t,"",t);x(n,"display","none"),p(n,"href",e),p(n,"target","_blank"),n.parentNode||document.body.appendChild(n),O(n,"click","MouseEvents")},getUrlParam:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.href;e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)"),r=n.exec(t);return r?r[2]?decodeURIComponent(r[2].replace(/\+/g," ")):"":null},setUrlParam:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.location.href,r=new RegExp("([?|&])"+e+"=.*?(&|#|$)","i");if(n.match(r))return n.replace(r,"$1"+e+"="+encodeURIComponent(t)+"$2");var o="";-1!==n.indexOf("#")&&(o=n.replace(/.*#/,"#"),n.replace(/#.*/,""));var i=-1!==n.indexOf("?")?"&":"?";return n+i+e+"="+encodeURIComponent(t)+o},deleteUrlParam:ne,delUrlParam:ne,objectParam:re,httpGet:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:console.error,r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=()=>t(r.responseText),r.onerror=()=>n(r),r.send()},httpPost:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:console.error,o=new XMLHttpRequest;o.open("POST",e,!0),o.setRequestHeader("Content-type","application/json; charset=utf-8"),o.onload=()=>n(o.responseText),o.onerror=()=>r(o),o.send(t)},setTimesout:function(){var e=arguments[0],t=void 0===arguments[1]?0:parseFloat(arguments[1]),n=void 0===arguments[2]?1:parseInt(arguments[2],10),r=arguments.length>3?m(arguments,3):null,o={index:0,times:n,over:!1},i=setInterval((function(){o.index++,o.index>n?clearInterval(i):(o.index===n&&(o.over=!0),e.apply(o,r))}),t);return i},clearTimesout:function(e){clearInterval(e)},getDate:(e,t)=>{var n=new Date,r=n.getDate(),o=n.getMonth()+1,i=n.getFullYear(),a=n.getHours(),u=n.getMinutes(),c=n.getSeconds();r=ie(r);var s=e||"/",l=t||":";return i+s+(o=ie(o))+s+r+" "+(a=ie(a))+l+(u=ie(u))+l+(c=ie(c))},formatPassTime:e=>{var t=Date.parse(new Date)-e,n=parseInt(t/864e5,10),r=parseInt(t/36e5,10),o=parseInt(t/6e4,10),i=parseInt(n/30,10),a=parseInt(i/12,10);return a?a+"年前":i?i+"个月前":n?n+"天前":r?r+"小时前":o?o+"分钟前":"刚刚"},formatRemainTime:e=>{var t=new Date,n=new Date(e).getTime()-t.getTime(),r=0,o=0,i=0,a=0;return n>=0&&(r=Math.floor(n/1e3/3600/24),o=Math.floor(n/1e3/60/60%24),i=Math.floor(n/1e3/60%60),a=Math.floor(n/1e3%60)),r+"天 "+o+"小时 "+i+"分钟 "+a+"秒"},formatDuration:e=>{e<0&&(e=-e);var n={day:Math.floor(e/864e5),hour:Math.floor(e/36e5)%24,minute:Math.floor(e/6e4)%60,second:Math.floor(e/1e3)%60,millisecond:Math.floor(e)%1e3};return Object.entries(n).filter(e=>0!==e[1]).map(e=>{var n=t(e,2),r=n[0],o=n[1];return`${o} ${r}${1!==o?"s":""}`}).join(", ")},sleep:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.useCachedSetTimeout,r=ue(e,{useCachedSetTimeout:n});function o(e){return r.then(()=>e)}return o.then=function(){return r.then.apply(r,arguments)},o.catch=Promise.resolve().catch,o},fill0:ie,floor:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Math.floor(e*Math.pow(10,t))/Math.pow(10,t)},chainAsync:e=>{var t=0,n=e[e.length-1],r=()=>{var o=e[t++];o===n?o():o(r)};r()},numberFormat:(e,t,n,r)=>{var o=String(e).replace(/[^0-9+\-Ee.]/g,""),i=t,a=isFinite(Number(o))?Number(o):0,u=isFinite(Number(i))?Math.abs(i):0,c=void 0===r?",":r,s=void 0===n?".":n,l="";return(l=(u?function(e,t){if(-1===String(e).indexOf("e"))return Number(Math.round(e+"e+"+t)+"e-"+t);var n=String(e).split("e"),r="";return Number(n[1])+t>0&&(r="+"),Number(Math.round(Number(n[0])+"e"+r+(Number(n[1])+t))+"e-"+t).toFixed(t)}(a,u).toString():String(Math.round(a))).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,c)),(l[1]||"").length{function e(e,t){return e.target.tagName!==t.toUpperCase()&&e.target.tagName!==t.toLowerCase()}function t(t){e(t,"input")&&e(t,"textarea")&&e(t,"select")&&e(t,"menus")&&t.preventDefault()}document.addEventListener("touchmove",(function(e){e.preventDefault()}),!1),document.addEventListener("touchstart",t,!1),document.addEventListener("touchend",t,!1)},copyToClipboard:function(e){var t=document.createElement("textarea");t.value=e,p(t,"readonly",""),x(t,"position","absolute"),x(t,"left","-9999px"),document.body.appendChild(t);var n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);t.select(),document.execCommand("copy"),document.body.removeChild(t),n&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n))},checkImageSize:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:se,n=t.enabledMaxSize,r=t.enabledNatural,o=t.ratio;return new Promise((t,i)=>{if(e instanceof File){var a=new FileReader;a.onload=()=>{u(a.result)},a.readAsDataURL(e)}else J(e)&&u(e);function u(e){var a=new Image;a.src=e,a.onload=()=>{var e=a.width/o,i=a.height/o;if(n){var u=Math.min(e,375);i*=u/e,e=u}r&&(e=a.naturalWidth/o,i=a.naturalHeight/o),t({width:e>>=0,height:i>>=0})},a.onerror=e=>{i(e)}}})},imageOptimization:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.9,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.maxWidth,o=void 0===r?1920:r,i=n.mimeType;return new Promise((n,r)=>{if(e instanceof File){var a=new FileReader;a.onload=function(){u(this.result)},a.readAsDataURL(e)}else J(e)&&u(e);function u(a){var u=a.match(/data:([^;,]+)/);if(Array.isArray(u)){if("image/gif"===(i||u[1]))return n(e);var c=new Image;c.src=a,c.onload=function(){var e=this.naturalWidth,r=this.naturalHeight;e>o&&(r=Math.round(o*r/e),e=o);var a=document.createElement("canvas");a.width=e,a.height=r,a.getContext("2d").drawImage(this,0,0,e,r),a.toBlob(e=>{n(e)},i||u[1],t)}}else r(new Error("Non-picture type Data URLs"))}})},toDataUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:le,n=t.enabledType;return new Promise((t,r)=>{try{var o=new XMLHttpRequest;o.onload=()=>{var e=new FileReader;e.onloadend=()=>{if(n){var r=new Image;r.crossOrigin="Anonymous",r.src=e.result,r.onload=()=>{t(r)}}else t(e.result)},e.readAsDataURL(o.response)},o.open("GET",e,!0),o.responseType="blob",o.send()}catch(e){r(e)}})},clone:fe,deepClone:fe,values:function(e){var t=[];if(T(e))return e.slice(0);if(A(e)||I(e)){for(var n=Object.keys(e),r=n.length,o=0;o{if(I(t)){if(!0===t(e,r,o))return n=e,!1}else{if(_(e,t))return n=e,!1;if(A(e)&&A(t)){var i=!0;if(M(t,(t,n)=>i=k(e[n],t)),i)return n=e,!1}}}),n},toPath:function(e){return J(e)?(n=[],(t=e).charCodeAt(0)===xe&&n.push(""),t.replace(Se,(e,t,r,o)=>{var i=e;r?i=o.replace(Oe,"$1"):t&&(i=t.trim()),n.push(i)}),n):[];var t,n},get:function(e,t,n){if(!e)return n;var r,o;if(Array.isArray(t)&&(r=t.slice(0)),J(t)&&(r=t.split(".")),be(t)&&(r=[t]),!T(r))throw new Error("props arg must be an array, a string or a symbol");for(;r.length;){if(o=r.shift(),!e)return n;if(void 0===(e=e[o]))return n}return e},debounce:function(e,t,n){var r;return function(){if(!t)return e.apply(this,arguments);var o=this,i=arguments,a=n&&!r;return clearTimeout(r),r=setTimeout((function(){if(r=null,!a)return e.apply(o,i)}),t),a?e.apply(this,arguments):void 0}},throttle:function(e,t,n){var r=!1,o=!1;return function(){o=n&&!r;var i=this,a=arguments;if(r||(r=!0,setTimeout((function(){if(r=!1,!n)return e.apply(i,a)}),t)),o)return o=!1,e.apply(this,arguments)}},pick:(e,t)=>t.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{}),omit:(e,t)=>Object.keys(e).filter(e=>!t.includes(e)).reduce((t,n)=>(t[n]=e[n],t),{}),trim:function(e){return $(e)?e:e.replace(/(^\s*)|(\s*$)/g,"")},fillZero:function(e,t){return(new Array(t).join("0")+e).slice(-t)},longUnique:function(e){for(var t={},n=0;n]*>(\S\s*?)<\/script>/gim,"").replace(/<[^>]+>/g,"")},capitalize:function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},deCapitalize:function(e){var t=n(e),r=t[0],o=t.slice(1),i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r.toLowerCase()+(i?o.join("").toUpperCase():o.join(""))},isAbsoluteURL:e=>/^[a-z][a-z0-9+.-]*:/.test(e),mapString:(e,t)=>e.split("").map((n,r)=>t(n,r,e)).join(""),mask:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"*";return`${e}`.slice(-t).padStart(`${e}`.length,n)},splitLines:function(e){e.split(/\r?\n/)},camelize:function(e){return e.indexOf("-")<0&&e.indexOf("_")<0?e:e.replace(/[-_][^-_]/g,(function(e){return e.charAt(1).toUpperCase()}))},underscored:je,dasherize:function(e){return je(e).replace(/_/g,"-")},truncate:(e,t)=>e.length>t?e.slice(0,t>3?t-3:t)+"...":e,byteSize:function(e){return new Blob([e]).size},byteLen:function(e,t){var n,r,o,i=0,a=t?t.toLowerCase():"";if("utf-16"===a||"utf16"===a)for(r=0,o=e.length;r0&&(t%2==1&&(r+=n),1!==t);)n+=n,t>>=1;return r},endsWith:function(e,t,n){var r=e.slice(-t.length);return n?r.toLowerCase()===t.toLowerCase():r===t},startsWith:function(e,t,n){var r=e.slice(0,t.length);return n?r.toLowerCase()===t.toLowerCase():r===t},containsWith:K,xssFilter:function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},effortIndex:function(e,t){return String(e).indexOf(t)},capwords:function(e){return String(e).replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,(function(e){return e.toUpperCase()}))},unique:e=>r(new Set(e)),uniqueBy:(e,t)=>e.reduce((e,n)=>(e.some(e=>t(n,e))||e.push(n),e),[]),uniqueFrom:function(t,n){return Object.values(t.reduce((t,r)=>e(t,{[r[n]]:r}),{}))},random:e=>e[Math.floor(Math.random()*e.length)],randomSize:function(e){for(var t=n(e),r=t.slice(0),o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=r.length;i;){var a=Math.floor(Math.random()*i--),u=[r[a],r[i]];r[i]=u[0],r[a]=u[1]}return r.slice(0,o)},shuffle:function(e){for(var t=n(e).slice(0),r=t.length;r;){var o=Math.floor(Math.random()*r--),i=[t[o],t[r]];t[r]=i[0],t[o]=i[1]}return t},contains:function(e,t){return e.indexOf(t)>-1},includesAll:(e,t)=>t.every(t=>e.includes(t)),includesAny:(e,t)=>t.some(t=>e.includes(t)),removeAt:function(e,t){return!!e.splice(t,1).length},remove:function(e,t){if(!T(e)||!T(t))throw new Error("expected both arguments to be arrays");for(var n=[],r=e.length,o=0;oe.filter(Boolean),pluck:function(e,t){var n,r=[];return e.forEach((function(e){null!==(n=e[t])&&r.push(n)})),r},union:(e,t)=>Array.from(new Set([].concat(r(e),r(t)))),unionBy:(e,t,n)=>{var o=new Set(e.map(n));return Array.from(new Set([].concat(r(e),r(t.filter(e=>!o.has(n(e)))))))},unionWith:(e,t,n)=>{Array.from(new Set([].concat(r(e),r(t.filter(t=>-1===e.findIndex(e=>n(t,e)))))))},intersect:function(e,t){var n=new Set(t);return e.filter(e=>n.has(e))},intersectBy:function(e,t,n){var r=new Set(t.map(n));return e.filter(e=>r.has(n(e)))},difference:function(e,t){var n=new Set(t);return e.filter(e=>!n.has(e))},differenceBy:function(e,t,n){var r=new Set(t.map(n));return e.map(n).filter(e=>!r.has(e))},max:function(e){return Math.max.apply(0,e)},min:function(e){return Math.min.apply(0,e)},equal:function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(var n=0;ne.every(t=>t===e[0]),all:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Boolean;return e.every(t)},any:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Boolean;return e.some(t)},chunk:(e,t)=>{Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,r*t+t))},countBy:(e,t)=>{e.map("function"==typeof t?t:e=>e[t]).reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})},countOccurrences:(e,t)=>{e.reduce((e,n)=>n===t?e+1:e,0)},drop:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return e.slice(t)},dropRight:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return e.slice(0,-t)},dropWhile:function(e,t){for(var n=e;n.length>0&&!t(n[0]);)n=n.slice(1);return n},dropRightWhile:function(e,t){for(var n=e.length;n--&&!t(e[n]););return e.slice(0,n+1)},column:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null!==t&&(A(t)||T(t))){var o=[];if(A(t)){var i=[];for(var a of Object.keys(t))i.push(t[a]);t=i}if(T(t))for(var u of t.keys())r&&t[u][r]?o[t[u][r]]=n?t[u][n]:t[u]:n?o.push(t[u][n]):o.push(t[u]);return e({},o)}},search:function(e,t,n){var r=!!n,o="",i=e;if("object"==typeof i&&i.exec){if(!r){var a="i"+(i.global?"g":"")+(i.multiline?"m":"")+(i.sticky?"y":"");i=new RegExp(i.source,a)}for(o in t)if(t.hasOwnProperty(o)&&i.test(t[o]))return o;return!1}for(o in t)if(t.hasOwnProperty(o)&&(r&&t[o]===e||!r&&t[o]==e))return o;return!1},split:function(e,t){if(!T(e))throw new Error("expected an array for the first argument");if(null!==t&&!we(t))throw new Error("expected a number or null for the second argument");t=null!==t?t:e.length;for(var n=e.length,r=[],o=0;ot=>e(t),indexBy:function(e,t){if(!T(e))throw new Error("expected an array for first argument");if(!J(t))throw new Error("expected a string for second argument");for(var n={},r=e.length,o=0;o0)return parseInt(e.substring(t+5,e.indexOf(".",t)),10);if(e.indexOf("Trident/")>0){var n=e.indexOf("rv:");return parseInt(e.substring(n+3,e.indexOf(".",n)),10)}var r=e.indexOf("Edge/");return r>0?parseInt(l.substring(r+5,e.indexOf(".",r)),10):""}function p(e,t,n){e.setAttribute(t,n)}function v(e,t,n,r){var o=document.createElement(e);return t&&p(o,"class",t),n&&(o.innerHTML=n),r&&p(o,"id",r),o}function g(e){return document.getElementById(e)}function m(e,t){return Array.prototype.slice.call(e,t||0)}var y={};var w=()=>{};var b={clear:function(){for(var e in b)"log"!==e&&"clear"!==e&&delete b[e]},log:function(){for(var e in b)"log"!==e&&"clear"!==e&&console.log("bbo.trash:: ",e,b[e])}};function x(e,t,n){e.style[t]=n}var O=(e,t,n)=>{if(document.createEventObject){var r=document.createEventObject();return e.fireEvent("on"+t,r)}var o=document.createEvent(n||"HTMLEvents");o.initEvent(t,!0,!0),e.dispatchEvent(o)};function S(e){var t,n=String(e),r=0;if(0===n.length)return r;for(t=0;tObject.prototype.toString.call(e).slice(8,-1).toLowerCase()===t;function C(e,t,n){if(!j(t,"array"))return!1;for(var r in t)if(n){if(e===t[r])return!0}else if(e===t[r])return!0;return!1}function E(e){return Object.prototype.toString.call(e)}function I(e){return"[object Function]"===E(e)}function A(e){return"[object Object]"===E(e)}function T(e){return"[object Array]"===E(e)}function M(e,t){var n=0;if(T(e))for(;n{if(I(t)){if(!0===t(e,r,o))return n=r,!1}else{if(_(e,t))return n=r,!1;if(A(e)&&A(t)){var i=!0;if(M(t,(t,n)=>i=k(e[n],t)),i)return n=r,!1}}}),n}function R(){this.__events={}}var N=R.prototype;N.on=function(e,t){if(e&&t){if(!function e(t){return!!I(t)||!(!t||!A(t))&&e(t.listener)}(t))throw new TypeError("listener is a function");var n=this.__events,r=n[e]=n[e]||[],o=A(t);if(-1===P(r,t)){var i={listener:t,once:!1};r.push(o?t:i),console.log(r)}return this}},N.once=function(e,t){return this.on(e,{listener:t,once:!0})},N.off=function(e,t){var n=this.__events[e];if(n){for(var r,o=0,i=n.length;oA(e)&&!e.hasOwnProperty?{...e}:e,U=e=>e instanceof Date;function $(e){return"[object String]"===E(e)}function D(e){return"[object Map]"===E(e)}function B(e){return"[object Set]"===E(e)}function F(e){return null===e||(T(e)?!e.length:$(e)?!e.length:A(e)?!Object.keys(e).length:D(e)||B(e)?!e.size:Object(e)!==e||!Object.keys(e).length)}var q=(e,t)=>{if(e===t)return{};if(!A(e)||!A(t))return t;var n=L(e),r=L(t),o=Object.keys(n).reduce((e,t)=>r.hasOwnProperty(t)?e:{...e,[t]:void 0},{});return U(n)||U(r)?n.valueOf()==r.valueOf()?{}:r:Object.keys(r).reduce((e,t)=>{if(!n.hasOwnProperty(t))return{...e,[t]:r[t]};var o=q(n[t],r[t]);return A(o)&&F(o)&&!U(o)?e:{...e,[t]:o}},o)},z=(e,t)=>{if(e===t||!A(e)||!A(t))return{};var n=L(e),r=L(t);return Object.keys(r).reduce((e,t)=>{if(n.hasOwnProperty(t)){var o=z(n[t],r[t]);return A(o)&&F(o)?e:{...e,[t]:o}}return{...e,[t]:r[t]}},{})},J=(e,t)=>{if(e===t||!A(e)||!A(t))return{};var n=L(e),r=L(t);return Object.keys(n).reduce((e,t)=>{if(r.hasOwnProperty(t)){var o=J(n[t],r[t]);return A(o)&&F(o)?e:{...e,[t]:o}}return{...e,[t]:void 0}},{})},W=(e,t)=>{if(e===t)return{};if(!A(e)||!A(t))return t;var n=L(e),r=L(t);return U(n)||U(r)?n.valueOf()==r.valueOf()?{}:r:Object.keys(r).reduce((e,t)=>{if(n.hasOwnProperty(t)){var o=W(n[t],r[t]);return A(o)&&F(o)&&!U(o)?e:{...e,[t]:o}}return e},{})};function H(e,t){var n=this;n.img=new Image;var r=function(){a(),console.info("onReadyStateChange"),t(n,"onReadyStateChange")},o=function(){console.info("onError"),a(),t(n,"onError")},i=function(){a(),t(n,"onload")},a=function(){n.unbind("load",i),n.unbind("readystatechange",r),n.unbind("error",o)};this.start=function(){this.bind("load",i),this.bind("readystatechange",r),this.bind("error",o),this.img.src=e,n.img.complete&&(a(),t(this,"onload"))}}H.prototype.bind=function(e,t){this.img.addEventListener?this.img.addEventListener(e,t,!1):this.img.attachEvent&&this.img.attachEvent("on"+e,t)},H.prototype.unbind=function(e,t){this.img.removeEventListener?this.img.removeEventListener(e,t,!1):this.img.detachEvent&&this.img.detachEvent("on"+e,t)};var G={urls:{},logs:{}},V=function(e,t){for(var n=0;n=e.length&&t&&t()}},X=function(e,t){var n=v("script");p(n,"type","text/javascript"),p(n,"src",e),p(n,"charset","utf-8"),document.getElementsByTagName("head")[0].appendChild(n),/msie/.test(l("l"))?n.onreadystatechange=function(){"loaded"!==this.readyState&&"complete"!==this.readyState||t()}:/gecko/.test(l("l"))?n.onload=function(){t()}:setTimeout((function(){t()}),50)};var Z=function(){for(var e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:32,t="ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678",n="",r=0;r{if(!e)return null;if("string"!=typeof e)return j(e.json,"function")?e.json():e;try{return JSON.parse(e)}catch(t){return new Function("return "+("("+e+")"))()}};var K=(e,t,n)=>{var r=n&&n.raw?t:encodeURIComponent(t),o=encodeURIComponent(e)+"="+r;if(n){if(n.days){var i=new Date,a=24*n.days*3600*1e3;i.setTime(i.getTime()+a),o+="; expires="+i.toGMTString()}else if(n.hour){var u=new Date,c=3600*n.hour*1e3;u.setTime(u.getTime()+c),o+="; expires="+u.toGMTString()}else{var s=new Date;s.setTime(s.getTime()+31536e7),o+="; expires="+s.toGMTString()}n.path&&(o+="; path="+n.path),n.domain&&(o+="; domain="+n.domain),n.secure&&(o+="; true")}document.cookie=o},Y=e=>{K(e,"",{hour:-1})};function ee(e,t){return-1!==String(e).indexOf(t)}var te=window.localStorage,ne=window.sessionStorage;class re{constructor(e){var t=e.type,n=void 0===t?"local":t,r=e.prefix,o=void 0===r?"bbo.storage":r,i=e.message,a=void 0===i?{setItem:"write in",getItem:"read",removeAll:"remove all",removeItem:"remove item"}:i;this.prefix=o,this.type=n,this.message=a,"local"===n?this._storage=te:"session"===n&&(this._storage=ne)}doItem(e,t){try{if("function"==typeof e)return e()}catch(e){return this._warn(t),null}return!0}setItem(e,t){"object"==typeof e?Object.keys(e).forEach((t,n)=>{this.doItem(()=>this._storage.setItem(`${this.prefix}.${t}`,JSON.stringify(e[t])),"setItem")}):this.doItem(()=>this._storage.setItem(`${this.prefix}.${e}`,JSON.stringify(t)),"setItem")}has(){for(var e=arguments.length,t=new Array(e),n=0;nthis._storage.getItem(`${this.prefix}.${e}`))}get(){for(var e={},t=arguments.length,n=new Array(t),r=0;r{if("null"!==`${this._storage.getItem(`${this.prefix}.${t}`)}`)try{e[t]=JSON.parse(this._storage.getItem(`${this.prefix}.${t}`))}catch(e){console.warn(this._warn("getItem"))}}),e}getItem(e){return this.doItem(()=>JSON.parse(this._storage.getItem(`${this.prefix}.${e}`)),"getItem")}removeAll(){Object.keys(this._storage).forEach(e=>{ee(e,this.prefix)&&this._remove(`${e}`)})}removeItem(){for(var e=arguments.length,t=new Array(e),n=0;nthis.doItem(()=>this._storage.removeItem(`${this.prefix}.${e}`),"removeItem"))}_warn(e){var t=this.message;console.warn(`Unable to ${t[e]||""} ${this.type} Storage`)}_remove(e){this.doItem(()=>this._storage.removeItem(`${e}`),"removeItem")}}var oe=function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.href,n=t.split("?");if(n.length>=2){for(var r=encodeURIComponent(e)+"=",o=n[1].split(/[&;]/g),i=o.length;i-- >0;)-1!==o[i].lastIndexOf(r,0)&&o.splice(i,1);return n[0]+(o.length>0?"?"+o.join("&"):"")}return t},ie=e=>Array.isArray(e)?e.map((function(e){return e.name+"="+e.value})).join("&"):ie(ae(e)),ae=e=>{var t=[];return Object.keys(e).forEach((function(n){Array.isArray(e[n])?t=t.concat(e[n].map((function(e){return{name:n,value:e}}))):t.push({name:n,value:e[n]})})),t};function ue(e){var t=parseFloat(e);return t<10?"0"+t:t}var ce=setTimeout;function se(e,t){var n=t.useCachedSetTimeout?ce:setTimeout;return new Promise(t=>{n(t,e)})}var le=(e,t,n)=>{var r=Math.random()*(t-e)+e;return n?Math.floor(r):r};var fe={enabledMaxSize:!1,enabledNatural:!1,ratio:1},de={enabledType:!1};function he(e){if(I(e))return e;var t=T(e)?[]:{};for(var n in e){var r=e[n],o={}.toString.call(r).slice(8,-1);t[n]="Array"==o||"Object"==o?he(r):"Date"==o?new Date(r.getTime()):"RegExp"==o?RegExp(r.source,pe(r)):r}return t}function pe(e){if("string"==typeof e.source.flags)return e.source.flags;var t=[];return e.global&&t.push("g"),e.ignoreCase&&t.push("i"),e.multiline&&t.push("m"),e.sticky&&t.push("y"),e.unicode&&t.push("u"),t.join("")}function ve(e){return"[object Boolean]"===E(e)}function ge(e){return T(e)||A(e)}function me(e){return!e||!A(e)&&!I(e)}function ye(e,t){return Object.prototype.hasOwnProperty.call(e,t)}function we(e){return"[object Number]"===E(e)}function be(e){return"[object Symbol]"===E(e)}var xe=".".charCodeAt(0),Oe=/\\(\\)?/g,Se=/[^.[\]]+|\[(?:(-?\d+(?:\.\d+)?)|(["'])((?:(?!\2)[^\\]|\\.)*?)\2)\]/g;function je(e){return e.replace(/([a-z0-9])([A-Z])/g,"$1_$2").toLowerCase()}var Ce={version:"1.1.18",noConflict:function(){return this===c.bbo&&(c.bbo=s),this},ua:l,isIos:f,isIOS:f,isiPhone:function(){return/iPhone/.test(l())},isIPad:function(){return/iPad/.test(l())},isAndroid:function(){return l("l").indexOf("android")>-1},isMobile:d,isPC:function(){return!d()},isWeixin:function(){return/MicroMessenger/i.test(l("l"))},isNewsApp:function(){return/qqnews/.test(l())},isQQ:function(){return/qq\//.test(l())},mqqbrowser:function(){return/mqqbrowser\//.test(l())},isTenvideo:function(){return/qqlivebrowser/.test(l("l"))},isWeiShi:function(){return/weishi/.test(l("l"))},isIphoneXmodel:function(){if("undefined"!=typeof window&&window){var e=window,t=e.devicePixelRatio,n=e.screen,r=n.width,o=n.height;return[{devicePixelRatio:3,width:375,height:812},{devicePixelRatio:3,width:414,height:896},{devicePixelRatio:2,width:414,height:896}].some(e=>e.devicePixelRatio===t&&e.width===r&&e.height===o)}return!1},ieVersion:h,isIE:function(){return h()>0},log:function(e,t){var n=g("_bbo_log");if(null===n&&(p(n=v("div"),"id","_bbo_log"),p("style","position:fixed;left:0;top:0;z-index:9999;padding:4px;"),document.body.appendChild(n)),t)for(var r in t)Object.prototype.hasOwnProperty.call(t,r)&&(n.style[r]=t[r]);n.innerHTML=e},logs:function(){if(window.console&&window.console.log){var e=String(arguments[0]),t=parseInt(e.split("&")[1],10)||10,n=y;n[e]||(n[e]={}),n[e].once||(n[e].once=1),n[e].once<=t&&(console.log.apply(console,m(arguments,1)),n[e].once++)}},removeConsole:function(e){try{window.console||(window.console={}),window.console.log=window.console.info=window.console.dir=window.console.warn=window.console.trace=w,"clear"===e&&window.console.clear&&window.console.clear()}catch(e){}},args:m,trash:b,noop:w,merge:function(){for(var e=arguments.length,t=new Array(e),n=0;nObject.keys(t).reduce((n,r)=>(e[r]=e.hasOwnProperty(r)?[].concat(e[r]).concat(t[r]):t[r],e),{}),{})},over:function(){for(var e=arguments.length,t=new Array(e),n=0;ne.apply(null,n))}},call:function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),r=1;rt[e].apply(t,n)},trigger:O,stopPropagation:e=>{var t=e||window.event;t.stopPropagation?t.stopPropagation():t.cancelBubble=!0},g:g,gc:function(e){return document.getElementsByClassName(e)},c:v,query:function(e){return document.querySelector(e)},show:function(){for(var e=arguments.length,t=new Array(e),n=0;n{e.style.display=""})},hide:function(){for(var e=arguments.length,t=new Array(e),n=0;n{e.style.display="none"})},elementContains:(e,t)=>e!==t&&e.contains(t),getStyle:(e,t)=>getComputedStyle(e)[t],setStyle:x,attr:p,uuid:function(){return"xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx".replace(/[xy]/g,(function(e){var t=16*Math.random()|0;return("x"===e?t:3&t|8).toString(16)}))},hash:S,judge:C,judgment:C,getType:e=>void 0===e?"undefined":null===e?"null":e.constructor.name.toLowerCase(),isTypeof:j,construct:function(){var e=arguments[0];return new(Function.prototype.bind.apply(e,arguments))},paramsName:function(e){return/\(\s*([\s\S]*?)\s*\)/.exec(e.toString())[1].split(/\s*,\s*/)},eventEmitter:R,properObject:L,objectDiff:q,addedDiff:z,deletedDiff:J,updatedDiff:W,detailedDiff:(e,t)=>({added:z(e,t),deleted:J(e,t),updated:W(e,t)}),loadImages:function(e){var t,n=0,r=0,o=null,i=0,a=0,u=e.data||[],c=e.step||function(){},s=e.complete||function(){},l=e.needOneStep||!1,f=e.path||!1;if("object"!=typeof u||0===u.length)return c(100),!1;if(t=u.length,f)for(var d=t-1;d>-1;d--)u[d]=f+u[d];var h=function(){i++,c(i),i{function e(){for(var e=0,t={};e1){var u=e({path:"/"},r.defaults,i);if("number"==typeof u.expires){var c=new Date;c.setMilliseconds(c.getMilliseconds()+864e5*u.expires),u.expires=c}var s=o;try{a=JSON.stringify(s),/^[\{\[]/.test(a)&&(s=a)}catch(e){}s=n.write?n.write(s,t):encodeURIComponent(String(s)).replace(/%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,decodeURIComponent);var l=encodeURIComponent(String(t)),f=l.replace(/%(23|24|26|2B|5E|60|7C)/g,decodeURIComponent),d=f.replace(/[\(\)]/g,escape),h=document.cookie=[d,"=",o,i.expires?"; expires="+i.expires.toUTCString():"",i.path?"; path="+i.path:"",i.domain?"; domain="+i.domain:"",i.secure?"; secure":""].join("");return h}t||(a={});for(var p=document.cookie?document.cookie.split("; "):[],v=/(%[0-9A-Z]{2})+/g,g=0;g{for(var t=encodeURIComponent(e)+"=",n=document.cookie.split(";"),r=0;re.split(";").map(e=>e.split("=")).reduce((e,t)=>(e[decodeURIComponent(t[0].trim())]=decodeURIComponent(t[1].trim()),e),{}),storage:e=>{var t=e.type,n=e.prefix;return new re({type:t,prefix:n})},open:e=>{var t="_bbo_open_proxy",n=g(t)||v("a",t,"",t);x(n,"display","none"),p(n,"href",e),p(n,"target","_blank"),n.parentNode||document.body.appendChild(n),O(n,"click","MouseEvents")},getUrlParam:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:window.location.href;e.replace(/[\[\]]/g,"\\$&");var n=new RegExp("[?&]"+e+"(=([^&#]*)|&|#|$)"),r=n.exec(t);return r?r[2]?decodeURIComponent(r[2].replace(/\+/g," ")):"":null},setUrlParam:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:window.location.href,r=new RegExp("([?|&])"+e+"=.*?(&|#|$)","i");if(n.match(r))return n.replace(r,"$1"+e+"="+encodeURIComponent(t)+"$2");var o="";-1!==n.indexOf("#")&&(o=n.replace(/.*#/,"#"),n.replace(/#.*/,""));var i=-1!==n.indexOf("?")?"&":"?";return n+i+e+"="+encodeURIComponent(t)+o},deleteUrlParam:oe,delUrlParam:oe,objectParam:ie,httpGet:function(e,t){var n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:console.error,r=new XMLHttpRequest;r.open("GET",e,!0),r.onload=()=>t(r.responseText),r.onerror=()=>n(r),r.send()},httpPost:function(e,t,n){var r=arguments.length>3&&void 0!==arguments[3]?arguments[3]:console.error,o=new XMLHttpRequest;o.open("POST",e,!0),o.setRequestHeader("Content-type","application/json; charset=utf-8"),o.onload=()=>n(o.responseText),o.onerror=()=>r(o),o.send(t)},setTimesout:function(){var e=arguments[0],t=void 0===arguments[1]?0:parseFloat(arguments[1]),n=void 0===arguments[2]?1:parseInt(arguments[2],10),r=arguments.length>3?m(arguments,3):null,o={index:0,times:n,over:!1},i=setInterval((function(){o.index++,o.index>n?clearInterval(i):(o.index===n&&(o.over=!0),e.apply(o,r))}),t);return i},clearTimesout:function(e){clearInterval(e)},getDate:(e,t)=>{var n=new Date,r=n.getDate(),o=n.getMonth()+1,i=n.getFullYear(),a=n.getHours(),u=n.getMinutes(),c=n.getSeconds();r=ue(r);var s=e||"/",l=t||":";return i+s+(o=ue(o))+s+r+" "+(a=ue(a))+l+(u=ue(u))+l+(c=ue(c))},formatPassTime:e=>{var t=Date.parse(new Date)-e,n=parseInt(t/864e5,10),r=parseInt(t/36e5,10),o=parseInt(t/6e4,10),i=parseInt(n/30,10),a=parseInt(i/12,10);return a?a+"年前":i?i+"个月前":n?n+"天前":r?r+"小时前":o?o+"分钟前":"刚刚"},formatRemainTime:e=>{var t=new Date,n=new Date(e).getTime()-t.getTime(),r=0,o=0,i=0,a=0;return n>=0&&(r=Math.floor(n/1e3/3600/24),o=Math.floor(n/1e3/60/60%24),i=Math.floor(n/1e3/60%60),a=Math.floor(n/1e3%60)),r+"天 "+o+"小时 "+i+"分钟 "+a+"秒"},formatDuration:e=>{e<0&&(e=-e);var n={day:Math.floor(e/864e5),hour:Math.floor(e/36e5)%24,minute:Math.floor(e/6e4)%60,second:Math.floor(e/1e3)%60,millisecond:Math.floor(e)%1e3};return Object.entries(n).filter(e=>0!==e[1]).map(e=>{var n=t(e,2),r=n[0],o=n[1];return`${o} ${r}${1!==o?"s":""}`}).join(", ")},sleep:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:{},n=t.useCachedSetTimeout,r=se(e,{useCachedSetTimeout:n});function o(e){return r.then(()=>e)}return o.then=function(){return r.then.apply(r,arguments)},o.catch=Promise.resolve().catch,o},fill0:ue,floor:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:0;return Math.floor(e*Math.pow(10,t))/Math.pow(10,t)},chainAsync:e=>{var t=0,n=e[e.length-1],r=()=>{var o=e[t++];o===n?o():o(r)};r()},numberFormat:(e,t,n,r)=>{var o=String(e).replace(/[^0-9+\-Ee.]/g,""),i=t,a=isFinite(Number(o))?Number(o):0,u=isFinite(Number(i))?Math.abs(i):0,c=void 0===r?",":r,s=void 0===n?".":n,l="";return(l=(u?function(e,t){if(-1===String(e).indexOf("e"))return Number(Math.round(e+"e+"+t)+"e-"+t);var n=String(e).split("e"),r="";return Number(n[1])+t>0&&(r="+"),Number(Math.round(Number(n[0])+"e"+r+(Number(n[1])+t))+"e-"+t).toFixed(t)}(a,u).toString():String(Math.round(a))).split("."))[0].length>3&&(l[0]=l[0].replace(/\B(?=(?:\d{3})+(?!\d))/g,c)),(l[1]||"").length{function e(e,t){return e.target.tagName!==t.toUpperCase()&&e.target.tagName!==t.toLowerCase()}function t(t){e(t,"input")&&e(t,"textarea")&&e(t,"select")&&e(t,"menus")&&t.preventDefault()}document.addEventListener("touchmove",(function(e){e.preventDefault()}),!1),document.addEventListener("touchstart",t,!1),document.addEventListener("touchend",t,!1)},copyToClipboard:function(e){var t=document.createElement("textarea");t.value=e,p(t,"readonly",""),x(t,"position","absolute"),x(t,"left","-9999px"),document.body.appendChild(t);var n=document.getSelection().rangeCount>0&&document.getSelection().getRangeAt(0);t.select(),document.execCommand("copy"),document.body.removeChild(t),n&&(document.getSelection().removeAllRanges(),document.getSelection().addRange(n))},checkImageSize:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:fe,n=t.enabledMaxSize,r=t.enabledNatural,o=t.ratio;return new Promise((t,i)=>{if(e instanceof File){var a=new FileReader;a.onload=()=>{u(a.result)},a.readAsDataURL(e)}else $(e)&&u(e);function u(e){var a=new Image;a.src=e,a.onload=()=>{var e=a.width/o,i=a.height/o;if(n){var u=Math.min(e,375);i*=u/e,e=u}r&&(e=a.naturalWidth/o,i=a.naturalHeight/o),t({width:e>>=0,height:i>>=0})},a.onerror=e=>{i(e)}}})},imageOptimization:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:.9,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:{},r=n.maxWidth,o=void 0===r?1920:r,i=n.mimeType;return new Promise((n,r)=>{if(e instanceof File){var a=new FileReader;a.onload=function(){u(this.result)},a.readAsDataURL(e)}else $(e)&&u(e);function u(a){var u=a.match(/data:([^;,]+)/);if(Array.isArray(u)){if("image/gif"===(i||u[1]))return n(e);var c=new Image;c.src=a,c.onload=function(){var e=this.naturalWidth,r=this.naturalHeight;e>o&&(r=Math.round(o*r/e),e=o);var a=document.createElement("canvas");a.width=e,a.height=r,a.getContext("2d").drawImage(this,0,0,e,r),a.toBlob(e=>{n(e)},i||u[1],t)}}else r(new Error("Non-picture type Data URLs"))}})},toDataUrl:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:de,n=t.enabledType;return new Promise((t,r)=>{try{var o=new XMLHttpRequest;o.onload=()=>{var e=new FileReader;e.onloadend=()=>{if(n){var r=new Image;r.crossOrigin="Anonymous",r.src=e.result,r.onload=()=>{t(r)}}else t(e.result)},e.readAsDataURL(o.response)},o.open("GET",e,!0),o.responseType="blob",o.send()}catch(e){r(e)}})},clone:he,deepClone:he,values:function(e){var t=[];if(T(e))return e.slice(0);if(A(e)||I(e)){for(var n=Object.keys(e),r=n.length,o=0;o{if(I(t)){if(!0===t(e,r,o))return n=e,!1}else{if(_(e,t))return n=e,!1;if(A(e)&&A(t)){var i=!0;if(M(t,(t,n)=>i=k(e[n],t)),i)return n=e,!1}}}),n},toPath:function(e){return $(e)?(n=[],(t=e).charCodeAt(0)===xe&&n.push(""),t.replace(Se,(e,t,r,o)=>{var i=e;r?i=o.replace(Oe,"$1"):t&&(i=t.trim()),n.push(i)}),n):[];var t,n},get:function(e,t,n){if(!e)return n;var r,o;if(Array.isArray(t)&&(r=t.slice(0)),$(t)&&(r=t.split(".")),be(t)&&(r=[t]),!T(r))throw new Error("props arg must be an array, a string or a symbol");for(;r.length;){if(o=r.shift(),!e)return n;if(void 0===(e=e[o]))return n}return e},debounce:function(e,t,n){var r;return function(){if(!t)return e.apply(this,arguments);var o=this,i=arguments,a=n&&!r;return clearTimeout(r),r=setTimeout((function(){if(r=null,!a)return e.apply(o,i)}),t),a?e.apply(this,arguments):void 0}},throttle:function(e,t,n){var r=!1,o=!1;return function(){o=n&&!r;var i=this,a=arguments;if(r||(r=!0,setTimeout((function(){if(r=!1,!n)return e.apply(i,a)}),t)),o)return o=!1,e.apply(this,arguments)}},pick:(e,t)=>t.reduce((t,n)=>(n in e&&(t[n]=e[n]),t),{}),omit:(e,t)=>Object.keys(e).filter(e=>!t.includes(e)).reduce((t,n)=>(t[n]=e[n],t),{}),trim:function(e){return F(e)?e:e.replace(/(^\s*)|(\s*$)/g,"")},fillZero:function(e,t){return(new Array(t).join("0")+e).slice(-t)},longUnique:function(e){for(var t={},n=0;n]*>(\S\s*?)<\/script>/gim,"").replace(/<[^>]+>/g,"")},capitalize:function(e){return e.charAt(0).toUpperCase()+e.slice(1).toLowerCase()},deCapitalize:function(e){var t=n(e),r=t[0],o=t.slice(1),i=arguments.length>1&&void 0!==arguments[1]&&arguments[1];return r.toLowerCase()+(i?o.join("").toUpperCase():o.join(""))},isAbsoluteURL:e=>/^[a-z][a-z0-9+.-]*:/.test(e),mapString:(e,t)=>e.split("").map((n,r)=>t(n,r,e)).join(""),mask:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:4,n=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"*";return`${e}`.slice(-t).padStart(`${e}`.length,n)},splitLines:function(e){e.split(/\r?\n/)},camelize:function(e){return e.indexOf("-")<0&&e.indexOf("_")<0?e:e.replace(/[-_][^-_]/g,(function(e){return e.charAt(1).toUpperCase()}))},underscored:je,dasherize:function(e){return je(e).replace(/_/g,"-")},truncate:(e,t)=>e.length>t?e.slice(0,t>3?t-3:t)+"...":e,byteSize:function(e){return new Blob([e]).size},byteLen:function(e,t){var n,r,o,i=0,a=t?t.toLowerCase():"";if("utf-16"===a||"utf16"===a)for(r=0,o=e.length;r0&&(t%2==1&&(r+=n),1!==t);)n+=n,t>>=1;return r},endsWith:function(e,t,n){var r=e.slice(-t.length);return n?r.toLowerCase()===t.toLowerCase():r===t},startsWith:function(e,t,n){var r=e.slice(0,t.length);return n?r.toLowerCase()===t.toLowerCase():r===t},containsWith:ee,xssFilter:function(e){return e.replace(/&/g,"&").replace(//g,">").replace(/"/g,""").replace(/'/g,"'")},effortIndex:function(e,t){return String(e).indexOf(t)},capwords:function(e){return String(e).replace(/^([a-z\u00E0-\u00FC])|\s+([a-z\u00E0-\u00FC])/g,(function(e){return e.toUpperCase()}))},unique:e=>r(new Set(e)),uniqueBy:(e,t)=>e.reduce((e,n)=>(e.some(e=>t(n,e))||e.push(n),e),[]),uniqueFrom:function(t,n){return Object.values(t.reduce((t,r)=>e(t,{[r[n]]:r}),{}))},random:e=>e[Math.floor(Math.random()*e.length)],randomSize:function(e){for(var t=n(e),r=t.slice(0),o=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1,i=r.length;i;){var a=Math.floor(Math.random()*i--),u=[r[a],r[i]];r[i]=u[0],r[a]=u[1]}return r.slice(0,o)},shuffle:function(e){for(var t=n(e).slice(0),r=t.length;r;){var o=Math.floor(Math.random()*r--),i=[t[o],t[r]];t[r]=i[0],t[o]=i[1]}return t},contains:function(e,t){return e.indexOf(t)>-1},includesAll:(e,t)=>t.every(t=>e.includes(t)),includesAny:(e,t)=>t.some(t=>e.includes(t)),removeAt:function(e,t){return!!e.splice(t,1).length},remove:function(e,t){if(!T(e)||!T(t))throw new Error("expected both arguments to be arrays");for(var n=[],r=e.length,o=0;oe.filter(Boolean),pluck:function(e,t){var n,r=[];return e.forEach((function(e){null!==(n=e[t])&&r.push(n)})),r},union:(e,t)=>Array.from(new Set([].concat(r(e),r(t)))),unionBy:(e,t,n)=>{var o=new Set(e.map(n));return Array.from(new Set([].concat(r(e),r(t.filter(e=>!o.has(n(e)))))))},unionWith:(e,t,n)=>{Array.from(new Set([].concat(r(e),r(t.filter(t=>-1===e.findIndex(e=>n(t,e)))))))},intersect:function(e,t){var n=new Set(t);return e.filter(e=>n.has(e))},intersectBy:function(e,t,n){var r=new Set(t.map(n));return e.filter(e=>r.has(n(e)))},difference:function(e,t){var n=new Set(t);return e.filter(e=>!n.has(e))},differenceBy:function(e,t,n){var r=new Set(t.map(n));return e.map(n).filter(e=>!r.has(e))},max:function(e){return Math.max.apply(0,e)},min:function(e){return Math.min.apply(0,e)},equal:function(e,t){if(e===t)return!0;if(e.length!==t.length)return!1;for(var n=0;ne.every(t=>t===e[0]),all:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Boolean;return e.every(t)},any:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:Boolean;return e.some(t)},chunk:(e,t)=>{Array.from({length:Math.ceil(e.length/t)},(n,r)=>e.slice(r*t,r*t+t))},countBy:(e,t)=>{e.map("function"==typeof t?t:e=>e[t]).reduce((e,t)=>(e[t]=(e[t]||0)+1,e),{})},countOccurrences:(e,t)=>{e.reduce((e,n)=>n===t?e+1:e,0)},drop:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return e.slice(t)},dropRight:function(e){var t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:1;return e.slice(0,-t)},dropWhile:function(e,t){for(var n=e;n.length>0&&!t(n[0]);)n=n.slice(1);return n},dropRightWhile:function(e,t){for(var n=e.length;n--&&!t(e[n]););return e.slice(0,n+1)},column:function(t,n){var r=arguments.length>2&&void 0!==arguments[2]?arguments[2]:null;if(null!==t&&(A(t)||T(t))){var o=[];if(A(t)){var i=[];for(var a of Object.keys(t))i.push(t[a]);t=i}if(T(t))for(var u of t.keys())r&&t[u][r]?o[t[u][r]]=n?t[u][n]:t[u]:n?o.push(t[u][n]):o.push(t[u]);return e({},o)}},search:function(e,t,n){var r=!!n,o="",i=e;if("object"==typeof i&&i.exec){if(!r){var a="i"+(i.global?"g":"")+(i.multiline?"m":"")+(i.sticky?"y":"");i=new RegExp(i.source,a)}for(o in t)if(t.hasOwnProperty(o)&&i.test(t[o]))return o;return!1}for(o in t)if(t.hasOwnProperty(o)&&(r&&t[o]===e||!r&&t[o]==e))return o;return!1},split:function(e,t){if(!T(e))throw new Error("expected an array for the first argument");if(null!==t&&!we(t))throw new Error("expected a number or null for the second argument");t=null!==t?t:e.length;for(var n=e.length,r=[],o=0;ot=>e(t),indexBy:function(e,t){if(!T(e))throw new Error("expected an array for first argument");if(!$(t))throw new Error("expected a string for second argument");for(var n={},r=e.length,o=0;o 0) {\n return parseInt(uakit.substring(msie + 5, uakit.indexOf('.', msie)), 10);\n }\n\n let trident = uakit.indexOf('Trident/');\n if (trident > 0) {\n let rv = uakit.indexOf('rv:');\n return parseInt(uakit.substring(rv + 3, uakit.indexOf('.', rv)), 10);\n }\n\n let edge = uakit.indexOf('Edge/');\n if (edge > 0) {\n return parseInt(ua.substring(edge + 5, uakit.indexOf('.', edge)), 10);\n }\n\n return '';\n}\n","export default function attr(el, ruleName, val) {\n el.setAttribute(ruleName, val);\n}\n","import attr from './attr';\n\n// eslint-disable-next-line max-params\nexport default function c(t, cn, i, id) {\n let el = document.createElement(t);\n if (cn) {\n attr(el, 'class', cn);\n }\n if (i) {\n el.innerHTML = i;\n }\n if (id) {\n attr(el, 'id', id);\n }\n return el;\n}\n","export default function g(i) {\n return document.getElementById(i);\n}\n","/**\n * arguments to array\n */\n\n/**\n * Converts the arguments object to an array object and slice it.\n * first defalult is 0.\n * @export\n * @param {*} $arguments\n * @param {*} first\n * @returns\n */\nexport default function args($arguments, first) {\n return Array.prototype.slice.call($arguments, first || 0);\n}\n","import args from '../args/args';\n/************************************************************************\n * Private Method\n *************************************************************************/\nlet _cache = {\n urls: {},\n logs: {}\n};\n/**\n * bbo.logs('only id&10', 1, 2);\n */\nexport default function logs() {\n if (window.console && window.console.log) {\n let onlyId = String(arguments[0]);\n let times = parseInt(onlyId.split('&')[1], 10) || 10;\n let logsCache = _cache.logs;\n\n if (!logsCache[onlyId]) logsCache[onlyId] = {};\n if (!logsCache[onlyId].once) logsCache[onlyId].once = 1;\n\n if (logsCache[onlyId].once <= times) {\n console.log.apply(console, args(arguments, 1));\n logsCache[onlyId].once++;\n }\n }\n}\n","const noop = () => {};\n\nexport default noop;\n","/**\n * a trash object\n */\nconst trash = {\n clear: function() {\n for (let key in trash) {\n if (key !== 'log' && key !== 'clear') delete trash[key];\n }\n },\n log: function() {\n for (let key in trash) {\n if (key !== 'log' && key !== 'clear') console.log('bbo.trash:: ', key, trash[key]);\n }\n }\n};\n\nexport default trash;\n","export default function setStyle(el, ruleName, val) {\n el.style[ruleName] = val;\n}\n","/**\n * trigger event\n * https://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript\n */\nconst trigger = (element, event, eventType) => {\n if (document.createEventObject) {\n let e = document.createEventObject();\n return element.fireEvent('on' + event, e);\n } else {\n let e = document.createEvent(eventType || 'HTMLEvents');\n e.initEvent(event, true, true);\n element.dispatchEvent(e);\n }\n};\n\nexport default trigger;\n","/**\n * string hash map\n * From https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\n */\nexport default function hash(str) {\n let _str = String(str);\n let hash = 0;\n let i;\n let chr;\n if (_str.length === 0) return hash;\n for (i = 0; i < _str.length; i++) {\n chr = _str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n\n return hash;\n}\n","/**\n * is typeof type\n */\nconst isTypeof = (val, type) => {\n return (\n Object.prototype.toString\n .call(val)\n .slice(8, -1)\n .toLowerCase() === type\n );\n};\n\nexport default isTypeof;\n","import isTypeof from './is_typeof';\n/**\n * map condition judge\n * bbo.judge = bbo.judgment\n */\nexport default function judge(v, vals, strict) {\n if (!isTypeof(vals, 'array')) return false;\n\n for (let key in vals) {\n if (strict) {\n if (v === vals[key]) return true;\n } else {\n if (v === vals[key]) return true;\n }\n }\n\n return false;\n}\n","export default function getTag(src) {\n return Object.prototype.toString.call(src);\n}\n","import getTag from './get_tag';\n\nexport default function isFunction(func) {\n return getTag(func) === '[object Function]';\n}\n","import getTag from './get_tag';\n\nexport default function isObject(obj) {\n return getTag(obj) === '[object Object]';\n}\n","import getTag from './get_tag';\n\nexport default function isArray(arr) {\n return getTag(arr) === '[object Array]';\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function forEach(src, func) {\n let i = 0;\n if (isArray(src)) {\n while (i < src.length) {\n const rst = func(src[i], i, src);\n if (rst === false) {\n break;\n }\n i += 1;\n }\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n while (i < keys.length) {\n const key = keys[i];\n const rst = func(src[key], key, src);\n if (rst === false) {\n break;\n }\n i += 1;\n }\n }\n}\n","/* eslint-disable no-self-compare */\nexport default function is(x, y) {\n // inlined Object.is polyfill to avoid requiring consumers ship their own\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n","import is from './is';\n\nexport default function isShallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n let i = 0;\n while (i < keysA.length) {\n if (!hasOwnProperty(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n i += 1;\n }\n return true;\n}\n","import forEach from './for_each';\nimport isFunction from './is_function';\nimport isObject from './is_object';\nimport is from './is';\nimport isShallowEqual from './is_shallow_equal';\n\nexport default function findIndex(src, func) {\n let rst = -1;\n forEach(src, (item, index, obj) => {\n if (isFunction(func)) {\n if (func(item, index, obj) === true) {\n rst = index;\n return false;\n }\n } else if (is(item, func)) {\n rst = index;\n return false;\n } else if (isObject(item) && isObject(func)) {\n let subEqual = true;\n forEach(func, (v, k) => {\n subEqual = isShallowEqual(item[k], v);\n return subEqual;\n });\n if (subEqual) {\n rst = index;\n return false;\n }\n }\n });\n return rst;\n}\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\nimport findIndex from '../lodash/find_index';\n\n/**\n * function handle1(a, b, c) {\n * console.log('one', a, b, c);\n * }\n *\n * function handle2(a, b, c) {\n * console.log('two', a, b, c);\n * }\n *\n * function handle3(a, b, c) {\n * console.log('three', a, b, c);\n * }\n *\n * emitter\n * .on('demo', handle1)\n * .once('demo', handle2)\n * .on('demo', handle3);\n *\n * emitter.emit('demo', [1, 2, 3]);\n */\nexport default function EventEmitter() {\n this.__events = {};\n}\n\nfunction isListener(listener) {\n if (isFunction(listener)) {\n return true;\n } else if (listener && isObject(listener)) {\n return isListener(listener.listener);\n } else {\n return false;\n }\n}\n\nlet prototype = EventEmitter.prototype;\n\n/**\n * on\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object}\n */\nprototype.on = function(eventName, listener) {\n if (!eventName || !listener) return;\n\n if (!isListener(listener)) {\n throw new TypeError('listener is a function');\n }\n\n let events = this.__events;\n let listeners = (events[eventName] = events[eventName] || []);\n let listenerIsWrapped = isObject(listener);\n\n // not repeat\n if (findIndex(listeners, listener) === -1) {\n let listenerOnce = {\n listener: listener,\n once: false\n };\n\n listeners.push(listenerIsWrapped ? listener : listenerOnce);\n console.log(listeners);\n }\n\n return this;\n};\n\n/**\n * once\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object} can chained call\n */\nprototype.once = function(eventName, listener) {\n return this.on(eventName, {\n listener: listener,\n once: true\n });\n};\n\n/**\n * off\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object} can chained call\n */\nprototype.off = function(eventName, listener) {\n let listeners = this.__events[eventName];\n if (!listeners) return;\n\n let index;\n for (let i = 0, len = listeners.length; i < len; i++) {\n if (listeners[i] && listeners[i].listener === listener) {\n index = i;\n break;\n }\n }\n\n if (typeof index !== 'undefined') {\n listeners.splice(index, 1, null);\n }\n\n return this;\n};\n\n/**\n * emit\n * @param {String} eventName\n * @param {Array} args\n * @return {Object} can chained call\n */\nprototype.emit = function(eventName, args) {\n let listeners = this.__events[eventName];\n if (!listeners) return;\n\n for (let i = 0; i < listeners.length; i++) {\n let listener = listeners[i];\n if (listener) {\n listener.listener.apply(this, args || []);\n if (listener.once) {\n this.off(eventName, listener.listener);\n }\n }\n }\n\n return this;\n};\n\n/**\n * allOff && allOne\n * @param {String[]}\n */\nprototype.allOff = function(eventName) {\n if (eventName && this.__events[eventName]) {\n this.__events[eventName] = [];\n } else {\n this.__events = {};\n }\n};\n","import isObject from '../lodash/is_object';\n\nconst properObject = (o) => (isObject(o) && !o.hasOwnProperty ? { ...o } : o);\n\nexport default properObject;\n","const isDate = (d) => d instanceof Date;\n\nexport default isDate;\n","const isEmpty = (o) => Object.keys(o).length === 0;\n\nexport default isEmpty;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isDate from '../lodash/is_date';\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst objectDiff = (lhs, rhs) => {\n if (lhs === rhs) return {}; // equal return no diff\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs; // return updated rhs\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n const deletedValues = Object.keys(l).reduce((acc, key) => {\n return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined };\n }, {});\n\n if (isDate(l) || isDate(r)) {\n // eslint-disable-next-line eqeqeq\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce((acc, key) => {\n if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key\n\n const difference = objectDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff\n\n return { ...acc, [key]: difference }; // return updated key\n }, deletedValues);\n};\n\nexport default objectDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst addedDiff = (lhs, rhs) => {\n if (lhs === rhs || !isObject(lhs) || !isObject(rhs)) return {};\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n return Object.keys(r).reduce((acc, key) => {\n if (l.hasOwnProperty(key)) {\n const difference = addedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return { ...acc, [key]: r[key] };\n }, {});\n};\n\nexport default addedDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst deletedDiff = (lhs, rhs) => {\n if (lhs === rhs || !isObject(lhs) || !isObject(rhs)) return {};\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n return Object.keys(l).reduce((acc, key) => {\n if (r.hasOwnProperty(key)) {\n const difference = deletedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return { ...acc, [key]: undefined };\n }, {});\n};\n\nexport default deletedDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isDate from '../lodash/is_date';\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst updatedDiff = (lhs, rhs) => {\n if (lhs === rhs) return {};\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs;\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n if (isDate(l) || isDate(r)) {\n // eslint-disable-next-line eqeqeq\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce((acc, key) => {\n if (l.hasOwnProperty(key)) {\n const difference = updatedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return acc;\n }, {});\n};\n\nexport default updatedDiff;\n","export default function loadImages(options) {\n let len = 0;\n let index = 0;\n let curIndex = 0;\n let stepTimer = null;\n let stepTimeValue = 5;\n let percentageValue = 0;\n let targetPercent = 0;\n let data = options.data || [];\n let step = options.step || function() {};\n let complete = options.complete || function() {};\n let needOneStep = options.needOneStep || false;\n let path = options.path || false;\n\n if (typeof data !== 'object' || data.length === 0) {\n step(100);\n return false;\n }\n\n len = data.length;\n if (path) {\n for (let i = len - 1; i > -1; i--) {\n data[i] = path + data[i];\n // console.info(data[i]);\n }\n }\n\n let processStep = function() {\n percentageValue++;\n // console.info(\"processStep = \",percentageValue)\n step(percentageValue);\n if (percentageValue < targetPercent) {\n stepTimer = setTimeout(function() {\n processStep();\n }, stepTimeValue);\n } else if (targetPercent === 100 && percentageValue === targetPercent) {\n if (complete && typeof complete === 'function') {\n complete();\n }\n }\n };\n\n function onload() {\n curIndex++;\n targetPercent = Math.floor((curIndex / len) * 100);\n if (needOneStep) {\n if (stepTimer) {\n clearTimeout(stepTimer);\n }\n processStep();\n } else {\n step(targetPercent);\n if (targetPercent === 100) {\n complete();\n }\n }\n }\n\n for (index; index < len; index++) {\n let strUrl = data[index];\n new LoadImageItem(strUrl, onload).start();\n }\n}\n\n/**\n * @name loadImageItem\n * @param {string} url - images full url\n * @callback cb - called when load image completed\n */\nfunction LoadImageItem(url, cb) {\n let self = this;\n\n self.img = new Image();\n\n // readyState:'complete' or 'loaded' => image has been loaded。\n // for IE6-IE10。\n let onReadyStateChange = function() {\n removeEventHandlers();\n console.info('onReadyStateChange');\n cb(self, 'onReadyStateChange');\n };\n\n let onError = function() {\n console.info('onError');\n removeEventHandlers();\n cb(self, 'onError');\n };\n\n let onLoad = function() {\n removeEventHandlers();\n cb(self, 'onload');\n };\n\n let removeEventHandlers = function() {\n self.unbind('load', onLoad);\n self.unbind('readystatechange', onReadyStateChange);\n self.unbind('error', onError);\n };\n\n this.start = function() {\n this.bind('load', onLoad);\n this.bind('readystatechange', onReadyStateChange);\n this.bind('error', onError);\n\n this.img.src = url;\n if (self.img.complete) {\n removeEventHandlers();\n cb(this, 'onload');\n }\n };\n}\n\n/**\n * @name bind\n * @description cross-browser event binding\n * @param {string} eventName\n * @param {function} eventHandler\n */\nLoadImageItem.prototype.bind = function(eventName, eventHandler) {\n if (this.img.addEventListener) {\n this.img.addEventListener(eventName, eventHandler, false);\n } else if (this.img.attachEvent) {\n this.img.attachEvent('on' + eventName, eventHandler);\n }\n};\n\n/**\n * @name unbind\n * @description cross-browser event un-binding\n * @param {string} eventName\n * @param {function} eventHandler\n */\n\nLoadImageItem.prototype.unbind = function(eventName, eventHandler) {\n if (this.img.removeEventListener) {\n this.img.removeEventListener(eventName, eventHandler, false);\n } else if (this.img.detachEvent) {\n this.img.detachEvent('on' + eventName, eventHandler);\n }\n};\n","import getTag from './get_tag';\n\nexport default function isString(str) {\n return getTag(str) === '[object String]';\n}\n","/* eslint-disable no-invalid-this */\n\nimport hash from '../other/hash';\nimport ua from '../device/ua';\nimport attr from '../bom/attr';\nimport c from '../bom/c';\nimport isFunction from '../lodash/is_function';\nimport isString from '../lodash/is_string';\n\n/**\n * load js\n * 1. bbo.loadjs(\"//your_url/a.js\",func);\n * 2. bbo.loadjs(\"//your_url/a.js\",\"only_id\",func);\n */\nlet _cache = {\n urls: {},\n logs: {}\n};\n\nlet _insertScripts = function(arr, callback) {\n for (let i = 0; i < arr.length; i++) {\n _insertScript(arr[i], loaded);\n }\n\n let _index = 0;\n\n function loaded() {\n _index++;\n if (_index >= arr.length) {\n callback && callback();\n }\n }\n};\n\nlet _insertScript = function(src, callback) {\n let script = c('script');\n attr(script, 'type', 'text/javascript');\n attr(script, 'src', src);\n attr(script, 'charset', 'utf-8');\n document.getElementsByTagName('head')[0].appendChild(script);\n\n if (/msie/.test(ua('l'))) {\n script.onreadystatechange = function() {\n if (this.readyState === 'loaded' || this.readyState === 'complete') {\n callback();\n }\n };\n } else if (/gecko/.test(ua('l'))) {\n script.onload = function() {\n callback();\n };\n } else {\n setTimeout(function() {\n callback();\n }, 50);\n }\n};\n\nexport default function loadjs(url, b, c) {\n let onlyId;\n let callback;\n\n if (isFunction(b)) {\n onlyId = String(hash(String(url)));\n callback = b;\n } else if (typeof b === 'undefined') {\n onlyId = String(hash(String(url)));\n callback = null;\n } else {\n onlyId = String(b);\n callback = c;\n }\n\n if (_cache.urls[onlyId]) {\n callback && callback();\n } else {\n let func = isString(url) ? _insertScript : _insertScripts;\n func.call(this, url, function() {\n _cache.urls[onlyId] = true;\n callback && callback();\n });\n }\n}\n","const randomKey = (len = 32) => {\n /** Removed confusing characters 'oOLl,9gq,Vv,Uu,I1' **/\n let possible = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';\n let key = '';\n for (let i = 0; i < len; i++) {\n key += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n return key;\n};\n\nexport default randomKey;\n","import isTypeof from '../other/is_typeof';\n/**\n * to json\n */\n\n// eval hack\nconst evil = (fn) => {\n // A variable points to Function, preventing reporting errors\n let Fn = Function;\n return new Fn('return ' + fn)();\n};\n\n// bbo.toJSON = bbo.tojson = bbo.toJson\nconst toJson = (res) => {\n if (!res) return null;\n\n if (typeof res === 'string') {\n try {\n return JSON.parse(res);\n } catch (e) {\n return evil('(' + res + ')');\n }\n } else if (isTypeof(res.json, 'function')) {\n return res.json();\n } else {\n return res;\n }\n};\n\nexport default toJson;\n","/**\n * cookie\n * https://github.com/jiayi2/onavo/blob/master/onavo.js#L209\n */\nconst cookie = () => {\n function _extend() {\n let i = 0;\n let result = {};\n for (; i < arguments.length; i++) {\n let attributes = arguments[i];\n for (let key in attributes) {\n if (Object.prototype.hasOwnProperty.call(key, attributes)) {\n result[key] = attributes[key];\n }\n }\n }\n return result;\n }\n\n function init(converter) {\n // #lizard forgives\n function api(key, value, attributes) {\n let result;\n if (typeof document === 'undefined') {\n return;\n }\n if (arguments.length > 1) {\n let _attributes = _extend(\n {\n path: '/'\n },\n api.defaults,\n attributes\n );\n\n if (typeof _attributes.expires === 'number') {\n let expires = new Date();\n expires.setMilliseconds(expires.getMilliseconds() + _attributes.expires * 864e5);\n _attributes.expires = expires;\n }\n let _value = value;\n try {\n result = JSON.stringify(_value);\n if (/^[\\{\\[]/.test(result)) {\n _value = result;\n }\n } catch (e) {}\n\n if (!converter.write) {\n _value = encodeURIComponent(String(_value)).replace(\n /%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,\n decodeURIComponent\n );\n } else {\n _value = converter.write(_value, key);\n }\n\n let _key = encodeURIComponent(String(key));\n let __key = _key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n let ___key = __key.replace(/[\\(\\)]/g, escape);\n let _cookie = (document.cookie = [\n ___key,\n '=',\n value,\n attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '',\n attributes.path ? '; path=' + attributes.path : '',\n attributes.domain ? '; domain=' + attributes.domain : '',\n attributes.secure ? '; secure' : ''\n ].join(''));\n\n return _cookie;\n }\n if (!key) {\n result = {};\n }\n let cookies = document.cookie ? document.cookie.split('; ') : [];\n let setDecode = /(%[0-9A-Z]{2})+/g;\n let i = 0;\n\n for (; i < cookies.length; i++) {\n let parts = cookies[i].split('=');\n let cookie = parts.slice(1).join('=');\n\n if (cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n\n try {\n let name = parts[0].replace(setDecode, decodeURIComponent);\n cookie = converter.read\n ? converter.read(cookie, name)\n : converter(cookie, name) || cookie.replace(setDecode, decodeURIComponent);\n\n try {\n cookie = JSON.parse(cookie);\n } catch (e) {\n console.log(e);\n }\n\n if (key === name) {\n result = cookie;\n break;\n }\n\n if (!key) {\n result[name] = cookie;\n }\n } catch (e) {}\n }\n\n return result;\n }\n\n api.set = api;\n api.get = function(key) {\n return api.call(api, key);\n };\n api.getJSON = api.getjson = api.getJson = function() {\n return api.apply(\n {\n json: true\n },\n [].slice.call(arguments)\n );\n };\n api.defaults = {};\n\n api.remove = function(key, attributes) {\n api(\n key,\n '',\n _extend(attributes, {\n expires: -1\n })\n );\n };\n\n api.withConverter = init;\n\n return api;\n }\n return init(function() {});\n};\n\nexport default cookie;\n","/**\n * setCookie / getCookie / deleteCookie\n * From https://stackoverflow.com/questions/1458724/how-do-i-set-unset-cookie-with-jquery/1458728#1458728\n */\nconst setCookie = (name, value, option) => {\n let longTime = 10;\n // let path = '; path=/';\n let val = option && option.raw ? value : encodeURIComponent(value);\n let cookie = encodeURIComponent(name) + '=' + val;\n\n if (option) {\n if (option.days) {\n let date = new Date();\n let ms = option.days * 24 * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n } else if (option.hour) {\n let date = new Date();\n let ms = option.hour * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n } else {\n let date = new Date();\n let ms = longTime * 365 * 24 * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n }\n\n if (option.path) cookie += '; path=' + option.path;\n if (option.domain) cookie += '; domain=' + option.domain;\n if (option.secure) cookie += '; true';\n }\n\n document.cookie = cookie;\n};\n\nexport default setCookie;\n","import setCookie from './set_cookie';\n\nconst deleteCookie = (name) => {\n setCookie(name, '', {\n hour: -1\n });\n};\n\nexport default deleteCookie;\n","/**\n * Whether a string contains another string\n */\nexport default function containsWith(target, item) {\n // discuss at: https://locutus.io/golang/strings/Contains\n // original by: Kevin van Zonneveld (https://kvz.io)\n // example 1: bbo.contains('Kevin', 'K')\n // returns 1: true\n return String(target).indexOf(item) !== -1;\n}\n","/************************************************************************\n * localStorage && sessionStorage\n * Method for safely supporting localStorage sessionStorage 'setItem' 'getItem' 'removeItem' 'removeAll',\n * Some extension method 'has' 'get' adn Store prefix\n *************************************************************************/\nimport containsWith from '../string/contains_with';\n\nconst ulocalStorage = window.localStorage;\nconst ussesionStorage = window.sessionStorage;\nclass Storage {\n constructor(options) {\n const {\n type = 'local',\n prefix = 'bbo.storage',\n message = {\n setItem: 'write in',\n getItem: 'read',\n removeAll: 'remove all',\n removeItem: 'remove item'\n }\n } = options;\n this.prefix = prefix;\n this.type = type;\n this.message = message;\n if (type === 'local') {\n this._storage = ulocalStorage;\n } else if (type === 'session') {\n this._storage = ussesionStorage;\n }\n }\n\n doItem(func, action) {\n try {\n if (typeof func === 'function') {\n return func();\n }\n } catch (err) {\n this._warn(action);\n return null;\n }\n return true;\n }\n\n setItem(key, value) {\n if (typeof key === 'object') {\n Object.keys(key).forEach((k, index) => {\n this.doItem(\n () => this._storage.setItem(`${this.prefix}.${k}`, JSON.stringify(key[k])),\n 'setItem'\n );\n });\n } else {\n this.doItem(\n () => this._storage.setItem(`${this.prefix}.${key}`, JSON.stringify(value)),\n 'setItem'\n );\n }\n }\n\n has(...keys) {\n return keys.every((key, index) => this._storage.getItem(`${this.prefix}.${key}`));\n }\n\n get(...keys) {\n const result = {};\n keys.forEach((key, index) => {\n if (`${this._storage.getItem(`${this.prefix}.${key}`)}` !== 'null') {\n try {\n result[key] = JSON.parse(this._storage.getItem(`${this.prefix}.${key}`));\n } catch (err) {\n console.warn(this._warn('getItem'));\n }\n }\n });\n return result;\n }\n\n getItem(key) {\n return this.doItem(() => JSON.parse(this._storage.getItem(`${this.prefix}.${key}`)), 'getItem');\n }\n\n removeAll() {\n Object.keys(this._storage).forEach((k) => {\n if (containsWith(k, this.prefix)) {\n this._remove(`${k}`);\n }\n });\n }\n\n removeItem(...keys) {\n console.log(keys);\n keys.forEach((key, index) =>\n this.doItem(() => this._storage.removeItem(`${this.prefix}.${key}`), 'removeItem')\n );\n }\n\n _warn(action) {\n const { message } = this;\n console.warn(`Unable to ${message[action] || ''} ${this.type} Storage`);\n }\n\n _remove(keys) {\n this.doItem(() => this._storage.removeItem(`${keys}`), 'removeItem');\n }\n}\n\nconst storage = ({ type, prefix }) =>\n new Storage({\n type,\n prefix\n });\n\nexport default storage;\n","/**\n * getUrlParam / deleteUrlParam\n * From https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n */\n\nconst deleteUrlParam = (param, url = window.location.href) => {\n // prefer to use l.search if you have a location/link object\n let urlparts = url.split('?');\n if (urlparts.length >= 2) {\n let prefix = encodeURIComponent(param) + '=';\n let pars = urlparts[1].split(/[&;]/g);\n\n // reverse iteration as may be destructive\n for (let i = pars.length; i-- > 0; ) {\n // idiom for string.startsWith\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\n pars.splice(i, 1);\n }\n }\n return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');\n } else {\n return url;\n }\n};\n\nexport default deleteUrlParam;\n","const objectParam = (arr) => {\n let str = '';\n if (Array.isArray(arr)) {\n str = arr\n .map(function(item) {\n return item.name + '=' + item.value;\n })\n .join('&');\n } else {\n str = objectParam(objectBigParam(arr));\n }\n return str;\n};\n\nconst objectBigParam = (obj) => {\n let arr = [];\n Object.keys(obj).forEach(function(k) {\n if (Array.isArray(obj[k])) {\n arr = arr.concat(\n obj[k].map(function(v) {\n return {\n name: k,\n value: v\n };\n })\n );\n } else {\n arr.push({\n name: k,\n value: obj[k]\n });\n }\n });\n return arr;\n};\n\nexport default objectParam;\n","export default function fill0(num) {\n let _num = parseFloat(num);\n return _num < 10 ? '0' + _num : _num;\n}\n","import fill0 from '../fill/fill0';\n\n/**\n * getDate\n * https://stackoverflow.com/questions/1531093/how-do-i-get-the-current-date-in-javascript\n */\nconst getDate = (d1, d2) => {\n let today = new Date();\n\n let dd = today.getDate();\n let mm = today.getMonth() + 1;\n let yyyy = today.getFullYear();\n let hh = today.getHours();\n let ms = today.getMinutes();\n let ss = today.getSeconds();\n\n dd = fill0(dd);\n mm = fill0(mm);\n hh = fill0(hh);\n ms = fill0(ms);\n ss = fill0(ss);\n\n let _d1 = d1 || '/';\n let _d2 = d2 || ':';\n\n return yyyy + _d1 + mm + _d1 + dd + ' ' + hh + _d2 + ms + _d2 + ss;\n};\n\nexport default getDate;\n","const cachedSetTimeout = setTimeout;\n\nfunction createSleepPromise(timeout, { useCachedSetTimeout }) {\n const timeoutFunction = useCachedSetTimeout ? cachedSetTimeout : setTimeout;\n\n return new Promise((resolve) => {\n timeoutFunction(resolve, timeout);\n });\n}\n\nexport default function sleep(timeout, { useCachedSetTimeout } = {}) {\n const sleepPromise = createSleepPromise(timeout, { useCachedSetTimeout });\n\n function promiseFunction(value) {\n return sleepPromise.then(() => value);\n }\n\n promiseFunction.then = (...args) => sleepPromise.then(...args);\n promiseFunction.catch = Promise.resolve().catch;\n\n return promiseFunction;\n}\n","// bbo.randomFromA2B = bbo.randomA2B\nconst randomA2B = (a, b, int) => {\n let result = Math.random() * (b - a) + a;\n return int ? Math.floor(result) : result;\n};\n\nexport default randomA2B;\n","/**\n * Check image size\n * @param {(Object|String)} image - image information,allow File Object or Data URLs\n * @param {Object} [options={}] - Check options\n */\n\nimport isString from '../lodash/is_string';\n\nconst DEFAULT = {\n enabledMaxSize: false,\n enabledNatural: false,\n ratio: 1\n};\n\nconst checkImageSize = (image, { enabledMaxSize, enabledNatural, ratio } = DEFAULT) => {\n return new Promise((resolve, reject) => {\n /**\n * Check type of image\n */\n if (image instanceof File) {\n const reader = new FileReader();\n reader.onload = () => {\n checkSize(reader.result);\n };\n reader.readAsDataURL(image);\n } else if (isString(image)) {\n checkSize(image);\n }\n\n /**\n * Check picture size\n * @param {String} data:Data URL\n */\n function checkSize(url) {\n const image = new Image();\n image.src = url;\n image.onload = () => {\n let w = image.width / ratio;\n let h = image.height / ratio;\n\n if (enabledMaxSize) {\n let nw = Math.min(w, 750 / 2);\n h = h * (nw / w);\n w = nw;\n }\n\n if (enabledNatural) {\n w = image.naturalWidth / ratio;\n h = image.naturalHeight / ratio;\n }\n\n w = w >> 0;\n h = h >> 0;\n\n resolve({ width: w, height: h });\n };\n image.onerror = (e) => {\n reject(e);\n };\n }\n });\n};\n\nexport default checkImageSize;\n","const DEFAULT = {\n enabledType: false\n};\n\nexport default function toDataUrl(url, { enabledType } = DEFAULT) {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n request.onload = () => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (enabledType) {\n const image = new Image();\n image.crossOrigin = 'Anonymous';\n image.src = reader.result;\n image.onload = () => {\n resolve(image);\n };\n } else {\n resolve(reader.result);\n }\n };\n reader.readAsDataURL(request.response);\n };\n request.open('GET', url, true);\n request.responseType = 'blob';\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n}\n","/* eslint-disable eqeqeq */\n/* eslint-disable guard-for-in */\n\n/**\n * deep copies objects and arrays\n * Deep clones all properties except functions\n */\n\nimport isFunction from '../lodash/is_function';\nimport isArray from '../lodash/is_array';\n\nexport default function clone(obj) {\n // var arr = [1, 2, 3];\n // var subObj = { aa: 1 };\n // var obj = { a: 3, b: 5, c: arr, d: subObj };\n // var objClone = bbo.clone(obj);\n // arr.push(4);\n // subObj.bb = 2;\n // obj; // {a: 3, b: 5, c: [1, 2, 3, 4], d: {aa: 1}}\n // objClone; // {a: 3, b: 5, c: [1, 2, 3], d: {aa: 1, bb: 2}}\n if (isFunction(obj)) {\n return obj;\n }\n let result = isArray(obj) ? [] : {};\n for (let key in obj) {\n // include prototype properties\n let value = obj[key];\n let type = {}.toString.call(value).slice(8, -1);\n if (type == 'Array' || type == 'Object') {\n result[key] = clone(value);\n } else if (type == 'Date') {\n result[key] = new Date(value.getTime());\n } else if (type == 'RegExp') {\n result[key] = RegExp(value.source, getRegExpFlags(value));\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction getRegExpFlags(regExp) {\n if (typeof regExp.source.flags == 'string') {\n return regExp.source.flags;\n } else {\n let flags = [];\n regExp.global && flags.push('g');\n regExp.ignoreCase && flags.push('i');\n regExp.multiline && flags.push('m');\n regExp.sticky && flags.push('y');\n regExp.unicode && flags.push('u');\n return flags.join('');\n }\n}\n","import getTag from './get_tag';\n\nexport default function isBoolean(bool) {\n return getTag(bool) === '[object Boolean]';\n}\n","import isObject from '../lodash/is_object';\nimport isBoolean from '../lodash/is_boolean';\nimport isArray from '../lodash/is_array';\nimport isFunction from '../lodash/is_function';\n\nexport default function extend(/* [deep], obj1, obj2, [objn] */) {\n let args = [].slice.call(arguments);\n let deep = false;\n if (isBoolean(args[0])) {\n deep = args.shift();\n }\n let result = args[0];\n if (isUnextendable(result)) {\n throw new Error('extendee must be an object');\n }\n let extenders = args.slice(1);\n let len = extenders.length;\n for (let i = 0; i < len; i++) {\n let extender = extenders[i];\n for (let key in extender) {\n if (extender.hasOwnProperty(key)) {\n let value = extender[key];\n if (deep && isCloneable(value)) {\n let base = isArray(value) ? [] : {};\n result[key] = extend(\n true,\n result.hasOwnProperty(key) && !isUnextendable(result[key]) ? result[key] : base,\n value\n );\n } else {\n result[key] = value;\n }\n }\n }\n }\n return result;\n}\n\nfunction isCloneable(obj) {\n return isArray(obj) || isObject(obj);\n}\n\nfunction isUnextendable(val) {\n return !val || (!isObject(val) && !isFunction(val));\n}\n","import getTag from './get_tag';\n\nexport default function isMap(map) {\n return getTag(map) === '[object Map]';\n}\n","import getTag from './get_tag';\n\nexport default function isSet(set) {\n return getTag(set) === '[object Set]';\n}\n","export default function hasOwnProperty(obj, keyName) {\n return Object.prototype.hasOwnProperty.call(obj, keyName);\n}\n","import getTag from './get_tag';\n\nexport default function isNumber(number) {\n return getTag(number) === '[object Number]';\n}\n","import getTag from './get_tag';\n\nexport default function isSymbol(symbol) {\n return getTag(symbol) === '[object Symbol]';\n}\n","/* eslint-disable max-params */\nconst charCodeOfDot = '.'.charCodeAt(0);\nconst reEscapeChar = /\\\\(\\\\)?/g;\nconst rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]/g;\n\nexport default function stringToPath(string) {\n const result = [];\n if (string.charCodeAt(0) === charCodeOfDot) {\n result.push('');\n }\n string.replace(rePropName, (match, expression, quote, subString) => {\n let key = match;\n if (quote) {\n key = subString.replace(reEscapeChar, '$1');\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n });\n return result;\n}\n","/**\n * Turn CamelCase to '_'\n */\nexport default function underscored(target) {\n return target.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();\n}\n","import version from './util/version';\nimport noConflict from './util/no_conflict';\n\n// device\nimport ua from './device/ua';\nimport isIos from './device/is_ios';\nimport isiPhone from './device/is_iphone';\nimport isIPad from './device/is_ipad';\nimport isAndroid from './device/is_android';\nimport isMobile from './device/is_mobile';\nimport isPC from './device/is_pc';\nimport isWeixin from './device/is_weixin';\nimport isNewsApp from './device/is_news_app';\nimport isQQ from './device/is_qq';\nimport mqqbrowser from './device/mqqbrowser';\nimport isTenvideo from './device/is_tenvideo';\nimport isWeiShi from './device/is_weishi';\nimport isIphoneXmodel from './device/is_iphonex_model';\nimport isIE from './device/is_ie';\nimport ieVersion from './device/ie_version';\n\n// log\nimport log from './log/log';\nimport logs from './log/logs';\nimport removeConsole from './log/remove_console';\n\n// args\nimport args from './args/args';\nimport trash from './args/trash';\nimport noop from './args/noop';\nimport merge from './args/merge';\nimport over from './args/over';\nimport call from './args/call';\n\n// bom\nimport open from './bom/open';\nimport trigger from './bom/trigger';\nimport stopPropagation from './bom/stop_propagation';\nimport g from './bom/g';\nimport gc from './bom/gc';\nimport c from './bom/c';\nimport query from './bom/query';\nimport show from './bom/show';\nimport hide from './bom/hide';\nimport elementContains from './bom/element_contains';\nimport getStyle from './bom/get_style';\nimport setStyle from './bom/set_style';\nimport attr from './bom/attr';\n\n// other\nimport uuid from './other/uuid';\nimport hash from './other/hash';\nimport judge from './other/judge';\nimport getType from './other/get_type';\nimport isTypeof from './other/is_typeof';\nimport construct from './other/construct';\nimport paramsName from './other/params_name';\nimport eventEmitter from './other/event_emitter';\n\n// object\nimport properObject from './object/proper_object';\nimport objectDiff from './object/object_diff';\nimport addedDiff from './object/added_diff';\nimport deletedDiff from './object/deleted_diff';\nimport updatedDiff from './object/updated_diff';\nimport detailedDiff from './object/detailed_diff';\n\n// load\nimport loadImages from './load/load_images';\nimport loadjs from './load/loadjs';\nimport loadcss from './load/loadcss';\n\n// json\nimport toJson from './json/to_json';\nimport jsonp from './json/jsonp';\n\n// cookie\nimport cookie from './cookie/cookie';\nimport setCookie from './cookie/set_cookie';\nimport getCookie from './cookie/get_cookie';\nimport deleteCookie from './cookie/delete_cookie';\nimport parseCookie from './cookie/parse_cookie';\n\n// storage\nimport storage from './storage/storage';\n\n// http\nimport getUrlParam from './http/get_url_param';\nimport setUrlParam from './http/set_url_param';\nimport deleteUrlParam from './http/delete_url_param';\nimport objectParam from './http/object_param';\nimport httpGet from './http/http_get';\nimport httpPost from './http/http_post';\n\n// times\nimport setTimesout from './times/set_timesout';\nimport clearTimesout from './times/clear_timesout';\nimport getDate from './times/get_date';\nimport formatPassTime from './times/format_pass_time';\nimport formatRemainTime from './times/format_remain_time';\nimport formatDuration from './times/format_duration';\nimport sleep from './times/sleep';\n\n// fill\nimport fill0 from './fill/fill0';\nimport floor from './fill/floor';\nimport chainAsync from './fill/chain_async';\nimport numberFormat from './fill/number_format';\nimport modulo from './fill/modulo';\n\n// random\nimport randomColor from './random/random_color';\nimport randomA2B from './random/random_a2b';\nimport randomKey from './random/random_key';\n\n// behavior\nimport lockTouch from './behavior/lock_touch';\nimport copyToClipboard from './behavior/copy_to_clipboard';\n\n// image\nimport checkImageSize from './image/check_image_size';\nimport imageOptimization from './image/image_optimization';\nimport toDataUrl from './image/to_data_url';\n\n// collection\nimport clone from './collection/clone';\nimport values from './collection/values';\nimport entries from './collection/entries';\nimport extend from './collection/extend';\nimport size from './collection/size';\n\n// lodash\nimport getTag from './lodash/get_tag';\nimport hasOwnProperty from './lodash/has_own_property';\nimport isObject from './lodash/is_object';\nimport isDate from './lodash/is_date';\nimport isArray from './lodash/is_array';\nimport isString from './lodash/is_string';\nimport isBoolean from './lodash/is_boolean';\nimport isNumber from './lodash/is_number';\nimport isMap from './lodash/is_map';\nimport isSet from './lodash/is_set';\nimport isSymbol from './lodash/is_symbol';\nimport isFunction from './lodash/is_function';\nimport isEmpty from './lodash/is_empty';\nimport isShallowEqual from './lodash/is_shallow_equal';\nimport has from './lodash/has';\nimport toPath from './lodash/to_path';\nimport reduce from './lodash/reduce';\nimport forEach from './lodash/for_each';\nimport map from './lodash/map';\nimport find from './lodash/find';\nimport findIndex from './lodash/find_index';\nimport get from './lodash/get';\nimport debounce from './lodash/debounce';\nimport throttle from './lodash/throttle';\nimport pick from './lodash/pick';\nimport omit from './lodash/omit';\n\n// string\nimport trim from './string/trim';\nimport fillZero from './string/fill_zero';\nimport longUnique from './string/long_unique';\nimport stripTags from './string/strip_tags';\nimport capitalize from './string/capitalize';\nimport deCapitalize from './string/de_capitalize';\nimport isAbsoluteURL from './string/is_absolute_url';\nimport mapString from './string/map_string';\nimport mask from './string/mask';\nimport splitLines from './string/split_lines';\nimport camelize from './string/camelize';\nimport underscored from './string/underscored';\nimport dasherize from './string/dasherize';\nimport truncate from './string/truncate';\nimport byteSize from './string/byte_size';\nimport byteLen from './string/byte_len';\nimport repeat from './string/repeat';\nimport endsWith from './string/ends_with';\nimport startsWith from './string/starts_with';\nimport containsWith from './string/contains_with';\nimport xssFilter from './string/xss_filter';\nimport effortIndex from './string/effort_Index';\nimport capwords from './string/capwords';\n\n// array\nimport unique from './array/unique';\nimport uniqueBy from './array/unique_by';\nimport uniqueFrom from './array/unique_from';\nimport random from './array/random';\nimport randomSize from './array/random_size';\nimport shuffle from './array/shuffle';\nimport contains from './array/contains';\nimport includesAll from './array/includes_all';\nimport includesAny from './array/includes_any';\nimport removeAt from './array/remove_at';\nimport remove from './array/remove';\nimport compact from './array/compact';\nimport compactAll from './array/compact_all';\nimport pluck from './array/pluck';\nimport union from './array/union';\nimport unionBy from './array/union_by';\nimport unionWith from './array/union_with';\nimport intersect from './array/intersect';\nimport intersectBy from './array/intersect_by';\nimport difference from './array/difference';\nimport differenceBy from './array/difference_by';\nimport max from './array/max';\nimport min from './array/min';\nimport equal from './array/equal';\nimport allEqual from './array/all_equal';\nimport all from './array/all';\nimport any from './array/any';\nimport chunk from './array/chunk';\nimport countBy from './array/count_by';\nimport countOccurrences from './array/count_occurrences';\nimport drop from './array/drop';\nimport dropRight from './array/drop_right';\nimport dropWhile from './array/drop_while';\nimport dropRightWhile from './array/drop_right_while';\nimport column from './array/column';\nimport search from './array/search';\nimport split from './array/split';\nimport unary from './array/unary';\nimport indexBy from './array/index_by';\n\nexport default {\n // version\n version,\n noConflict,\n // device\n ua,\n isIos,\n isIOS: isIos,\n isiPhone,\n isIPad,\n isAndroid,\n isMobile,\n isPC,\n isWeixin,\n isNewsApp,\n isQQ,\n mqqbrowser,\n isTenvideo,\n isWeiShi,\n isIphoneXmodel,\n ieVersion,\n isIE,\n // log\n log,\n logs,\n removeConsole,\n // arg(arguments)\n args,\n trash,\n noop,\n merge,\n over,\n call,\n // bom\n trigger,\n stopPropagation,\n g,\n gc,\n c,\n query,\n show,\n hide,\n elementContains,\n getStyle,\n setStyle,\n attr,\n // other\n uuid,\n hash,\n judge,\n judgment: judge,\n getType,\n isTypeof,\n construct,\n paramsName,\n eventEmitter,\n // object\n properObject,\n objectDiff,\n addedDiff,\n deletedDiff,\n updatedDiff,\n detailedDiff,\n // load\n loadImages,\n loadjs,\n loadcss,\n // json\n toJson,\n toJSON: toJson,\n tojson: toJson,\n jsonp,\n // cookie\n cookie,\n setCookie,\n getCookie,\n deleteCookie,\n delCookie: deleteCookie,\n parseCookie,\n // storage\n storage,\n // http\n open,\n getUrlParam,\n setUrlParam,\n deleteUrlParam,\n delUrlParam: deleteUrlParam,\n objectParam,\n httpGet,\n httpPost,\n // times\n setTimesout,\n clearTimesout,\n getDate,\n formatPassTime,\n formatRemainTime,\n formatDuration,\n sleep,\n // fill\n fill0,\n floor,\n chainAsync,\n numberFormat,\n modulo,\n // random\n randomColor,\n randomA2B,\n randomFromA2B: randomA2B,\n randomKey,\n // behavior\n lockTouch,\n copyToClipboard,\n // image\n checkImageSize,\n imageOptimization,\n toDataUrl,\n // collection\n clone,\n deepClone: clone,\n values,\n entries,\n extend,\n size,\n // lodash\n getTag,\n hasOwnProperty,\n isObject,\n isDate,\n isArray,\n isString,\n isBoolean,\n isNumber,\n isMap,\n isSet,\n isSymbol,\n isFunction,\n isEmpty,\n isShallowEqual,\n has,\n reduce,\n forEach,\n map,\n findIndex,\n find,\n toPath,\n get,\n debounce,\n throttle,\n pick,\n omit,\n // string\n trim,\n fillZero,\n longUnique,\n stripTags,\n capitalize,\n deCapitalize,\n isAbsoluteURL,\n mapString,\n mask,\n splitLines,\n camelize,\n underscored,\n dasherize,\n truncate,\n byteSize,\n byteLen,\n repeat,\n endsWith,\n startsWith,\n containsWith,\n xssFilter,\n effortIndex,\n capwords,\n // array\n unique,\n uniqueBy,\n uniqueFrom,\n random,\n randomSize,\n shuffle,\n contains,\n includesAll,\n includesAny,\n removeAt,\n remove,\n compact,\n compactAll,\n pluck,\n union,\n unionBy,\n unionWith,\n intersect,\n intersectBy,\n difference,\n differenceBy,\n max,\n min,\n equal,\n allEqual,\n all,\n any,\n chunk,\n countBy,\n countOccurrences,\n drop,\n dropRight,\n dropWhile,\n dropRightWhile,\n column,\n search,\n split,\n unary,\n indexBy\n};\n","import ua from './ua';\n\nexport default function iPhone() {\n return /iPhone/.test(ua());\n}\n","import ua from './ua';\n\nexport default function isIPad() {\n return /iPad/.test(ua());\n}\n","import ua from './ua';\n/**\n * detect Android\n * From https://stackoverflow.com/questions/6031412/detect-android-phone-via-javascript-jquery\n */\nexport default function isAndroid() {\n return ua('l').indexOf('android') > -1;\n}\n","import isMobile from './is_mobile';\n\n/**\n * detect PC / Mobile\n * From https://stackoverflow.com/questions/3514784/what-is-the-best-way-to-detect-a-mobile-device-in-jquery\n */\nexport default function isPC() {\n return !isMobile();\n}\n","import ua from './ua';\n\nexport default function isWeixin() {\n return /MicroMessenger/i.test(ua('l')); // 微信\n}\n","import ua from './ua';\n\nexport default function isNewsApp() {\n return /qqnews/.test(ua()); // 腾讯新闻app\n}\n","import ua from './ua';\n\nexport default function isQQ() {\n return /qq\\//.test(ua()); // 手机QQ\n}\n","import ua from './ua';\n\nexport default function mqqbrowser() {\n return /mqqbrowser\\//.test(ua()); // QQ浏览器\n}\n","import ua from './ua';\n\nexport default function isTenvideo() {\n return /qqlivebrowser/.test(ua('l')); // 腾讯视频\n}\n","import ua from './ua';\n\nexport default function isWeiShi() {\n return /weishi/.test(ua('l')); // 腾讯微视\n}\n","export default function isIphoneXmodel() {\n // X XS, XS Max, XR\n const xSeriesConfig = [\n {\n devicePixelRatio: 3,\n width: 375,\n height: 812\n },\n {\n devicePixelRatio: 3,\n width: 414,\n height: 896\n },\n {\n devicePixelRatio: 2,\n width: 414,\n height: 896\n }\n ];\n if (typeof window !== 'undefined' && window) {\n const { devicePixelRatio, screen } = window;\n const { width, height } = screen;\n return xSeriesConfig.some(\n (item) =>\n item.devicePixelRatio === devicePixelRatio && item.width === width && item.height === height\n );\n }\n return false;\n}\n","import ieVersion from './ie_version';\n\nexport default function isIE() {\n return ieVersion() > 0;\n}\n","/************************************************************************\n * LOGS\n *************************************************************************/\n/**\n * log on mobile html body\n */\nimport c from '../bom/c';\nimport g from '../bom/g';\nimport attr from '../bom/attr';\n\nexport default function log(msg, styles) {\n let ele = g('_bbo_log');\n if (ele === null) {\n ele = c('div');\n attr(ele, 'id', '_bbo_log');\n attr('style', 'position:fixed;left:0;top:0;z-index:9999;padding:4px;');\n document.body.appendChild(ele);\n }\n\n if (styles) {\n for (let style in styles) {\n if (Object.prototype.hasOwnProperty.call(styles, style)) {\n ele.style[style] = styles[style];\n }\n }\n }\n ele.innerHTML = msg;\n}\n","import noop from '../args/noop';\nexport default function removeConsole(clear) {\n try {\n if (!window.console) window.console = {};\n window.console.log = window.console.info = window.console.dir = window.console.warn = window.console.trace = noop;\n if (clear === 'clear' && window.console.clear) window.console.clear();\n } catch (e) {}\n}\n","const merge = (...objs) =>\n [...objs].reduce(\n (acc, obj) =>\n Object.keys(obj).reduce((a, k) => {\n acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];\n return acc;\n }, {}),\n {}\n );\n\nexport default merge;\n","const over = (...fns) => (...args) => fns.map((fn) => fn.apply(null, args));\n\nexport default over;\n","const call = (key, ...args) => (context) => context[key](...args);\n\nexport default call;\n","const stopPropagation = (e) => {\n let _e = e || window.event;\n if (_e.stopPropagation) {\n _e.stopPropagation(); // W3C\n } else {\n _e.cancelBubble = true; // IE\n }\n};\n\nexport default stopPropagation;\n","export default function gc(cn) {\n return document.getElementsByClassName(cn);\n}\n","export default function query(i) {\n return document.querySelector(i);\n}\n","const show = (...el) =>\n [...el].forEach((e) => {\n e.style.display = '';\n });\n\nexport default show;\n","const hide = (...el) =>\n [...el].forEach((e) => {\n e.style.display = 'none';\n });\n\nexport default hide;\n","const elementContains = (parent, child) => parent !== child && parent.contains(child);\n\nexport default elementContains;\n","const getStyle = (el, ruleName) => getComputedStyle(el)[ruleName];\n\nexport default getStyle;\n","/**\n * generate uuid\n * From https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = (Math.random() * 16) | 0;\n let v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","const getType = (v) =>\n v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();\n\nexport default getType;\n","export default function construct() {\n let classs = arguments[0];\n return new (Function.prototype.bind.apply(classs, arguments))();\n}\n","/**\n * Gets all the formal parameter names of a function\n * https://www.zhihu.com/question/28912825\n */\nexport default function paramsName(fn) {\n return /\\(\\s*([\\s\\S]*?)\\s*\\)/.exec(fn.toString())[1].split(/\\s*,\\s*/);\n}\n","// https://github.com/mattphillips/deep-object-diff\n\nimport addedDiff from './added_diff';\nimport deletedDiff from './deleted_diff';\nimport updatedDiff from './updated_diff';\n\nconst detailedDiff = (lhs, rhs) => ({\n added: addedDiff(lhs, rhs),\n deleted: deletedDiff(lhs, rhs),\n updated: updatedDiff(lhs, rhs)\n});\n\nexport default detailedDiff;\n","/* eslint-disable no-invalid-this */\n\n/*\n * https://gist.github.com/pete-otaqui/3912307\n */\nimport attr from '../bom/attr';\nimport c from '../bom/c';\nimport randomKey from '../random/random_key';\n\nexport default function loadcss(url, callback) {\n let promise;\n let resolutions = [];\n let rejections = [];\n let resolved = false;\n let rejected = false;\n let id;\n\n id = 'load-css-' + randomKey(5);\n promise = {\n done: function(callback) {\n resolutions.push(callback);\n if (resolved) callback();\n return promise;\n },\n fail: function(callback) {\n rejections.push(callback);\n if (rejected) callback();\n return promise;\n }\n };\n\n function resolve() {\n resolved = true;\n for (let i = 0, len = resolutions.length; i < len; i++) resolutions[i]();\n }\n\n function reject() {\n rejected = true;\n for (let i = 0, len = rejections.length; i < len; i++) rejections[i]();\n }\n\n let link = c('link');\n attr(link, 'id', id);\n attr(link, 'rel', 'stylesheet');\n attr(link, 'type', 'text/css');\n if (typeof link.addEventListener !== 'undefined') {\n link.addEventListener('load', resolve, false);\n link.addEventListener('error', reject, false);\n } else if (typeof link.attachEvent !== 'undefined') {\n link.attachEvent('onload', function() {\n // IE 8 gives us onload for both success and failure\n // and also readyState is always \"completed\", even\n // for failure. The only way to see if a stylesheet\n // load failed from an external domain is to try and\n // access its cssText, and then catch the error\n // ... sweet :/\n let cur;\n let i = document.styleSheets.length;\n try {\n while (i--) {\n cur = document.styleSheets[i];\n if (cur.id === id) {\n resolve();\n return;\n }\n }\n } catch (e) {}\n if (!resolved) {\n reject();\n }\n });\n }\n document.getElementsByTagName('head')[0].appendChild(link);\n attr(link, 'href', url);\n return promise;\n}\n","/* eslint-disable */\nimport noop from '../args/noop';\nimport isFunction from '../lodash/is_function';\nimport randomKey from '../random/random_key';\n\n/**\n * Options:\n * - param {String} qs parameter (`callback`)\n * - prefix {String} qs parameter (`bbo`)\n * - name {String} qs parameter (`prefix` + incr)\n * - timeout {Number} how long after a timeout error is emitted (`60000`)\n * @param {String} url\n * @param {Object|Function} optional options / callback\n * @param {Function} optional callback\n */\n\nfunction jsonp(url, opts, fn) {\n if (isFunction(opts)) {\n fn = opts;\n opts = {};\n }\n if (!opts) opts = {};\n\n var prefix = opts.prefix || 'bbo';\n var id = opts.name || prefix + randomKey(10);\n\n var param = opts.param || 'callback';\n var timeout = null != opts.timeout ? opts.timeout : 60000;\n var enc = encodeURIComponent;\n var target = document.getElementsByTagName('script')[0] || document.head;\n var script;\n var timer;\n\n if (timeout) {\n timer = setTimeout(function() {\n cleanup();\n if (fn) fn(new Error('Timeout'));\n }, timeout);\n }\n\n function cleanup() {\n if (script.parentNode) script.parentNode.removeChild(script);\n window[id] = noop();\n if (timer) clearTimeout(timer);\n }\n\n function cancel() {\n if (window[id]) {\n cleanup();\n }\n }\n\n window[id] = function(data) {\n cleanup();\n if (fn) fn(data, null);\n };\n\n url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id);\n url = url.replace('?&', '?');\n script = document.createElement('script');\n script.src = url;\n target.parentNode.insertBefore(script, target);\n\n return cancel;\n}\n\nexport default jsonp;\n","const getCookie = (name) => {\n let nameEQ = encodeURIComponent(name) + '=';\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n\n return null;\n};\n\nexport default getCookie;\n","const parseCookie = (str) =>\n str\n .split(';')\n .map((v) => v.split('='))\n .reduce((acc, v) => {\n acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());\n return acc;\n }, {});\n\nexport default parseCookie;\n","import setStyle from './set_style';\nimport attr from './attr';\nimport trigger from './trigger';\nimport g from './g';\nimport c from './c';\n\n/**\n * open new url dont not blocked by browser\n */\nconst open = (href) => {\n let id = '_bbo_open_proxy';\n let a = g(id) || c('a', id, '', id);\n setStyle(a, 'display', 'none');\n attr(a, 'href', href);\n attr(a, 'target', '_blank');\n if (!a.parentNode) document.body.appendChild(a);\n trigger(a, 'click', 'MouseEvents');\n};\n\nexport default open;\n","/**\n * getUrlParam / deleteUrlParam\n * From https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n */\nconst getUrlParam = (name, url = window.location.href) => {\n name.replace(/[\\[\\]]/g, '\\\\$&');\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n let results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nexport default getUrlParam;\n","/**\n * setUrlParam\n * From https://stackoverflow.com/questions/5999118/add-or-update-query-string-parameter\n */\nconst setUrlParam = (key, value, url = window.location.href) => {\n let re = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n\n if (url.match(re)) {\n return url.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');\n } else {\n let hash = '';\n if (url.indexOf('#') !== -1) {\n hash = url.replace(/.*#/, '#');\n url.replace(/#.*/, '');\n }\n let separator = url.indexOf('?') !== -1 ? '&' : '?';\n return url + separator + key + '=' + encodeURIComponent(value) + hash;\n }\n};\n\nexport default setUrlParam;\n","const httpGet = (url, callback, err = console.error) => {\n const request = new XMLHttpRequest();\n request.open('GET', url, true);\n request.onload = () => callback(request.responseText);\n request.onerror = () => err(request);\n request.send();\n};\n\nexport default httpGet;\n","// eslint-disable-next-line max-params\nconst httpPost = (url, data, callback, err = console.error) => {\n const request = new XMLHttpRequest();\n request.open('POST', url, true);\n request.setRequestHeader('Content-type', 'application/json; charset=utf-8');\n request.onload = () => callback(request.responseText);\n request.onerror = () => err(request);\n request.send(data);\n};\n\nexport default httpPost;\n","import args from '../args/args';\n/**\n * setInterval func fix times\n * https://stackoverflow.com/questions/2956966/javascript-telling-setinterval-to-only-fire-x-amount-of-times\n */\nexport default function setTimesout() {\n let func = arguments[0];\n let delay = arguments[1] === undefined ? 0 : parseFloat(arguments[1]);\n let times = arguments[2] === undefined ? 1 : parseInt(arguments[2], 10);\n let _args = arguments.length > 3 ? args(arguments, 3) : null;\n let target = {\n index: 0,\n times: times,\n over: false\n };\n\n let id = setInterval(function() {\n target.index++;\n if (target.index > times) {\n clearInterval(id);\n } else {\n if (target.index === times) target.over = true;\n func.apply(target, _args);\n }\n }, delay);\n\n return id;\n}\n","export default function clearTimesout(id) {\n clearInterval(id);\n}\n","/**\n * @ zh_cn\n * @desc 格式化${startTime}距现在的已过时间\n * @param {Date} startTime\n * @return {String}\n */\nconst formatPassTime = (startTime) => {\n let currentTime = Date.parse(new Date());\n let time = currentTime - startTime;\n let day = parseInt(time / (1000 * 60 * 60 * 24), 10);\n let hour = parseInt(time / (1000 * 60 * 60), 10);\n let min = parseInt(time / (1000 * 60), 10);\n let month = parseInt(day / 30, 10);\n let year = parseInt(month / 12, 10);\n if (year) return year + '年前';\n if (month) return month + '个月前';\n if (day) return day + '天前';\n if (hour) return hour + '小时前';\n if (min) return min + '分钟前';\n else return '刚刚';\n};\n\nexport default formatPassTime;\n","/**\n * @ zh_cn\n * @desc 格式化现在距${endTime}的剩余时间\n * @param {Date} endTime\n * @return {String}\n */\nconst formatRemainTime = (endTime) => {\n let startDate = new Date(); // 开始时间\n let endDate = new Date(endTime); // 结束时间\n let t = endDate.getTime() - startDate.getTime(); // 时间差\n let d = 0;\n let h = 0;\n let m = 0;\n let s = 0;\n if (t >= 0) {\n d = Math.floor(t / 1000 / 3600 / 24);\n h = Math.floor((t / 1000 / 60 / 60) % 24);\n m = Math.floor((t / 1000 / 60) % 60);\n s = Math.floor((t / 1000) % 60);\n }\n return d + '天 ' + h + '小时 ' + m + '分钟 ' + s + '秒';\n};\n\nexport default formatRemainTime;\n","/**\n * @ en\n * bbo.formatDuration(1001); // '1 second, 1 millisecond'\n * bbo.formatDuration(34325055574); // '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'\n */\nconst formatDuration = (ms) => {\n // eslint-disable-next-line no-param-reassign\n if (ms < 0) ms = -ms;\n const time = {\n day: Math.floor(ms / 86400000),\n hour: Math.floor(ms / 3600000) % 24,\n minute: Math.floor(ms / 60000) % 60,\n second: Math.floor(ms / 1000) % 60,\n millisecond: Math.floor(ms) % 1000\n };\n return Object.entries(time)\n .filter((val) => val[1] !== 0)\n .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)\n .join(', ');\n};\n\nexport default formatDuration;\n","const floor = (n, m = 0) => {\n return Math.floor(n * Math.pow(10, m)) / Math.pow(10, m);\n};\n\nexport default floor;\n","const chainAsync = (fns) => {\n let curr = 0;\n const last = fns[fns.length - 1];\n const next = () => {\n const fn = fns[curr++];\n fn === last ? fn() : fn(next);\n };\n next();\n};\n\nexport default chainAsync;\n","/**\n * https://locutus.io/php/\n */\n// eslint-disable-next-line max-params\nconst numberFormat = (number, decimals, decPoint, thousandsSep) => {\n // example 1: bbo.math.numberFormat(1234.56)\n // returns 1: '1,235'\n // example 2: bbo.math.numberFormat(1234.56, 2, ',', ' ')\n // returns 2: '1 234,56'\n // example 3: bbo.math.numberFormat(1234.5678, 2, '.', '')\n // returns 3: '1234.57'\n // example 4: bbo.math.numberFormat(67, 2, ',', '.')\n // returns 4: '67,00'\n // example 5: bbo.math.numberFormat(1000)\n // returns 5: '1,000'\n // example 6: bbo.math.numberFormat(67.311, 2)\n // returns 6: '67.31'\n // example 7: bbo.math.numberFormat(1000.55, 1)\n // returns 7: '1,000.6'\n // example 8: bbo.math.numberFormat(67000, 5, ',', '.')\n // returns 8: '67.000,00000'\n // example 9: bbo.math.numberFormat(0.9, 0)\n // returns 9: '1'\n // example 10: bbo.math.numberFormat('1.20', 2)\n // returns 10: '1.20'\n // example 11: bbo.math.numberFormat('1.20', 4)\n // returns 11: '1.2000'\n // example 12: bbo.math.numberFormat('1.2000', 3)\n // returns 12: '1.200'\n // example 13: bbo.math.numberFormat('1 000,50', 2, '.', ' ')\n // returns 13: '100 050.00'\n // example 14: bbo.math.numberFormat(1e-8, 8, '.', '')\n // returns 14: '0.00000001'\n\n let _number = String(number).replace(/[^0-9+\\-Ee.]/g, '');\n let _decimals = decimals;\n let n = !isFinite(Number(_number)) ? 0 : Number(_number);\n let prec = !isFinite(Number(_decimals)) ? 0 : Math.abs(_decimals);\n let sep = typeof thousandsSep === 'undefined' ? ',' : thousandsSep;\n let dec = typeof decPoint === 'undefined' ? '.' : decPoint;\n let s = '';\n\n let toFixedFix = function(n, prec) {\n if (String(n).indexOf('e') === -1) {\n return Number(Math.round(n + 'e+' + prec) + 'e-' + prec);\n } else {\n let arr = String(n).split('e');\n let sig = '';\n if (Number(arr[1]) + prec > 0) {\n sig = '+';\n }\n return Number(\n Math.round(Number(arr[0]) + 'e' + sig + (Number(arr[1]) + prec)) + 'e-' + prec\n ).toFixed(prec);\n }\n };\n\n // @todo: for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec).toString() : String(Math.round(n))).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n\n return s.join(dec);\n};\n\nexport default numberFormat;\n","/**\n * modulo of a number and a divisor\n */\n\nexport default function modulo(n, d) {\n // bbo.modulo(7, 5); // 2\n // bbo.modulo(17, 23); // 17\n // bbo.modulo(16.2, 3.8); // 1\n // bbo.modulo(5.8, 3.4); //2.4\n // bbo.modulo(4, 0); // 4\n // bbo.modulo(-7, 5); // 3\n // bbo.modulo(-2, 15); // 13\n // bbo.modulo(-5.8, 3.4); // 1\n // bbo.modulo(12, -1); // NaN\n // bbo.modulo(-3, -8); // NaN\n // bbo.modulo(12, 'apple'); // NaN\n // bbo.modulo('bee', 9); // NaN\n // bbo.modulo(null, undefined); // NaN\n\n if (d === 0) {\n return n;\n }\n if (d < 0) {\n return NaN;\n }\n return ((n % d) + d) % d;\n}\n","export default function randomColor() {\n return '#' + ('00000' + ((Math.random() * 0x1000000) << 0).toString(16)).slice(-6);\n}\n","/**\n * lock touch in mobile phone\n */\nconst lockTouch = () => {\n document.addEventListener(\n 'touchmove',\n function(e) {\n e.preventDefault();\n },\n !1\n );\n document.addEventListener('touchstart', preventDefault, !1);\n document.addEventListener('touchend', preventDefault, !1);\n\n function not(e, tag) {\n return e.target.tagName !== tag.toUpperCase() && e.target.tagName !== tag.toLowerCase();\n }\n\n function preventDefault(e) {\n if (not(e, 'input') && not(e, 'textarea') && not(e, 'select') && not(e, 'menus'))\n e.preventDefault();\n }\n};\n\nexport default lockTouch;\n","import attr from '../bom/attr';\nimport setStyle from '../bom/set_style';\n\nexport default function copyToClipboard(str) {\n const el = document.createElement('textarea');\n el.value = str;\n attr(el, 'readonly', '');\n setStyle(el, 'position', 'absolute');\n setStyle(el, 'left', '-9999px');\n document.body.appendChild(el);\n const selected =\n document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false;\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n }\n}\n","/**\n * Image optimization\n * Gif images are not supported\n * @param {(Object|String)} - image ,supported File Object or Data URLs\n * @param {Number} [quality = 0.9] - Image quality, between 0 - 1, only image/jpeg or image/webp is accept.\n * @param {Object} [options = {}] - Image options\n * @param {Number} [options.maxWidth = 1920] - The maximum width of the output picture.\n * If the original width of the picture is less than this width, the original size picture is returned.\n * If the original width of the picture is greater than the width, the picture scaled to the size is returned.\n * @param {String} [options.mimeType] - Output image type,Types of MIME.\n * @returns {Object} Promise , resolve Function parameters are optimized pictures Blob Object,\n * If the output type is image/gif,Then return as is image Parameter content.\n */\n\nimport isString from '../lodash/is_string';\n\nconst imageOptimization = (image, quality = 0.9, { maxWidth = 1920, mimeType } = {}) => {\n return new Promise((resolve, reject) => {\n if (image instanceof File) {\n const reader = new FileReader();\n reader.onload = function() {\n toBlob(this.result);\n };\n reader.readAsDataURL(image);\n } else if (isString(image)) {\n toBlob(image);\n }\n\n /**\n * To Blob\n * @param {String} data - Image: Data URL\n */\n function toBlob(data) {\n const type = data.match(/data:([^;,]+)/);\n if (Array.isArray(type)) {\n const outputType = mimeType ? mimeType : type[1];\n\n if (outputType === 'image/gif') {\n return resolve(image);\n }\n\n const virtualImage = new Image();\n virtualImage.src = data;\n virtualImage.onload = function() {\n let width = this.naturalWidth;\n let height = this.naturalHeight;\n if (width > maxWidth) {\n height = Math.round((maxWidth * height) / width);\n width = maxWidth;\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n context.drawImage(this, 0, 0, width, height);\n canvas.toBlob(\n (blob) => {\n resolve(blob);\n },\n mimeType ? mimeType : type[1],\n quality\n );\n };\n } else {\n reject(new Error('Non-picture type Data URLs'));\n }\n }\n });\n};\n\nexport default imageOptimization;\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\nimport isArray from '../lodash/is_array';\n\nexport default function values(obj) {\n let result = [];\n if (isArray(obj)) {\n return obj.slice(0);\n }\n if (isObject(obj) || isFunction(obj)) {\n let keys = Object.keys(obj);\n let len = keys.length;\n for (let i = 0; i < len; i++) {\n result.push(obj[keys[i]]);\n }\n return result;\n }\n throw new Error('argument to `values` must be an object');\n}\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\n\nexport default function entries(obj) {\n if ((!isObject(obj) && !isFunction(obj)) || obj === null) {\n throw new Error('argument to `entries` must be an object');\n }\n\n let result = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n}\n","import isArray from '../lodash/is_array';\nimport isString from '../lodash/is_string';\nimport isMap from '../lodash/is_map';\nimport isSet from '../lodash/is_set';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n */\nexport default function size(collection) {\n if (collection === null) {\n return 0;\n }\n if (isArray(collection) || isString(collection)) {\n return collection.length;\n }\n\n if (isMap(collection) || isSet(collection)) {\n return collection.size;\n }\n\n return Object.keys(collection).length;\n}\n","import hasOwnProperty from './has_own_property';\n\nexport default function has(object, key) {\n return object !== null && hasOwnProperty(object, key);\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function reduce(src, func) {\n let i = 0;\n let acc = arguments[2];\n if (isArray(src)) {\n if (arguments.length !== 3) {\n acc = src[0];\n }\n while (i < src.length) {\n acc = func(acc, src[i], i, src);\n i += 1;\n }\n return acc;\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n if (arguments.length !== 3) {\n acc = src[keys[0]];\n }\n while (i < keys.length) {\n const key = keys[i];\n acc = func(acc, src[key], key, src);\n i += 1;\n }\n return acc;\n }\n return acc;\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function map(src, func) {\n const rst = [];\n let i = 0;\n if (isArray(src)) {\n while (i < src.length) {\n rst.push(func(src[i], i, src));\n i += 1;\n }\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n while (i < keys.length) {\n const key = keys[i];\n rst.push(func(src[key], key, src));\n i += 1;\n }\n }\n return rst;\n}\n","import forEach from './for_each';\nimport isFunction from './is_function';\nimport isObject from './is_object';\nimport is from './is';\nimport isShallowEqual from './is_shallow_equal';\n\nexport default function find(src, func) {\n // eslint-disable-next-line no-undef-init\n let rst = undefined;\n forEach(src, (item, key, obj) => {\n if (isFunction(func)) {\n if (func(item, key, obj) === true) {\n rst = item;\n return false;\n }\n } else if (is(item, func)) {\n rst = item;\n return false;\n } else if (isObject(item) && isObject(func)) {\n let subEqual = true;\n forEach(func, (v, k) => {\n subEqual = isShallowEqual(item[k], v);\n return subEqual;\n });\n if (subEqual) {\n rst = item;\n return false;\n }\n }\n });\n return rst;\n}\n","import isString from './is_string';\nimport stringToPath from './string_to_path';\n\nexport default function toPath(value) {\n if (!isString(value)) {\n return [];\n }\n return stringToPath(value);\n}\n","import isString from './is_string';\nimport isSymbol from './is_symbol';\nimport isArray from './is_array';\n\nexport default function get(obj, propsArg, defaultValue) {\n if (!obj) {\n return defaultValue;\n }\n let props;\n let prop;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (isString(propsArg)) {\n props = propsArg.split('.');\n }\n if (isSymbol(propsArg)) {\n props = [propsArg];\n }\n if (!isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n while (props.length) {\n prop = props.shift();\n if (!obj) {\n return defaultValue;\n }\n // eslint-disable-next-line no-param-reassign\n obj = obj[prop];\n if (obj === undefined) {\n return defaultValue;\n }\n }\n return obj;\n}\n","/* eslint-disable no-invalid-this */\nexport default function debounce(fn, wait, callFirst) {\n let timeout;\n return function() {\n if (!wait) {\n return fn.apply(this, arguments);\n }\n let context = this;\n let args = arguments;\n let callNow = callFirst && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(function() {\n timeout = null;\n if (!callNow) {\n return fn.apply(context, args);\n }\n }, wait);\n\n if (callNow) {\n return fn.apply(this, arguments);\n }\n };\n}\n","/* eslint-disable no-invalid-this */\nexport default function throttle(fn, interval, callFirst) {\n let wait = false;\n let callNow = false;\n return function() {\n callNow = callFirst && !wait;\n let context = this;\n let args = arguments;\n if (!wait) {\n wait = true;\n setTimeout(function() {\n wait = false;\n if (!callFirst) {\n return fn.apply(context, args);\n }\n }, interval);\n }\n if (callNow) {\n callNow = false;\n return fn.apply(this, arguments);\n }\n };\n}\n","/* eslint-disable */\nconst pick = (obj, arr) =>\n arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});\n\nexport default pick;\n","/* eslint-disable no-return-assign */\n/* eslint-disable no-sequences */\nconst omit = (obj, arr) =>\n Object.keys(obj)\n .filter((k) => !arr.includes(k))\n .reduce((acc, key) => ((acc[key] = obj[key]), acc), {});\n\nexport default omit;\n","/**\n * Remove spaces after removing previous string\n */\nimport isEmpty from '../lodash/is_empty';\n\nexport default function trim(str) {\n if (isEmpty(str)) {\n return str;\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n}\n","/**\n * Increase by 0 based on string length before string\n */\nexport default function fillZero(target, n) {\n let z = new Array(n).join('0');\n let str = z + target;\n let result = str.slice(-n);\n return result;\n}\n","/**\n * Long string unique\n */\nexport default function longUnique(target) {\n let json = {};\n for (let index = 0; index < target.length; index++) {\n if (!json[target[index]]) {\n json[target[index]] = -1;\n }\n }\n let longString = '';\n for (let index = 0; index < target.length; index++) {\n if (json[target[index]]) {\n json[target[index]] = 0;\n longString = longString + target[index];\n }\n }\n return longString;\n}\n","/**\n * Remove the html tags inside the script\n */\nexport default function stripTags(target) {\n return target.replace(/]*>(\\S\\s*?)<\\/script>/gim, '').replace(/<[^>]+>/g, '');\n}\n","/**\n * Capitalizes the first letter of a string.\n */\nexport default function capitalize(target) {\n return target.charAt(0).toUpperCase() + target.slice(1).toLowerCase();\n}\n","/**\n * DeCapitalizes the first letter of a string.\n */\n\nconst deCapitalize = ([first, ...rest], upperRest = false) =>\n first.toLowerCase() + (upperRest ? rest.join('').toUpperCase() : rest.join(''));\n\nexport default deCapitalize;\n","/**\n * Returns true if the given string is an absolute URL, false otherwise.\n */\nconst isAbsoluteURL = (str) => /^[a-z][a-z0-9+.-]*:/.test(str);\n\nexport default isAbsoluteURL;\n","/**\n * Creates a new string with the results of calling a provided function\n * on every character in the calling string.\n */\nconst mapString = (str, fn) =>\n str\n .split('')\n .map((c, i) => fn(c, i, str))\n .join('');\n\nexport default mapString;\n","/**\n * Replaces all but the last num of characters with the specified mask character.\n */\nconst mask = (cc, num = 4, mask = '*') => `${cc}`.slice(-num).padStart(`${cc}`.length, mask);\nexport default mask;\n","/**\n * splitLines('This\\nis a\\nmultiline\\nstring.\\n') =>\n * ['This', 'is a', 'multiline', 'string.' , '']\n */\nexport default function splitLines(str) {\n str.split(/\\r?\\n/);\n}\n","/**\n * _ or - to CamelCase\n */\nexport default function camelize(target) {\n if (target.indexOf('-') < 0 && target.indexOf('_') < 0) {\n return target;\n }\n return target.replace(/[-_][^-_]/g, function(match) {\n return match.charAt(1).toUpperCase();\n });\n}\n","import underscored from './underscored';\n/**\n * Turn '_' in a string into '-'\n */\nexport default function dasherize(target) {\n return underscored(target).replace(/_/g, '-');\n}\n","/**\n * Truncates a string up to a specified length.\n * The default length is 3, and the truncated symbol defaults '...'\n */\nconst truncate = (str, num) =>\n str.length > num ? str.slice(0, num > 3 ? num - 3 : num) + '...' : str;\n\nexport default truncate;\n","/**\n * Returns the length of a string in bytes.\n */\nexport default function byteSize(str) {\n return new Blob([str]).size;\n}\n","/**\n * Returns the length of a string in bytes by Unicode (utf-8 utf8 utf-16 utf16)\n */\nexport default function byteLen(str, charset) {\n let target = 0;\n let charCode;\n let i;\n let len;\n let _charset = charset ? charset.toLowerCase() : '';\n if (_charset === 'utf-16' || _charset === 'utf16') {\n for (i = 0, len = str.length; i < len; i++) {\n charCode = str.charCodeAt(i);\n if (charCode <= 0xffff) {\n target += 2;\n } else {\n target += 4;\n }\n }\n } else {\n for (i = 0, len = str.length; i < len; i++) {\n charCode = str.charCodeAt(i);\n if (charCode <= 0x007f) {\n target += 1;\n } else if (charCode <= 0x07ff) {\n target += 2;\n } else if (charCode <= 0xffff) {\n target += 3;\n } else {\n target += 4;\n }\n }\n }\n return target;\n}\n","/**\n * Repeat item, times times\n */\nexport default function repeat(item, times) {\n let s = item;\n let target = '';\n while (times > 0) {\n if (times % 2 === 1) {\n target += s;\n }\n if (times === 1) {\n break;\n }\n s += s;\n // eslint-disable-next-line no-param-reassign\n times = times >> 1;\n }\n return target;\n}\n","/**\n * Item is the end of the target\n */\nexport default function endsWith(target, item, ignore) {\n let str = target.slice(-item.length);\n return ignore ? str.toLowerCase() === item.toLowerCase() : str === item;\n}\n","/**\n * Item is the beginning of the target\n */\nexport default function startsWith(target, item, ignore) {\n let str = target.slice(0, item.length);\n return ignore ? str.toLowerCase() === item.toLowerCase() : str === item;\n}\n","/**\n * XSS string filtering\n */\nexport default function xssFilter(str) {\n return str\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n","export default function sindex(s, sep) {\n // discuss at: https://locutus.io/golang/strings/Index\n // original by: Kevin van Zonneveld (https://kvz.io)\n // example 1: Index('Kevin', 'K')\n // returns 1: 0\n // example 2: Index('Kevin', 'Z')\n // returns 2: -1\n return String(s).indexOf(sep);\n}\n","export default function capwords(str) {\n // example 1: capwords('kevin van zonneveld')\n // returns 1: 'Kevin Van Zonneveld'\n // example 2: capwords('HELLO WORLD')\n // returns 2: 'HELLO WORLD'\n\n let pattern = /^([a-z\\u00E0-\\u00FC])|\\s+([a-z\\u00E0-\\u00FC])/g;\n return String(str).replace(pattern, function($1) {\n return $1.toUpperCase();\n });\n}\n","/**\n * Returns all unique values of an array.\n */\n\nconst unique = (arr) => [...new Set(arr)];\n\nexport default unique;\n","/**\n * Returns all unique values of an array, based on a provided comparator function.\n */\nconst uniqueBy = (arr, fn) =>\n arr.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x))) acc.push(v);\n return acc;\n }, []);\n\nexport default uniqueBy;\n","/**\n * Remove duplicates from an array of objects\n * https://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript\n */\nexport default function uniqueFrom(arr, target) {\n return Object.values(arr.reduce((acc, cur) => Object.assign(acc, { [cur[target]]: cur }), {}));\n}\n","/**\n * Returns a random element from an array.\n */\nconst random = (arr) => arr[Math.floor(Math.random() * arr.length)];\n\nexport default random;\n","/**\n * Gets n random elements at unique keys from array up to the size of array.\n */\nexport default function randomSize([...arr], n = 1) {\n let m = arr.length;\n while (m) {\n const i = Math.floor(Math.random() * m--);\n [arr[m], arr[i]] = [arr[i], arr[m]];\n }\n return arr.slice(0, n);\n}\n","/**\n * Randomizes the order of the values of an array, returning a new array.\n */\nexport default function shuffle([...arr]) {\n let m = arr.length;\n while (m) {\n const i = Math.floor(Math.random() * m--);\n [arr[m], arr[i]] = [arr[i], arr[m]];\n }\n return arr;\n}\n","/**\n * Returns true if the element has the specified Array, false otherwise.\n */\nexport default function contains(target, item) {\n return target.indexOf(item) > -1;\n}\n","/**\n * Returns true if all the elements values are included in arr, false otherwise.\n */\nconst includesAll = (arr, values) => values.every((v) => arr.includes(v));\n\nexport default includesAll;\n","/**\n * Returns true if at least one element of values is included in arr , false otherwise.\n */\nconst includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nexport default includesAny;\n","/**\n * Remove the element specified by parameter 2 in parameter 1 and return Boolean\n */\nexport default function removeAt(target, index) {\n return !!target.splice(index, 1).length;\n}\n","import isArray from '../lodash/is_array';\n\nexport default function remove(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n throw new Error('expected both arguments to be arrays');\n }\n let result = [];\n let len = arr1.length;\n for (let i = 0; i < len; i++) {\n let elem = arr1[i];\n if (arr2.indexOf(elem) === -1) {\n result.push(elem);\n }\n }\n return result;\n}\n","/**\n * returns a copy of an array with falsey values removed\n */\n\nimport isArray from '../lodash/is_array';\n\nexport default function compact(arr) {\n if (!isArray(arr)) {\n throw new Error('expected an array');\n }\n let result = [];\n let len = arr.length;\n for (let i = 0; i < len; i++) {\n let elem = arr[i];\n if (elem) {\n result.push(elem);\n }\n }\n return result;\n}\n","/**\n * Removes falsy values from an array.\n * (false, null, 0, \"\", undefined, and NaN).\n */\nconst compactAll = (arr) => arr.filter(Boolean);\nexport default compactAll;\n","/**\n * Get the attribute values in an array object and combine them into a new array\n */\nexport default function pluck(target, name) {\n let result = [];\n let temp;\n target.forEach(function(item) {\n temp = item[name];\n if (temp !== null) {\n result.push(temp);\n }\n });\n return result;\n}\n","/**\n * Returns every element that exists in any of the two arrays once\n * Create a Set with all values of a and b and convert to an array.\n */\nconst union = (a, b) => Array.from(new Set([...a, ...b]));\n\nexport default union;\n","/**\n * Returns every element that exists in any of the two arrays once,\n * after applying the provided function to each array element of both.\n */\nconst unionBy = (a, b, fn) => {\n const s = new Set(a.map(fn));\n return Array.from(new Set([...a, ...b.filter((x) => !s.has(fn(x)))]));\n};\n\nexport default unionBy;\n","/**\n * Returns every element that exists in any of the two arrays once,\n * using a provided comparator function.\n */\nconst unionWith = (a, b, comp) => {\n Array.from(new Set([...a, ...b.filter((x) => a.findIndex((y) => comp(x, y)) === -1)]));\n};\n\nexport default unionWith;\n","/**\n * Returns a list of elements that exist in both arrays.\n */\nexport default function intersect(a, b) {\n const s = new Set(b);\n return a.filter((x) => s.has(x));\n}\n","/**\n * Returns a list of elements that exist in both arrays,\n * after applying the provided function to each array element of both.\n */\nexport default function intersectBy(a, b, fn) {\n const s = new Set(b.map(fn));\n return a.filter((x) => s.has(fn(x)));\n}\n","/**\n * Returns the difference between two arrays.\n * Create a Set from b, then use Array.prototype.\n * Filter() on a to only keep values not contained in b.\n */\nexport default function difference(a, b) {\n const s = new Set(b);\n return a.filter((x) => !s.has(x));\n}\n","/**\n * Returns the difference between two arrays,\n * after applying the provided function to each array element of both.\n */\nexport default function differenceBy(a, b, fn) {\n const s = new Set(b.map(fn));\n return a.map(fn).filter((el) => !s.has(el));\n}\n","/**\n * Returns the largest element in an array\n */\nexport default function max(target) {\n return Math.max.apply(0, target);\n}\n","/**\n * Returns the smallest element in an array\n */\nexport default function min(target) {\n return Math.min.apply(0, target);\n}\n","/**\n * Check two arrays are equal\n */\nexport default function equal(arr1, arr2) {\n if (arr1 === arr2) return true;\n if (arr1.length !== arr2.length) return false;\n for (let i = 0; i < arr1.length; ++i) {\n if (arr1[i] !== arr2[i]) return false;\n }\n return true;\n}\n","/**\n * Check if all elements in an array are equal.\n */\nconst allEqual = (arr) => arr.every((val) => val === arr[0]);\n\nexport default allEqual;\n","/**\n * Returns true if the provided predicate function returns true for all elements in a collection, false otherwise.\n */\nconst all = (arr, fn = Boolean) => arr.every(fn);\n\nexport default all;\n","/**\n * Returns true if the provided predicate function returns true for at least one element in a collection,\n * false otherwise.\n */\nconst any = (arr, fn = Boolean) => arr.some(fn);\n\nexport default any;\n","/**\n * Chunks an array into smaller arrays of a specified size.\n */\nconst chunk = (arr, size) => {\n Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>\n arr.slice(i * size, i * size + size)\n );\n};\n\nexport default chunk;\n","/**\n * Groups the elements of an array based on the given function and returns the count of elements in each group.\n */\nconst countBy = (arr, fn) => {\n arr.map(typeof fn === 'function' ? fn : (val) => val[fn]).reduce((acc, val) => {\n acc[val] = (acc[val] || 0) + 1;\n return acc;\n }, {});\n};\n\nexport default countBy;\n","/**\n * Counts the occurrences of a value in an array.\n */\nconst countOccurrences = (arr, val) => {\n arr.reduce((a, v) => (v === val ? a + 1 : a), 0);\n};\n\nexport default countOccurrences;\n","/**\n * Returns a new array with n elements removed from the left.\n */\nconst drop = (arr, n = 1) => arr.slice(n);\n\nexport default drop;\n","/**\n * Returns a new array with n elements removed from the right.\n */\nconst dropRight = (arr, n = 1) => arr.slice(0, -n);\n\nexport default dropRight;\n","/**\n * Removes elements in an array until the passed function returns true.\n * Returns the remaining elements in the array.\n */\nexport default function dropWhile(arr, func) {\n let _arr = arr;\n while (_arr.length > 0 && !func(_arr[0])) _arr = _arr.slice(1);\n return _arr;\n}\n","/**\n * Removes elements from the end of an array until the passed function returns true,\n * Returns the remaining elements in the array.\n */\nexport default function dropRightWhile(arr, func) {\n let rightIndex = arr.length;\n while (rightIndex-- && !func(arr[rightIndex]));\n return arr.slice(0, rightIndex + 1);\n}\n","/**\n * discuss at: https://locutus.io/php/array_column/\n */\nimport isObject from '../lodash/is_object';\nimport isArray from '../lodash/is_array';\n\nexport default function column(input, ColumnKey, IndexKey = null) {\n if (input !== null && (isObject(input) || isArray(input))) {\n let newarray = [];\n if (isObject(input)) {\n let temparray = [];\n for (let key of Object.keys(input)) {\n temparray.push(input[key]);\n }\n // eslint-disable-next-line no-param-reassign\n input = temparray;\n }\n if (isArray(input)) {\n for (let key of input.keys()) {\n if (IndexKey && input[key][IndexKey]) {\n if (ColumnKey) {\n newarray[input[key][IndexKey]] = input[key][ColumnKey];\n } else {\n newarray[input[key][IndexKey]] = input[key];\n }\n } else {\n if (ColumnKey) {\n newarray.push(input[key][ColumnKey]);\n } else {\n newarray.push(input[key]);\n }\n }\n }\n }\n // eslint-disable-next-line prefer-object-spread\n return Object.assign({}, newarray);\n }\n}\n","export default function search(needle, haystack, argStrict) {\n // discuss at: https://locutus.io/php/array_search/'\n // example 1: bbo.array.search('3', {a: 3, b: 5, c: 7})\n // returns 1: 'a'\n\n let strict = !!argStrict;\n let key = '';\n let _needle = needle;\n\n if (typeof _needle === 'object' && _needle.exec) {\n // Duck-type for RegExp\n if (!strict) {\n // Let's consider case sensitive searches as strict\n let flags =\n 'i' +\n (_needle.global ? 'g' : '') +\n (_needle.multiline ? 'm' : '') +\n // sticky is FF only\n (_needle.sticky ? 'y' : '');\n _needle = new RegExp(_needle.source, flags);\n }\n for (key in haystack) {\n if (haystack.hasOwnProperty(key)) {\n if (_needle.test(haystack[key])) {\n return key;\n }\n }\n }\n return false;\n }\n\n for (key in haystack) {\n if (haystack.hasOwnProperty(key)) {\n // eslint-disable-next-line eqeqeq\n if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {\n return key;\n }\n }\n }\n\n return false;\n}\n","import isNumber from '../lodash/is_number';\nimport isArray from '../lodash/is_array';\n\nexport default function split(arr, n) {\n if (!isArray(arr)) {\n throw new Error('expected an array for the first argument');\n }\n if (n !== null && !isNumber(n)) {\n throw new Error('expected a number or null for the second argument');\n }\n // eslint-disable-next-line no-param-reassign\n n = n !== null ? n : arr.length;\n let len = arr.length;\n let groups = [];\n for (let i = 0; i < len; i += n) {\n groups.push(arr.slice(i, i + n));\n }\n return groups;\n}\n","const unary = (fn) => (val) => fn(val);\n\nexport default unary;\n","/**\n * return an object from an array, keyed by the value at the given id\n */\n\nimport isArray from '../lodash/is_array';\nimport isString from '../lodash/is_string';\n\nexport default function indexBy(arr, key) {\n // bbp.indexBy([{id: 'first', val: 1}, {id: 'second', val: 2}], 'id');\n // => {first: {id: 'first', val: 1}, second: {id: // 'second', val: 2}}\n // indexBy([{id: 'first', val: 1}, null], 'id');\n // => {first: {id: 'first', val: 1}}\n // indexBy([], 'id'); // => {}\n // indexBy([], null); // => throws\n // indexBy({}, 'id'); // => throws\n\n if (!isArray(arr)) {\n throw new Error('expected an array for first argument');\n }\n if (!isString(key)) {\n throw new Error('expected a string for second argument');\n }\n let result = {};\n let len = arr.length;\n for (let i = 0; i < len; i++) {\n let index = arr[i] && arr[i][key];\n\n if (index) {\n result[index] = arr[i];\n }\n }\n return result;\n}\n","/* eslint-disable no-invalid-this */\nimport functions from 'functions';\n\nfunction ChainWrapper(subject, explicitChain) {\n this._wrappedValue = subject;\n this._explicitChain = explicitChain;\n}\n\nChainWrapper.prototype.value = function() {\n return this._wrappedValue;\n};\n\nChainWrapper.prototype.valueOf = function() {\n return this.value();\n};\n\nChainWrapper.prototype.toJSON = function() {\n return this.value();\n};\n\nChainWrapper.prototype.toString = function() {\n return String(this.value());\n};\n\nChainWrapper.prototype.chain = function() {\n return new ChainWrapper(this._wrappedValue, true);\n};\n\nChainWrapper.prototype.thru = function(changer) {\n if (typeof changer === 'function') {\n return new ChainWrapper(changer(this._wrappedValue), this._explicitChain);\n }\n return this;\n};\n\nChainWrapper.prototype._explicitChain = true;\n\nfunction makeFunctionChainable(functionInstance) {\n return function(...args) {\n const result = functionInstance(this._wrappedValue, ...args);\n if (this._explicitChain || typeof result === 'string') {\n return new ChainWrapper(result, this._explicitChain);\n } else {\n return result;\n }\n };\n}\n\nObject.keys(functions).forEach(function(name) {\n ChainWrapper.prototype[name] = makeFunctionChainable(functions[name]);\n});\n\nexport default ChainWrapper;\n","import chain from './chain/chain';\nimport ChainWrapper from './chain/wrapper';\nimport functions from './functions';\n\nfunction bbo(subject) {\n return new ChainWrapper(subject, false);\n}\n\nObject.assign(bbo, functions, {\n chain: chain\n});\n\nexport default bbo;\n","import ChainWrapper from 'chain/wrapper';\n\nexport default function chain(subject) {\n return new ChainWrapper(subject, true);\n}\n"],"names":["globalObject","global","Object","self","Function","previous","bbo","ua","lower","window","navigator","userAgent","toLowerCase","isIOS","test","isMobile","ieVersion","uakit","msie","indexOf","parseInt","substring","rv","edge","attr","el","ruleName","val","setAttribute","c","t","cn","i","id","document","createElement","innerHTML","g","getElementById","args","$arguments","first","Array","prototype","slice","call","_cache","noop","trash","clear","key","log","console","setStyle","style","trigger","element","event","eventType","createEventObject","e","fireEvent","createEvent","initEvent","dispatchEvent","hash","str","_str","String","length","charCodeAt","isTypeof","type","toString","judge","v","vals","strict","getTag","src","isFunction","func","isObject","obj","isArray","arr","forEach","keys","is","x","y","isShallowEqual","objA","objB","keysA","keysB","hasOwnProperty","findIndex","rst","item","index","subEqual","k","EventEmitter","__events","on","eventName","listener","isListener","TypeError","events","this","listeners","listenerIsWrapped","listenerOnce","once","push","off","len","splice","emit","apply","allOff","properObject","o","isDate","d","Date","isEmpty","objectDiff","lhs","rhs","l","r","deletedValues","reduce","acc","undefined","valueOf","difference","addedDiff","deletedDiff","updatedDiff","LoadImageItem","url","cb","img","Image","onReadyStateChange","removeEventHandlers","info","onError","onLoad","unbind","start","bind","complete","isString","eventHandler","addEventListener","attachEvent","removeEventListener","detachEvent","urls","logs","_insertScripts","callback","_insertScript","loaded","_index","script","getElementsByTagName","appendChild","onreadystatechange","readyState","onload","setTimeout","randomKey","possible","charAt","Math","floor","random","toJson","res","json","JSON","parse","setCookie","name","value","option","raw","encodeURIComponent","cookie","days","date","ms","setTime","getTime","toGMTString","hour","longTime","path","domain","secure","deleteCookie","containsWith","target","ulocalStorage","localStorage","ussesionStorage","sessionStorage","Storage","constructor","options","prefix","message","setItem","getItem","removeAll","removeItem","_storage","doItem","action","err","_warn","stringify","has","every","get","result","warn","_remove","deleteUrlParam","param","location","href","urlparts","split","pars","lastIndexOf","join","objectParam","map","objectBigParam","concat","fill0","num","_num","parseFloat","cachedSetTimeout","createSleepPromise","timeout","timeoutFunction","useCachedSetTimeout","Promise","resolve","randomA2B","a","b","int","DEFAULT","enabledMaxSize","enabledNatural","ratio","enabledType","clone","RegExp","source","getRegExpFlags","regExp","flags","ignoreCase","multiline","sticky","unicode","isBoolean","bool","isCloneable","isUnextendable","isMap","isSet","set","keyName","isNumber","number","isSymbol","symbol","charCodeOfDot","reEscapeChar","rePropName","underscored","replace","version","noConflict","isIos","isiPhone","isIPad","isAndroid","isPC","isWeixin","isNewsApp","isQQ","mqqbrowser","isTenvideo","isWeiShi","isIphoneXmodel","devicePixelRatio","screen","width","height","some","isIE","msg","styles","ele","body","onlyId","arguments","times","logsCache","removeConsole","dir","trace","merge","objs","over","fns","fn","context","stopPropagation","_e","cancelBubble","gc","getElementsByClassName","query","querySelector","show","display","hide","elementContains","parent","child","contains","getStyle","getComputedStyle","uuid","judgment","getType","construct","classs","paramsName","exec","eventEmitter","detailedDiff","added","deleted","updated","loadImages","curIndex","stepTimer","percentageValue","targetPercent","data","step","needOneStep","processStep","clearTimeout","loadjs","loadcss","promise","resolutions","rejections","resolved","rejected","reject","done","fail","link","styleSheets","toJSON","tojson","jsonp","opts","timer","enc","head","cleanup","parentNode","removeChild","Error","insertBefore","_extend","attributes","init","converter","api","_attributes","defaults","expires","setMilliseconds","getMilliseconds","_value","write","decodeURIComponent","_key","__key","___key","escape","_cookie","toUTCString","cookies","setDecode","parts","read","getJSON","getjson","getJson","remove","withConverter","getCookie","nameEQ","ca","delCookie","parseCookie","trim","storage","open","getUrlParam","regex","results","setUrlParam","re","match","separator","delUrlParam","httpGet","error","request","XMLHttpRequest","responseText","onerror","send","httpPost","setRequestHeader","setTimesout","delay","_args","setInterval","clearInterval","clearTimesout","getDate","d1","d2","today","dd","mm","getMonth","yyyy","getFullYear","hh","getHours","getMinutes","ss","getSeconds","_d1","_d2","formatPassTime","startTime","time","day","min","month","year","formatRemainTime","endTime","startDate","h","m","s","formatDuration","minute","second","millisecond","entries","filter","sleep","sleepPromise","promiseFunction","then","catch","n","pow","chainAsync","curr","last","next","numberFormat","decimals","decPoint","thousandsSep","_number","_decimals","isFinite","Number","prec","abs","sep","dec","round","sig","toFixed","toFixedFix","modulo","NaN","randomColor","randomFromA2B","lockTouch","not","tag","tagName","toUpperCase","preventDefault","copyToClipboard","selected","getSelection","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","checkImageSize","image","File","reader","FileReader","checkSize","readAsDataURL","w","nw","naturalWidth","naturalHeight","imageOptimization","quality","maxWidth","mimeType","toBlob","virtualImage","canvas","getContext","drawImage","blob","toDataUrl","onloadend","crossOrigin","response","responseType","deepClone","values","extend","deep","shift","extenders","extender","base","size","collection","object","find","toPath","string","expression","quote","subString","propsArg","defaultValue","props","prop","debounce","wait","callFirst","callNow","throttle","interval","pick","omit","includes","fillZero","longUnique","longString","stripTags","capitalize","deCapitalize","rest","upperRest","isAbsoluteURL","mapString","mask","cc","padStart","splitLines","camelize","dasherize","truncate","byteSize","Blob","byteLen","charset","charCode","_charset","repeat","endsWith","ignore","startsWith","xssFilter","effortIndex","capwords","$1","unique","Set","uniqueBy","uniqueFrom","cur","_extends","randomSize","shuffle","includesAll","includesAny","removeAt","arr1","arr2","elem","compact","compactAll","Boolean","pluck","temp","union","from","unionBy","unionWith","comp","intersect","intersectBy","differenceBy","max","equal","allEqual","all","any","chunk","ceil","countBy","countOccurrences","drop","dropRight","dropWhile","_arr","dropRightWhile","rightIndex","column","input","ColumnKey","IndexKey","newarray","temparray","search","needle","haystack","argStrict","_needle","groups","unary","indexBy","ChainWrapper","subject","explicitChain","_wrappedValue","_explicitChain","chain","thru","changer","functions","functionInstance"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"bbo.min.js","sources":["../src/util/version.js","../src/util/get_global.js","../src/util/no_conflict.js","../src/device/ua.js","../src/device/is_ios.js","../src/device/is_mobile.js","../src/device/ie_version.js","../src/bom/attr.js","../src/bom/c.js","../src/bom/g.js","../src/args/args.js","../src/log/logs.js","../src/args/noop.js","../src/args/trash.js","../src/bom/set_style.js","../src/bom/trigger.js","../src/other/hash.js","../src/other/is_typeof.js","../src/other/judge.js","../src/lodash/get_tag.js","../src/lodash/is_function.js","../src/lodash/is_object.js","../src/lodash/is_array.js","../src/lodash/for_each.js","../src/lodash/is.js","../src/lodash/is_shallow_equal.js","../src/lodash/find_index.js","../src/other/event_emitter.js","../src/object/proper_object.js","../src/lodash/is_date.js","../src/lodash/is_string.js","../src/lodash/is_map.js","../src/lodash/is_set.js","../src/lodash/is_empty.js","../src/object/object_diff.js","../src/object/added_diff.js","../src/object/deleted_diff.js","../src/object/updated_diff.js","../src/load/load_images.js","../src/load/loadjs.js","../src/random/random_key.js","../src/json/to_json.js","../src/cookie/cookie.js","../src/cookie/set_cookie.js","../src/cookie/delete_cookie.js","../src/string/contains_with.js","../src/storage/storage.js","../src/http/delete_url_param.js","../src/http/object_param.js","../src/fill/fill0.js","../src/times/get_date.js","../src/times/sleep.js","../src/random/random_a2b.js","../src/image/check_image_size.js","../src/image/to_data_url.js","../src/collection/clone.js","../src/lodash/is_boolean.js","../src/collection/extend.js","../src/lodash/has_own_property.js","../src/lodash/is_number.js","../src/lodash/is_symbol.js","../src/lodash/string_to_path.js","../src/string/underscored.js","../src/functions.js","../src/device/is_iphone.js","../src/device/is_ipad.js","../src/device/is_android.js","../src/device/is_pc.js","../src/device/is_weixin.js","../src/device/is_news_app.js","../src/device/is_qq.js","../src/device/mqqbrowser.js","../src/device/is_tenvideo.js","../src/device/is_weishi.js","../src/device/is_iphonex_model.js","../src/device/is_ie.js","../src/log/log.js","../src/log/remove_console.js","../src/args/merge.js","../src/args/over.js","../src/args/call.js","../src/bom/stop_propagation.js","../src/bom/gc.js","../src/bom/query.js","../src/bom/show.js","../src/bom/hide.js","../src/bom/element_contains.js","../src/bom/get_style.js","../src/other/uuid.js","../src/other/get_type.js","../src/other/construct.js","../src/other/params_name.js","../src/object/detailed_diff.js","../src/load/loadcss.js","../src/json/jsonp.js","../src/cookie/get_cookie.js","../src/cookie/parse_cookie.js","../src/bom/open.js","../src/http/get_url_param.js","../src/http/set_url_param.js","../src/http/http_get.js","../src/http/http_post.js","../src/times/set_timesout.js","../src/times/clear_timesout.js","../src/times/format_pass_time.js","../src/times/format_remain_time.js","../src/times/format_duration.js","../src/fill/floor.js","../src/fill/chain_async.js","../src/fill/number_format.js","../src/fill/modulo.js","../src/random/random_color.js","../src/behavior/lock_touch.js","../src/behavior/copy_to_clipboard.js","../src/image/image_optimization.js","../src/collection/values.js","../src/collection/entries.js","../src/collection/size.js","../src/lodash/has.js","../src/lodash/reduce.js","../src/lodash/map.js","../src/lodash/find.js","../src/lodash/to_path.js","../src/lodash/get.js","../src/lodash/debounce.js","../src/lodash/throttle.js","../src/lodash/pick.js","../src/lodash/omit.js","../src/string/trim.js","../src/string/fill_zero.js","../src/string/long_unique.js","../src/string/strip_tags.js","../src/string/capitalize.js","../src/string/de_capitalize.js","../src/string/is_absolute_url.js","../src/string/map_string.js","../src/string/mask.js","../src/string/split_lines.js","../src/string/camelize.js","../src/string/dasherize.js","../src/string/truncate.js","../src/string/byte_size.js","../src/string/byte_len.js","../src/string/repeat.js","../src/string/ends_with.js","../src/string/starts_with.js","../src/string/xss_filter.js","../src/string/effort_Index.js","../src/string/capwords.js","../src/array/unique.js","../src/array/unique_by.js","../src/array/unique_from.js","../src/array/random.js","../src/array/random_size.js","../src/array/shuffle.js","../src/array/contains.js","../src/array/includes_all.js","../src/array/includes_any.js","../src/array/remove_at.js","../src/array/remove.js","../src/array/compact.js","../src/array/compact_all.js","../src/array/pluck.js","../src/array/union.js","../src/array/union_by.js","../src/array/union_with.js","../src/array/intersect.js","../src/array/intersect_by.js","../src/array/difference.js","../src/array/difference_by.js","../src/array/max.js","../src/array/min.js","../src/array/equal.js","../src/array/all_equal.js","../src/array/all.js","../src/array/any.js","../src/array/chunk.js","../src/array/count_by.js","../src/array/count_occurrences.js","../src/array/drop.js","../src/array/drop_right.js","../src/array/drop_while.js","../src/array/drop_right_while.js","../src/array/column.js","../src/array/search.js","../src/array/split.js","../src/array/unary.js","../src/array/index_by.js","../src/chain/wrapper.js","../src/index.js","../src/chain/chain.js"],"sourcesContent":["const version = '1.1.18';\n\nexport default version;\n","let globalObject = null;\n\nfunction getGlobalObject() {\n if (globalObject !== null) {\n return globalObject;\n }\n /* istanbul ignore next */\n // It's hard to mock the global variables. This code surely works fine. I hope :)\n if (typeof global === 'object' && global.Object === Object) {\n // NodeJS global object\n globalObject = global;\n } else if (typeof self === 'object' && self.Object === Object) {\n // self property from Window object\n globalObject = self;\n } else {\n // Other cases. Function constructor always has the context as global object\n // eslint-disable-next-line no-new-func\n globalObject = new Function('return this')();\n }\n return globalObject;\n}\n\nexport default getGlobalObject;\n","/* eslint-disable no-invalid-this */\nimport getGlobalObject from './get_global';\n\nconst globalObject = getGlobalObject();\nconst previous = globalObject.bbo;\n\nexport default function noConflict() {\n if (this === globalObject.bbo) {\n globalObject.bbo = previous;\n }\n return this;\n}\n","export default function ua(lower) {\n return lower ? window.navigator.userAgent.toLowerCase() : window.navigator.userAgent;\n}\n","import ua from './ua';\n/**\n * detect IOS\n * From https://stackoverflow.com/questions/9038625/detect-if-device-is-ios\n * more see:\n * https://github.com/madrobby/zepto/blob/master/src/detect.js#files\n */\n\nexport default function isIOS() {\n return /iPad|iPhone|iPod/.test(ua());\n}\n","import ua from './ua';\n\n/**\n * detect PC / Mobile\n * From https://stackoverflow.com/questions/3514784/what-is-the-best-way-to-detect-a-mobile-device-in-jquery\n */\nexport default function isMobile() {\n return /android|webos|iphone|ipad|ipod|blackberry|iemobile|opera mini/i.test(ua('l'));\n}\n","import ua from './ua';\n\n/**\n * ie version\n * From https://codepen.io/gapcode/pen/vEJNZN\n * IE 10 ua = 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; Trident/6.0)';\n * IE 11 'Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko';\n * Edge 12 'Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.71 Safari/537.36 Edge/12.0';\n * Edge 13 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/46.0.2486.0 Safari/537.36 Edge/13.10586';\n */\nexport default function ieVersion() {\n let uakit = ua();\n let msie = uakit.indexOf('MSIE ');\n if (msie > 0) {\n return parseInt(uakit.substring(msie + 5, uakit.indexOf('.', msie)), 10);\n }\n\n let trident = uakit.indexOf('Trident/');\n if (trident > 0) {\n let rv = uakit.indexOf('rv:');\n return parseInt(uakit.substring(rv + 3, uakit.indexOf('.', rv)), 10);\n }\n\n let edge = uakit.indexOf('Edge/');\n if (edge > 0) {\n return parseInt(ua.substring(edge + 5, uakit.indexOf('.', edge)), 10);\n }\n\n return '';\n}\n","export default function attr(el, ruleName, val) {\n el.setAttribute(ruleName, val);\n}\n","import attr from './attr';\n\n// eslint-disable-next-line max-params\nexport default function c(t, cn, i, id) {\n let el = document.createElement(t);\n if (cn) {\n attr(el, 'class', cn);\n }\n if (i) {\n el.innerHTML = i;\n }\n if (id) {\n attr(el, 'id', id);\n }\n return el;\n}\n","export default function g(i) {\n return document.getElementById(i);\n}\n","/**\n * arguments to array\n */\n\n/**\n * Converts the arguments object to an array object and slice it.\n * first defalult is 0.\n * @export\n * @param {*} $arguments\n * @param {*} first\n * @returns\n */\nexport default function args($arguments, first) {\n return Array.prototype.slice.call($arguments, first || 0);\n}\n","import args from '../args/args';\n/************************************************************************\n * Private Method\n *************************************************************************/\nlet _cache = {\n urls: {},\n logs: {}\n};\n/**\n * bbo.logs('only id&10', 1, 2);\n */\nexport default function logs() {\n if (window.console && window.console.log) {\n let onlyId = String(arguments[0]);\n let times = parseInt(onlyId.split('&')[1], 10) || 10;\n let logsCache = _cache.logs;\n\n if (!logsCache[onlyId]) logsCache[onlyId] = {};\n if (!logsCache[onlyId].once) logsCache[onlyId].once = 1;\n\n if (logsCache[onlyId].once <= times) {\n console.log.apply(console, args(arguments, 1));\n logsCache[onlyId].once++;\n }\n }\n}\n","const noop = () => {};\n\nexport default noop;\n","/**\n * a trash object\n */\nconst trash = {\n clear: function() {\n for (let key in trash) {\n if (key !== 'log' && key !== 'clear') delete trash[key];\n }\n },\n log: function() {\n for (let key in trash) {\n if (key !== 'log' && key !== 'clear') console.log('bbo.trash:: ', key, trash[key]);\n }\n }\n};\n\nexport default trash;\n","export default function setStyle(el, ruleName, val) {\n el.style[ruleName] = val;\n}\n","/**\n * trigger event\n * https://stackoverflow.com/questions/2490825/how-to-trigger-event-in-javascript\n */\nconst trigger = (element, event, eventType) => {\n if (document.createEventObject) {\n let e = document.createEventObject();\n return element.fireEvent('on' + event, e);\n } else {\n let e = document.createEvent(eventType || 'HTMLEvents');\n e.initEvent(event, true, true);\n element.dispatchEvent(e);\n }\n};\n\nexport default trigger;\n","/**\n * string hash map\n * From https://stackoverflow.com/questions/7616461/generate-a-hash-from-string-in-javascript-jquery\n */\nexport default function hash(str) {\n let _str = String(str);\n let hash = 0;\n let i;\n let chr;\n if (_str.length === 0) return hash;\n for (i = 0; i < _str.length; i++) {\n chr = _str.charCodeAt(i);\n hash = (hash << 5) - hash + chr;\n hash |= 0; // Convert to 32bit integer\n }\n\n return hash;\n}\n","/**\n * is typeof type\n */\nconst isTypeof = (val, type) => {\n return (\n Object.prototype.toString\n .call(val)\n .slice(8, -1)\n .toLowerCase() === type\n );\n};\n\nexport default isTypeof;\n","import isTypeof from './is_typeof';\n/**\n * map condition judge\n * bbo.judge = bbo.judgment\n */\nexport default function judge(v, vals, strict) {\n if (!isTypeof(vals, 'array')) return false;\n\n for (let key in vals) {\n if (strict) {\n if (v === vals[key]) return true;\n } else {\n if (v === vals[key]) return true;\n }\n }\n\n return false;\n}\n","export default function getTag(src) {\n return Object.prototype.toString.call(src);\n}\n","import getTag from './get_tag';\n\nexport default function isFunction(func) {\n return getTag(func) === '[object Function]';\n}\n","import getTag from './get_tag';\n\nexport default function isObject(obj) {\n return getTag(obj) === '[object Object]';\n}\n","import getTag from './get_tag';\n\nexport default function isArray(arr) {\n return getTag(arr) === '[object Array]';\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function forEach(src, func) {\n let i = 0;\n if (isArray(src)) {\n while (i < src.length) {\n const rst = func(src[i], i, src);\n if (rst === false) {\n break;\n }\n i += 1;\n }\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n while (i < keys.length) {\n const key = keys[i];\n const rst = func(src[key], key, src);\n if (rst === false) {\n break;\n }\n i += 1;\n }\n }\n}\n","/* eslint-disable no-self-compare */\nexport default function is(x, y) {\n // inlined Object.is polyfill to avoid requiring consumers ship their own\n // https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/is\n if (x === y) {\n // Steps 1-5, 7-10\n // Steps 6.b-6.e: +0 != -0\n // Added the nonzero y check to make Flow happy, but it is redundant\n return x !== 0 || y !== 0 || 1 / x === 1 / y;\n } else {\n // Step 6.a: NaN == NaN\n return x !== x && y !== y;\n }\n}\n","import is from './is';\n\nexport default function isShallowEqual(objA, objB) {\n if (is(objA, objB)) {\n return true;\n }\n if (typeof objA !== 'object' || objA === null || typeof objB !== 'object' || objB === null) {\n return false;\n }\n const keysA = Object.keys(objA);\n const keysB = Object.keys(objB);\n if (keysA.length !== keysB.length) {\n return false;\n }\n let i = 0;\n while (i < keysA.length) {\n if (!hasOwnProperty(objB, keysA[i]) || !is(objA[keysA[i]], objB[keysA[i]])) {\n return false;\n }\n i += 1;\n }\n return true;\n}\n","import forEach from './for_each';\nimport isFunction from './is_function';\nimport isObject from './is_object';\nimport is from './is';\nimport isShallowEqual from './is_shallow_equal';\n\nexport default function findIndex(src, func) {\n let rst = -1;\n forEach(src, (item, index, obj) => {\n if (isFunction(func)) {\n if (func(item, index, obj) === true) {\n rst = index;\n return false;\n }\n } else if (is(item, func)) {\n rst = index;\n return false;\n } else if (isObject(item) && isObject(func)) {\n let subEqual = true;\n forEach(func, (v, k) => {\n subEqual = isShallowEqual(item[k], v);\n return subEqual;\n });\n if (subEqual) {\n rst = index;\n return false;\n }\n }\n });\n return rst;\n}\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\nimport findIndex from '../lodash/find_index';\n\n/**\n * function handle1(a, b, c) {\n * console.log('one', a, b, c);\n * }\n *\n * function handle2(a, b, c) {\n * console.log('two', a, b, c);\n * }\n *\n * function handle3(a, b, c) {\n * console.log('three', a, b, c);\n * }\n *\n * emitter\n * .on('demo', handle1)\n * .once('demo', handle2)\n * .on('demo', handle3);\n *\n * emitter.emit('demo', [1, 2, 3]);\n */\nexport default function EventEmitter() {\n this.__events = {};\n}\n\nfunction isListener(listener) {\n if (isFunction(listener)) {\n return true;\n } else if (listener && isObject(listener)) {\n return isListener(listener.listener);\n } else {\n return false;\n }\n}\n\nlet prototype = EventEmitter.prototype;\n\n/**\n * on\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object}\n */\nprototype.on = function(eventName, listener) {\n if (!eventName || !listener) return;\n\n if (!isListener(listener)) {\n throw new TypeError('listener is a function');\n }\n\n let events = this.__events;\n let listeners = (events[eventName] = events[eventName] || []);\n let listenerIsWrapped = isObject(listener);\n\n // not repeat\n if (findIndex(listeners, listener) === -1) {\n let listenerOnce = {\n listener: listener,\n once: false\n };\n\n listeners.push(listenerIsWrapped ? listener : listenerOnce);\n console.log(listeners);\n }\n\n return this;\n};\n\n/**\n * once\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object} can chained call\n */\nprototype.once = function(eventName, listener) {\n return this.on(eventName, {\n listener: listener,\n once: true\n });\n};\n\n/**\n * off\n * @param {String} eventName\n * @param {Function} listener\n * @return {Object} can chained call\n */\nprototype.off = function(eventName, listener) {\n let listeners = this.__events[eventName];\n if (!listeners) return;\n\n let index;\n for (let i = 0, len = listeners.length; i < len; i++) {\n if (listeners[i] && listeners[i].listener === listener) {\n index = i;\n break;\n }\n }\n\n if (typeof index !== 'undefined') {\n listeners.splice(index, 1, null);\n }\n\n return this;\n};\n\n/**\n * emit\n * @param {String} eventName\n * @param {Array} args\n * @return {Object} can chained call\n */\nprototype.emit = function(eventName, args) {\n let listeners = this.__events[eventName];\n if (!listeners) return;\n\n for (let i = 0; i < listeners.length; i++) {\n let listener = listeners[i];\n if (listener) {\n listener.listener.apply(this, args || []);\n if (listener.once) {\n this.off(eventName, listener.listener);\n }\n }\n }\n\n return this;\n};\n\n/**\n * allOff && allOne\n * @param {String[]}\n */\nprototype.allOff = function(eventName) {\n if (eventName && this.__events[eventName]) {\n this.__events[eventName] = [];\n } else {\n this.__events = {};\n }\n};\n","import isObject from '../lodash/is_object';\n\nconst properObject = (o) => (isObject(o) && !o.hasOwnProperty ? { ...o } : o);\n\nexport default properObject;\n","const isDate = (d) => d instanceof Date;\n\nexport default isDate;\n","import getTag from './get_tag';\n\nexport default function isString(str) {\n return getTag(str) === '[object String]';\n}\n","import getTag from './get_tag';\n\nexport default function isMap(map) {\n return getTag(map) === '[object Map]';\n}\n","import getTag from './get_tag';\n\nexport default function isSet(set) {\n return getTag(set) === '[object Set]';\n}\n","import isArray from '../lodash/is_array';\nimport isString from '../lodash/is_string';\nimport isObject from '../lodash/is_object';\nimport isMap from '../lodash/is_map';\nimport isSet from '../lodash/is_set';\n\nexport default function isEmpty(obj) {\n if (obj === null) {\n return true;\n }\n\n if (isArray(obj)) {\n return !obj.length;\n }\n\n if (isString(obj)) {\n return !obj.length;\n }\n\n if (isObject(obj)) {\n return !Object.keys(obj).length;\n }\n\n if (isMap(obj) || isSet(obj)) {\n return !obj.size;\n }\n\n // other primitive || unidentifed object type\n return Object(obj) !== obj || !Object.keys(obj).length;\n}\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isDate from '../lodash/is_date';\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst objectDiff = (lhs, rhs) => {\n if (lhs === rhs) return {}; // equal return no diff\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs; // return updated rhs\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n const deletedValues = Object.keys(l).reduce((acc, key) => {\n return r.hasOwnProperty(key) ? acc : { ...acc, [key]: undefined };\n }, {});\n\n if (isDate(l) || isDate(r)) {\n // eslint-disable-next-line eqeqeq\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce((acc, key) => {\n if (!l.hasOwnProperty(key)) return { ...acc, [key]: r[key] }; // return added r key\n\n const difference = objectDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc; // return no diff\n\n return { ...acc, [key]: difference }; // return updated key\n }, deletedValues);\n};\n\nexport default objectDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst addedDiff = (lhs, rhs) => {\n if (lhs === rhs || !isObject(lhs) || !isObject(rhs)) return {};\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n return Object.keys(r).reduce((acc, key) => {\n if (l.hasOwnProperty(key)) {\n const difference = addedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return { ...acc, [key]: r[key] };\n }, {});\n};\n\nexport default addedDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst deletedDiff = (lhs, rhs) => {\n if (lhs === rhs || !isObject(lhs) || !isObject(rhs)) return {};\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n return Object.keys(l).reduce((acc, key) => {\n if (r.hasOwnProperty(key)) {\n const difference = deletedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return { ...acc, [key]: undefined };\n }, {});\n};\n\nexport default deletedDiff;\n","// https://github.com/mattphillips/deep-object-diff\n\nimport isDate from '../lodash/is_date';\nimport isEmpty from '../lodash/is_empty';\nimport isObject from '../lodash/is_object';\nimport properObject from './proper_object';\n\nconst updatedDiff = (lhs, rhs) => {\n if (lhs === rhs) return {};\n\n if (!isObject(lhs) || !isObject(rhs)) return rhs;\n\n const l = properObject(lhs);\n const r = properObject(rhs);\n\n if (isDate(l) || isDate(r)) {\n // eslint-disable-next-line eqeqeq\n if (l.valueOf() == r.valueOf()) return {};\n return r;\n }\n\n return Object.keys(r).reduce((acc, key) => {\n if (l.hasOwnProperty(key)) {\n const difference = updatedDiff(l[key], r[key]);\n\n if (isObject(difference) && isEmpty(difference) && !isDate(difference)) return acc;\n\n return { ...acc, [key]: difference };\n }\n\n return acc;\n }, {});\n};\n\nexport default updatedDiff;\n","export default function loadImages(options) {\n let len = 0;\n let index = 0;\n let curIndex = 0;\n let stepTimer = null;\n let stepTimeValue = 5;\n let percentageValue = 0;\n let targetPercent = 0;\n let data = options.data || [];\n let step = options.step || function() {};\n let complete = options.complete || function() {};\n let needOneStep = options.needOneStep || false;\n let path = options.path || false;\n\n if (typeof data !== 'object' || data.length === 0) {\n step(100);\n return false;\n }\n\n len = data.length;\n if (path) {\n for (let i = len - 1; i > -1; i--) {\n data[i] = path + data[i];\n // console.info(data[i]);\n }\n }\n\n let processStep = function() {\n percentageValue++;\n // console.info(\"processStep = \",percentageValue)\n step(percentageValue);\n if (percentageValue < targetPercent) {\n stepTimer = setTimeout(function() {\n processStep();\n }, stepTimeValue);\n } else if (targetPercent === 100 && percentageValue === targetPercent) {\n if (complete && typeof complete === 'function') {\n complete();\n }\n }\n };\n\n function onload() {\n curIndex++;\n targetPercent = Math.floor((curIndex / len) * 100);\n if (needOneStep) {\n if (stepTimer) {\n clearTimeout(stepTimer);\n }\n processStep();\n } else {\n step(targetPercent);\n if (targetPercent === 100) {\n complete();\n }\n }\n }\n\n for (index; index < len; index++) {\n let strUrl = data[index];\n new LoadImageItem(strUrl, onload).start();\n }\n}\n\n/**\n * @name loadImageItem\n * @param {string} url - images full url\n * @callback cb - called when load image completed\n */\nfunction LoadImageItem(url, cb) {\n let self = this;\n\n self.img = new Image();\n\n // readyState:'complete' or 'loaded' => image has been loaded。\n // for IE6-IE10。\n let onReadyStateChange = function() {\n removeEventHandlers();\n console.info('onReadyStateChange');\n cb(self, 'onReadyStateChange');\n };\n\n let onError = function() {\n console.info('onError');\n removeEventHandlers();\n cb(self, 'onError');\n };\n\n let onLoad = function() {\n removeEventHandlers();\n cb(self, 'onload');\n };\n\n let removeEventHandlers = function() {\n self.unbind('load', onLoad);\n self.unbind('readystatechange', onReadyStateChange);\n self.unbind('error', onError);\n };\n\n this.start = function() {\n this.bind('load', onLoad);\n this.bind('readystatechange', onReadyStateChange);\n this.bind('error', onError);\n\n this.img.src = url;\n if (self.img.complete) {\n removeEventHandlers();\n cb(this, 'onload');\n }\n };\n}\n\n/**\n * @name bind\n * @description cross-browser event binding\n * @param {string} eventName\n * @param {function} eventHandler\n */\nLoadImageItem.prototype.bind = function(eventName, eventHandler) {\n if (this.img.addEventListener) {\n this.img.addEventListener(eventName, eventHandler, false);\n } else if (this.img.attachEvent) {\n this.img.attachEvent('on' + eventName, eventHandler);\n }\n};\n\n/**\n * @name unbind\n * @description cross-browser event un-binding\n * @param {string} eventName\n * @param {function} eventHandler\n */\n\nLoadImageItem.prototype.unbind = function(eventName, eventHandler) {\n if (this.img.removeEventListener) {\n this.img.removeEventListener(eventName, eventHandler, false);\n } else if (this.img.detachEvent) {\n this.img.detachEvent('on' + eventName, eventHandler);\n }\n};\n","/* eslint-disable no-invalid-this */\n\nimport hash from '../other/hash';\nimport ua from '../device/ua';\nimport attr from '../bom/attr';\nimport c from '../bom/c';\nimport isFunction from '../lodash/is_function';\nimport isString from '../lodash/is_string';\n\n/**\n * load js\n * 1. bbo.loadjs(\"//your_url/a.js\",func);\n * 2. bbo.loadjs(\"//your_url/a.js\",\"only_id\",func);\n */\nlet _cache = {\n urls: {},\n logs: {}\n};\n\nlet _insertScripts = function(arr, callback) {\n for (let i = 0; i < arr.length; i++) {\n _insertScript(arr[i], loaded);\n }\n\n let _index = 0;\n\n function loaded() {\n _index++;\n if (_index >= arr.length) {\n callback && callback();\n }\n }\n};\n\nlet _insertScript = function(src, callback) {\n let script = c('script');\n attr(script, 'type', 'text/javascript');\n attr(script, 'src', src);\n attr(script, 'charset', 'utf-8');\n document.getElementsByTagName('head')[0].appendChild(script);\n\n if (/msie/.test(ua('l'))) {\n script.onreadystatechange = function() {\n if (this.readyState === 'loaded' || this.readyState === 'complete') {\n callback();\n }\n };\n } else if (/gecko/.test(ua('l'))) {\n script.onload = function() {\n callback();\n };\n } else {\n setTimeout(function() {\n callback();\n }, 50);\n }\n};\n\nexport default function loadjs(url, b, c) {\n let onlyId;\n let callback;\n\n if (isFunction(b)) {\n onlyId = String(hash(String(url)));\n callback = b;\n } else if (typeof b === 'undefined') {\n onlyId = String(hash(String(url)));\n callback = null;\n } else {\n onlyId = String(b);\n callback = c;\n }\n\n if (_cache.urls[onlyId]) {\n callback && callback();\n } else {\n let func = isString(url) ? _insertScript : _insertScripts;\n func.call(this, url, function() {\n _cache.urls[onlyId] = true;\n callback && callback();\n });\n }\n}\n","const randomKey = (len = 32) => {\n /** Removed confusing characters 'oOLl,9gq,Vv,Uu,I1' **/\n let possible = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz2345678';\n let key = '';\n for (let i = 0; i < len; i++) {\n key += possible.charAt(Math.floor(Math.random() * possible.length));\n }\n return key;\n};\n\nexport default randomKey;\n","import isTypeof from '../other/is_typeof';\n/**\n * to json\n */\n\n// eval hack\nconst evil = (fn) => {\n // A variable points to Function, preventing reporting errors\n let Fn = Function;\n return new Fn('return ' + fn)();\n};\n\n// bbo.toJSON = bbo.tojson = bbo.toJson\nconst toJson = (res) => {\n if (!res) return null;\n\n if (typeof res === 'string') {\n try {\n return JSON.parse(res);\n } catch (e) {\n return evil('(' + res + ')');\n }\n } else if (isTypeof(res.json, 'function')) {\n return res.json();\n } else {\n return res;\n }\n};\n\nexport default toJson;\n","/**\n * cookie\n * https://github.com/jiayi2/onavo/blob/master/onavo.js#L209\n */\nconst cookie = () => {\n function _extend() {\n let i = 0;\n let result = {};\n for (; i < arguments.length; i++) {\n let attributes = arguments[i];\n for (let key in attributes) {\n if (Object.prototype.hasOwnProperty.call(key, attributes)) {\n result[key] = attributes[key];\n }\n }\n }\n return result;\n }\n\n function init(converter) {\n // #lizard forgives\n function api(key, value, attributes) {\n let result;\n if (typeof document === 'undefined') {\n return;\n }\n if (arguments.length > 1) {\n let _attributes = _extend(\n {\n path: '/'\n },\n api.defaults,\n attributes\n );\n\n if (typeof _attributes.expires === 'number') {\n let expires = new Date();\n expires.setMilliseconds(expires.getMilliseconds() + _attributes.expires * 864e5);\n _attributes.expires = expires;\n }\n let _value = value;\n try {\n result = JSON.stringify(_value);\n if (/^[\\{\\[]/.test(result)) {\n _value = result;\n }\n } catch (e) {}\n\n if (!converter.write) {\n _value = encodeURIComponent(String(_value)).replace(\n /%(23|24|26|2B|3A|3C|3E|3D|2F|3F|40|5B|5D|5E|60|7B|7D|7C)/g,\n decodeURIComponent\n );\n } else {\n _value = converter.write(_value, key);\n }\n\n let _key = encodeURIComponent(String(key));\n let __key = _key.replace(/%(23|24|26|2B|5E|60|7C)/g, decodeURIComponent);\n let ___key = __key.replace(/[\\(\\)]/g, escape);\n let _cookie = (document.cookie = [\n ___key,\n '=',\n value,\n attributes.expires ? '; expires=' + attributes.expires.toUTCString() : '',\n attributes.path ? '; path=' + attributes.path : '',\n attributes.domain ? '; domain=' + attributes.domain : '',\n attributes.secure ? '; secure' : ''\n ].join(''));\n\n return _cookie;\n }\n if (!key) {\n result = {};\n }\n let cookies = document.cookie ? document.cookie.split('; ') : [];\n let setDecode = /(%[0-9A-Z]{2})+/g;\n let i = 0;\n\n for (; i < cookies.length; i++) {\n let parts = cookies[i].split('=');\n let cookie = parts.slice(1).join('=');\n\n if (cookie.charAt(0) === '\"') {\n cookie = cookie.slice(1, -1);\n }\n\n try {\n let name = parts[0].replace(setDecode, decodeURIComponent);\n cookie = converter.read\n ? converter.read(cookie, name)\n : converter(cookie, name) || cookie.replace(setDecode, decodeURIComponent);\n\n try {\n cookie = JSON.parse(cookie);\n } catch (e) {\n console.log(e);\n }\n\n if (key === name) {\n result = cookie;\n break;\n }\n\n if (!key) {\n result[name] = cookie;\n }\n } catch (e) {}\n }\n\n return result;\n }\n\n api.set = api;\n api.get = function(key) {\n return api.call(api, key);\n };\n api.getJSON = api.getjson = api.getJson = function() {\n return api.apply(\n {\n json: true\n },\n [].slice.call(arguments)\n );\n };\n api.defaults = {};\n\n api.remove = function(key, attributes) {\n api(\n key,\n '',\n _extend(attributes, {\n expires: -1\n })\n );\n };\n\n api.withConverter = init;\n\n return api;\n }\n return init(function() {});\n};\n\nexport default cookie;\n","/**\n * setCookie / getCookie / deleteCookie\n * From https://stackoverflow.com/questions/1458724/how-do-i-set-unset-cookie-with-jquery/1458728#1458728\n */\nconst setCookie = (name, value, option) => {\n let longTime = 10;\n // let path = '; path=/';\n let val = option && option.raw ? value : encodeURIComponent(value);\n let cookie = encodeURIComponent(name) + '=' + val;\n\n if (option) {\n if (option.days) {\n let date = new Date();\n let ms = option.days * 24 * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n } else if (option.hour) {\n let date = new Date();\n let ms = option.hour * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n } else {\n let date = new Date();\n let ms = longTime * 365 * 24 * 3600 * 1000;\n date.setTime(date.getTime() + ms);\n cookie += '; expires=' + date.toGMTString();\n }\n\n if (option.path) cookie += '; path=' + option.path;\n if (option.domain) cookie += '; domain=' + option.domain;\n if (option.secure) cookie += '; true';\n }\n\n document.cookie = cookie;\n};\n\nexport default setCookie;\n","import setCookie from './set_cookie';\n\nconst deleteCookie = (name) => {\n setCookie(name, '', {\n hour: -1\n });\n};\n\nexport default deleteCookie;\n","/**\n * Whether a string contains another string\n */\nexport default function containsWith(target, item) {\n // discuss at: https://locutus.io/golang/strings/Contains\n // original by: Kevin van Zonneveld (https://kvz.io)\n // example 1: bbo.contains('Kevin', 'K')\n // returns 1: true\n return String(target).indexOf(item) !== -1;\n}\n","/************************************************************************\n * localStorage && sessionStorage\n * Method for safely supporting localStorage sessionStorage 'setItem' 'getItem' 'removeItem' 'removeAll',\n * Some extension method 'has' 'get' adn Store prefix\n *************************************************************************/\nimport containsWith from '../string/contains_with';\n\nconst ulocalStorage = window.localStorage;\nconst ussesionStorage = window.sessionStorage;\nclass Storage {\n constructor(options) {\n const {\n type = 'local',\n prefix = 'bbo.storage',\n message = {\n setItem: 'write in',\n getItem: 'read',\n removeAll: 'remove all',\n removeItem: 'remove item'\n }\n } = options;\n this.prefix = prefix;\n this.type = type;\n this.message = message;\n if (type === 'local') {\n this._storage = ulocalStorage;\n } else if (type === 'session') {\n this._storage = ussesionStorage;\n }\n }\n\n doItem(func, action) {\n try {\n if (typeof func === 'function') {\n return func();\n }\n } catch (err) {\n this._warn(action);\n return null;\n }\n return true;\n }\n\n setItem(key, value) {\n if (typeof key === 'object') {\n Object.keys(key).forEach((k, index) => {\n this.doItem(\n () => this._storage.setItem(`${this.prefix}.${k}`, JSON.stringify(key[k])),\n 'setItem'\n );\n });\n } else {\n this.doItem(\n () => this._storage.setItem(`${this.prefix}.${key}`, JSON.stringify(value)),\n 'setItem'\n );\n }\n }\n\n has(...keys) {\n return keys.every((key, index) => this._storage.getItem(`${this.prefix}.${key}`));\n }\n\n get(...keys) {\n const result = {};\n keys.forEach((key, index) => {\n if (`${this._storage.getItem(`${this.prefix}.${key}`)}` !== 'null') {\n try {\n result[key] = JSON.parse(this._storage.getItem(`${this.prefix}.${key}`));\n } catch (err) {\n console.warn(this._warn('getItem'));\n }\n }\n });\n return result;\n }\n\n getItem(key) {\n return this.doItem(() => JSON.parse(this._storage.getItem(`${this.prefix}.${key}`)), 'getItem');\n }\n\n removeAll() {\n Object.keys(this._storage).forEach((k) => {\n if (containsWith(k, this.prefix)) {\n this._remove(`${k}`);\n }\n });\n }\n\n removeItem(...keys) {\n console.log(keys);\n keys.forEach((key, index) =>\n this.doItem(() => this._storage.removeItem(`${this.prefix}.${key}`), 'removeItem')\n );\n }\n\n _warn(action) {\n const { message } = this;\n console.warn(`Unable to ${message[action] || ''} ${this.type} Storage`);\n }\n\n _remove(keys) {\n this.doItem(() => this._storage.removeItem(`${keys}`), 'removeItem');\n }\n}\n\nconst storage = ({ type, prefix }) =>\n new Storage({\n type,\n prefix\n });\n\nexport default storage;\n","/**\n * getUrlParam / deleteUrlParam\n * From https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n */\n\nconst deleteUrlParam = (param, url = window.location.href) => {\n // prefer to use l.search if you have a location/link object\n let urlparts = url.split('?');\n if (urlparts.length >= 2) {\n let prefix = encodeURIComponent(param) + '=';\n let pars = urlparts[1].split(/[&;]/g);\n\n // reverse iteration as may be destructive\n for (let i = pars.length; i-- > 0; ) {\n // idiom for string.startsWith\n if (pars[i].lastIndexOf(prefix, 0) !== -1) {\n pars.splice(i, 1);\n }\n }\n return urlparts[0] + (pars.length > 0 ? '?' + pars.join('&') : '');\n } else {\n return url;\n }\n};\n\nexport default deleteUrlParam;\n","const objectParam = (arr) => {\n let str = '';\n if (Array.isArray(arr)) {\n str = arr\n .map(function(item) {\n return item.name + '=' + item.value;\n })\n .join('&');\n } else {\n str = objectParam(objectBigParam(arr));\n }\n return str;\n};\n\nconst objectBigParam = (obj) => {\n let arr = [];\n Object.keys(obj).forEach(function(k) {\n if (Array.isArray(obj[k])) {\n arr = arr.concat(\n obj[k].map(function(v) {\n return {\n name: k,\n value: v\n };\n })\n );\n } else {\n arr.push({\n name: k,\n value: obj[k]\n });\n }\n });\n return arr;\n};\n\nexport default objectParam;\n","export default function fill0(num) {\n let _num = parseFloat(num);\n return _num < 10 ? '0' + _num : _num;\n}\n","import fill0 from '../fill/fill0';\n\n/**\n * getDate\n * https://stackoverflow.com/questions/1531093/how-do-i-get-the-current-date-in-javascript\n */\nconst getDate = (d1, d2) => {\n let today = new Date();\n\n let dd = today.getDate();\n let mm = today.getMonth() + 1;\n let yyyy = today.getFullYear();\n let hh = today.getHours();\n let ms = today.getMinutes();\n let ss = today.getSeconds();\n\n dd = fill0(dd);\n mm = fill0(mm);\n hh = fill0(hh);\n ms = fill0(ms);\n ss = fill0(ss);\n\n let _d1 = d1 || '/';\n let _d2 = d2 || ':';\n\n return yyyy + _d1 + mm + _d1 + dd + ' ' + hh + _d2 + ms + _d2 + ss;\n};\n\nexport default getDate;\n","const cachedSetTimeout = setTimeout;\n\nfunction createSleepPromise(timeout, { useCachedSetTimeout }) {\n const timeoutFunction = useCachedSetTimeout ? cachedSetTimeout : setTimeout;\n\n return new Promise((resolve) => {\n timeoutFunction(resolve, timeout);\n });\n}\n\nexport default function sleep(timeout, { useCachedSetTimeout } = {}) {\n const sleepPromise = createSleepPromise(timeout, { useCachedSetTimeout });\n\n function promiseFunction(value) {\n return sleepPromise.then(() => value);\n }\n\n promiseFunction.then = (...args) => sleepPromise.then(...args);\n promiseFunction.catch = Promise.resolve().catch;\n\n return promiseFunction;\n}\n","// bbo.randomFromA2B = bbo.randomA2B\nconst randomA2B = (a, b, int) => {\n let result = Math.random() * (b - a) + a;\n return int ? Math.floor(result) : result;\n};\n\nexport default randomA2B;\n","/**\n * Check image size\n * @param {(Object|String)} image - image information,allow File Object or Data URLs\n * @param {Object} [options={}] - Check options\n */\n\nimport isString from '../lodash/is_string';\n\nconst DEFAULT = {\n enabledMaxSize: false,\n enabledNatural: false,\n ratio: 1\n};\n\nconst checkImageSize = (image, { enabledMaxSize, enabledNatural, ratio } = DEFAULT) => {\n return new Promise((resolve, reject) => {\n /**\n * Check type of image\n */\n if (image instanceof File) {\n const reader = new FileReader();\n reader.onload = () => {\n checkSize(reader.result);\n };\n reader.readAsDataURL(image);\n } else if (isString(image)) {\n checkSize(image);\n }\n\n /**\n * Check picture size\n * @param {String} data:Data URL\n */\n function checkSize(url) {\n const image = new Image();\n image.src = url;\n image.onload = () => {\n let w = image.width / ratio;\n let h = image.height / ratio;\n\n if (enabledMaxSize) {\n let nw = Math.min(w, 750 / 2);\n h = h * (nw / w);\n w = nw;\n }\n\n if (enabledNatural) {\n w = image.naturalWidth / ratio;\n h = image.naturalHeight / ratio;\n }\n\n w = w >> 0;\n h = h >> 0;\n\n resolve({ width: w, height: h });\n };\n image.onerror = (e) => {\n reject(e);\n };\n }\n });\n};\n\nexport default checkImageSize;\n","const DEFAULT = {\n enabledType: false\n};\n\nexport default function toDataUrl(url, { enabledType } = DEFAULT) {\n return new Promise((resolve, reject) => {\n try {\n const request = new XMLHttpRequest();\n request.onload = () => {\n const reader = new FileReader();\n reader.onloadend = () => {\n if (enabledType) {\n const image = new Image();\n image.crossOrigin = 'Anonymous';\n image.src = reader.result;\n image.onload = () => {\n resolve(image);\n };\n } else {\n resolve(reader.result);\n }\n };\n reader.readAsDataURL(request.response);\n };\n request.open('GET', url, true);\n request.responseType = 'blob';\n request.send();\n } catch (error) {\n reject(error);\n }\n });\n}\n","/* eslint-disable eqeqeq */\n/* eslint-disable guard-for-in */\n\n/**\n * deep copies objects and arrays\n * Deep clones all properties except functions\n */\n\nimport isFunction from '../lodash/is_function';\nimport isArray from '../lodash/is_array';\n\nexport default function clone(obj) {\n // var arr = [1, 2, 3];\n // var subObj = { aa: 1 };\n // var obj = { a: 3, b: 5, c: arr, d: subObj };\n // var objClone = bbo.clone(obj);\n // arr.push(4);\n // subObj.bb = 2;\n // obj; // {a: 3, b: 5, c: [1, 2, 3, 4], d: {aa: 1}}\n // objClone; // {a: 3, b: 5, c: [1, 2, 3], d: {aa: 1, bb: 2}}\n if (isFunction(obj)) {\n return obj;\n }\n let result = isArray(obj) ? [] : {};\n for (let key in obj) {\n // include prototype properties\n let value = obj[key];\n let type = {}.toString.call(value).slice(8, -1);\n if (type == 'Array' || type == 'Object') {\n result[key] = clone(value);\n } else if (type == 'Date') {\n result[key] = new Date(value.getTime());\n } else if (type == 'RegExp') {\n result[key] = RegExp(value.source, getRegExpFlags(value));\n } else {\n result[key] = value;\n }\n }\n return result;\n}\n\nfunction getRegExpFlags(regExp) {\n if (typeof regExp.source.flags == 'string') {\n return regExp.source.flags;\n } else {\n let flags = [];\n regExp.global && flags.push('g');\n regExp.ignoreCase && flags.push('i');\n regExp.multiline && flags.push('m');\n regExp.sticky && flags.push('y');\n regExp.unicode && flags.push('u');\n return flags.join('');\n }\n}\n","import getTag from './get_tag';\n\nexport default function isBoolean(bool) {\n return getTag(bool) === '[object Boolean]';\n}\n","import isObject from '../lodash/is_object';\nimport isBoolean from '../lodash/is_boolean';\nimport isArray from '../lodash/is_array';\nimport isFunction from '../lodash/is_function';\n\nexport default function extend(/* [deep], obj1, obj2, [objn] */) {\n let args = [].slice.call(arguments);\n let deep = false;\n if (isBoolean(args[0])) {\n deep = args.shift();\n }\n let result = args[0];\n if (isUnextendable(result)) {\n throw new Error('extendee must be an object');\n }\n let extenders = args.slice(1);\n let len = extenders.length;\n for (let i = 0; i < len; i++) {\n let extender = extenders[i];\n for (let key in extender) {\n if (extender.hasOwnProperty(key)) {\n let value = extender[key];\n if (deep && isCloneable(value)) {\n let base = isArray(value) ? [] : {};\n result[key] = extend(\n true,\n result.hasOwnProperty(key) && !isUnextendable(result[key]) ? result[key] : base,\n value\n );\n } else {\n result[key] = value;\n }\n }\n }\n }\n return result;\n}\n\nfunction isCloneable(obj) {\n return isArray(obj) || isObject(obj);\n}\n\nfunction isUnextendable(val) {\n return !val || (!isObject(val) && !isFunction(val));\n}\n","export default function hasOwnProperty(obj, keyName) {\n return Object.prototype.hasOwnProperty.call(obj, keyName);\n}\n","import getTag from './get_tag';\n\nexport default function isNumber(number) {\n return getTag(number) === '[object Number]';\n}\n","import getTag from './get_tag';\n\nexport default function isSymbol(symbol) {\n return getTag(symbol) === '[object Symbol]';\n}\n","/* eslint-disable max-params */\nconst charCodeOfDot = '.'.charCodeAt(0);\nconst reEscapeChar = /\\\\(\\\\)?/g;\nconst rePropName = /[^.[\\]]+|\\[(?:(-?\\d+(?:\\.\\d+)?)|([\"'])((?:(?!\\2)[^\\\\]|\\\\.)*?)\\2)\\]/g;\n\nexport default function stringToPath(string) {\n const result = [];\n if (string.charCodeAt(0) === charCodeOfDot) {\n result.push('');\n }\n string.replace(rePropName, (match, expression, quote, subString) => {\n let key = match;\n if (quote) {\n key = subString.replace(reEscapeChar, '$1');\n } else if (expression) {\n key = expression.trim();\n }\n result.push(key);\n });\n return result;\n}\n","/**\n * Turn CamelCase to '_'\n */\nexport default function underscored(target) {\n return target.replace(/([a-z0-9])([A-Z])/g, '$1_$2').toLowerCase();\n}\n","import version from './util/version';\nimport noConflict from './util/no_conflict';\n\n// device\nimport ua from './device/ua';\nimport isIos from './device/is_ios';\nimport isiPhone from './device/is_iphone';\nimport isIPad from './device/is_ipad';\nimport isAndroid from './device/is_android';\nimport isMobile from './device/is_mobile';\nimport isPC from './device/is_pc';\nimport isWeixin from './device/is_weixin';\nimport isNewsApp from './device/is_news_app';\nimport isQQ from './device/is_qq';\nimport mqqbrowser from './device/mqqbrowser';\nimport isTenvideo from './device/is_tenvideo';\nimport isWeiShi from './device/is_weishi';\nimport isIphoneXmodel from './device/is_iphonex_model';\nimport isIE from './device/is_ie';\nimport ieVersion from './device/ie_version';\n\n// log\nimport log from './log/log';\nimport logs from './log/logs';\nimport removeConsole from './log/remove_console';\n\n// args\nimport args from './args/args';\nimport trash from './args/trash';\nimport noop from './args/noop';\nimport merge from './args/merge';\nimport over from './args/over';\nimport call from './args/call';\n\n// bom\nimport open from './bom/open';\nimport trigger from './bom/trigger';\nimport stopPropagation from './bom/stop_propagation';\nimport g from './bom/g';\nimport gc from './bom/gc';\nimport c from './bom/c';\nimport query from './bom/query';\nimport show from './bom/show';\nimport hide from './bom/hide';\nimport elementContains from './bom/element_contains';\nimport getStyle from './bom/get_style';\nimport setStyle from './bom/set_style';\nimport attr from './bom/attr';\n\n// other\nimport uuid from './other/uuid';\nimport hash from './other/hash';\nimport judge from './other/judge';\nimport getType from './other/get_type';\nimport isTypeof from './other/is_typeof';\nimport construct from './other/construct';\nimport paramsName from './other/params_name';\nimport eventEmitter from './other/event_emitter';\n\n// object\nimport properObject from './object/proper_object';\nimport objectDiff from './object/object_diff';\nimport addedDiff from './object/added_diff';\nimport deletedDiff from './object/deleted_diff';\nimport updatedDiff from './object/updated_diff';\nimport detailedDiff from './object/detailed_diff';\n\n// load\nimport loadImages from './load/load_images';\nimport loadjs from './load/loadjs';\nimport loadcss from './load/loadcss';\n\n// json\nimport toJson from './json/to_json';\nimport jsonp from './json/jsonp';\n\n// cookie\nimport cookie from './cookie/cookie';\nimport setCookie from './cookie/set_cookie';\nimport getCookie from './cookie/get_cookie';\nimport deleteCookie from './cookie/delete_cookie';\nimport parseCookie from './cookie/parse_cookie';\n\n// storage\nimport storage from './storage/storage';\n\n// http\nimport getUrlParam from './http/get_url_param';\nimport setUrlParam from './http/set_url_param';\nimport deleteUrlParam from './http/delete_url_param';\nimport objectParam from './http/object_param';\nimport httpGet from './http/http_get';\nimport httpPost from './http/http_post';\n\n// times\nimport setTimesout from './times/set_timesout';\nimport clearTimesout from './times/clear_timesout';\nimport getDate from './times/get_date';\nimport formatPassTime from './times/format_pass_time';\nimport formatRemainTime from './times/format_remain_time';\nimport formatDuration from './times/format_duration';\nimport sleep from './times/sleep';\n\n// fill\nimport fill0 from './fill/fill0';\nimport floor from './fill/floor';\nimport chainAsync from './fill/chain_async';\nimport numberFormat from './fill/number_format';\nimport modulo from './fill/modulo';\n\n// random\nimport randomColor from './random/random_color';\nimport randomA2B from './random/random_a2b';\nimport randomKey from './random/random_key';\n\n// behavior\nimport lockTouch from './behavior/lock_touch';\nimport copyToClipboard from './behavior/copy_to_clipboard';\n\n// image\nimport checkImageSize from './image/check_image_size';\nimport imageOptimization from './image/image_optimization';\nimport toDataUrl from './image/to_data_url';\n\n// collection\nimport clone from './collection/clone';\nimport values from './collection/values';\nimport entries from './collection/entries';\nimport extend from './collection/extend';\nimport size from './collection/size';\n\n// lodash\nimport getTag from './lodash/get_tag';\nimport hasOwnProperty from './lodash/has_own_property';\nimport isObject from './lodash/is_object';\nimport isDate from './lodash/is_date';\nimport isArray from './lodash/is_array';\nimport isString from './lodash/is_string';\nimport isBoolean from './lodash/is_boolean';\nimport isNumber from './lodash/is_number';\nimport isMap from './lodash/is_map';\nimport isSet from './lodash/is_set';\nimport isSymbol from './lodash/is_symbol';\nimport isFunction from './lodash/is_function';\nimport isEmpty from './lodash/is_empty';\nimport isShallowEqual from './lodash/is_shallow_equal';\nimport has from './lodash/has';\nimport toPath from './lodash/to_path';\nimport reduce from './lodash/reduce';\nimport forEach from './lodash/for_each';\nimport map from './lodash/map';\nimport find from './lodash/find';\nimport findIndex from './lodash/find_index';\nimport get from './lodash/get';\nimport debounce from './lodash/debounce';\nimport throttle from './lodash/throttle';\nimport pick from './lodash/pick';\nimport omit from './lodash/omit';\n\n// string\nimport trim from './string/trim';\nimport fillZero from './string/fill_zero';\nimport longUnique from './string/long_unique';\nimport stripTags from './string/strip_tags';\nimport capitalize from './string/capitalize';\nimport deCapitalize from './string/de_capitalize';\nimport isAbsoluteURL from './string/is_absolute_url';\nimport mapString from './string/map_string';\nimport mask from './string/mask';\nimport splitLines from './string/split_lines';\nimport camelize from './string/camelize';\nimport underscored from './string/underscored';\nimport dasherize from './string/dasherize';\nimport truncate from './string/truncate';\nimport byteSize from './string/byte_size';\nimport byteLen from './string/byte_len';\nimport repeat from './string/repeat';\nimport endsWith from './string/ends_with';\nimport startsWith from './string/starts_with';\nimport containsWith from './string/contains_with';\nimport xssFilter from './string/xss_filter';\nimport effortIndex from './string/effort_Index';\nimport capwords from './string/capwords';\n\n// array\nimport unique from './array/unique';\nimport uniqueBy from './array/unique_by';\nimport uniqueFrom from './array/unique_from';\nimport random from './array/random';\nimport randomSize from './array/random_size';\nimport shuffle from './array/shuffle';\nimport contains from './array/contains';\nimport includesAll from './array/includes_all';\nimport includesAny from './array/includes_any';\nimport removeAt from './array/remove_at';\nimport remove from './array/remove';\nimport compact from './array/compact';\nimport compactAll from './array/compact_all';\nimport pluck from './array/pluck';\nimport union from './array/union';\nimport unionBy from './array/union_by';\nimport unionWith from './array/union_with';\nimport intersect from './array/intersect';\nimport intersectBy from './array/intersect_by';\nimport difference from './array/difference';\nimport differenceBy from './array/difference_by';\nimport max from './array/max';\nimport min from './array/min';\nimport equal from './array/equal';\nimport allEqual from './array/all_equal';\nimport all from './array/all';\nimport any from './array/any';\nimport chunk from './array/chunk';\nimport countBy from './array/count_by';\nimport countOccurrences from './array/count_occurrences';\nimport drop from './array/drop';\nimport dropRight from './array/drop_right';\nimport dropWhile from './array/drop_while';\nimport dropRightWhile from './array/drop_right_while';\nimport column from './array/column';\nimport search from './array/search';\nimport split from './array/split';\nimport unary from './array/unary';\nimport indexBy from './array/index_by';\n\nexport default {\n // version\n version,\n noConflict,\n // device\n ua,\n isIos,\n isIOS: isIos,\n isiPhone,\n isIPad,\n isAndroid,\n isMobile,\n isPC,\n isWeixin,\n isNewsApp,\n isQQ,\n mqqbrowser,\n isTenvideo,\n isWeiShi,\n isIphoneXmodel,\n ieVersion,\n isIE,\n // log\n log,\n logs,\n removeConsole,\n // arg(arguments)\n args,\n trash,\n noop,\n merge,\n over,\n call,\n // bom\n trigger,\n stopPropagation,\n g,\n gc,\n c,\n query,\n show,\n hide,\n elementContains,\n getStyle,\n setStyle,\n attr,\n // other\n uuid,\n hash,\n judge,\n judgment: judge,\n getType,\n isTypeof,\n construct,\n paramsName,\n eventEmitter,\n // object\n properObject,\n objectDiff,\n addedDiff,\n deletedDiff,\n updatedDiff,\n detailedDiff,\n // load\n loadImages,\n loadjs,\n loadcss,\n // json\n toJson,\n toJSON: toJson,\n tojson: toJson,\n jsonp,\n // cookie\n cookie,\n setCookie,\n getCookie,\n deleteCookie,\n delCookie: deleteCookie,\n parseCookie,\n // storage\n storage,\n // http\n open,\n getUrlParam,\n setUrlParam,\n deleteUrlParam,\n delUrlParam: deleteUrlParam,\n objectParam,\n httpGet,\n httpPost,\n // times\n setTimesout,\n clearTimesout,\n getDate,\n formatPassTime,\n formatRemainTime,\n formatDuration,\n sleep,\n // fill\n fill0,\n floor,\n chainAsync,\n numberFormat,\n modulo,\n // random\n randomColor,\n randomA2B,\n randomFromA2B: randomA2B,\n randomKey,\n // behavior\n lockTouch,\n copyToClipboard,\n // image\n checkImageSize,\n imageOptimization,\n toDataUrl,\n // collection\n clone,\n deepClone: clone,\n values,\n entries,\n extend,\n size,\n // lodash\n getTag,\n hasOwnProperty,\n isObject,\n isDate,\n isArray,\n isString,\n isBoolean,\n isNumber,\n isMap,\n isSet,\n isSymbol,\n isFunction,\n isEmpty,\n isShallowEqual,\n has,\n reduce,\n forEach,\n map,\n findIndex,\n find,\n toPath,\n get,\n debounce,\n throttle,\n pick,\n omit,\n // string\n trim,\n fillZero,\n longUnique,\n stripTags,\n capitalize,\n deCapitalize,\n isAbsoluteURL,\n mapString,\n mask,\n splitLines,\n camelize,\n underscored,\n dasherize,\n truncate,\n byteSize,\n byteLen,\n repeat,\n endsWith,\n startsWith,\n containsWith,\n xssFilter,\n effortIndex,\n capwords,\n // array\n unique,\n uniqueBy,\n uniqueFrom,\n random,\n randomSize,\n shuffle,\n contains,\n includesAll,\n includesAny,\n removeAt,\n remove,\n compact,\n compactAll,\n pluck,\n union,\n unionBy,\n unionWith,\n intersect,\n intersectBy,\n difference,\n differenceBy,\n max,\n min,\n equal,\n allEqual,\n all,\n any,\n chunk,\n countBy,\n countOccurrences,\n drop,\n dropRight,\n dropWhile,\n dropRightWhile,\n column,\n search,\n split,\n unary,\n indexBy\n};\n","import ua from './ua';\n\nexport default function iPhone() {\n return /iPhone/.test(ua());\n}\n","import ua from './ua';\n\nexport default function isIPad() {\n return /iPad/.test(ua());\n}\n","import ua from './ua';\n/**\n * detect Android\n * From https://stackoverflow.com/questions/6031412/detect-android-phone-via-javascript-jquery\n */\nexport default function isAndroid() {\n return ua('l').indexOf('android') > -1;\n}\n","import isMobile from './is_mobile';\n\n/**\n * detect PC / Mobile\n * From https://stackoverflow.com/questions/3514784/what-is-the-best-way-to-detect-a-mobile-device-in-jquery\n */\nexport default function isPC() {\n return !isMobile();\n}\n","import ua from './ua';\n\nexport default function isWeixin() {\n return /MicroMessenger/i.test(ua('l')); // 微信\n}\n","import ua from './ua';\n\nexport default function isNewsApp() {\n return /qqnews/.test(ua()); // 腾讯新闻app\n}\n","import ua from './ua';\n\nexport default function isQQ() {\n return /qq\\//.test(ua()); // 手机QQ\n}\n","import ua from './ua';\n\nexport default function mqqbrowser() {\n return /mqqbrowser\\//.test(ua()); // QQ浏览器\n}\n","import ua from './ua';\n\nexport default function isTenvideo() {\n return /qqlivebrowser/.test(ua('l')); // 腾讯视频\n}\n","import ua from './ua';\n\nexport default function isWeiShi() {\n return /weishi/.test(ua('l')); // 腾讯微视\n}\n","export default function isIphoneXmodel() {\n // X XS, XS Max, XR\n const xSeriesConfig = [\n {\n devicePixelRatio: 3,\n width: 375,\n height: 812\n },\n {\n devicePixelRatio: 3,\n width: 414,\n height: 896\n },\n {\n devicePixelRatio: 2,\n width: 414,\n height: 896\n }\n ];\n if (typeof window !== 'undefined' && window) {\n const { devicePixelRatio, screen } = window;\n const { width, height } = screen;\n return xSeriesConfig.some(\n (item) =>\n item.devicePixelRatio === devicePixelRatio && item.width === width && item.height === height\n );\n }\n return false;\n}\n","import ieVersion from './ie_version';\n\nexport default function isIE() {\n return ieVersion() > 0;\n}\n","/************************************************************************\n * LOGS\n *************************************************************************/\n/**\n * log on mobile html body\n */\nimport c from '../bom/c';\nimport g from '../bom/g';\nimport attr from '../bom/attr';\n\nexport default function log(msg, styles) {\n let ele = g('_bbo_log');\n if (ele === null) {\n ele = c('div');\n attr(ele, 'id', '_bbo_log');\n attr('style', 'position:fixed;left:0;top:0;z-index:9999;padding:4px;');\n document.body.appendChild(ele);\n }\n\n if (styles) {\n for (let style in styles) {\n if (Object.prototype.hasOwnProperty.call(styles, style)) {\n ele.style[style] = styles[style];\n }\n }\n }\n ele.innerHTML = msg;\n}\n","import noop from '../args/noop';\nexport default function removeConsole(clear) {\n try {\n if (!window.console) window.console = {};\n window.console.log = window.console.info = window.console.dir = window.console.warn = window.console.trace = noop;\n if (clear === 'clear' && window.console.clear) window.console.clear();\n } catch (e) {}\n}\n","const merge = (...objs) =>\n [...objs].reduce(\n (acc, obj) =>\n Object.keys(obj).reduce((a, k) => {\n acc[k] = acc.hasOwnProperty(k) ? [].concat(acc[k]).concat(obj[k]) : obj[k];\n return acc;\n }, {}),\n {}\n );\n\nexport default merge;\n","const over = (...fns) => (...args) => fns.map((fn) => fn.apply(null, args));\n\nexport default over;\n","const call = (key, ...args) => (context) => context[key](...args);\n\nexport default call;\n","const stopPropagation = (e) => {\n let _e = e || window.event;\n if (_e.stopPropagation) {\n _e.stopPropagation(); // W3C\n } else {\n _e.cancelBubble = true; // IE\n }\n};\n\nexport default stopPropagation;\n","export default function gc(cn) {\n return document.getElementsByClassName(cn);\n}\n","export default function query(i) {\n return document.querySelector(i);\n}\n","const show = (...el) =>\n [...el].forEach((e) => {\n e.style.display = '';\n });\n\nexport default show;\n","const hide = (...el) =>\n [...el].forEach((e) => {\n e.style.display = 'none';\n });\n\nexport default hide;\n","const elementContains = (parent, child) => parent !== child && parent.contains(child);\n\nexport default elementContains;\n","const getStyle = (el, ruleName) => getComputedStyle(el)[ruleName];\n\nexport default getStyle;\n","/**\n * generate uuid\n * From https://stackoverflow.com/questions/105034/create-guid-uuid-in-javascript\n */\nexport default function uuid() {\n return 'xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx'.replace(/[xy]/g, function(c) {\n let r = (Math.random() * 16) | 0;\n let v = c === 'x' ? r : (r & 0x3) | 0x8;\n return v.toString(16);\n });\n}\n","const getType = (v) =>\n v === undefined ? 'undefined' : v === null ? 'null' : v.constructor.name.toLowerCase();\n\nexport default getType;\n","export default function construct() {\n let classs = arguments[0];\n return new (Function.prototype.bind.apply(classs, arguments))();\n}\n","/**\n * Gets all the formal parameter names of a function\n * https://www.zhihu.com/question/28912825\n */\nexport default function paramsName(fn) {\n return /\\(\\s*([\\s\\S]*?)\\s*\\)/.exec(fn.toString())[1].split(/\\s*,\\s*/);\n}\n","// https://github.com/mattphillips/deep-object-diff\n\nimport addedDiff from './added_diff';\nimport deletedDiff from './deleted_diff';\nimport updatedDiff from './updated_diff';\n\nconst detailedDiff = (lhs, rhs) => ({\n added: addedDiff(lhs, rhs),\n deleted: deletedDiff(lhs, rhs),\n updated: updatedDiff(lhs, rhs)\n});\n\nexport default detailedDiff;\n","/* eslint-disable no-invalid-this */\n\n/*\n * https://gist.github.com/pete-otaqui/3912307\n */\nimport attr from '../bom/attr';\nimport c from '../bom/c';\nimport randomKey from '../random/random_key';\n\nexport default function loadcss(url, callback) {\n let promise;\n let resolutions = [];\n let rejections = [];\n let resolved = false;\n let rejected = false;\n let id;\n\n id = 'load-css-' + randomKey(5);\n promise = {\n done: function(callback) {\n resolutions.push(callback);\n if (resolved) callback();\n return promise;\n },\n fail: function(callback) {\n rejections.push(callback);\n if (rejected) callback();\n return promise;\n }\n };\n\n function resolve() {\n resolved = true;\n for (let i = 0, len = resolutions.length; i < len; i++) resolutions[i]();\n }\n\n function reject() {\n rejected = true;\n for (let i = 0, len = rejections.length; i < len; i++) rejections[i]();\n }\n\n let link = c('link');\n attr(link, 'id', id);\n attr(link, 'rel', 'stylesheet');\n attr(link, 'type', 'text/css');\n if (typeof link.addEventListener !== 'undefined') {\n link.addEventListener('load', resolve, false);\n link.addEventListener('error', reject, false);\n } else if (typeof link.attachEvent !== 'undefined') {\n link.attachEvent('onload', function() {\n // IE 8 gives us onload for both success and failure\n // and also readyState is always \"completed\", even\n // for failure. The only way to see if a stylesheet\n // load failed from an external domain is to try and\n // access its cssText, and then catch the error\n // ... sweet :/\n let cur;\n let i = document.styleSheets.length;\n try {\n while (i--) {\n cur = document.styleSheets[i];\n if (cur.id === id) {\n resolve();\n return;\n }\n }\n } catch (e) {}\n if (!resolved) {\n reject();\n }\n });\n }\n document.getElementsByTagName('head')[0].appendChild(link);\n attr(link, 'href', url);\n return promise;\n}\n","/* eslint-disable */\nimport noop from '../args/noop';\nimport isFunction from '../lodash/is_function';\nimport randomKey from '../random/random_key';\n\n/**\n * Options:\n * - param {String} qs parameter (`callback`)\n * - prefix {String} qs parameter (`bbo`)\n * - name {String} qs parameter (`prefix` + incr)\n * - timeout {Number} how long after a timeout error is emitted (`60000`)\n * @param {String} url\n * @param {Object|Function} optional options / callback\n * @param {Function} optional callback\n */\n\nfunction jsonp(url, opts, fn) {\n if (isFunction(opts)) {\n fn = opts;\n opts = {};\n }\n if (!opts) opts = {};\n\n var prefix = opts.prefix || 'bbo';\n var id = opts.name || prefix + randomKey(10);\n\n var param = opts.param || 'callback';\n var timeout = null != opts.timeout ? opts.timeout : 60000;\n var enc = encodeURIComponent;\n var target = document.getElementsByTagName('script')[0] || document.head;\n var script;\n var timer;\n\n if (timeout) {\n timer = setTimeout(function() {\n cleanup();\n if (fn) fn(new Error('Timeout'));\n }, timeout);\n }\n\n function cleanup() {\n if (script.parentNode) script.parentNode.removeChild(script);\n window[id] = noop();\n if (timer) clearTimeout(timer);\n }\n\n function cancel() {\n if (window[id]) {\n cleanup();\n }\n }\n\n window[id] = function(data) {\n cleanup();\n if (fn) fn(data, null);\n };\n\n url += (~url.indexOf('?') ? '&' : '?') + param + '=' + enc(id);\n url = url.replace('?&', '?');\n script = document.createElement('script');\n script.src = url;\n target.parentNode.insertBefore(script, target);\n\n return cancel;\n}\n\nexport default jsonp;\n","const getCookie = (name) => {\n let nameEQ = encodeURIComponent(name) + '=';\n let ca = document.cookie.split(';');\n for (let i = 0; i < ca.length; i++) {\n let c = ca[i];\n while (c.charAt(0) === ' ') c = c.substring(1, c.length);\n if (c.indexOf(nameEQ) === 0) return decodeURIComponent(c.substring(nameEQ.length, c.length));\n }\n\n return null;\n};\n\nexport default getCookie;\n","const parseCookie = (str) =>\n str\n .split(';')\n .map((v) => v.split('='))\n .reduce((acc, v) => {\n acc[decodeURIComponent(v[0].trim())] = decodeURIComponent(v[1].trim());\n return acc;\n }, {});\n\nexport default parseCookie;\n","import setStyle from './set_style';\nimport attr from './attr';\nimport trigger from './trigger';\nimport g from './g';\nimport c from './c';\n\n/**\n * open new url dont not blocked by browser\n */\nconst open = (href) => {\n let id = '_bbo_open_proxy';\n let a = g(id) || c('a', id, '', id);\n setStyle(a, 'display', 'none');\n attr(a, 'href', href);\n attr(a, 'target', '_blank');\n if (!a.parentNode) document.body.appendChild(a);\n trigger(a, 'click', 'MouseEvents');\n};\n\nexport default open;\n","/**\n * getUrlParam / deleteUrlParam\n * From https://stackoverflow.com/questions/901115/how-can-i-get-query-string-values-in-javascript\n */\nconst getUrlParam = (name, url = window.location.href) => {\n name.replace(/[\\[\\]]/g, '\\\\$&');\n let regex = new RegExp('[?&]' + name + '(=([^&#]*)|&|#|$)');\n let results = regex.exec(url);\n if (!results) return null;\n if (!results[2]) return '';\n\n return decodeURIComponent(results[2].replace(/\\+/g, ' '));\n};\n\nexport default getUrlParam;\n","/**\n * setUrlParam\n * From https://stackoverflow.com/questions/5999118/add-or-update-query-string-parameter\n */\nconst setUrlParam = (key, value, url = window.location.href) => {\n let re = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n\n if (url.match(re)) {\n return url.replace(re, '$1' + key + '=' + encodeURIComponent(value) + '$2');\n } else {\n let hash = '';\n if (url.indexOf('#') !== -1) {\n hash = url.replace(/.*#/, '#');\n url.replace(/#.*/, '');\n }\n let separator = url.indexOf('?') !== -1 ? '&' : '?';\n return url + separator + key + '=' + encodeURIComponent(value) + hash;\n }\n};\n\nexport default setUrlParam;\n","const httpGet = (url, callback, err = console.error) => {\n const request = new XMLHttpRequest();\n request.open('GET', url, true);\n request.onload = () => callback(request.responseText);\n request.onerror = () => err(request);\n request.send();\n};\n\nexport default httpGet;\n","// eslint-disable-next-line max-params\nconst httpPost = (url, data, callback, err = console.error) => {\n const request = new XMLHttpRequest();\n request.open('POST', url, true);\n request.setRequestHeader('Content-type', 'application/json; charset=utf-8');\n request.onload = () => callback(request.responseText);\n request.onerror = () => err(request);\n request.send(data);\n};\n\nexport default httpPost;\n","import args from '../args/args';\n/**\n * setInterval func fix times\n * https://stackoverflow.com/questions/2956966/javascript-telling-setinterval-to-only-fire-x-amount-of-times\n */\nexport default function setTimesout() {\n let func = arguments[0];\n let delay = arguments[1] === undefined ? 0 : parseFloat(arguments[1]);\n let times = arguments[2] === undefined ? 1 : parseInt(arguments[2], 10);\n let _args = arguments.length > 3 ? args(arguments, 3) : null;\n let target = {\n index: 0,\n times: times,\n over: false\n };\n\n let id = setInterval(function() {\n target.index++;\n if (target.index > times) {\n clearInterval(id);\n } else {\n if (target.index === times) target.over = true;\n func.apply(target, _args);\n }\n }, delay);\n\n return id;\n}\n","export default function clearTimesout(id) {\n clearInterval(id);\n}\n","/**\n * @ zh_cn\n * @desc 格式化${startTime}距现在的已过时间\n * @param {Date} startTime\n * @return {String}\n */\nconst formatPassTime = (startTime) => {\n let currentTime = Date.parse(new Date());\n let time = currentTime - startTime;\n let day = parseInt(time / (1000 * 60 * 60 * 24), 10);\n let hour = parseInt(time / (1000 * 60 * 60), 10);\n let min = parseInt(time / (1000 * 60), 10);\n let month = parseInt(day / 30, 10);\n let year = parseInt(month / 12, 10);\n if (year) return year + '年前';\n if (month) return month + '个月前';\n if (day) return day + '天前';\n if (hour) return hour + '小时前';\n if (min) return min + '分钟前';\n else return '刚刚';\n};\n\nexport default formatPassTime;\n","/**\n * @ zh_cn\n * @desc 格式化现在距${endTime}的剩余时间\n * @param {Date} endTime\n * @return {String}\n */\nconst formatRemainTime = (endTime) => {\n let startDate = new Date(); // 开始时间\n let endDate = new Date(endTime); // 结束时间\n let t = endDate.getTime() - startDate.getTime(); // 时间差\n let d = 0;\n let h = 0;\n let m = 0;\n let s = 0;\n if (t >= 0) {\n d = Math.floor(t / 1000 / 3600 / 24);\n h = Math.floor((t / 1000 / 60 / 60) % 24);\n m = Math.floor((t / 1000 / 60) % 60);\n s = Math.floor((t / 1000) % 60);\n }\n return d + '天 ' + h + '小时 ' + m + '分钟 ' + s + '秒';\n};\n\nexport default formatRemainTime;\n","/**\n * @ en\n * bbo.formatDuration(1001); // '1 second, 1 millisecond'\n * bbo.formatDuration(34325055574); // '397 days, 6 hours, 44 minutes, 15 seconds, 574 milliseconds'\n */\nconst formatDuration = (ms) => {\n // eslint-disable-next-line no-param-reassign\n if (ms < 0) ms = -ms;\n const time = {\n day: Math.floor(ms / 86400000),\n hour: Math.floor(ms / 3600000) % 24,\n minute: Math.floor(ms / 60000) % 60,\n second: Math.floor(ms / 1000) % 60,\n millisecond: Math.floor(ms) % 1000\n };\n return Object.entries(time)\n .filter((val) => val[1] !== 0)\n .map(([key, val]) => `${val} ${key}${val !== 1 ? 's' : ''}`)\n .join(', ');\n};\n\nexport default formatDuration;\n","const floor = (n, m = 0) => {\n return Math.floor(n * Math.pow(10, m)) / Math.pow(10, m);\n};\n\nexport default floor;\n","const chainAsync = (fns) => {\n let curr = 0;\n const last = fns[fns.length - 1];\n const next = () => {\n const fn = fns[curr++];\n fn === last ? fn() : fn(next);\n };\n next();\n};\n\nexport default chainAsync;\n","/**\n * https://locutus.io/php/\n */\n// eslint-disable-next-line max-params\nconst numberFormat = (number, decimals, decPoint, thousandsSep) => {\n // example 1: bbo.math.numberFormat(1234.56)\n // returns 1: '1,235'\n // example 2: bbo.math.numberFormat(1234.56, 2, ',', ' ')\n // returns 2: '1 234,56'\n // example 3: bbo.math.numberFormat(1234.5678, 2, '.', '')\n // returns 3: '1234.57'\n // example 4: bbo.math.numberFormat(67, 2, ',', '.')\n // returns 4: '67,00'\n // example 5: bbo.math.numberFormat(1000)\n // returns 5: '1,000'\n // example 6: bbo.math.numberFormat(67.311, 2)\n // returns 6: '67.31'\n // example 7: bbo.math.numberFormat(1000.55, 1)\n // returns 7: '1,000.6'\n // example 8: bbo.math.numberFormat(67000, 5, ',', '.')\n // returns 8: '67.000,00000'\n // example 9: bbo.math.numberFormat(0.9, 0)\n // returns 9: '1'\n // example 10: bbo.math.numberFormat('1.20', 2)\n // returns 10: '1.20'\n // example 11: bbo.math.numberFormat('1.20', 4)\n // returns 11: '1.2000'\n // example 12: bbo.math.numberFormat('1.2000', 3)\n // returns 12: '1.200'\n // example 13: bbo.math.numberFormat('1 000,50', 2, '.', ' ')\n // returns 13: '100 050.00'\n // example 14: bbo.math.numberFormat(1e-8, 8, '.', '')\n // returns 14: '0.00000001'\n\n let _number = String(number).replace(/[^0-9+\\-Ee.]/g, '');\n let _decimals = decimals;\n let n = !isFinite(Number(_number)) ? 0 : Number(_number);\n let prec = !isFinite(Number(_decimals)) ? 0 : Math.abs(_decimals);\n let sep = typeof thousandsSep === 'undefined' ? ',' : thousandsSep;\n let dec = typeof decPoint === 'undefined' ? '.' : decPoint;\n let s = '';\n\n let toFixedFix = function(n, prec) {\n if (String(n).indexOf('e') === -1) {\n return Number(Math.round(n + 'e+' + prec) + 'e-' + prec);\n } else {\n let arr = String(n).split('e');\n let sig = '';\n if (Number(arr[1]) + prec > 0) {\n sig = '+';\n }\n return Number(\n Math.round(Number(arr[0]) + 'e' + sig + (Number(arr[1]) + prec)) + 'e-' + prec\n ).toFixed(prec);\n }\n };\n\n // @todo: for IE parseFloat(0.55).toFixed(0) = 0;\n s = (prec ? toFixedFix(n, prec).toString() : String(Math.round(n))).split('.');\n if (s[0].length > 3) {\n s[0] = s[0].replace(/\\B(?=(?:\\d{3})+(?!\\d))/g, sep);\n }\n if ((s[1] || '').length < prec) {\n s[1] = s[1] || '';\n s[1] += new Array(prec - s[1].length + 1).join('0');\n }\n\n return s.join(dec);\n};\n\nexport default numberFormat;\n","/**\n * modulo of a number and a divisor\n */\n\nexport default function modulo(n, d) {\n // bbo.modulo(7, 5); // 2\n // bbo.modulo(17, 23); // 17\n // bbo.modulo(16.2, 3.8); // 1\n // bbo.modulo(5.8, 3.4); //2.4\n // bbo.modulo(4, 0); // 4\n // bbo.modulo(-7, 5); // 3\n // bbo.modulo(-2, 15); // 13\n // bbo.modulo(-5.8, 3.4); // 1\n // bbo.modulo(12, -1); // NaN\n // bbo.modulo(-3, -8); // NaN\n // bbo.modulo(12, 'apple'); // NaN\n // bbo.modulo('bee', 9); // NaN\n // bbo.modulo(null, undefined); // NaN\n\n if (d === 0) {\n return n;\n }\n if (d < 0) {\n return NaN;\n }\n return ((n % d) + d) % d;\n}\n","export default function randomColor() {\n return '#' + ('00000' + ((Math.random() * 0x1000000) << 0).toString(16)).slice(-6);\n}\n","/**\n * lock touch in mobile phone\n */\nconst lockTouch = () => {\n document.addEventListener(\n 'touchmove',\n function(e) {\n e.preventDefault();\n },\n !1\n );\n document.addEventListener('touchstart', preventDefault, !1);\n document.addEventListener('touchend', preventDefault, !1);\n\n function not(e, tag) {\n return e.target.tagName !== tag.toUpperCase() && e.target.tagName !== tag.toLowerCase();\n }\n\n function preventDefault(e) {\n if (not(e, 'input') && not(e, 'textarea') && not(e, 'select') && not(e, 'menus'))\n e.preventDefault();\n }\n};\n\nexport default lockTouch;\n","import attr from '../bom/attr';\nimport setStyle from '../bom/set_style';\n\nexport default function copyToClipboard(str) {\n const el = document.createElement('textarea');\n el.value = str;\n attr(el, 'readonly', '');\n setStyle(el, 'position', 'absolute');\n setStyle(el, 'left', '-9999px');\n document.body.appendChild(el);\n const selected =\n document.getSelection().rangeCount > 0 ? document.getSelection().getRangeAt(0) : false;\n el.select();\n document.execCommand('copy');\n document.body.removeChild(el);\n if (selected) {\n document.getSelection().removeAllRanges();\n document.getSelection().addRange(selected);\n }\n}\n","/**\n * Image optimization\n * Gif images are not supported\n * @param {(Object|String)} - image ,supported File Object or Data URLs\n * @param {Number} [quality = 0.9] - Image quality, between 0 - 1, only image/jpeg or image/webp is accept.\n * @param {Object} [options = {}] - Image options\n * @param {Number} [options.maxWidth = 1920] - The maximum width of the output picture.\n * If the original width of the picture is less than this width, the original size picture is returned.\n * If the original width of the picture is greater than the width, the picture scaled to the size is returned.\n * @param {String} [options.mimeType] - Output image type,Types of MIME.\n * @returns {Object} Promise , resolve Function parameters are optimized pictures Blob Object,\n * If the output type is image/gif,Then return as is image Parameter content.\n */\n\nimport isString from '../lodash/is_string';\n\nconst imageOptimization = (image, quality = 0.9, { maxWidth = 1920, mimeType } = {}) => {\n return new Promise((resolve, reject) => {\n if (image instanceof File) {\n const reader = new FileReader();\n reader.onload = function() {\n toBlob(this.result);\n };\n reader.readAsDataURL(image);\n } else if (isString(image)) {\n toBlob(image);\n }\n\n /**\n * To Blob\n * @param {String} data - Image: Data URL\n */\n function toBlob(data) {\n const type = data.match(/data:([^;,]+)/);\n if (Array.isArray(type)) {\n const outputType = mimeType ? mimeType : type[1];\n\n if (outputType === 'image/gif') {\n return resolve(image);\n }\n\n const virtualImage = new Image();\n virtualImage.src = data;\n virtualImage.onload = function() {\n let width = this.naturalWidth;\n let height = this.naturalHeight;\n if (width > maxWidth) {\n height = Math.round((maxWidth * height) / width);\n width = maxWidth;\n }\n const canvas = document.createElement('canvas');\n canvas.width = width;\n canvas.height = height;\n const context = canvas.getContext('2d');\n context.drawImage(this, 0, 0, width, height);\n canvas.toBlob(\n (blob) => {\n resolve(blob);\n },\n mimeType ? mimeType : type[1],\n quality\n );\n };\n } else {\n reject(new Error('Non-picture type Data URLs'));\n }\n }\n });\n};\n\nexport default imageOptimization;\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\nimport isArray from '../lodash/is_array';\n\nexport default function values(obj) {\n let result = [];\n if (isArray(obj)) {\n return obj.slice(0);\n }\n if (isObject(obj) || isFunction(obj)) {\n let keys = Object.keys(obj);\n let len = keys.length;\n for (let i = 0; i < len; i++) {\n result.push(obj[keys[i]]);\n }\n return result;\n }\n throw new Error('argument to `values` must be an object');\n}\n","import isFunction from '../lodash/is_function';\nimport isObject from '../lodash/is_object';\n\nexport default function entries(obj) {\n if ((!isObject(obj) && !isFunction(obj)) || obj === null) {\n throw new Error('argument to `entries` must be an object');\n }\n\n let result = [];\n for (let key in obj) {\n if (obj.hasOwnProperty(key)) {\n result.push([key, obj[key]]);\n }\n }\n return result;\n}\n","import isArray from '../lodash/is_array';\nimport isString from '../lodash/is_string';\nimport isMap from '../lodash/is_map';\nimport isSet from '../lodash/is_set';\n\n/**\n * Gets the size of `collection` by returning its length for array-like\n * values or the number of own enumerable string keyed properties for objects.\n *\n * @category Collection\n * @param {Array|Object|string} collection The collection to inspect.\n * @returns {number} Returns the collection size.\n */\nexport default function size(collection) {\n if (collection === null || collection === undefined) {\n return 0;\n }\n if (isArray(collection) || isString(collection)) {\n return collection.length;\n }\n\n if (isMap(collection) || isSet(collection)) {\n return collection.size;\n }\n\n return Object.keys(collection).length;\n}\n","import hasOwnProperty from './has_own_property';\n\nexport default function has(object, key) {\n return object !== null && hasOwnProperty(object, key);\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function reduce(src, func) {\n let i = 0;\n let acc = arguments[2];\n if (isArray(src)) {\n if (arguments.length !== 3) {\n acc = src[0];\n }\n while (i < src.length) {\n acc = func(acc, src[i], i, src);\n i += 1;\n }\n return acc;\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n if (arguments.length !== 3) {\n acc = src[keys[0]];\n }\n while (i < keys.length) {\n const key = keys[i];\n acc = func(acc, src[key], key, src);\n i += 1;\n }\n return acc;\n }\n return acc;\n}\n","import isArray from './is_array';\nimport isObject from './is_object';\n\nexport default function map(src, func) {\n const rst = [];\n let i = 0;\n if (isArray(src)) {\n while (i < src.length) {\n rst.push(func(src[i], i, src));\n i += 1;\n }\n } else if (isObject(src)) {\n const keys = Object.keys(src);\n while (i < keys.length) {\n const key = keys[i];\n rst.push(func(src[key], key, src));\n i += 1;\n }\n }\n return rst;\n}\n","import forEach from './for_each';\nimport isFunction from './is_function';\nimport isObject from './is_object';\nimport is from './is';\nimport isShallowEqual from './is_shallow_equal';\n\nexport default function find(src, func) {\n // eslint-disable-next-line no-undef-init\n let rst = undefined;\n forEach(src, (item, key, obj) => {\n if (isFunction(func)) {\n if (func(item, key, obj) === true) {\n rst = item;\n return false;\n }\n } else if (is(item, func)) {\n rst = item;\n return false;\n } else if (isObject(item) && isObject(func)) {\n let subEqual = true;\n forEach(func, (v, k) => {\n subEqual = isShallowEqual(item[k], v);\n return subEqual;\n });\n if (subEqual) {\n rst = item;\n return false;\n }\n }\n });\n return rst;\n}\n","import isString from './is_string';\nimport stringToPath from './string_to_path';\n\nexport default function toPath(value) {\n if (!isString(value)) {\n return [];\n }\n return stringToPath(value);\n}\n","import isString from './is_string';\nimport isSymbol from './is_symbol';\nimport isArray from './is_array';\n\nexport default function get(obj, propsArg, defaultValue) {\n if (!obj) {\n return defaultValue;\n }\n let props;\n let prop;\n if (Array.isArray(propsArg)) {\n props = propsArg.slice(0);\n }\n if (isString(propsArg)) {\n props = propsArg.split('.');\n }\n if (isSymbol(propsArg)) {\n props = [propsArg];\n }\n if (!isArray(props)) {\n throw new Error('props arg must be an array, a string or a symbol');\n }\n while (props.length) {\n prop = props.shift();\n if (!obj) {\n return defaultValue;\n }\n // eslint-disable-next-line no-param-reassign\n obj = obj[prop];\n if (obj === undefined) {\n return defaultValue;\n }\n }\n return obj;\n}\n","/* eslint-disable no-invalid-this */\nexport default function debounce(fn, wait, callFirst) {\n let timeout;\n return function() {\n if (!wait) {\n return fn.apply(this, arguments);\n }\n let context = this;\n let args = arguments;\n let callNow = callFirst && !timeout;\n clearTimeout(timeout);\n timeout = setTimeout(function() {\n timeout = null;\n if (!callNow) {\n return fn.apply(context, args);\n }\n }, wait);\n\n if (callNow) {\n return fn.apply(this, arguments);\n }\n };\n}\n","/* eslint-disable no-invalid-this */\nexport default function throttle(fn, interval, callFirst) {\n let wait = false;\n let callNow = false;\n return function() {\n callNow = callFirst && !wait;\n let context = this;\n let args = arguments;\n if (!wait) {\n wait = true;\n setTimeout(function() {\n wait = false;\n if (!callFirst) {\n return fn.apply(context, args);\n }\n }, interval);\n }\n if (callNow) {\n callNow = false;\n return fn.apply(this, arguments);\n }\n };\n}\n","/* eslint-disable */\nconst pick = (obj, arr) =>\n arr.reduce((acc, curr) => (curr in obj && (acc[curr] = obj[curr]), acc), {});\n\nexport default pick;\n","/* eslint-disable no-return-assign */\n/* eslint-disable no-sequences */\nconst omit = (obj, arr) =>\n Object.keys(obj)\n .filter((k) => !arr.includes(k))\n .reduce((acc, key) => ((acc[key] = obj[key]), acc), {});\n\nexport default omit;\n","/**\n * Remove spaces after removing previous string\n */\nimport isEmpty from '../lodash/is_empty';\n\nexport default function trim(str) {\n if (isEmpty(str)) {\n return str;\n }\n return str.replace(/(^\\s*)|(\\s*$)/g, '');\n}\n","/**\n * Increase by 0 based on string length before string\n */\nexport default function fillZero(target, n) {\n let z = new Array(n).join('0');\n let str = z + target;\n let result = str.slice(-n);\n return result;\n}\n","/**\n * Long string unique\n */\nexport default function longUnique(target) {\n let json = {};\n for (let index = 0; index < target.length; index++) {\n if (!json[target[index]]) {\n json[target[index]] = -1;\n }\n }\n let longString = '';\n for (let index = 0; index < target.length; index++) {\n if (json[target[index]]) {\n json[target[index]] = 0;\n longString = longString + target[index];\n }\n }\n return longString;\n}\n","/**\n * Remove the html tags inside the script\n */\nexport default function stripTags(target) {\n return target.replace(/]*>(\\S\\s*?)<\\/script>/gim, '').replace(/<[^>]+>/g, '');\n}\n","/**\n * Capitalizes the first letter of a string.\n */\nexport default function capitalize(target) {\n return target.charAt(0).toUpperCase() + target.slice(1).toLowerCase();\n}\n","/**\n * DeCapitalizes the first letter of a string.\n */\n\nconst deCapitalize = ([first, ...rest], upperRest = false) =>\n first.toLowerCase() + (upperRest ? rest.join('').toUpperCase() : rest.join(''));\n\nexport default deCapitalize;\n","/**\n * Returns true if the given string is an absolute URL, false otherwise.\n */\nconst isAbsoluteURL = (str) => /^[a-z][a-z0-9+.-]*:/.test(str);\n\nexport default isAbsoluteURL;\n","/**\n * Creates a new string with the results of calling a provided function\n * on every character in the calling string.\n */\nconst mapString = (str, fn) =>\n str\n .split('')\n .map((c, i) => fn(c, i, str))\n .join('');\n\nexport default mapString;\n","/**\n * Replaces all but the last num of characters with the specified mask character.\n */\nconst mask = (cc, num = 4, mask = '*') => `${cc}`.slice(-num).padStart(`${cc}`.length, mask);\nexport default mask;\n","/**\n * splitLines('This\\nis a\\nmultiline\\nstring.\\n') =>\n * ['This', 'is a', 'multiline', 'string.' , '']\n */\nexport default function splitLines(str) {\n str.split(/\\r?\\n/);\n}\n","/**\n * _ or - to CamelCase\n */\nexport default function camelize(target) {\n if (target.indexOf('-') < 0 && target.indexOf('_') < 0) {\n return target;\n }\n return target.replace(/[-_][^-_]/g, function(match) {\n return match.charAt(1).toUpperCase();\n });\n}\n","import underscored from './underscored';\n/**\n * Turn '_' in a string into '-'\n */\nexport default function dasherize(target) {\n return underscored(target).replace(/_/g, '-');\n}\n","/**\n * Truncates a string up to a specified length.\n * The default length is 3, and the truncated symbol defaults '...'\n */\nconst truncate = (str, num) =>\n str.length > num ? str.slice(0, num > 3 ? num - 3 : num) + '...' : str;\n\nexport default truncate;\n","/**\n * Returns the length of a string in bytes.\n */\nexport default function byteSize(str) {\n return new Blob([str]).size;\n}\n","/**\n * Returns the length of a string in bytes by Unicode (utf-8 utf8 utf-16 utf16)\n */\nexport default function byteLen(str, charset) {\n let target = 0;\n let charCode;\n let i;\n let len;\n let _charset = charset ? charset.toLowerCase() : '';\n if (_charset === 'utf-16' || _charset === 'utf16') {\n for (i = 0, len = str.length; i < len; i++) {\n charCode = str.charCodeAt(i);\n if (charCode <= 0xffff) {\n target += 2;\n } else {\n target += 4;\n }\n }\n } else {\n for (i = 0, len = str.length; i < len; i++) {\n charCode = str.charCodeAt(i);\n if (charCode <= 0x007f) {\n target += 1;\n } else if (charCode <= 0x07ff) {\n target += 2;\n } else if (charCode <= 0xffff) {\n target += 3;\n } else {\n target += 4;\n }\n }\n }\n return target;\n}\n","/**\n * Repeat item, times times\n */\nexport default function repeat(item, times) {\n let s = item;\n let target = '';\n while (times > 0) {\n if (times % 2 === 1) {\n target += s;\n }\n if (times === 1) {\n break;\n }\n s += s;\n // eslint-disable-next-line no-param-reassign\n times = times >> 1;\n }\n return target;\n}\n","/**\n * Item is the end of the target\n */\nexport default function endsWith(target, item, ignore) {\n let str = target.slice(-item.length);\n return ignore ? str.toLowerCase() === item.toLowerCase() : str === item;\n}\n","/**\n * Item is the beginning of the target\n */\nexport default function startsWith(target, item, ignore) {\n let str = target.slice(0, item.length);\n return ignore ? str.toLowerCase() === item.toLowerCase() : str === item;\n}\n","/**\n * XSS string filtering\n */\nexport default function xssFilter(str) {\n return str\n .replace(/&/g, '&')\n .replace(//g, '>')\n .replace(/\"/g, '"')\n .replace(/'/g, ''');\n}\n","export default function sindex(s, sep) {\n // discuss at: https://locutus.io/golang/strings/Index\n // original by: Kevin van Zonneveld (https://kvz.io)\n // example 1: Index('Kevin', 'K')\n // returns 1: 0\n // example 2: Index('Kevin', 'Z')\n // returns 2: -1\n return String(s).indexOf(sep);\n}\n","export default function capwords(str) {\n // example 1: capwords('kevin van zonneveld')\n // returns 1: 'Kevin Van Zonneveld'\n // example 2: capwords('HELLO WORLD')\n // returns 2: 'HELLO WORLD'\n\n let pattern = /^([a-z\\u00E0-\\u00FC])|\\s+([a-z\\u00E0-\\u00FC])/g;\n return String(str).replace(pattern, function($1) {\n return $1.toUpperCase();\n });\n}\n","/**\n * Returns all unique values of an array.\n */\n\nconst unique = (arr) => [...new Set(arr)];\n\nexport default unique;\n","/**\n * Returns all unique values of an array, based on a provided comparator function.\n */\nconst uniqueBy = (arr, fn) =>\n arr.reduce((acc, v) => {\n if (!acc.some((x) => fn(v, x))) acc.push(v);\n return acc;\n }, []);\n\nexport default uniqueBy;\n","/**\n * Remove duplicates from an array of objects\n * https://stackoverflow.com/questions/2218999/remove-duplicates-from-an-array-of-objects-in-javascript\n */\nexport default function uniqueFrom(arr, target) {\n return Object.values(arr.reduce((acc, cur) => Object.assign(acc, { [cur[target]]: cur }), {}));\n}\n","/**\n * Returns a random element from an array.\n */\nconst random = (arr) => arr[Math.floor(Math.random() * arr.length)];\n\nexport default random;\n","/**\n * Gets n random elements at unique keys from array up to the size of array.\n */\nexport default function randomSize([...arr], n = 1) {\n let m = arr.length;\n while (m) {\n const i = Math.floor(Math.random() * m--);\n [arr[m], arr[i]] = [arr[i], arr[m]];\n }\n return arr.slice(0, n);\n}\n","/**\n * Randomizes the order of the values of an array, returning a new array.\n */\nexport default function shuffle([...arr]) {\n let m = arr.length;\n while (m) {\n const i = Math.floor(Math.random() * m--);\n [arr[m], arr[i]] = [arr[i], arr[m]];\n }\n return arr;\n}\n","/**\n * Returns true if the element has the specified Array, false otherwise.\n */\nexport default function contains(target, item) {\n return target.indexOf(item) > -1;\n}\n","/**\n * Returns true if all the elements values are included in arr, false otherwise.\n */\nconst includesAll = (arr, values) => values.every((v) => arr.includes(v));\n\nexport default includesAll;\n","/**\n * Returns true if at least one element of values is included in arr , false otherwise.\n */\nconst includesAny = (arr, values) => values.some((v) => arr.includes(v));\n\nexport default includesAny;\n","/**\n * Remove the element specified by parameter 2 in parameter 1 and return Boolean\n */\nexport default function removeAt(target, index) {\n return !!target.splice(index, 1).length;\n}\n","import isArray from '../lodash/is_array';\n\nexport default function remove(arr1, arr2) {\n if (!isArray(arr1) || !isArray(arr2)) {\n throw new Error('expected both arguments to be arrays');\n }\n let result = [];\n let len = arr1.length;\n for (let i = 0; i < len; i++) {\n let elem = arr1[i];\n if (arr2.indexOf(elem) === -1) {\n result.push(elem);\n }\n }\n return result;\n}\n","/**\n * returns a copy of an array with falsey values removed\n */\n\nimport isArray from '../lodash/is_array';\n\nexport default function compact(arr) {\n if (!isArray(arr)) {\n throw new Error('expected an array');\n }\n let result = [];\n let len = arr.length;\n for (let i = 0; i < len; i++) {\n let elem = arr[i];\n if (elem) {\n result.push(elem);\n }\n }\n return result;\n}\n","/**\n * Removes falsy values from an array.\n * (false, null, 0, \"\", undefined, and NaN).\n */\nconst compactAll = (arr) => arr.filter(Boolean);\nexport default compactAll;\n","/**\n * Get the attribute values in an array object and combine them into a new array\n */\nexport default function pluck(target, name) {\n let result = [];\n let temp;\n target.forEach(function(item) {\n temp = item[name];\n if (temp !== null) {\n result.push(temp);\n }\n });\n return result;\n}\n","/**\n * Returns every element that exists in any of the two arrays once\n * Create a Set with all values of a and b and convert to an array.\n */\nconst union = (a, b) => Array.from(new Set([...a, ...b]));\n\nexport default union;\n","/**\n * Returns every element that exists in any of the two arrays once,\n * after applying the provided function to each array element of both.\n */\nconst unionBy = (a, b, fn) => {\n const s = new Set(a.map(fn));\n return Array.from(new Set([...a, ...b.filter((x) => !s.has(fn(x)))]));\n};\n\nexport default unionBy;\n","/**\n * Returns every element that exists in any of the two arrays once,\n * using a provided comparator function.\n */\nconst unionWith = (a, b, comp) => {\n Array.from(new Set([...a, ...b.filter((x) => a.findIndex((y) => comp(x, y)) === -1)]));\n};\n\nexport default unionWith;\n","/**\n * Returns a list of elements that exist in both arrays.\n */\nexport default function intersect(a, b) {\n const s = new Set(b);\n return a.filter((x) => s.has(x));\n}\n","/**\n * Returns a list of elements that exist in both arrays,\n * after applying the provided function to each array element of both.\n */\nexport default function intersectBy(a, b, fn) {\n const s = new Set(b.map(fn));\n return a.filter((x) => s.has(fn(x)));\n}\n","/**\n * Returns the difference between two arrays.\n * Create a Set from b, then use Array.prototype.\n * Filter() on a to only keep values not contained in b.\n */\nexport default function difference(a, b) {\n const s = new Set(b);\n return a.filter((x) => !s.has(x));\n}\n","/**\n * Returns the difference between two arrays,\n * after applying the provided function to each array element of both.\n */\nexport default function differenceBy(a, b, fn) {\n const s = new Set(b.map(fn));\n return a.map(fn).filter((el) => !s.has(el));\n}\n","/**\n * Returns the largest element in an array\n */\nexport default function max(target) {\n return Math.max.apply(0, target);\n}\n","/**\n * Returns the smallest element in an array\n */\nexport default function min(target) {\n return Math.min.apply(0, target);\n}\n","/**\n * Check two arrays are equal\n */\nexport default function equal(arr1, arr2) {\n if (arr1 === arr2) return true;\n if (arr1.length !== arr2.length) return false;\n for (let i = 0; i < arr1.length; ++i) {\n if (arr1[i] !== arr2[i]) return false;\n }\n return true;\n}\n","/**\n * Check if all elements in an array are equal.\n */\nconst allEqual = (arr) => arr.every((val) => val === arr[0]);\n\nexport default allEqual;\n","/**\n * Returns true if the provided predicate function returns true for all elements in a collection, false otherwise.\n */\nconst all = (arr, fn = Boolean) => arr.every(fn);\n\nexport default all;\n","/**\n * Returns true if the provided predicate function returns true for at least one element in a collection,\n * false otherwise.\n */\nconst any = (arr, fn = Boolean) => arr.some(fn);\n\nexport default any;\n","/**\n * Chunks an array into smaller arrays of a specified size.\n */\nconst chunk = (arr, size) => {\n Array.from({ length: Math.ceil(arr.length / size) }, (v, i) =>\n arr.slice(i * size, i * size + size)\n );\n};\n\nexport default chunk;\n","/**\n * Groups the elements of an array based on the given function and returns the count of elements in each group.\n */\nconst countBy = (arr, fn) => {\n arr.map(typeof fn === 'function' ? fn : (val) => val[fn]).reduce((acc, val) => {\n acc[val] = (acc[val] || 0) + 1;\n return acc;\n }, {});\n};\n\nexport default countBy;\n","/**\n * Counts the occurrences of a value in an array.\n */\nconst countOccurrences = (arr, val) => {\n arr.reduce((a, v) => (v === val ? a + 1 : a), 0);\n};\n\nexport default countOccurrences;\n","/**\n * Returns a new array with n elements removed from the left.\n */\nconst drop = (arr, n = 1) => arr.slice(n);\n\nexport default drop;\n","/**\n * Returns a new array with n elements removed from the right.\n */\nconst dropRight = (arr, n = 1) => arr.slice(0, -n);\n\nexport default dropRight;\n","/**\n * Removes elements in an array until the passed function returns true.\n * Returns the remaining elements in the array.\n */\nexport default function dropWhile(arr, func) {\n let _arr = arr;\n while (_arr.length > 0 && !func(_arr[0])) _arr = _arr.slice(1);\n return _arr;\n}\n","/**\n * Removes elements from the end of an array until the passed function returns true,\n * Returns the remaining elements in the array.\n */\nexport default function dropRightWhile(arr, func) {\n let rightIndex = arr.length;\n while (rightIndex-- && !func(arr[rightIndex]));\n return arr.slice(0, rightIndex + 1);\n}\n","/**\n * discuss at: https://locutus.io/php/array_column/\n */\nimport isObject from '../lodash/is_object';\nimport isArray from '../lodash/is_array';\n\nexport default function column(input, ColumnKey, IndexKey = null) {\n if (input !== null && (isObject(input) || isArray(input))) {\n let newarray = [];\n if (isObject(input)) {\n let temparray = [];\n for (let key of Object.keys(input)) {\n temparray.push(input[key]);\n }\n // eslint-disable-next-line no-param-reassign\n input = temparray;\n }\n if (isArray(input)) {\n for (let key of input.keys()) {\n if (IndexKey && input[key][IndexKey]) {\n if (ColumnKey) {\n newarray[input[key][IndexKey]] = input[key][ColumnKey];\n } else {\n newarray[input[key][IndexKey]] = input[key];\n }\n } else {\n if (ColumnKey) {\n newarray.push(input[key][ColumnKey]);\n } else {\n newarray.push(input[key]);\n }\n }\n }\n }\n // eslint-disable-next-line prefer-object-spread\n return Object.assign({}, newarray);\n }\n}\n","export default function search(needle, haystack, argStrict) {\n // discuss at: https://locutus.io/php/array_search/'\n // example 1: bbo.array.search('3', {a: 3, b: 5, c: 7})\n // returns 1: 'a'\n\n let strict = !!argStrict;\n let key = '';\n let _needle = needle;\n\n if (typeof _needle === 'object' && _needle.exec) {\n // Duck-type for RegExp\n if (!strict) {\n // Let's consider case sensitive searches as strict\n let flags =\n 'i' +\n (_needle.global ? 'g' : '') +\n (_needle.multiline ? 'm' : '') +\n // sticky is FF only\n (_needle.sticky ? 'y' : '');\n _needle = new RegExp(_needle.source, flags);\n }\n for (key in haystack) {\n if (haystack.hasOwnProperty(key)) {\n if (_needle.test(haystack[key])) {\n return key;\n }\n }\n }\n return false;\n }\n\n for (key in haystack) {\n if (haystack.hasOwnProperty(key)) {\n // eslint-disable-next-line eqeqeq\n if ((strict && haystack[key] === needle) || (!strict && haystack[key] == needle)) {\n return key;\n }\n }\n }\n\n return false;\n}\n","import isNumber from '../lodash/is_number';\nimport isArray from '../lodash/is_array';\n\nexport default function split(arr, n) {\n if (!isArray(arr)) {\n throw new Error('expected an array for the first argument');\n }\n if (n !== null && !isNumber(n)) {\n throw new Error('expected a number or null for the second argument');\n }\n // eslint-disable-next-line no-param-reassign\n n = n !== null ? n : arr.length;\n let len = arr.length;\n let groups = [];\n for (let i = 0; i < len; i += n) {\n groups.push(arr.slice(i, i + n));\n }\n return groups;\n}\n","const unary = (fn) => (val) => fn(val);\n\nexport default unary;\n","/**\n * return an object from an array, keyed by the value at the given id\n */\n\nimport isArray from '../lodash/is_array';\nimport isString from '../lodash/is_string';\n\nexport default function indexBy(arr, key) {\n // bbp.indexBy([{id: 'first', val: 1}, {id: 'second', val: 2}], 'id');\n // => {first: {id: 'first', val: 1}, second: {id: // 'second', val: 2}}\n // indexBy([{id: 'first', val: 1}, null], 'id');\n // => {first: {id: 'first', val: 1}}\n // indexBy([], 'id'); // => {}\n // indexBy([], null); // => throws\n // indexBy({}, 'id'); // => throws\n\n if (!isArray(arr)) {\n throw new Error('expected an array for first argument');\n }\n if (!isString(key)) {\n throw new Error('expected a string for second argument');\n }\n let result = {};\n let len = arr.length;\n for (let i = 0; i < len; i++) {\n let index = arr[i] && arr[i][key];\n\n if (index) {\n result[index] = arr[i];\n }\n }\n return result;\n}\n","/* eslint-disable no-invalid-this */\nimport functions from 'functions';\n\nfunction ChainWrapper(subject, explicitChain) {\n this._wrappedValue = subject;\n this._explicitChain = explicitChain;\n}\n\nChainWrapper.prototype.value = function() {\n return this._wrappedValue;\n};\n\nChainWrapper.prototype.valueOf = function() {\n return this.value();\n};\n\nChainWrapper.prototype.toJSON = function() {\n return this.value();\n};\n\nChainWrapper.prototype.toString = function() {\n return String(this.value());\n};\n\nChainWrapper.prototype.chain = function() {\n return new ChainWrapper(this._wrappedValue, true);\n};\n\nChainWrapper.prototype.thru = function(changer) {\n if (typeof changer === 'function') {\n return new ChainWrapper(changer(this._wrappedValue), this._explicitChain);\n }\n return this;\n};\n\nChainWrapper.prototype._explicitChain = true;\n\nfunction makeFunctionChainable(functionInstance) {\n return function(...args) {\n const result = functionInstance(this._wrappedValue, ...args);\n if (this._explicitChain || typeof result === 'string') {\n return new ChainWrapper(result, this._explicitChain);\n } else {\n return result;\n }\n };\n}\n\nObject.keys(functions).forEach(function(name) {\n ChainWrapper.prototype[name] = makeFunctionChainable(functions[name]);\n});\n\nexport default ChainWrapper;\n","import chain from './chain/chain';\nimport ChainWrapper from './chain/wrapper';\nimport functions from './functions';\n\nfunction bbo(subject) {\n return new ChainWrapper(subject, false);\n}\n\nObject.assign(bbo, functions, {\n chain: chain\n});\n\nexport default bbo;\n","import ChainWrapper from 'chain/wrapper';\n\nexport default function chain(subject) {\n return new ChainWrapper(subject, true);\n}\n"],"names":["globalObject","global","Object","self","Function","previous","bbo","ua","lower","window","navigator","userAgent","toLowerCase","isIOS","test","isMobile","ieVersion","uakit","msie","indexOf","parseInt","substring","rv","edge","attr","el","ruleName","val","setAttribute","c","t","cn","i","id","document","createElement","innerHTML","g","getElementById","args","$arguments","first","Array","prototype","slice","call","_cache","noop","trash","clear","key","log","console","setStyle","style","trigger","element","event","eventType","createEventObject","e","fireEvent","createEvent","initEvent","dispatchEvent","hash","str","_str","String","length","charCodeAt","isTypeof","type","toString","judge","v","vals","strict","getTag","src","isFunction","func","isObject","obj","isArray","arr","forEach","keys","is","x","y","isShallowEqual","objA","objB","keysA","keysB","hasOwnProperty","findIndex","rst","item","index","subEqual","k","EventEmitter","__events","on","eventName","listener","isListener","TypeError","events","this","listeners","listenerIsWrapped","listenerOnce","once","push","off","len","splice","emit","apply","allOff","properObject","o","isDate","d","Date","isString","isMap","map","isSet","set","isEmpty","size","objectDiff","lhs","rhs","l","r","deletedValues","reduce","acc","undefined","valueOf","difference","addedDiff","deletedDiff","updatedDiff","LoadImageItem","url","cb","img","Image","onReadyStateChange","removeEventHandlers","info","onError","onLoad","unbind","start","bind","complete","eventHandler","addEventListener","attachEvent","removeEventListener","detachEvent","urls","logs","_insertScripts","callback","_insertScript","loaded","_index","script","getElementsByTagName","appendChild","onreadystatechange","readyState","onload","setTimeout","randomKey","possible","charAt","Math","floor","random","toJson","res","json","JSON","parse","setCookie","name","value","option","raw","encodeURIComponent","cookie","days","date","ms","setTime","getTime","toGMTString","hour","longTime","path","domain","secure","deleteCookie","containsWith","target","ulocalStorage","localStorage","ussesionStorage","sessionStorage","Storage","constructor","options","prefix","message","setItem","getItem","removeAll","removeItem","_storage","doItem","action","err","_warn","stringify","has","every","get","result","warn","_remove","deleteUrlParam","param","location","href","urlparts","split","pars","lastIndexOf","join","objectParam","objectBigParam","concat","fill0","num","_num","parseFloat","cachedSetTimeout","createSleepPromise","timeout","timeoutFunction","useCachedSetTimeout","Promise","resolve","randomA2B","a","b","int","DEFAULT","enabledMaxSize","enabledNatural","ratio","enabledType","clone","RegExp","source","getRegExpFlags","regExp","flags","ignoreCase","multiline","sticky","unicode","isBoolean","bool","isCloneable","isUnextendable","keyName","isNumber","number","isSymbol","symbol","charCodeOfDot","reEscapeChar","rePropName","underscored","replace","version","noConflict","isIos","isiPhone","isIPad","isAndroid","isPC","isWeixin","isNewsApp","isQQ","mqqbrowser","isTenvideo","isWeiShi","isIphoneXmodel","devicePixelRatio","screen","width","height","some","isIE","msg","styles","ele","body","onlyId","arguments","times","logsCache","removeConsole","dir","trace","merge","objs","over","fns","fn","context","stopPropagation","_e","cancelBubble","gc","getElementsByClassName","query","querySelector","show","display","hide","elementContains","parent","child","contains","getStyle","getComputedStyle","uuid","judgment","getType","construct","classs","paramsName","exec","eventEmitter","detailedDiff","added","deleted","updated","loadImages","curIndex","stepTimer","percentageValue","targetPercent","data","step","needOneStep","processStep","clearTimeout","loadjs","loadcss","promise","resolutions","rejections","resolved","rejected","reject","done","fail","link","styleSheets","toJSON","tojson","jsonp","opts","timer","enc","head","cleanup","parentNode","removeChild","Error","insertBefore","_extend","attributes","init","converter","api","_attributes","defaults","expires","setMilliseconds","getMilliseconds","_value","write","decodeURIComponent","_key","__key","___key","escape","_cookie","toUTCString","cookies","setDecode","parts","read","getJSON","getjson","getJson","remove","withConverter","getCookie","nameEQ","ca","delCookie","parseCookie","trim","storage","open","getUrlParam","regex","results","setUrlParam","re","match","separator","delUrlParam","httpGet","error","request","XMLHttpRequest","responseText","onerror","send","httpPost","setRequestHeader","setTimesout","delay","_args","setInterval","clearInterval","clearTimesout","getDate","d1","d2","today","dd","mm","getMonth","yyyy","getFullYear","hh","getHours","getMinutes","ss","getSeconds","_d1","_d2","formatPassTime","startTime","time","day","min","month","year","formatRemainTime","endTime","startDate","h","m","s","formatDuration","minute","second","millisecond","entries","filter","sleep","sleepPromise","promiseFunction","then","catch","n","pow","chainAsync","curr","last","next","numberFormat","decimals","decPoint","thousandsSep","_number","_decimals","isFinite","Number","prec","abs","sep","dec","round","sig","toFixed","toFixedFix","modulo","NaN","randomColor","randomFromA2B","lockTouch","not","tag","tagName","toUpperCase","preventDefault","copyToClipboard","selected","getSelection","rangeCount","getRangeAt","select","execCommand","removeAllRanges","addRange","checkImageSize","image","File","reader","FileReader","checkSize","readAsDataURL","w","nw","naturalWidth","naturalHeight","imageOptimization","quality","maxWidth","mimeType","toBlob","virtualImage","canvas","getContext","drawImage","blob","toDataUrl","onloadend","crossOrigin","response","responseType","deepClone","values","extend","deep","shift","extenders","extender","base","collection","object","find","toPath","string","expression","quote","subString","propsArg","defaultValue","props","prop","debounce","wait","callFirst","callNow","throttle","interval","pick","omit","includes","fillZero","longUnique","longString","stripTags","capitalize","deCapitalize","rest","upperRest","isAbsoluteURL","mapString","mask","cc","padStart","splitLines","camelize","dasherize","truncate","byteSize","Blob","byteLen","charset","charCode","_charset","repeat","endsWith","ignore","startsWith","xssFilter","effortIndex","capwords","$1","unique","Set","uniqueBy","uniqueFrom","cur","_extends","randomSize","shuffle","includesAll","includesAny","removeAt","arr1","arr2","elem","compact","compactAll","Boolean","pluck","temp","union","from","unionBy","unionWith","comp","intersect","intersectBy","differenceBy","max","equal","allEqual","all","any","chunk","ceil","countBy","countOccurrences","drop","dropRight","dropWhile","_arr","dropRightWhile","rightIndex","column","input","ColumnKey","IndexKey","newarray","temparray","search","needle","haystack","argStrict","_needle","groups","unary","indexBy","ChainWrapper","subject","explicitChain","_wrappedValue","_explicitChain","chain","thru","changer","functions","functionInstance"],"mappings":"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"} \ No newline at end of file diff --git a/package.json b/package.json index 3b73ea3..143a79e 100755 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "bbo", - "version": "1.1.17", + "version": "1.1.18", "description": "bbo is a utility library of zero dependencies for javascript.", "homepage": "https://tnfe.github.io/bbo", "author": "halldwang", diff --git a/src/collection/size.js b/src/collection/size.js index e4f7bb6..2071d59 100644 --- a/src/collection/size.js +++ b/src/collection/size.js @@ -12,7 +12,7 @@ import isSet from '../lodash/is_set'; * @returns {number} Returns the collection size. */ export default function size(collection) { - if (collection === null) { + if (collection === null || collection === undefined) { return 0; } if (isArray(collection) || isString(collection)) { diff --git a/src/lodash/is_empty.js b/src/lodash/is_empty.js index 99a770f..bdc232a 100644 --- a/src/lodash/is_empty.js +++ b/src/lodash/is_empty.js @@ -1,3 +1,30 @@ -const isEmpty = (o) => Object.keys(o).length === 0; +import isArray from '../lodash/is_array'; +import isString from '../lodash/is_string'; +import isObject from '../lodash/is_object'; +import isMap from '../lodash/is_map'; +import isSet from '../lodash/is_set'; -export default isEmpty; +export default function isEmpty(obj) { + if (obj === null) { + return true; + } + + if (isArray(obj)) { + return !obj.length; + } + + if (isString(obj)) { + return !obj.length; + } + + if (isObject(obj)) { + return !Object.keys(obj).length; + } + + if (isMap(obj) || isSet(obj)) { + return !obj.size; + } + + // other primitive || unidentifed object type + return Object(obj) !== obj || !Object.keys(obj).length; +} diff --git a/src/util/version.js b/src/util/version.js index f263e3b..28154bd 100755 --- a/src/util/version.js +++ b/src/util/version.js @@ -1,3 +1,3 @@ -const version = '1.1.17'; +const version = '1.1.18'; export default version;