Browse Source

KERNEL-13991 feat: core/func文件夹

es6
zsmj 2 years ago
parent
commit
15b9445fae
  1. 24
      src/core/2.base.js
  2. 282
      src/core/func/alias.js
  3. 25
      src/core/func/array.js
  4. 285
      src/core/func/date.js
  5. 96
      src/core/func/function.js
  6. 23
      src/core/func/index.js
  7. 42
      src/core/func/number.js
  8. 56
      src/core/func/string.js
  9. 6
      src/core/index.js
  10. 59
      src/core/platform/web/detectElementResize.js
  11. 39
      src/core/utils/chinesePY.js

24
src/core/2.base.js

@ -157,8 +157,10 @@ BI._.extend(BI, {
BI._.each(["where", "findWhere", "invoke", "pluck", "shuffle", "sample", "toArray", "size"], function (name) {
BI[name] = _apply(name);
});
BI._.each(["get", "set", "each", "map", "reduce", "reduceRight", "find", "filter", "reject", "every", "all", "some", "any", "max", "min",
"sortBy", "groupBy", "indexBy", "countBy", "partition", "clamp"], function (name) {
BI._.each([
"get", "set", "each", "map", "reduce", "reduceRight", "find", "filter", "reject", "every", "all", "some", "any", "max", "min",
"sortBy", "groupBy", "indexBy", "countBy", "partition", "clamp"
], function (name) {
if (name === "any") {
BI[name] = _applyFunc("some");
} else {
@ -404,8 +406,10 @@ BI._.extend(BI, {
});
// 数组相关的方法
BI._.each(["first", "initial", "last", "rest", "compact", "flatten", "without", "union", "intersection",
"difference", "zip", "unzip", "object", "indexOf", "lastIndexOf", "sortedIndex", "range", "take", "takeRight", "uniqBy"], function (name) {
BI._.each([
"first", "initial", "last", "rest", "compact", "flatten", "without", "union", "intersection",
"difference", "zip", "unzip", "object", "indexOf", "lastIndexOf", "sortedIndex", "range", "take", "takeRight", "uniqBy"
], function (name) {
BI[name] = _apply(name);
});
BI._.each(["findIndex", "findLastIndex"], function (name) {
@ -497,10 +501,12 @@ BI._.extend(BI, {
});
// 对象相关方法
BI._.each(["keys", "allKeys", "values", "pairs", "invert", "create", "functions", "extend", "extendOwn",
BI._.each([
"keys", "allKeys", "values", "pairs", "invert", "create", "functions", "extend", "extendOwn",
"defaults", "clone", "property", "propertyOf", "matcher", "isEqual", "isMatch", "isEmpty",
"isElement", "isNumber", "isString", "isArray", "isObject", "isPlainObject", "isArguments", "isFunction", "isFinite",
"isBoolean", "isDate", "isRegExp", "isError", "isNaN", "isUndefined", "zipObject", "cloneDeep"], function (name) {
"isBoolean", "isDate", "isRegExp", "isError", "isNaN", "isUndefined", "zipObject", "cloneDeep"
], function (name) {
BI[name] = _apply(name);
});
export const keys = BI.keys;
@ -666,6 +672,7 @@ BI._.extend(BI, {
export const deepClone = BI._.cloneDeep;
export const deepExtend = BI._.deepExtend;
export function isDeepMatch(object, attrs) {
let attrsKeys = keys(attrs), length = attrsKeys.length;
if (object == null) {
@ -1351,9 +1358,8 @@ export function parseDateTime(str, fmt) {
return today;
}
export function getDate() {
const length = arguments.length;
const args = arguments;
export function getDate(...args) {
const length = args.length;
let dt;
switch (length) {
// new Date()

282
src/core/func/alias.js

@ -1,35 +1,37 @@
(function () {
var _global;
if (typeof window !== "undefined") {
import {each, isFunction, isNull, isObject, isPlainObject, keys, leftPad, parseDateTime, values} from "../2.base";
import {replaceAll} from "./string";
import {getFullDayName, getMonthName, getTimezone} from "./date";
var _global;
if (typeof window !== "undefined") {
_global = window;
} else if (typeof global !== "undefined") {
} else if (typeof global !== "undefined") {
_global = global;
} else if (typeof self !== "undefined") {
} else if (typeof self !== "undefined") {
_global = self;
} else {
} else {
_global = this;
}
if (!_global.BI) {
}
if (!_global.BI) {
_global.BI = {};
}
}
function isEmpty (value) {
function isEmpty(value) {
// 判断是否为空值
var result = value === "" || value === null || value === undefined;
return result;
}
return value === "" || value === null || value === undefined;
}
// 判断是否是无效的日期
function isInvalidDate (date) {
return date == "Invalid Date" || date == "NaN";
}
// 判断是否是无效的日期
function isInvalidDate(date) {
return date === "Invalid Date" || date === "NaN";
}
/**
/**
* CHART-1400
* 使用数值计算的方式来获取任意数值的科学技术表示值
* 科学计数格式
*/
function _eFormat (text, fmt) {
function _eFormat(text, fmt) {
text = +text;
return eFormat(text, fmt);
@ -44,7 +46,7 @@
* 数量级没有规定因为没见过实数里有用科学计数法表示之后E的后面会小于一位的情况0无所谓
* @returns {*}
*/
function eFormat (num, format) {
function eFormat(num, format) {
var neg = num < 0 ? (num *= -1, "-") : "",
magnitudeNeg = "";
@ -90,7 +92,7 @@
}
// 获取format格式规定的数量级的形式
function formatExponential (format, num, magnitudeNeg) {
function formatExponential(format, num, magnitudeNeg) {
num += "";
if (!/e/ig.test(format)) {
return num;
@ -115,7 +117,7 @@
}
// 获取format规定的科学计数法精确到的位数
function getPrecision (format) {
function getPrecision(format) {
if (!/e/ig.test(format)) {
return 0;
}
@ -126,7 +128,7 @@
// 获取数值科学计数法表示之后整数的位数
// 这边我们还需要考虑#和0的问题
function getInteger (magnitude, format) {
function getInteger(magnitude, format) {
if (!/e/ig.test(format)) {
return 0;
}
@ -147,16 +149,16 @@
}
// 判断num通过round函数之后是否有进位
function isValueCarried (num) {
function isValueCarried(num) {
var roundNum = Math.round(num);
num = (num + "").split(".")[0];
roundNum = (roundNum + "").split(".")[0];
return num.length !== roundNum.length;
}
}
}
//'#.##'之类的格式处理 1.324e-18 这种的科学数字
function _dealNumberPrecision (text, fright) {
//'#.##'之类的格式处理 1.324e-18 这种的科学数字
function _dealNumberPrecision(text, fright) {
if (/[eE]/.test(text)) {
var precision = 0, i = 0, ch;
@ -173,12 +175,12 @@
}
return text;
}
}
/**
/**
* 数字格式
*/
function _numberFormat (text, format) {
function _numberFormat(text, format) {
var text = text + "";
//在调用数字格式的时候如果text里没有任何数字则不处理
@ -192,7 +194,7 @@
if (text >= 0) {
return _numberFormat(text + "", format.substring(0, numMod));
}
return _numberFormat((-text) + "", format.substr(numMod + 1));
return _numberFormat((-text) + "", format.substring(numMod + 1));
} else {
// 兼容格式处理负数的情况(copy:fr-jquery.format.js)
@ -209,9 +211,9 @@
if (/[%‰]$/.test(format)) {
var paddingZero = /[%]$/.test(format) ? "00" : "000";
tright += paddingZero;
tleft += tright.substr(0, paddingZero.length);
tleft += tright.substring(0, paddingZero.length);
tleft = tleft.replace(/^0+/gi, "");
tright = tright.substr(paddingZero.length).replace(/0+$/gi, "");
tright = tright.substring(paddingZero.length).replace(/0+$/gi, "");
}
var right = _dealWithRight(tright, fright);
if (right.leftPlus) {
@ -230,16 +232,16 @@
} else {
return left + "." + right;
}
}
}
/**
/**
* 处理小数点右边小数部分
* @param tright 右边内容
* @param fright 右边格式
* @returns {JSON} 返回处理结果和整数部分是否需要进位
* @private
*/
function _dealWithRight (tright, fright) {
function _dealWithRight(tright, fright) {
var right = "", j = 0, i = 0;
for (var len = fright.length; i < len; i++) {
var ch = fright.charAt(i);
@ -261,7 +263,7 @@
break;
}
}
var rll = tright.substr(j);
var rll = tright.substring(j);
var result = {};
if (!isEmpty(rll) && rll.charAt(0) > 4) {
// 有多余字符,需要四舍五入
@ -273,9 +275,9 @@
var newnum = parseInt(num) + 1 + "";
// 进位到整数部分
if (newnum.length > orilen) {
newnum = newnum.substr(1);
newnum = newnum.substring(1);
} else {
newnum = BI.leftPad(newnum, orilen, "0");
newnum = leftPad(newnum, orilen, "0");
result.leftPlus = false;
}
right = right.replace(/^[0-9]+/, newnum);
@ -283,16 +285,16 @@
}
result.num = right;
return result;
}
}
/**
/**
* 处理小数点左边整数部分
* @param tleft 左边内容
* @param fleft 左边格式
* @returns {string} 返回处理结果
* @private
*/
function _dealWithLeft (tleft, fleft) {
function _dealWithLeft(tleft, fleft) {
var left = "";
var j = tleft.length - 1;
var combo = -1, last = -1;
@ -331,8 +333,8 @@
}
if (last > -1) {
// 处理剩余字符
var tll = tleft.substr(0, j + 1);
left = left.substr(0, last) + tll + left.substr(last);
var tll = tleft.substring(0, j + 1);
left = left.substring(0, last) + tll + left.substring(last);
}
if (combo > 0) {
// 处理,分隔区间
@ -341,9 +343,9 @@
res = res[0];
var newstr = "", n = res.length - 1 - combo;
for (; n >= 0; n = n - combo) {
newstr = res.substr(n, combo) + "," + newstr;
newstr = res.substring(n, combo) + "," + newstr;
}
var lres = res.substr(0, n + combo);
var lres = res.substring(0, n + combo);
if (!isEmpty(lres)) {
newstr = lres + "," + newstr;
}
@ -351,10 +353,9 @@
left = left.replace(/[0-9]+,/, newstr);
}
return left;
}
}
BI.cjkEncode = function (text) {
export const cjkEncode = function (text) {
// alex:如果非字符串,返回其本身(cjkEncode(234) 返回 ""是不对的)
if (typeof text !== "string") {
return text;
@ -371,16 +372,16 @@
}
return newText;
};
};
/**
/**
* 将cjkEncode处理过的字符串转化为原始字符串
*
* @static
* @param text 需要做解码的字符串
* @return {String} 解码后的字符串
*/
BI.cjkDecode = function (text) {
export const cjkDecode = function (text) {
if (text == null) {
return "";
}
@ -409,25 +410,25 @@
}
return newText;
};
};
// replace the html special tags
var SPECIAL_TAGS = {
// replace the html special tags
const SPECIAL_TAGS = {
"&": "&amp;",
"\"": "&quot;",
"<": "&lt;",
">": "&gt;",
"\x20": "&nbsp;",
"\n": "&#10;"
};
BI.htmlEncode = function (text) {
return BI.isNull(text) ? "" : BI.replaceAll(text + "", BI.keys(SPECIAL_TAGS).join("|"), function (v) {
};
export const htmlEncode = function (text) {
return isNull(text) ? "" : replaceAll(text + "", keys(SPECIAL_TAGS).join("|"), function (v) {
return SPECIAL_TAGS[v] ? SPECIAL_TAGS[v] : v;
});
};
// html decode
BI.htmlDecode = function (text) {
return BI.isNull(text) ? "" : BI.replaceAll(text + "", BI.values(SPECIAL_TAGS).join("|"), function (v) {
};
// html decode
export const htmlDecode = function (text) {
return isNull(text) ? "" : replaceAll(text + "", values(SPECIAL_TAGS).join("|"), function (v) {
switch (v) {
case "&amp;":
return "&";
@ -445,25 +446,25 @@
return v;
}
});
};
};
BI.cjkEncodeDO = function (o) {
if (BI.isPlainObject(o)) {
export const cjkEncodeDO = function (o) {
if (isPlainObject(o)) {
var result = {};
BI._.each(o, function (v, k) {
each(o, function (v, k) {
if (!(typeof v === "string")) {
v = BI.jsonEncode(v);
v = jsonEncode(v);
}
// wei:bug 43338,如果key是中文,cjkencode后o的长度就加了1,ie9以下版本死循环,所以新建对象result。
k = BI.cjkEncode(k);
result[k] = BI.cjkEncode(v);
k = cjkEncode(k);
result[k] = cjkEncode(v);
});
return result;
}
return o;
};
};
BI.jsonEncode = function (o) {
export const jsonEncode = function (o) {
// james:这个Encode是抄的EXT的
var useHasOwn = !!{}.hasOwnProperty;
@ -509,7 +510,7 @@
if (b) {
a.push(",");
}
a.push(v === null ? "null" : BI.jsonEncode(v));
a.push(v === null ? "null" : jsonEncode(v));
b = true;
}
}
@ -519,14 +520,14 @@
if (typeof o === "undefined" || o === null) {
return "null";
} else if (BI.isArray(o)) {
} else if (isArray(o)) {
return encodeArray(o);
} else if (o instanceof Date) {
/*
* alex:原来只是把年月日时分秒简单地拼成一个String,无法decode
* 现在这么处理就可以decode了,但是JS.jsonDecode和Java.JSONObject也要跟着改一下
*/
return BI.jsonEncode({
return jsonEncode({
__time__: o.getTime()
});
} else if (typeof o === "string") {
@ -535,7 +536,7 @@
return isFinite(o) ? String(o) : "null";
} else if (typeof o === "boolean") {
return String(o);
} else if (BI.isFunction(o)) {
} else if (isFunction(o)) {
return String(o);
}
var a = ["{"], b, i, v;
@ -550,8 +551,8 @@
if (b) {
a.push(",");
}
a.push(BI.jsonEncode(i), ":",
v === null ? "null" : BI.jsonEncode(v));
a.push(jsonEncode(i), ":",
v === null ? "null" : jsonEncode(v));
b = true;
}
}
@ -559,14 +560,12 @@
a.push("}");
return a.join("");
};
};
BI.jsonDecode = function (text) {
export const jsonDecode = function (text) {
try {
// 注意0啊
// var jo = $.parseJSON(text) || {};
var jo = BI.$ ? BI.$.parseJSON(text) : _global.JSON.parse(text);
var jo = JSON.parse(text);
if (jo == null) {
jo = {};
}
@ -588,14 +587,14 @@
return jo;
}
function _hasDateInJson (json) {
function _hasDateInJson(json) {
if (!json || typeof json !== "string") {
return false;
}
return json.indexOf("__time__") != -1;
return json.indexOf("__time__") !== -1;
}
return (function (o) {
return (function parse(o) {
if (typeof o === "string") {
return o;
}
@ -603,17 +602,17 @@
return new Date(o.__time__);
}
for (var a in o) {
if (o[a] == o || typeof o[a] === "object" || BI._.isFunction(o[a])) {
if (o[a] == o || typeof o[a] === "object" || isFunction(o[a])) {
break;
}
o[a] = arguments.callee(o[a]);
o[a] = parse(o[a]);
}
return o;
})(jo);
};
};
/**
/**
* 获取编码后的url
* @param urlTemplate url模板
* @param param 参数
@ -621,16 +620,16 @@
* @example
* BI.getEncodeURL("design/{tableName}/{fieldName}",{tableName: "A", fieldName: "a"}) // design/A/a
*/
BI.getEncodeURL = function (urlTemplate, param) {
return BI.replaceAll(urlTemplate, "\\{(.*?)\\}", function (ori, str) {
return BI.encodeURIComponent(BI.isObject(param) ? param[str] : param);
export const getEncodeURL = function (urlTemplate, param) {
return replaceAll(urlTemplate, "\\{(.*?)\\}", function (ori, str) {
return encodeURIComponent(isObject(param) ? param[str] : param);
});
};
};
BI.encodeURIComponent = function (url) {
export const encodeURIComponent = function (url) {
BI.specialCharsMap = BI.specialCharsMap || {};
url = url || "";
url = BI.replaceAll(url + "", BI.keys(BI.specialCharsMap || []).join("|"), function (str) {
url = replaceAll(url + "", keys(BI.specialCharsMap || []).join("|"), function (str) {
switch (str) {
case "\\":
return BI.specialCharsMap["\\\\"] || str;
@ -639,21 +638,21 @@
}
});
return _global.encodeURIComponent(url);
};
};
BI.decodeURIComponent = function (url) {
export const decodeURIComponent = function (url) {
var reserveSpecialCharsMap = {};
BI.each(BI.specialCharsMap, function (initialChar, encodeChar) {
each(BI.specialCharsMap, function (initialChar, encodeChar) {
reserveSpecialCharsMap[encodeChar] = initialChar === "\\\\" ? "\\" : initialChar;
});
url = url || "";
url = BI.replaceAll(url + "", BI.keys(reserveSpecialCharsMap || []).join("|"), function (str) {
url = replaceAll(url + "", keys(reserveSpecialCharsMap || []).join("|"), function (str) {
return reserveSpecialCharsMap[str] || str;
});
return _global.decodeURIComponent(url);
};
};
BI.contentFormat = function (cv, fmt) {
export const contentFormat = function (cv, fmt) {
if (isEmpty(cv)) {
// 原值为空,返回空字符
return "";
@ -677,9 +676,9 @@
cv = new Date(Date.parse(("" + cv).replace(/-|\./g, "/")));
}
}
if (!isInvalidDate(cv) && !BI.isNull(cv)) {
if (!isInvalidDate(cv) && !isNull(cv)) {
var needTrim = fmt.match(/^DT/);
text = BI.date2Str(cv, fmt.substring(needTrim ? 2 : 1));
text = date2Str(cv, fmt.substring(needTrim ? 2 : 1));
}
} else if (fmt.match(/E/)) {
// 科学计数格式
@ -691,15 +690,14 @@
// ¤ - 货币格式
text = text.replace(/¤/g, "¥");
return text;
};
};
/**
/**
* 将Java提供的日期格式字符串装换为JS识别的日期格式字符串
* @class FR.parseFmt
* @param fmt 日期格式
* @returns {String}
* @returns {string}
*/
BI.parseFmt = function (fmt) {
export const parseFmt = function (fmt) {
if (!fmt) {
return "";
}
@ -736,40 +734,35 @@
.replace(/s{2,}/g, "%S");
return fmt;
};
};
/**
/**
* 把字符串按照对应的格式转化成日期对象
*
* @example
* var result = BI.str2Date('2013-12-12', 'yyyy-MM-dd');//Thu Dec 12 2013 00:00:00 GMT+0800
*
* @class BI.str2Date
* @param str 字符串
* @param format 日期格式
* @returns {*}
* @returns {Date}
*/
BI.str2Date = function (str, format) {
export const str2Date = function (str, format) {
if (typeof str != "string" || typeof format != "string") {
return null;
}
var fmt = BI.parseFmt(format);
return BI.parseDateTime(str, fmt);
};
var fmt = parseFmt(format);
return parseDateTime(str, fmt);
};
/**
/**
* 把日期对象按照指定格式转化成字符串
*
* @example
*@example
* var date = new Date('Thu Dec 12 2013 00:00:00 GMT+0800');
* var result = BI.date2Str(date, 'yyyy-MM-dd');//2013-12-12
*
* @class BI.date2Str
* @param date 日期
* @param format 日期格式
* @returns {String}
* @param date
* @param format
* @returns {string}
*/
BI.date2Str = function (date, format) {
export const date2Str = function (date, format) {
if (!date) {
return "";
}
@ -800,11 +793,11 @@
}
return result;
function compileJFmt (jfmt, date) {
function compileJFmt(jfmt, date) {
var str = jfmt.str, len = jfmt.len, ch = jfmt["char"];
switch (ch) {
case "E": // 星期
str = BI.getFullDayName(date.getDay());
str = getFullDayName(date.getDay());
break;
case "y": // 年
if (len <= 3) {
@ -815,16 +808,16 @@
break;
case "M": // 月
if (len > 2) {
str = BI.getMonthName(date.getMonth());
str = getMonthName(date.getMonth());
} else if (len < 2) {
str = date.getMonth() + 1;
} else {
str = BI.leftPad(date.getMonth() + 1 + "", 2, "0");
str = leftPad(date.getMonth() + 1 + "", 2, "0");
}
break;
case "d": // 日
if (len > 1) {
str = BI.leftPad(date.getDate() + "", 2, "0");
str = leftPad(date.getDate() + "", 2, "0");
} else {
str = date.getDate();
}
@ -835,28 +828,28 @@
hour = 12;
}
if (len > 1) {
str = BI.leftPad(hour + "", 2, "0");
str = leftPad(hour + "", 2, "0");
} else {
str = hour;
}
break;
case "H": // 时(24)
if (len > 1) {
str = BI.leftPad(date.getHours() + "", 2, "0");
str = leftPad(date.getHours() + "", 2, "0");
} else {
str = date.getHours();
}
break;
case "m":
if (len > 1) {
str = BI.leftPad(date.getMinutes() + "", 2, "0");
str = leftPad(date.getMinutes() + "", 2, "0");
} else {
str = date.getMinutes();
}
break;
case "s":
if (len > 1) {
str = BI.leftPad(date.getSeconds() + "", 2, "0");
str = leftPad(date.getSeconds() + "", 2, "0");
} else {
str = date.getSeconds();
}
@ -865,7 +858,7 @@
str = date.getHours() < 12 ? "am" : "pm";
break;
case "z":
str = BI.getTimezone(date);
str = getTimezone(date);
break;
default:
str = jfmt.str;
@ -873,9 +866,9 @@
}
return str;
}
};
};
BI.object2Number = function (value) {
export const object2Number = function (value) {
if (value == null) {
return 0;
}
@ -887,9 +880,9 @@
return parseInt(str);
}
return parseFloat(str);
};
};
BI.object2Date = function (obj) {
export const object2Date = function (obj) {
if (obj == null) {
return new Date();
}
@ -907,9 +900,9 @@
return new Date();
};
};
BI.object2Time = function (obj) {
export const object2Time = function (obj) {
if (obj == null) {
return new Date();
}
@ -928,11 +921,10 @@
return dt;
}
}
dt = BI.parseDateTime(str, "HH:mm:ss");
dt = parseDateTime(str, "HH:mm:ss");
if (!isInvalidDate(dt)) {
return dt;
}
return new Date();
};
})();
};

25
src/core/func/array.js

@ -2,21 +2,18 @@
* 对数组对象的扩展
* @class Array
*/
BI._.extend(BI, {
export function pushArray(sArray, array) {
sArray.push(...array);
}
pushArray: function (sArray, array) {
for (var i = 0; i < array.length; i++) {
sArray.push(array[i]);
}
},
pushDistinct: function (sArray, obj) {
if (!BI.contains(sArray, obj)) {
export function pushDistinct(sArray, obj) {
if (sArray.indexOf(obj) !== -1) {
sArray.push(obj);
}
},
pushDistinctArray: function (sArray, array) {
for (var i = 0, len = array.length; i < len; i++) {
BI.pushDistinct(sArray, array[i]);
}
}
export function pushDistinctArray(sArray, array) {
for (let i = 0, len = array.length; i < len; i++) {
pushDistinct(sArray, array[i]);
}
});
}

285
src/core/func/date.js

@ -1,16 +1,14 @@
/** Constants used for time computations */
BI.Date = BI.Date || {};
BI.Date.SECOND = 1000;
BI.Date.MINUTE = 60 * BI.Date.SECOND;
BI.Date.HOUR = 60 * BI.Date.MINUTE;
BI.Date.DAY = 24 * BI.Date.HOUR;
BI.Date.WEEK = 7 * BI.Date.DAY;
import {getDate, getTime} from "../2.base";
// Monday first, etc.
BI.Date._FD = 1;
// short month names
BI.Date._SMN = [0,
const SECOND = 1000;
const MINUTE = 60 * SECOND;
const HOUR = 60 * MINUTE;
const DAY = 24 * HOUR;
const WEEK = 7 * DAY;
const _FD = 1;
const _SMN = [
0,
1,
2,
3,
@ -21,55 +19,78 @@ BI.Date._SMN = [0,
8,
9,
10,
11];
/** Adds the number of days array to the Date object. */
BI.Date._MD = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
11
];
const _MD = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
const _OFFSET = [0, -1, -2, -3, -4, -5, -6]; // 实际上无论周几作为一周的第一天,周初周末都是在-6-0间做偏移,用一个数组就可以
// 实际上无论周几作为一周的第一天,周初周末都是在-6-0间做偏移,用一个数组就可以
BI.Date._OFFSET = [0, -1, -2, -3, -4, -5, -6];
export const Date = {
SECOND,
MINUTE,
HOUR,
DAY,
WEEK,
_FD,
_SMN,
_MD,
_OFFSET,
};
BI._.extend(BI, {
/**
/**
* 获取时区
* @returns {String}
*/
getTimezone: function (date) {
export function getTimezone(date) {
return date.toString().replace(/^.* (?:\((.*)\)|([A-Z]{1,4})(?:[\-+][0-9]{4})?(?: -?\d+)?)$/, "$1$2").replace(/[^A-Z]/g, "");
},
}
/** Returns the number of days in the current month */
getMonthDays: function (date, month) {
/**
* Returns the number of days in the current month
*/
export function getMonthDays(date, month = date.getMonth()) {
var year = date.getFullYear();
if (typeof month === "undefined") {
month = date.getMonth();
}
if (((0 == (year % 4)) && ((0 != (year % 100)) || (0 == (year % 400)))) && month == 1) {
if (((0 === (year % 4)) && ((0 !== (year % 100)) || (0 === (year % 400)))) && month === 1) {
return 29;
}
return BI.Date._MD[month];
return _MD[month];
}
},
/**
* 获取每月的最后一天
* @returns {Date}
*/
export function getLastDateOfMont(date) {
return getDate(date.getFullYear(), date.getMonth(), getMonthDays(date));
}
/**
/**
* 获取每月的最后一天
* @returns {Date}
*/
getLastDateOfMonth: function (date) {
return BI.getDate(date.getFullYear(), date.getMonth(), BI.getMonthDays(date));
},
export function getLastDateOfMonth(date) {
return getDate(date.getFullYear(), date.getMonth(), getMonthDays(date));
}
/** Returns the number of day in the year. */
getDayOfYear: function (date) {
var now = BI.getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
var then = BI.getDate(date.getFullYear(), 0, 0, 0, 0, 0);
/**
* Returns the number of day in the year.
* @param date
* @returns {number}
*/
export function getDayOfYear(date) {
var now = getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
var then = getDate(date.getFullYear(), 0, 0, 0, 0, 0);
var time = now - then;
return Math.floor(time / BI.Date.DAY);
},
return Math.floor(time / DAY);
}
/** Returns the number of the week in year, as defined in ISO 8601. */
getWeekNumber: function (date) {
var d = BI.getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
/**
* Returns the number of the week in year, as defined in ISO 8601.
* @param date
* @returns {number}
*/
export function getWeekNumber(date) {
var d = getDate(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0);
var week = d.getDay();
var startOfWeek = BI.StartOfWeek % 7;
var middleDay = (startOfWeek + 3) % 7;
@ -82,31 +103,40 @@ BI._.extend(BI, {
d.setMonth(0);
d.setDate(1);
return Math.floor((ms - d.valueOf()) / (7 * 864e5)) + 1;
},
}
getQuarter: function (date) {
export function getQuarter(date) {
return Math.floor(date.getMonth() / 3) + 1;
},
}
// 离当前时间多少天的时间
getOffsetDate: function (date, offset) {
return BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()) + offset * 864e5);
},
/**
* 离当前时间多少天的时间
* @param date
* @param offset
* @returns {Date}
*/
export function getOffsetDate(date, offset) {
return getDate(getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()) + offset * 864e5);
}
getOffsetQuarter: function (date, n) {
var dt = BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
export function getOffsetQuarter(date, n) {
var dt = getDate(getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
var day = dt.getDate();
var monthDay = BI.getMonthDays(BI.getDate(dt.getFullYear(), dt.getMonth() + BI.parseInt(n) * 3, 1));
var monthDay = BI.getMonthDays(getDate(dt.getFullYear(), dt.getMonth() + parseInt(n, 10) * 3, 1));
if (day > monthDay) {
day = monthDay;
}
dt.setDate(day);
dt.setMonth(dt.getMonth() + parseInt(n) * 3);
dt.setMonth(dt.getMonth() + parseInt(n, 10) * 3);
return dt;
},
}
// 得到本季度的起始月份
getQuarterStartMonth: function (date) {
/**
* 得到本季度的起始月份
* @param date
* @returns {number}
*/
export function getQuarterStartMonth(date) {
var quarterStartMonth = 0;
var nowMonth = date.getMonth();
if (nowMonth < 3) {
@ -122,67 +152,96 @@ BI._.extend(BI, {
quarterStartMonth = 9;
}
return quarterStartMonth;
},
// 获得本季度的起始日期
getQuarterStartDate: function (date) {
return BI.getDate(date.getFullYear(), BI.getQuarterStartMonth(date), 1);
},
// 得到本季度的结束日期
getQuarterEndDate: function (date) {
var quarterEndMonth = BI.getQuarterStartMonth(date) + 2;
return BI.getDate(date.getFullYear(), quarterEndMonth, BI.getMonthDays(date, quarterEndMonth));
},
}
/**
* 获得本季度的起始日期
* @param date
* @returns {Date}
*/
export function getQuarterStartDate(date) {
return getDate(date.getFullYear(), getQuarterStartMonth(date), 1);
}
// 指定日期n个月之前或之后的日期
getOffsetMonth: function (date, n) {
var dt = BI.getDate(BI.getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
/**
* 得到本季度的结束日期
* @param date
* @returns {Date}
*/
export function getQuarterEndDate(date) {
var quarterEndMonth = getQuarterStartMonth(date) + 2;
return getDate(date.getFullYear(), quarterEndMonth, getMonthDays(date));
}
/**
* 指定日期n个月之前或之后的日期
* @param date
* @param n
* @returns {Date}
*/
export function getOffsetMonth(date, n) {
var dt = getDate(getTime(date.getFullYear(), date.getMonth(), date.getDate(), date.getHours(), date.getMinutes(), date.getSeconds()));
var day = dt.getDate();
var monthDay = BI.getMonthDays(BI.getDate(dt.getFullYear(), dt.getMonth() + parseInt(n), 1));
var monthDay = getMonthDays(getDate(dt.getFullYear(), dt.getMonth() + parseInt(n, 10), 1));
if (day > monthDay) {
day = monthDay;
}
dt.setDate(day);
dt.setMonth(dt.getMonth() + parseInt(n));
dt.setMonth(dt.getMonth() + parseInt(n, 10));
return dt;
},
}
// 获得本周的起始日期
getWeekStartDate: function (date) {
/**
* 获得本周的起始日期
* @param date
* @returns {Date}
*/
export function getWeekStartDate(date) {
var w = date.getDay();
var startOfWeek = BI.StartOfWeek % 7;
return BI.getOffsetDate(date, BI.Date._OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)]);
},
// 得到本周的结束日期
getWeekEndDate: function (date) {
return getOffsetDate(date, _OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)]);
}
/**
* 得到本周的结束日期
* @param date
* @returns {Date}
*/
export function getWeekEndDate(date) {
var w = date.getDay();
var startOfWeek = BI.StartOfWeek % 7;
return BI.getOffsetDate(date, BI.Date._OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)] + 6);
},
return getOffsetDate(date, _OFFSET[w < startOfWeek ? (7 + w - startOfWeek) : (w - startOfWeek)] + 6);
}
getFullDayName: function (index) {
return [BI.i18nText("BI-Basic_Sunday"),
export function getFullDayName(index) {
return [
BI.i18nText("BI-Basic_Sunday"),
BI.i18nText("BI-Basic_Monday"),
BI.i18nText("BI-Basic_Tuesday"),
BI.i18nText("BI-Basic_Wednesday"),
BI.i18nText("BI-Basic_Thursday"),
BI.i18nText("BI-Basic_Friday"),
BI.i18nText("BI-Basic_Saturday"),
BI.i18nText("BI-Basic_Sunday")][index];
},
BI.i18nText("BI-Basic_Sunday")
][index];
}
getShortDayName: function (index) {
return [BI.i18nText("BI-Basic_Simple_Sunday"),
export function getShortDayName(index) {
return [
BI.i18nText("BI-Basic_Simple_Sunday"),
BI.i18nText("BI-Basic_Simple_Monday"),
BI.i18nText("BI-Basic_Simple_Tuesday"),
BI.i18nText("BI-Basic_Simple_Wednesday"),
BI.i18nText("BI-Basic_Simple_Thursday"),
BI.i18nText("BI-Basic_Simple_Friday"),
BI.i18nText("BI-Basic_Simple_Saturday"),
BI.i18nText("BI-Basic_Simple_Sunday")][index];
},
BI.i18nText("BI-Basic_Simple_Sunday")
][index];
}
getMonthName: function (index) {
return [BI.i18nText("BI-Basic_January"),
export function getMonthName(index) {
return [
BI.i18nText("BI-Basic_January"),
BI.i18nText("BI-Basic_February"),
BI.i18nText("BI-Basic_March"),
BI.i18nText("BI-Basic_April"),
@ -193,18 +252,27 @@ BI._.extend(BI, {
BI.i18nText("BI-Basic_September"),
BI.i18nText("BI-Basic_October"),
BI.i18nText("BI-Basic_November"),
BI.i18nText("BI-Basic_December")][index]
},
BI.i18nText("BI-Basic_December")
][index];
}
getQuarterName: function (index) {
return ["", BI.i18nText("BI-Quarter_1"),
export function getQuarterName(index) {
return [
"",
BI.i18nText("BI-Quarter_1"),
BI.i18nText("BI-Quarter_2"),
BI.i18nText("BI-Quarter_3"),
BI.i18nText("BI-Quarter_4")][index];
},
BI.i18nText("BI-Quarter_4")
][index];
}
// 格式化打印日期
print: function (date, str) {
/**
* 格式化打印日期
* @param date
* @param str
* @returns {*}
*/
export function print(date, str) {
var m = date.getMonth();
var d = date.getDate();
var y = date.getFullYear();
@ -212,23 +280,23 @@ BI._.extend(BI, {
while (yWith4number.length < 4) {
yWith4number = "0" + yWith4number;
}
var wn = BI.getWeekNumber(date);
var qr = BI.getQuarter(date);
var wn = getWeekNumber(date);
var qr = getQuarter(date);
var w = date.getDay();
var s = {};
var hr = date.getHours();
var pm = (hr >= 12);
var ir = (pm) ? (hr - 12) : hr;
var dy = BI.getDayOfYear(date);
if (ir == 0) {
var dy = getDayOfYear(date);
if (ir === 0) {
ir = 12;
}
var min = date.getMinutes();
var sec = date.getSeconds();
s["%a"] = BI.getShortDayName(w); // abbreviated weekday name [FIXME: I18N]
s["%A"] = BI.getFullDayName(w); // full weekday name
s["%b"] = BI.Date._SMN[m]; // abbreviated month name [FIXME: I18N]
s["%B"] = BI.getMonthName(m); // full month name
s["%a"] = getShortDayName(w); // abbreviated weekday name [FIXME: I18N]
s["%A"] = getFullDayName(w); // full weekday name
s["%b"] = _SMN[m]; // abbreviated month name [FIXME: I18N]
s["%B"] = getMonthName(m); // full month name
// FIXME: %c : preferred date and time representation for the current locale
s["%C"] = 1 + Math.floor(y / 100); // the century number
s["%d"] = (d < 10) ? ("0" + d) : d; // the day of the month (range 01 to 31)
@ -265,7 +333,7 @@ BI._.extend(BI, {
var re = /%./g;
BI.isKhtml = BI.isKhtml || function () {
if(!_global.navigator) {
if (!_global.navigator) {
return false;
}
return /Konqueror|Safari|KHTML/i.test(navigator.userAgent);
@ -308,5 +376,4 @@ BI._.extend(BI, {
}
return str;
}
});
}

96
src/core/func/function.js

@ -2,88 +2,89 @@
* 基本的函数
* Created by GUY on 2015/6/24.
*/
BI.Func = BI.Func || {};
BI._.extend(BI.Func, {
/**
import {every, isKey, isArray, toUpperCase, each, stripEL, isNotNull, isNull, isObject} from "../2.base";
import {makeFirstPY} from "../utils/chinesePY";
/**
* 创建唯一的名字
* @param array
* @param name
* @returns {*}
*/
createDistinctName: function (array, name) {
export function createDistinctName(array, name) {
var src = name, idx = 1;
name = name || "";
while (true) {
if (BI.every(array, function (i, item) {
return BI.isKey(item) ? item !== name : item.name !== name;
if (every(array, function (i, item) {
return isKey(item) ? item !== name : item.name !== name;
})) {
break;
}
name = src + (idx++);
}
return name;
},
}
/**
/**
* 获取字符宽度
* @param str
* @return {number}
*/
getGBWidth: function (str) {
export function getGBWidth(str) {
str = str + "";
str = str.replace(/[^\x00-\xff]/g, "xx");
return Math.ceil(str.length / 2);
},
}
/**
/**
* 获取搜索结果
* @param items
* @param keyword
* @param param 搜索哪个属性
*/
getSearchResult: function (items, keyword, param) {
var isArray = BI.isArray(items);
items = isArray ? BI.flatten(items) : items;
export function getSearchResult(items, keyword, param) {
var array = isArray(items);
items = array ? BI.flatten(items) : items;
param || (param = "text");
if (!BI.isKey(keyword)) {
if (!isKey(keyword)) {
return {
find: items,
match: isArray ? [] : {}
match: array ? [] : {}
};
}
var t, text, py;
keyword = BI.toUpperCase(keyword);
var matched = isArray ? [] : {}, find = isArray ? [] : {};
BI.each(items, function (i, item) {
keyword = toUpperCase(keyword);
var matched = array ? [] : {}, find = array ? [] : {};
each(items, function (i, item) {
// 兼容item为null的处理
if (BI.isNull(item)) {
if (isNull(item)) {
return;
}
t = BI.stripEL(item);
text = BI.find([t[param], t.text, t.value, t.name, t], function (index, val) {
return BI.isNotNull(val);
});
t = stripEL(item);
text = [t[param], t.text, t.value, t.name, t].find(isNotNull);
if (BI.isNull(text) || BI.isObject(text)) return;
if (isNull(text) || isObject(text)) return;
py = BI.makeFirstPY(text, {
py = makeFirstPY(text, {
splitChar: "\u200b"
});
text = BI.toUpperCase(text);
py = BI.toUpperCase(py);
text = toUpperCase(text);
py = toUpperCase(py);
var pidx;
if (text.indexOf(keyword) > -1) {
if (text === keyword) {
isArray ? matched.push(item) : (matched[i] = item);
array ? matched.push(item) : (matched[i] = item);
} else {
isArray ? find.push(item) : (find[i] = item);
array ? find.push(item) : (find[i] = item);
}
// BI-56386 这边两个pid / text.length是为了防止截取的首字符串不是完整的,但光这样做还不够,即时错位了,也不能说明就不符合条件
} else if (pidx = py.indexOf(keyword), (pidx > -1)) {
} else { // BI-56386 这边两个pid / text.length是为了防止截取的首字符串不是完整的,但光这样做还不够,即时错位了,也不能说明就不符合条件
pidx = py.indexOf(keyword);
if (pidx > -1) {
if (text === keyword || keyword.length === text.length) {
isArray ? matched.push(item) : (matched[i] = item);
array ? matched.push(item) : (matched[i] = item);
} else {
isArray ? find.push(item) : (find[i] = item);
array ? find.push(item) : (find[i] = item);
}
}
}
});
@ -91,15 +92,15 @@ BI._.extend(BI.Func, {
match: matched,
find: find
};
},
}
/**
/**
* 获取按GB2312排序的结果
* @param items
* @param key
* @return {any[]}
*/
getSortedResult: function (items, key) {
export function getSortedResult(items, key) {
var getTextOfItem = BI.isFunction(key) ? key :
function (item, key) {
if (BI.isNotNull(key)) {
@ -140,11 +141,9 @@ BI._.extend(BI.Func, {
}
return len1 - len2;
});
}
});
}
BI._.extend(BI, {
beforeFunc: function (sFunc, func) {
export function beforeFunc(sFunc, func) {
var __self = sFunc;
return function () {
if (func.apply(sFunc, arguments) === false) {
@ -152,9 +151,9 @@ BI._.extend(BI, {
}
return __self.apply(sFunc, arguments);
};
},
}
afterFunc: function (sFunc, func) {
export function afterFunc(sFunc, func) {
var __self = sFunc;
return function () {
var ret = __self.apply(sFunc, arguments);
@ -164,5 +163,12 @@ BI._.extend(BI, {
func.apply(sFunc, arguments);
return ret;
};
}
});
}
export const Func = {
createDistinctName,
getGBWidth,
getSearchResult,
getSortedResult,
};

23
src/core/func/index.js

@ -0,0 +1,23 @@
export * from "./alias";
export * from "./array";
export * from "./date";
export * from "./function";
export * from "./number";
export * from "./string";
// need delete
import * as _alias from "./alias";
import * as _array from "./array";
import * as _date from "./date";
import * as _function from "./function";
import * as _number from "./number";
import * as _string from "./string";
Object.assign(BI, {
..._alias,
..._array,
..._date,
..._function,
..._number,
..._string
});

42
src/core/func/number.js

@ -1,6 +1,5 @@
BI._.extend(BI, {
// 给Number类型增加一个add方法,调用起来更加方便。
add: function (num, arg) {
// 给Number类型增加一个add方法,调用起来更加方便。
export function add(num, arg) {
return accAdd(arg, num);
/**
@ -9,7 +8,7 @@ BI._.extend(BI, {
** 调用accAdd(arg1,arg2)
** 返回值arg1加上arg2的精确结果
**/
function accAdd (arg1, arg2) {
function accAdd(arg1, arg2) {
var r1, r2, m, c;
try {
r1 = arg1.toString().split(".")[1].length;
@ -38,10 +37,10 @@ BI._.extend(BI, {
}
return (arg1 + arg2) / m;
}
},
}
// 给Number类型增加一个sub方法,调用起来更加方便。
sub: function (num, arg) {
// 给Number类型增加一个sub方法,调用起来更加方便。
export function sub(num, arg) {
return accSub(num, arg);
/**
@ -50,7 +49,7 @@ BI._.extend(BI, {
** 调用accSub(arg1,arg2)
** 返回值arg1加上arg2的精确结果
**/
function accSub (arg1, arg2) {
function accSub(arg1, arg2) {
var r1, r2, m, n;
try {
r1 = arg1.toString().split(".")[1].length;
@ -66,10 +65,10 @@ BI._.extend(BI, {
n = (r1 >= r2) ? r1 : r2;
return ((arg1 * m - arg2 * m) / m).toFixed(n);
}
},
}
// 给Number类型增加一个mul方法,调用起来更加方便。
mul: function (num, arg) {
// 给Number类型增加一个mul方法,调用起来更加方便。
export function mul(num, arg) {
return accMul(arg, num);
/**
@ -78,7 +77,7 @@ BI._.extend(BI, {
** 调用accMul(arg1,arg2)
** 返回值arg1乘以 arg2的精确结果
**/
function accMul (arg1, arg2) {
function accMul(arg1, arg2) {
var m = 0, s1 = arg1.toString(), s2 = arg2.toString();
try {
m += s1.split(".")[1].length;
@ -90,27 +89,28 @@ BI._.extend(BI, {
}
return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);
}
},
}
// 给Number类型增加一个div方法,调用起来更加方便。
div: function (num, arg) {
// 给Number类型增加一个div方法,调用起来更加方便。
export function div(num, arg) {
return accDivide(num, arg);
/**
* Return digits length of a number
* @param {*number} num Input number
*/
function digitLength (num) {
function digitLength(num) {
// Get digit length of e
var eSplit = num.toString().split(/[eE]/);
var len = (eSplit[0].split(".")[1] || "").length - (+(eSplit[1] || 0));
return len > 0 ? len : 0;
}
/**
* 把小数转成整数支持科学计数法如果是小数则放大成整数
* @param {*number} num 输入数
*/
function float2Fixed (num) {
function float2Fixed(num) {
if (num.toString().indexOf("e") === -1) {
return Number(num.toString().replace(".", ""));
}
@ -121,7 +121,7 @@ BI._.extend(BI, {
/**
* 精确乘法
*/
function times (num1, num2) {
function times(num1, num2) {
var others = [];
for (var _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments[_i];
@ -139,7 +139,7 @@ BI._.extend(BI, {
/**
* 精确除法
*/
function accDivide (num1, num2) {
function accDivide(num1, num2) {
var others = [];
for (var _i = 2; _i < arguments.length; _i++) {
others[_i - 2] = arguments[_i];
@ -151,6 +151,4 @@ BI._.extend(BI, {
var num2Changed = float2Fixed(num2);
return times((num1Changed / num2Changed), Math.pow(10, digitLength(num2) - digitLength(num1)));
}
}
});
}

56
src/core/func/string.js

@ -1,57 +1,54 @@
/**
* 对字符串对象的扩展
* @class String
*/
BI._.extend(BI, {
import {isString} from "../2.base";
/**
/**
* 判断字符串是否已指定的字符串开始
* @param str source字符串
* @param {String} startTag 指定的开始字符串
* @return {Boolean} 如果字符串以指定字符串开始则返回true否则返回false
*/
startWith: function (str, startTag) {
export function startWith(str, startTag) {
str = str || "";
if (startTag == null || startTag == "" || str.length === 0 || startTag.length > str.length) {
return false;
}
return str.substr(0, startTag.length) == startTag;
},
/**
}
/**
* 判断字符串是否以指定的字符串结束
* @param str source字符串
* @param {String} endTag 指定的字符串
* @return {Boolean} 如果字符串以指定字符串结束则返回true否则返回false
*/
endWith: function (str, endTag) {
export function endWith(str, endTag) {
if (endTag == null || endTag == "" || str.length === 0 || endTag.length > str.length) {
return false;
}
return str.substring(str.length - endTag.length) == endTag;
},
}
/**
/**
* 获取url中指定名字的参数
* @param str source字符串
* @param {String} name 参数的名字
* @return {String} 参数的值
*/
getQuery: function (str, name) {
export function getQuery(str, name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = str.substr(str.indexOf("?") + 1).match(reg);
if (r) {
return unescape(r[2]);
}
return null;
},
}
/**
/**
* 给url加上给定的参数
* @param str source字符串
* @param {Object} paras 参数对象是一个键值对对象
* @return {String} 添加了给定参数的url
*/
appendQuery: function (str, paras) {
export function appendQuery(str, paras) {
if (!paras) {
return str;
}
@ -66,44 +63,46 @@ BI._.extend(BI, {
src += "&";
}
BI._.each(paras, function (value, name) {
if (typeof(name) === "string") {
if (typeof (name) === "string") {
src += name + "=" + value + "&";
}
});
src = src.substr(0, src.length - 1);
return src;
},
/**
}
/**
* 将所有符合第一个字符串所表示的字符串替换成为第二个字符串
* @param str source字符串
* @param {String} s1 要替换的字符串的正则表达式
* @param {String} s2 替换的结果字符串
* @returns {String} 替换后的字符串
*/
replaceAll: function (str, s1, s2) {
return BI.isString(str) ? str.replace(new RegExp(s1, "gm"), s2) : str;
},
/**
export function replaceAll(str, s1, s2) {
return isString(str) ? str.replace(new RegExp(s1, "gm"), s2) : str;
}
/**
* 总是让字符串以指定的字符开头
* @param str source字符串
* @param {String} start 指定的字符
* @returns {String} 以指定字符开头的字符串
*/
perfectStart: function (str, start) {
export function perfectStart(str, start) {
if (BI.startWith(str, start)) {
return str;
}
return start + str;
},
}
/**
/**
* 获取字符串中某字符串的所有项位置数组
* @param str source字符串
* @param {String} sub 子字符串
* @return {Number[]} 子字符串在父字符串中出现的所有位置组成的数组
*/
allIndexOf: function (str, sub) {
export function allIndexOf(str, sub) {
if (typeof sub !== "string") {
return [];
}
@ -119,5 +118,4 @@ BI._.extend(BI, {
offset += loc + sub.length;
}
return location;
}
});
}

6
src/core/index.js

@ -1,4 +1,4 @@
import { shortcut } from "./decorator";
import {shortcut} from "./decorator";
import OB from "./3.ob";
import Widget from "./4.widget";
import Action from "./action/action";
@ -16,6 +16,7 @@ import PopoverController from "./controller/controller.popover";
import ResizeController from "./controller/controller.resizer";
import TooltipsController from "./controller/controller.tooltips";
import StyleLoaderManager from "./loader/loader.style";
import "./h";
BI.extend(BI, {
OB,
@ -56,6 +57,7 @@ export {
ResizeController,
TooltipsController,
StyleLoaderManager,
}
};
export * from './2.base';
export * from "./func";

59
src/core/platform/web/detectElementResize.js

@ -323,7 +323,22 @@ var ResizeObserverPolyfill = (function (exports) {
};
var CATCH_PERIOD = 250;
var observerConfig = { attributes: true, characterData: true, childList: true, subtree: true };
var events = ['resize', 'load', 'transitionend', 'animationend', 'animationstart', 'animationiteration', 'keyup', 'keydown', 'mouseup', 'mousedown', 'mouseover', 'mouseout', 'blur', 'focus'];
var events = [
'resize',
'load',
'transitionend',
'animationend',
'animationstart',
'animationiteration',
'keyup',
'keydown',
'mouseup',
'mousedown',
'mouseover',
'mouseout',
'blur',
'focus'
];
var time = function (timeout) {
if (timeout === void 0) {
timeout = 0;
@ -412,14 +427,17 @@ var ResizeObserverPolyfill = (function (exports) {
};
var skipNotifyOnElement = function (target) {
return !isSVG(target) && !isReplacedElement(target) && getComputedStyle(target).display === 'inline';
return !isSVG(target)
&& !isReplacedElement(target)
&& getComputedStyle(target).display === 'inline';
};
var ResizeObservation = (function () {
function ResizeObservation(target, observedBox) {
this.target = target;
this.observedBox = observedBox || ResizeObserverBoxOptions.CONTENT_BOX;
this.lastReportedSize = {
inlineSize: -1, blockSize: -1
inlineSize: -1,
blockSize: -1
};
}
@ -428,7 +446,8 @@ var ResizeObserverPolyfill = (function (exports) {
if (skipNotifyOnElement(this.target)) {
this.lastReportedSize = size;
}
if (this.lastReportedSize.inlineSize !== size.inlineSize || this.lastReportedSize.blockSize !== size.blockSize) {
if (this.lastReportedSize.inlineSize !== size.inlineSize
|| this.lastReportedSize.blockSize !== size.blockSize) {
return true;
}
return false;
@ -534,21 +553,12 @@ var ResizeObserverPolyfill = (function (exports) {
return ResizeObserver;
}());
exports.ResizeObserver = ResizeObserver;
exports.ResizeObserverEntry = ResizeObserverEntry;
exports.ResizeObserverSize = ResizeObserverSize;
Object.defineProperty(exports, '__esModule', { value: true });
return exports;
})({});
var ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill.ResizeObserver;
return ResizeObserver;
})();
!(function () {
var ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill;
var addResizeListener = function (element, fn) {
var addResizeListener = function (element, fn) {
if (ResizeObserver) {
if (!element.__resizeObserver__) {
var resizeObserver = new ResizeObserver(function () {
@ -564,8 +574,8 @@ var ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill.ResizeObser
}
element.__resizeListeners__.push(fn);
}
};
var removeResizeListener = function (element, fn) {
};
var removeResizeListener = function (element, fn) {
if (ResizeObserver) {
if (BI.isNull(fn)) {
element.__resizeListeners__ = [];
@ -582,9 +592,9 @@ var ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill.ResizeObser
}
}
}
};
};
BI.ResizeDetector = {
export const ResizeDetector = {
addResizeListener: function (widget, fn) {
addResizeListener(widget.element[0], fn);
return function () {
@ -593,5 +603,8 @@ var ResizeObserver = window.ResizeObserver || ResizeObserverPolyfill.ResizeObser
}, removeResizeListener: function (widget, fn) {
removeResizeListener(widget.element[0], fn);
}
};
})();
};
Object.assign(BI, {
ResizeDetector
});

39
src/core/utils/chinesePY.js

File diff suppressed because one or more lines are too long
Loading…
Cancel
Save