Browse Source

Pull request #3477: KERNEL-14885 fix: virtualgrouplist 死循环 & KERNEL-14316 chore: 代码同步

Merge in VISUAL/fineui from ~TREECAT/fineui:es6 to es6

* commit '071b74a780e71cb9169a1beaa22f99eed549e97f':
  KERNEL-14316 chore: 代码同步
  KERNEL-14885 fix: virtualgrouplist 爆栈
es6
treecat-罗群 2 years ago
parent
commit
cf95890fd4
  1. 12
      packages/fineui/src/base/list/virtualgrouplist.js
  2. 1
      packages/fineui/src/case/combo/textvaluecheckcombo/combo.textvaluecheck.js
  3. 1
      packages/fineui/src/case/trigger/trigger.text.js
  4. 2
      packages/fineui/src/case/trigger/trigger.text.select.js
  5. 193
      packages/fineui/src/core/2.base.js
  6. 12
      packages/fineui/src/core/utils/events/mousemovetracker.js

12
packages/fineui/src/base/list/virtualgrouplist.js

@ -38,15 +38,15 @@ export class VirtualGroupList extends Widget {
items: [
{
type: Layout.xtype,
ref: () => {
this.topBlank = this;
ref: (ref) => {
this.topBlank = ref;
},
},
{
type: VirtualGroup.xtype,
height: rowHeight * items.length,
ref: () => {
this.container = this;
ref: (ref) => {
this.container = ref;
},
layouts: [
extend(
@ -60,8 +60,8 @@ export class VirtualGroupList extends Widget {
},
{
type: Layout.xtype,
ref: () => {
this.bottomBlank = this;
ref: (ref) => {
this.bottomBlank = ref;
},
}
],

1
packages/fineui/src/case/combo/textvaluecheckcombo/combo.textvaluecheck.js

@ -39,6 +39,7 @@ export class TextValueCheckCombo extends Widget {
height: toPix(o.height, 2),
text: o.text,
value: o.value,
defaultText: o.defaultText
});
this.popup = createWidget({
type: TextValueCheckComboPopup.xtype,

1
packages/fineui/src/case/trigger/trigger.text.js

@ -47,6 +47,7 @@ export class TextTrigger extends Trigger {
height: o.height,
text: text || o.defaultText,
tipType: o.tipType,
title: o.title,
warningTitle: o.warningTitle,
hgap: o.textHgap,
vgap: o.textVgap,

2
packages/fineui/src/case/trigger/trigger.text.select.js

@ -43,7 +43,7 @@ export class SelectTextTrigger extends Trigger {
textTgap: o.textTgap,
textBgap: o.textBgap,
tipType: o.tipType,
title: null,
title: o.title,
allowClear: o.allowClear,
listeners: [
{

193
packages/fineui/src/core/2.base.js

@ -8,8 +8,7 @@ import { Widget } from "./4.widget";
import { createWidget } from "./5.inject";
import { prepares, _global } from "./0.foundation";
import { CRYPT_TYPE, aesDecrypt, aesEncrypt } from "./structure/aes";
import { Date as DateEnum } from "./func/date";
import { Date as DateEnum, getMonthDays } from "./func/date";
/**
* todo: 理论这么写逻辑没问题摇个人把这个 BI 干掉
@ -29,9 +28,7 @@ function _apply(name) {
function _applyFunc(name) {
return function () {
const args = Array.prototype.slice.call(arguments, 0);
args[1] = BI._.isFunction(args[1])
? traverse(args[1], args[2])
: args[1];
args[1] = BI._.isFunction(args[1]) ? traverse(args[1], args[2]) : args[1];
return BI._[name](...args);
};
@ -60,24 +57,7 @@ export function warn(message) {
}
export function UUID() {
const f = [
"0",
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"a",
"b",
"c",
"d",
"e",
"f"
];
const f = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"];
let str = "";
for (let i = 0; i < 16; i++) {
const r = _global.parseInt(f.length * Math.random(), 10);
@ -102,18 +82,12 @@ export function createWidgets(items, options, context) {
options || (options = {});
}
return map(flatten(items), (i, item) =>
createWidget(item, deepClone(options), context)
);
return map(flatten(items), (i, item) => createWidget(item, deepClone(options), context));
}
export function createItems(data, innerAttr, outerAttr) {
innerAttr = isArray(innerAttr)
? innerAttr
: makeArray(flatten(data).length, innerAttr || {});
outerAttr = isArray(outerAttr)
? outerAttr
: makeArray(flatten(data).length, outerAttr || {});
innerAttr = isArray(innerAttr) ? innerAttr : makeArray(flatten(data).length, innerAttr || {});
outerAttr = isArray(outerAttr) ? outerAttr : makeArray(flatten(data).length, outerAttr || {});
return map(data, (i, item) => {
if (isArray(item)) {
@ -157,7 +131,7 @@ export function packageItems(items, layouts) {
items: [
extend({}, layouts[i].el, {
el: it,
})
}),
],
})
);
@ -186,21 +160,9 @@ export function trans2Element(widgets) {
}
// 集合相关方法
BI._.each(
[
"where",
"findWhere",
"invoke",
"pluck",
"shuffle",
"sample",
"toArray",
"size"
],
name => {
BI[name] = _apply(name);
}
);
BI._.each(["where", "findWhere", "invoke", "pluck", "shuffle", "sample", "toArray", "size"], name => {
BI[name] = _apply(name);
});
BI._.each(
[
"get",
@ -223,7 +185,7 @@ BI._.each(
"indexBy",
"countBy",
"partition",
"clamp"
"clamp",
],
name => {
if (name === "any") {
@ -398,9 +360,7 @@ export function remove(obj, target, context) {
if (isArray(obj)) {
for (i = 0; i < obj.length; i++) {
if (
(targetIsFunction &&
(target === obj[i] ||
target.apply(context, [i, obj[i]]) === true)) ||
(targetIsFunction && (target === obj[i] || target.apply(context, [i, obj[i]]) === true)) ||
(!targetIsFunction && contains(target, obj[i]))
) {
obj.splice(i--, 1);
@ -409,9 +369,7 @@ export function remove(obj, target, context) {
} else {
each(obj, (i, v) => {
if (
(targetIsFunction &&
(target === obj[i] ||
target.apply(context, [i, obj[i]]) === true)) ||
(targetIsFunction && (target === obj[i] || target.apply(context, [i, obj[i]]) === true)) ||
(!targetIsFunction && contains(target, obj[i]))
) {
delete obj[i];
@ -450,11 +408,7 @@ export function abc2Int(string) {
str = string.toUpperCase();
for (let i = 0, len = str.length; i < len; ++i) {
idx = str.charAt(i).charCodeAt(0) - start.charCodeAt(0) + 26 * idx + 1;
if (
idx >
(2147483646 - str.charAt(i).charCodeAt(0) + start.charCodeAt(0)) /
26
) {
if (idx > (2147483646 - str.charAt(i).charCodeAt(0) + start.charCodeAt(0)) / 26) {
return 0;
}
}
@ -489,7 +443,7 @@ export function int2Abc(num) {
"W",
"X",
"Y",
"Z"
"Z",
];
let idx = num,
str = "";
@ -530,7 +484,7 @@ BI._.each(
"range",
"take",
"takeRight",
"uniqBy"
"uniqBy",
],
name => {
BI[name] = _apply(name);
@ -658,7 +612,7 @@ BI._.each(
"isUndefined",
"zipObject",
"cloneDeep",
"pickBy"
"pickBy",
],
name => {
BI[name] = _apply(name);
@ -730,10 +684,7 @@ export function init() {
while (prepares && prepares.length > 0) {
prepares.shift()();
}
while (
_global.___fineuiExposedFunction &&
_global.___fineuiExposedFunction.length > 0
) {
while (_global.___fineuiExposedFunction && _global.___fineuiExposedFunction.length > 0) {
_global.___fineuiExposedFunction.shift()();
}
BI.initialized = true;
@ -778,12 +729,7 @@ export function isWidthOrHeight(w) {
if (typeof w === "number") {
return w >= 0;
} else if (typeof w === "string") {
return (
/^\d{1,3}(\.\d)?%$/.test(w) ||
w === "auto" ||
/^\d+(\.\d+)?px$/.test(w) ||
/^calc/.test(w)
);
return /^\d{1,3}(\.\d)?%$/.test(w) || w === "auto" || /^\d+(\.\d+)?px$/.test(w) || /^calc/.test(w);
}
}
@ -842,9 +788,7 @@ export function isDeepMatch(object, attrs) {
export function contains(obj, target, fromIndex) {
if (!BI._.isArrayLike(obj)) obj = values(obj);
return (
indexOf(obj, target, typeof fromIndex === "number" && fromIndex) >= 0
);
return indexOf(obj, target, typeof fromIndex === "number" && fromIndex) >= 0;
}
export function deepContains(obj, copy) {
@ -943,21 +887,9 @@ export function deepDiff(object, other) {
}
// 通用方法
BI._.each(
[
"uniqueId",
"result",
"chain",
"iteratee",
"unescape",
"before",
"after",
"chunk"
],
name => {
BI[name] = (...args) => BI._[name](...args);
}
);
BI._.each(["uniqueId", "result", "chain", "iteratee", "unescape", "before", "after", "chunk"], name => {
BI[name] = (...args) => BI._[name](...args);
});
export const uniqueId = BI.uniqueId;
export const result = BI.result;
export const chain = BI.chain;
@ -968,21 +900,9 @@ export const after = BI.after;
export const chunk = BI.chunk;
// 事件相关方法
BI._.each(
[
"bind",
"once",
"partial",
"debounce",
"throttle",
"delay",
"defer",
"wrap"
],
name => {
BI[name] = (...args) => BI._[name](...args);
}
);
BI._.each(["bind", "once", "partial", "debounce", "throttle", "delay", "defer", "wrap"], name => {
BI[name] = (...args) => BI._[name](...args);
});
export const bind = BI.bind;
export const once = BI.once;
export const partial = BI.partial;
@ -1058,7 +978,7 @@ export const nextTick = (function () {
});
}
};
}());
})();
// 数字相关方法
BI._.each(["random"], name => {
@ -1081,11 +1001,7 @@ export function parseInt(number) {
export function parseSafeInt(value) {
const MAX_SAFE_INTEGER = 9007199254740991;
return value
? clamp(parseInt(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER)
: value === 0
? value
: 0;
return value ? clamp(parseInt(value), -MAX_SAFE_INTEGER, MAX_SAFE_INTEGER) : value === 0 ? value : 0;
}
export function parseFloat(number) {
@ -1113,9 +1029,7 @@ export function isInteger(number) {
}
export function isNumeric(number) {
return (
!_global.isNaN(_global.parseFloat(number)) && _global.isFinite(number)
);
return !_global.isNaN(_global.parseFloat(number)) && _global.isFinite(number);
}
export function isFloat(number) {
@ -1372,10 +1286,7 @@ export function parseDateTime(str, fmt) {
const otherlength = 2;
a[0] = str.substring(0, yearlength);
a[1] = str.substring(yearlength, yearlength + otherlength);
a[2] = str.substring(
yearlength + otherlength,
yearlength + otherlength * 2
);
a[2] = str.substring(yearlength + otherlength, yearlength + otherlength * 2);
}
const b = fmt.match(/%./g);
let i = 0,
@ -1406,11 +1317,7 @@ export function parseDateTime(str, fmt) {
case "%b":
case "%B":
for (j = 0; j < 12; ++j) {
if (
BI.getMonthName(j)
.substr(0, a[i].length)
.toLowerCase() === a[i].toLowerCase()
) {
if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() === a[i].toLowerCase()) {
m = j;
break;
}
@ -1455,7 +1362,7 @@ export function parseDateTime(str, fmt) {
m = today.getMonth();
}
if (_global.isNaN(d)) {
d = today.getDate();
d = Math.min(getMonthDays(getDate(y, m)), today.getDate());
}
if (_global.isNaN(hr)) {
hr = today.getHours();
@ -1476,10 +1383,7 @@ export function parseDateTime(str, fmt) {
if (a[i].search(/[a-zA-Z]+/) !== -1) {
let t = -1;
for (j = 0; j < 12; ++j) {
if (
BI.getMonthName(j).substr(0, a[i].length).toLowerCase() ===
a[i].toLowerCase()
) {
if (BI.getMonthName(j).substr(0, a[i].length).toLowerCase() === a[i].toLowerCase()) {
t = j;
break;
}
@ -1546,25 +1450,13 @@ export function getDate(...args) {
break;
// new Date(year, month, day, hour, minute, second, millisecond)
case 7:
dt = new Date(
args[0],
args[1],
args[2],
args[3],
args[4],
args[5],
args[6]
);
dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
break;
default:
dt = new Date();
break;
}
if (
isNotNull(BI.timeZone) &&
(arguments.length === 0 ||
(arguments.length === 1 && isNumber(arguments[0])))
) {
if (isNotNull(BI.timeZone) && (arguments.length === 0 || (arguments.length === 1 && isNumber(arguments[0])))) {
const localTime = dt.getTime();
// BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准
const localOffset = dt.getTimezoneOffset() * 60000; // 获得当地时间偏移的毫秒数
@ -1611,15 +1503,7 @@ export function getTime() {
break;
// new Date(year, month, day, hour, minute, second, millisecond)
case 7:
dt = new Date(
args[0],
args[1],
args[2],
args[3],
args[4],
args[5],
args[6]
);
dt = new Date(args[0], args[1], args[2], args[3], args[4], args[5], args[6]);
break;
default:
dt = new Date();
@ -1627,11 +1511,8 @@ export function getTime() {
}
if (isNotNull(BI.timeZone)) {
// BI-33791 1901年以前的东8区标准是GMT+0805, 统一无论是什么时间,都以整的0800这样的为基准
return (
dt.getTime() - BI.timeZone - new Date().getTimezoneOffset() * 60000
);
return dt.getTime() - BI.timeZone - new Date().getTimezoneOffset() * 60000;
}
return dt.getTime();
}

12
packages/fineui/src/core/utils/events/mousemovetracker.js

@ -84,7 +84,7 @@ export class MouseMoveTracker {
// The mouse may move faster then the animation frame does.
// Use `requestAnimationFrame` to avoid over-updating.
this._animationFrameID =
requestAnimationFrame(this._didMouseMove);
requestAnimationFrame(() => this._didMouseMove(event));
}
this._x = x;
@ -92,17 +92,17 @@ export class MouseMoveTracker {
event.preventDefault ? event.preventDefault() : (event.returnValue = false);
}
_didMouseMove() {
_didMouseMove(event) {
this._animationFrameID = null;
this._onMove(this._deltaX, this._deltaY);
this._onMove(this._deltaX, this._deltaY, event);
this._deltaX = 0;
this._deltaY = 0;
}
_onMouseUp() {
_onMouseUp(event) {
if (this._animationFrameID) {
this._didMouseMove();
this._didMouseMove(event);
}
this._onMoveEnd();
this._onMoveEnd(event);
}
}

Loading…
Cancel
Save