Browse Source

Pull request #3695: BI-138908 fix:nextTick

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

* commit '7bbc4297604cb50d0ebf860693ff4bfd0e165c62':
  BI-138908 fix:nextTick
research/test
treecat-罗群 12 months ago
parent
commit
50b113837d
  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", "name": "@fui/core",
"version": "3.0.20230727164622", "version": "3.0.20231204103846",
"description": "fineui", "description": "fineui",
"main": "dist/fineui.min.js", "main": "dist/fineui.min.js",
"module": "dist/lib/index.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 defer = lodashFns.defer;
export const wrap = lodashFns.wrap; export const wrap = lodashFns.wrap;
export const nextTick = (function () {
export let nextTick = /*!PURE*/(function () {
const callbacks = []; const callbacks = [];
let pending = false; let pending = false;
let timerFunc = void 0; let timerFunc = void 0;
@ -971,7 +972,7 @@ export const nextTick = (function () {
pending = true; pending = true;
timerFunc(); timerFunc();
} }
// $flow-disable-line
if (!cb && typeof Promise !== "undefined") { if (!cb && typeof Promise !== "undefined") {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
_resolve = resolve; _resolve = resolve;
@ -980,6 +981,10 @@ export const nextTick = (function () {
}; };
})(); })();
export const setNextTick = (fn) => {
nextTick = fn;
}
// 数字相关方法 // 数字相关方法
_.each(["random"], name => { _.each(["random"], name => {
lodashFns[name] = _apply(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 { _global } from "../0.foundation";
import { Cache } from "../structure"; import { Cache } from "../structure";
import { Element, setElement } from "../element/element";
import { setDom, DOM } from "../utils"; import { setDom, DOM } from "../utils";
const PropertyDescriptors = {}; 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 let EVENT_RESPONSE_TIME = 200;
export const setEventResponseTime = v => { export const setEventResponseTime = v => {
EVENT_RESPONSE_TIME = v; EVENT_RESPONSE_TIME = v;
}; };
PropertyDescriptors["EVENT_RESPONSE_TIME"] = { addDescriptor("EVENT_RESPONSE_TIME", {
enumerable: true, get: () => EVENT_RESPONSE_TIME,
configurable: true,
get: function() {
return EVENT_RESPONSE_TIME;
},
set: setEventResponseTime, set: setEventResponseTime,
}; });
export let pixUnit = "px"; export let pixUnit = "px";
export const setPixUnit = v => { export const setPixUnit = v => {
pixUnit = v; pixUnit = v;
}; };
PropertyDescriptors["pixUnit"] = { addDescriptor("pixUnit", {
enumerable: true, get: () => pixUnit,
configurable: true,
get: function() {
return pixUnit;
},
set: setPixUnit, set: setPixUnit,
}; });
export let pixRatio = 1; export let pixRatio = 1;
export const setPixRatio = v => { export const setPixRatio = v => {
pixRatio = v; pixRatio = v;
}; };
PropertyDescriptors["pixRatio"] = { addDescriptor("pixRatio", {
enumerable: true, get: () => pixRatio,
configurable: true,
get: function() {
return pixRatio;
},
set: setPixRatio, set: setPixRatio,
}; });
export let StartOfWeek = 1; export let StartOfWeek = 1;
export const setStartOfWeek = v => { export const setStartOfWeek = v => {
@ -55,27 +54,19 @@ export const setStartOfWeek = v => {
} }
StartOfWeek = v; StartOfWeek = v;
}; };
PropertyDescriptors["StartOfWeek"] = { addDescriptor("StartOfWeek", {
enumerable: true, get: () => StartOfWeek,
configurable: true,
get: function() {
return StartOfWeek;
},
set: setStartOfWeek, set: setStartOfWeek,
}; });
export let BlankSplitChar = "\u200b \u200b"; export let BlankSplitChar = "\u200b \u200b";
export const setBlankSplitChar = v => { export const setBlankSplitChar = v => {
BlankSplitChar = v; BlankSplitChar = v;
}; };
PropertyDescriptors["BlankSplitChar"] = { addDescriptor("BlankSplitChar", {
enumerable: true, get: () => BlankSplitChar,
configurable: true,
get: function() {
return BlankSplitChar;
},
set: setBlankSplitChar, set: setBlankSplitChar,
}; });
// 一定返回最终的单位 // 一定返回最终的单位
export let pixFormat = (pix, border) => { export let pixFormat = (pix, border) => {
@ -95,14 +86,10 @@ export let pixFormat = (pix, border) => {
export const setPixFormat = v => { export const setPixFormat = v => {
pixFormat = v; pixFormat = v;
}; };
PropertyDescriptors["pixFormat"] = { addDescriptor("pixFormat", {
enumerable: true, get: () => pixFormat,
configurable: true,
get: function() {
return pixFormat;
},
set: setPixFormat, set: setPixFormat,
}; });
export let toPix = (pix, border) => { export let toPix = (pix, border) => {
if (!isNumber(pix)) { if (!isNumber(pix)) {
@ -120,14 +107,10 @@ export let toPix = (pix, border) => {
export let setToPix = v => { export let setToPix = v => {
toPix = v; toPix = v;
}; };
PropertyDescriptors["toPix"] = { addDescriptor("toPix", {
enumerable: true, get: () => toPix,
configurable: true,
get: function() {
return toPix;
},
set: setToPix, set: setToPix,
}; });
const getCacheItem = key => { const getCacheItem = key => {
Cache.getItem(key, { typeConversion: true, defaultValue: true }); Cache.getItem(key, { typeConversion: true, defaultValue: true });
@ -137,24 +120,22 @@ export const setEventBlur = v => {
EVENT_BLUR = v; EVENT_BLUR = v;
Cache.setItem("event.blur", v); Cache.setItem("event.blur", v);
}; };
PropertyDescriptors["EVENT_BLUR"] = { addDescriptor("EVENT_BLUR", {
enumerable: true, get: () => EVENT_BLUR,
configurable: true,
get: function() {
return EVENT_BLUR;
},
set: setEventBlur, set: setEventBlur,
}; });
addDescriptor("Element", {
get: () => Element,
set: setElement,
});
PropertyDescriptors["DOM"] = { addDescriptor("DOM", {
enumerable: true, get: () => DOM,
configurable: true,
get: function() {
return DOM;
},
set: setDom, set: setDom,
}; });
export function _defineVarProperties(libName) { addDescriptor("nextTick", {
Object.defineProperties(libName, PropertyDescriptors); get: () => nextTick,
} set: setNextTick,
});

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

@ -1,76 +1,78 @@
import { registFunction } from "./plugins"; import { registFunction } from "./plugins";
import { isWidget, isString } from "../2.base"; import { isWidget, isString } from "../2.base";
export function Element(widget, attribs) { export let Element = class {
this.l = this.r = this.t = this.b = 0; // 边框 constructor(widget, attribs) {
this.marginLeft = this.marginRight = this.marginTop = this.marginBottom = 0; // 间距 this.l = this.r = this.t = this.b = 0; // 边框
this.position = {}; this.marginLeft = this.marginRight = this.marginTop = this.marginBottom = 0; // 间距
this.classMap = {}; this.position = {};
this.classList = []; this.classMap = {};
this.children = []; this.classList = [];
this.attribs = attribs || {}; this.children = [];
this.styles = {}; this.attribs = attribs || {};
// 兼容处理 this.styles = {};
this["0"] = this; // 兼容处理
this.style = {}; this["0"] = this;
if (!widget) { this.style = {};
this.nodeName = "body"; if (!widget) {
this.position.x = 0; this.nodeName = "body";
this.position.y = 0; this.position.x = 0;
this.attribs.id = "body"; this.position.y = 0;
} else if (isWidget(widget)) { this.attribs.id = "body";
this.widget = widget; } else if (isWidget(widget)) {
this.nodeName = widget.options.tagName; this.widget = widget;
this.textBaseLine = widget.options.textBaseLine; this.nodeName = widget.options.tagName;
} else if (isString(widget)) { this.textBaseLine = widget.options.textBaseLine;
this.nodeName = widget; } else if (isString(widget)) {
this.nodeName = widget;
}
} }
}
initElement(Element); appendChild(child) {
registFunction(Element); 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) { getParent() {
element.prototype = { return this.parent;
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;
},
getBounds() { getSiblings() {
return {}; const parent = this.getParent();
},
width() { return parent ? parent.getChildren() : [this];
}
}, getChildren() {
height() { 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; pending = true;
timerFunc(); timerFunc();
} }
// $flow-disable-line
if (!cb && typeof Promise !== "undefined") { if (!cb && typeof Promise !== "undefined") {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
_resolve = resolve; _resolve = resolve;

Loading…
Cancel
Save