/**
* Finding all the occurrences of an element in Array
* @returns {Array}
*/
indexOfAll = function (array, element) {var indices = [], idx;
idx = array.indexOf(element);
while (idx !== -1) {indices.push(idx);
idx = array.indexOf(element, idx + 1);
}
return indices;
};
/**
* Calculate the length of object
* @returns {int}
*/
obLength = function (map) {
var key, count = 0;
for (key in map) {if (map.hasOwnProperty(key)) {count += 1;}
}
return count;
};
/**
* Judge the string if it is numeric. Only for decimal.
* @returns {boolean}
*/
isNumeric = function (value) {return (/^-?([0-9]+(.[0-9]+)?|Infinity)$/).test(value);
};
/**
* Return the unique elements of one array, remove redundant elements
* @return {Array}
*/
unique = function (opt) {var a = [], l = opt.length, i, j;
for (i = 0; i < l; i += 1) {for (j = i + 1; j < l; j += 1) {// If opt[i] is found later in the array
if (opt[i] === opt[j]) {
i += 1;
j = i;
}
}
a.push(opt[i]);
}
return a;
};
/**
* Get the random color for css
* @return {string}
*/
getRandomColor = function () {
var letters, color = "#", i, str = "0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F";
letters = str.split(",");
for (i = 0; i < 6; i += 1) {color += letters[Math.round(Math.random() * 15)];
}
return color;
};
/**
* Transform timestamp to format "HH:mm:ss.l DD-MM-YY"
* @returns {string}
*/
timeStampToString = function (timeStamp) {
var fmt, oShow, oDate;
timeStamp = (typeof timeStamp === "string") ? parseFloat(timeStamp) : timeStamp;
fmt = function (n, m) {
m = m || 10;
return (m === 100 && n < 10) ? "00" + n : (n < m ? "0" + n : n);
};
oDate = new Date(timeStamp);
oShow = fmt(oDate.getDate()) + "-" + fmt(oDate.getMonth() + 1) + "-" + oDate.getFullYear() + "" + fmt(oDate.getHours()) +":"+ fmt(oDate.getMinutes()) +":"+ fmt(oDate.getSeconds()) +"." + fmt(oDate.getMilliseconds(), 100);
return oShow;
};
/**
* Display the huge number in human readable text
* @returns {string}
*/
shortHugeNumber = function (num) {
var returnNum, million = 1000000, billion = 1000000000, mValue, bValue, secNum, fstNum;
num = (typeof num !== "number") ? parseFloat(num) : num;
bValue = parseFloat((num / billion).toFixed(3));
mValue = parseFloat((num / million).toFixed(3));
if (bValue > 1.000) {returnNum = bValue + "billion";} else if (bValue === 1.000) {returnNum = "one billion";} else if (mValue > 1.000) {returnNum = mValue + "million";} else if (mValue === 1.000) {returnNum = "one million";} else if (num >= 1000) {
returnNum = "/" + num;
fstNum = returnNum.substring(1, returnNum.length - 3) + ",";
secNum = returnNum.substring(returnNum.length - 3, returnNum.length);
returnNum = fstNum + secNum;
} else {returnNum = num;}
return returnNum;
};
/**
* Get the current clock
* @return {string}
*/
getClock = function () {
var tDay, tMonth, d, nDay, nMonth, nDate, nYear, nHour, nMin, nSec, nClock;
tDay = ["Sun", "Mon", "Tues", "Wed", "Thur", "Fri", "Sat"];
tMonth = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
d = new Date();
nDay = d.getDay();
nMonth = d.getMonth();
nDate = d.getDate();
nYear = d.getYear();
nHour = d.getHours();
nMin = d.getMinutes();
nSec = d.getSeconds();
if (nYear < 1000) {nYear = nYear + 1900;}
if (nMin <= 9) {nMin = "0" + nMin;}
if (nSec <= 9) {nSec = "0" + nSec;}
nClock = tDay[nDay] + "," + nDate + "" + tMonth[nMonth] +" "+ nYear +" "+ nHour +":"+ nMin +":" + nSec;
return nClock;
}
/**
* Readable file size
* @param fileSizeInBytes
* @returns {string}
*/
getReadableFileSize = function (fileSizeInBytes) {
var i = -1;
var byteUnits = ['kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'];
fileSizeInBytes = parseInt(fileSizeInBytes, 10);
do {
fileSizeInBytes = fileSizeInBytes / 1024;
i++;
} while (fileSizeInBytes > 1024);
return Math.max(fileSizeInBytes, 0.1).toFixed(1) + byteUnits[i];
}
/**
* Cookie 的二次封装
*/
class ServiceCookie {
/**
* 全副
* @returns {{}}
*/
getAllCookieValue() {const cookie = {};
const all = document.cookie;
if (all === '') {return cookie;}
const list = all.split(';');
list.forEach((item) => {const keyAndName = item.split('=');
cookie[keyAndName[0]] = decodeURIComponent(keyAndName[1]) || '';
});
return cookie;
}
/**
* 提取数据
* @param key
* @returns {*}
*/
getItem(key) {const cookie = this.getAllCookieValue();
return cookie[key] || null;
}
/**
* 存储数据
* @param key
* @param value
* @param maxAge
* @param path
*/
setItem(key, value, maxAge, path) {if (value === undefined) {this.removeItem(key);
} else {let newCookie = `${key}=${encodeURIComponent(value)}`;
if (maxAge) newCookie += `; max-age=${maxAge}`;
if (path) newCookie += `; path=${path}`;
document.cookie = newCookie;
}
}
/**
* 删除数据
* @param key
*/
removeItem(key) {const cookie = this.getAllCookieValue();
if (!(key in cookie)) {return;}
document.cookie = `${key}=; max-age=0`;
}
}
export default new ServiceCookie();
/**
* localStorage 的二次封装,存储 JSON 格局数据
*/
class ServiceStorage {
/**
* constructor
*/
constructor() {
this.instance = {
local: localStorage,
session: sessionStorage,
};
}
/**
* 存储数据
* @param key
* @param value
* @param type
* @returns {*}
*/
setItem(key, value, type = 'local') {if (value === undefined) {this.removeItem(key);
} else {this.instance[type].setItem(key, this.serialize(value));
}
}
/**
* 提取数据
* @param key
* @param type
* @returns {*}
*/
getItem(key, type = 'local') {return this.deserialize(this.instance[type].getItem(key));
}
/**
* 删除数据
* @param key
* @param type
*/
removeItem(key, type = 'local') {this.instance[type].removeItem(key);
}
/**
* 清空数据
* @param type
*/
clearItems(type = 'local') {this.instance[type].clear();}
/**
* 数据列表
* @param type
* @returns {{}}
*/
getAllItems(type = 'local') {const res = {};
let i;
let key;
for (i = 0; i < this.instance[type].length; i += 1) {key = this.instance[type].key(i);
res[key] = this.getItem(key);
}
return res;
}
/**
* 输入 JSON 格局数据
* @returns {string}
*/
serialize(value) {return typeof value === 'object' ? JSON.stringify(value) : value;
}
/**
* 解码 JSON 数据
* @param value
* @returns {*}
*/
deserialize(value) {if (typeof value !== 'string') {return undefined;}
try {return JSON.parse(value);
} catch (e) {return value || undefined;}
}
/**
* 查找数据存在性
* @param key
* @returns {boolean}
*
*/
checkItem(key) {const token = this.getItem(key);
return (!(token === undefined || token === null));
}
}
export default new ServiceStorage();