redscorpion-utils
Version:
A good JavaScript tools
1 lines • 6.12 kB
JavaScript
const prefix='scorpion';export const data=(table=prefix,settings,storage=localStorage)=>{if(!window.JSON||!window.JSON.parse){return}if(settings===null){return delete storage[table]}settings=typeof settings==='object'?settings:{key:settings};let data={};try{data=JSON.parse(storage[table])}catch(e){}if('value'in settings){data[settings.key]=settings.value}if(settings.remove){delete data[settings.key]}storage[table]=JSON.stringify(data);return settings.key?data[settings.key]:data};export const device=(key)=>{const agent=navigator.userAgent.toLowerCase();const getVersion=function(label){const exp=new RegExp(`${ label }/([^\\s\\_\\-]+)`);label=(agent.match(exp)||[])[1];return label||false};const result={os:(function(){if((/windows/u).test(agent)){return 'windows'}if((/linux/u).test(agent)){return 'linux'}if((/iphone|ipod|ipad|ios/u).test(agent)){return 'ios'}if((/mac/u).test(agent)){return 'mac'}})(),ie:(function(){return Boolean(window.ActiveXObject)||'ActiveXObject'in window?(agent.match(/msie\s(\d+)/u)||[])[1]||'11':false})(),weixin:getVersion('micromessenger')};if(key&&!result[key]){result[key]=getVersion(key)}result.android=(/android/u).test(agent);result.ios=result.os==='ios';result.mobile=Boolean(result.android||result.ios);return result};export const mediaMaxWidth=(val='768')=>{if(window.matchMedia(`(max-width: ${ val }px)`).matches){return true}return false};export const isSmallScreen=(val='768')=>{if(device().mobile||mediaMaxWidth(val)){return true}return false};export const hint=(e)=>{return{error(msg){window.console&&console.error&&console.error(`${e||'ml-error'}: `,msg)},log(msg){window.console&&console.log&&console.log(`${e||'ml-log'}: `,msg)},debug(msg){window.console&&console.debug&&console.debug(`${e||'ml-debug'}: `,msg)},assert(value,...message){window.console&&console.assert&&console.assert(value,...message)}}};export const each=(obj,fn)=>{let key;const that=this;if(typeof fn!=='function'){return that}obj||=[];if(obj.constructor===Object){for(key in obj){if(fn.call(obj[key],key,obj[key])){break}}}else{for(key=0;key<obj.length;key+=1){if(fn.call(obj[key],key,obj[key])){break}}}return that};export const random=(len=32,chars='abcdefghijklmnopqrstuvwxyz0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ')=>{const tempLen=chars.length;let str='';for(let i=0;i<len;i+=1){str+=chars.charAt(Math.floor(Math.random()*tempLen))}return str};export const randomString=(len=32,chars='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ')=>random(len,chars);export const randomNumber=(len=6,chars='0123456789')=>random(len,chars);export const digitPre=(num,length=2)=>{if(isBlank(num)){return ''}let str='';num=String(num);for(let i=num.length;i<length;i+=1){str+='0'}return num<10**length?str+(num|0):num};export const autoHeight=()=>{let winHeight=0;if(window.innerHeight){winHeight=window.innerHeight}else if(document.body&&document.body.clientHeight){winHeight=document.body.clientHeight}if(document.documentElement&&document.documentElement.clientHeight){winHeight=document.documentElement.clientHeight}return winHeight};export const isBlank=(str)=>{if(str===null||str===undefined||str===''||str==='undefined'){return true}return false};export const isNull=(str)=>{if(str===null||str===undefined){return true}return false};export const objectNullRemove=(e={})=>{const data={...e};for(const attr in data){if(data[attr]===undefined||data[attr]===null){delete data[attr]}}return data};export const objectNullToEmpty=(e={})=>{const data={...e};for(const attr in data){if(data[attr]===undefined||data[attr]===null){data[attr]=''}}return data};export const isJsonString=(str)=>{try{if(str===null||str===''){return false}if(str instanceof Object||str instanceof Array){return true}if(typeof str==='object'){return true}if(typeof JSON.parse(str)==='object'){return true}return false}catch(e){return false}};export const isJsonObjectString=(str)=>{try{if(str===null||str===''){return false}if(str instanceof Object){return true}if(typeof str==='object'){return true}if(typeof JSON.parse(str)==='object'){return true}return false}catch(e){return false}};export const isJsonArrayString=(str)=>{try{if(str===null||str===''){return false}if(Array.isArray(str)){return true}if(str instanceof Array){return true}if(Array.isArray(JSON.parse(str))){return true}return false}catch(e){return false}};export const transData=(data,id='id',pid='parentId',children='children',curr=false,currName='(本单位) ')=>{const ret=[];const hash={};let i=0;let j=0;const{length}=data;for(;i<length;i+=1){hash[data[i][id]]=data[i]}for(;j<length;j+=1){const aVal=data[j];const hashPid=hash[aVal[pid]];if(hashPid){!hashPid[children]&&(hashPid[children]=[]);if(curr){if(hashPid[children].length===0){for(let z=0;z<length;z+=1){if(data[z][id]===aVal[pid]){const item=JSON.parse(JSON.stringify(data[z]));item.label=currName+item.label;item.curr='1';delete item.children;hashPid[children].push(item);break}}}}hashPid[children].push(aVal)}else{ret.push(aVal)}}return ret};export const toParams=(e={})=>Object.keys(e).map((key)=>`${ key }=${encodeURIComponent(e[key])}`).join('&');export const oneOf=(validList,value)=>{for(let i=0;i<validList.length;i+=1){if(value===validList[i]){return true}}return false};export const typeOf=(obj)=>{const{toString}=Object.prototype;const map={'[object Boolean]':'boolean','[object Number]':'number','[object String]':'string','[object Function]':'function','[object Array]':'array','[object Date]':'date','[object RegExp]':'regExp','[object Undefined]':'undefined','[object Null]':'null','[object Object]':'object'};return map[toString.call(obj)]};export const cloneDeep=(data)=>{const t=typeOf(data);let o;if(t==='array'){o=[]}else if(t==='object'){o={}}else{return data}if(t==='array'){for(let i=0;i<data.length;i+=1){o.push(cloneDeep(data[i]))}}else if(t==='object'){for(const i in data){o[i]=cloneDeep(data[i])}}return o};export default{data,device,mediaMaxWidth,isSmallScreen,hint,each,random,randomString,randomNumber,digitPre,autoHeight,isBlank,isNull,objectNullRemove,objectNullToEmpty,isJsonString,isJsonObjectString,isJsonArrayString,transData,toParams,oneOf,typeOf,cloneDeep};