Browse Source

BI-138908 fix:nextTick

research/test
Treecat 6 months ago
parent
commit
7bbc429760
  1. 2
      packages/fineui/package.json
  2. 9
      packages/fineui/src/core/2.base.js
  3. 115
      packages/fineui/src/core/constant/writable.var.js
  4. 132
      packages/fineui/src/core/element/element.js
  5. 2
      packages/fineui/src/fix/fix.js

2
packages/fineui/package.json

@ -1,6 +1,6 @@
{
"name": "@fui/core",
"version": "3.0.20230727164622",
"version": "3.0.20231204103846",
"description": "fineui",
"main": "dist/fineui.min.js",
"module": "dist/lib/index.js",

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

@ -912,7 +912,8 @@ export const delay = lodashFns.delay;
export const defer = lodashFns.defer;
export const wrap = lodashFns.wrap;
export const nextTick = (function () {
export let nextTick = /*!PURE*/(function () {
const callbacks = [];
let pending = false;
let timerFunc = void 0;
@ -971,7 +972,7 @@ export const nextTick = (function () {
pending = true;
timerFunc();
}
// $flow-disable-line
if (!cb && typeof Promise !== "undefined") {
return new Promise((resolve, reject) => {
_resolve = resolve;
@ -980,6 +981,10 @@ export const nextTick = (function () {
};
})();
export const setNextTick = (fn) => {
nextTick = fn;
}
// 数字相关方法
_.each(["random"], name => {
lodashFns[name] = _apply(name);

115
packages/fineui/src/core/constant/writable.var.js

@ -1,51 +1,50 @@
/**
* 可写的常量
*/
import { isNumber } from "../2.base";
import { isNumber, nextTick, setNextTick } from "../2.base";
import { _global } from "../0.foundation";
import { Cache } from "../structure";
import { Element, setElement } from "../element/element";
import { setDom, DOM } from "../utils";
const PropertyDescriptors = {};
export function _defineVarProperties(libName) {
Object.defineProperties(libName, PropertyDescriptors);
}
function addDescriptor(key, options) {
options.enumerable = options.enumerable === undefined ? true : options.enumerable;
options.configurable = options.configurable === undefined ? true : options.configurable;
PropertyDescriptors[key] = options;
}
export let EVENT_RESPONSE_TIME = 200;
export const setEventResponseTime = v => {
EVENT_RESPONSE_TIME = v;
};
PropertyDescriptors["EVENT_RESPONSE_TIME"] = {
enumerable: true,
configurable: true,
get: function() {
return EVENT_RESPONSE_TIME;
},
addDescriptor("EVENT_RESPONSE_TIME", {
get: () => EVENT_RESPONSE_TIME,
set: setEventResponseTime,
};
});
export let pixUnit = "px";
export const setPixUnit = v => {
pixUnit = v;
};
PropertyDescriptors["pixUnit"] = {
enumerable: true,
configurable: true,
get: function() {
return pixUnit;
},
addDescriptor("pixUnit", {
get: () => pixUnit,
set: setPixUnit,
};
});
export let pixRatio = 1;
export const setPixRatio = v => {
pixRatio = v;
};
PropertyDescriptors["pixRatio"] = {
enumerable: true,
configurable: true,
get: function() {
return pixRatio;
},
addDescriptor("pixRatio", {
get: () => pixRatio,
set: setPixRatio,
};
});
export let StartOfWeek = 1;
export const setStartOfWeek = v => {
@ -55,27 +54,19 @@ export const setStartOfWeek = v => {
}
StartOfWeek = v;
};
PropertyDescriptors["StartOfWeek"] = {
enumerable: true,
configurable: true,
get: function() {
return StartOfWeek;
},
addDescriptor("StartOfWeek", {
get: () => StartOfWeek,
set: setStartOfWeek,
};
});
export let BlankSplitChar = "\u200b \u200b";
export const setBlankSplitChar = v => {
BlankSplitChar = v;
};
PropertyDescriptors["BlankSplitChar"] = {
enumerable: true,
configurable: true,
get: function() {
return BlankSplitChar;
},
addDescriptor("BlankSplitChar", {
get: () => BlankSplitChar,
set: setBlankSplitChar,
};
});
// 一定返回最终的单位
export let pixFormat = (pix, border) => {
@ -95,14 +86,10 @@ export let pixFormat = (pix, border) => {
export const setPixFormat = v => {
pixFormat = v;
};
PropertyDescriptors["pixFormat"] = {
enumerable: true,
configurable: true,
get: function() {
return pixFormat;
},
addDescriptor("pixFormat", {
get: () => pixFormat,
set: setPixFormat,
};
});
export let toPix = (pix, border) => {
if (!isNumber(pix)) {
@ -120,14 +107,10 @@ export let toPix = (pix, border) => {
export let setToPix = v => {
toPix = v;
};
PropertyDescriptors["toPix"] = {
enumerable: true,
configurable: true,
get: function() {
return toPix;
},
addDescriptor("toPix", {
get: () => toPix,
set: setToPix,
};
});
const getCacheItem = key => {
Cache.getItem(key, { typeConversion: true, defaultValue: true });
@ -137,24 +120,22 @@ export const setEventBlur = v => {
EVENT_BLUR = v;
Cache.setItem("event.blur", v);
};
PropertyDescriptors["EVENT_BLUR"] = {
enumerable: true,
configurable: true,
get: function() {
return EVENT_BLUR;
},
addDescriptor("EVENT_BLUR", {
get: () => EVENT_BLUR,
set: setEventBlur,
};
});
addDescriptor("Element", {
get: () => Element,
set: setElement,
});
PropertyDescriptors["DOM"] = {
enumerable: true,
configurable: true,
get: function() {
return DOM;
},
addDescriptor("DOM", {
get: () => DOM,
set: setDom,
};
});
export function _defineVarProperties(libName) {
Object.defineProperties(libName, PropertyDescriptors);
}
addDescriptor("nextTick", {
get: () => nextTick,
set: setNextTick,
});

132
packages/fineui/src/core/element/element.js

@ -1,76 +1,78 @@
import { registFunction } from "./plugins";
import { isWidget, isString } from "../2.base";
export function Element(widget, attribs) {
this.l = this.r = this.t = this.b = 0; // 边框
this.marginLeft = this.marginRight = this.marginTop = this.marginBottom = 0; // 间距
this.position = {};
this.classMap = {};
this.classList = [];
this.children = [];
this.attribs = attribs || {};
this.styles = {};
// 兼容处理
this["0"] = this;
this.style = {};
if (!widget) {
this.nodeName = "body";
this.position.x = 0;
this.position.y = 0;
this.attribs.id = "body";
} else if (isWidget(widget)) {
this.widget = widget;
this.nodeName = widget.options.tagName;
this.textBaseLine = widget.options.textBaseLine;
} else if (isString(widget)) {
this.nodeName = widget;
export let Element = class {
constructor(widget, attribs) {
this.l = this.r = this.t = this.b = 0; // 边框
this.marginLeft = this.marginRight = this.marginTop = this.marginBottom = 0; // 间距
this.position = {};
this.classMap = {};
this.classList = [];
this.children = [];
this.attribs = attribs || {};
this.styles = {};
// 兼容处理
this["0"] = this;
this.style = {};
if (!widget) {
this.nodeName = "body";
this.position.x = 0;
this.position.y = 0;
this.attribs.id = "body";
} else if (isWidget(widget)) {
this.widget = widget;
this.nodeName = widget.options.tagName;
this.textBaseLine = widget.options.textBaseLine;
} else if (isString(widget)) {
this.nodeName = widget;
}
}
}
initElement(Element);
registFunction(Element);
appendChild(child) {
child.parent = this;
if (this.children.push(child) !== 1) {
const sibling = this.children[this.children.length - 2];
sibling.next = child;
child.prev = sibling;
child.next = null;
}
}
append(child) {
child.parent = this;
if (this.children.push(child) !== 1) {
const sibling = this.children[this.children.length - 2];
sibling.next = child;
child.prev = sibling;
child.next = null;
}
}
function initElement(element) {
element.prototype = {
appendChild(child) {
child.parent = this;
if (this.children.push(child) !== 1) {
const sibling = this.children[this.children.length - 2];
sibling.next = child;
child.prev = sibling;
child.next = null;
}
},
append(child) {
child.parent = this;
if (this.children.push(child) !== 1) {
const sibling = this.children[this.children.length - 2];
sibling.next = child;
child.prev = sibling;
child.next = null;
}
},
getParent() {
return this.parent;
},
getSiblings() {
const parent = this.getParent();
return parent ? parent.getChildren() : [this];
},
getChildren() {
return this.children;
},
getParent() {
return this.parent;
}
getBounds() {
return {};
},
getSiblings() {
const parent = this.getParent();
width() {
return parent ? parent.getChildren() : [this];
}
},
height() {
getChildren() {
return this.children;
}
getBounds() {
return {};
}
width() {}
height() {}
}
registFunction(Element);
},
};
export function setElement(element) {
Element = element;
}

2
packages/fineui/src/fix/fix.js

@ -205,7 +205,7 @@ const nextTick = (function () {
pending = true;
timerFunc();
}
// $flow-disable-line
if (!cb && typeof Promise !== "undefined") {
return new Promise((resolve, reject) => {
_resolve = resolve;

Loading…
Cancel
Save