diff --git a/packages/fineui/package.json b/packages/fineui/package.json index 0bd7ddf2e..f467aa097 100644 --- a/packages/fineui/package.json +++ b/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", diff --git a/packages/fineui/src/base/combination/bubble.js b/packages/fineui/src/base/combination/bubble.js index c78fcf111..af3da3cef 100644 --- a/packages/fineui/src/base/combination/bubble.js +++ b/packages/fineui/src/base/combination/bubble.js @@ -520,6 +520,7 @@ export class Bubble extends Widget { this.combo.setValue(v); if (isNull(this.popupView)) { this.options.popup.value = v; + !isNull(this.options.popup.el) && (this.options.popup.el.value = v); } else { this.popupView.setValue(v); } diff --git a/packages/fineui/src/core/2.base.js b/packages/fineui/src/core/2.base.js index 23fc68095..3bbf2d00d 100644 --- a/packages/fineui/src/core/2.base.js +++ b/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); diff --git a/packages/fineui/src/core/constant/writable.var.js b/packages/fineui/src/core/constant/writable.var.js index 4d4f90484..d8a503c29 100644 --- a/packages/fineui/src/core/constant/writable.var.js +++ b/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, +}); \ No newline at end of file diff --git a/packages/fineui/src/core/element/element.js b/packages/fineui/src/core/element/element.js index 9b08c0762..111605ad3 100644 --- a/packages/fineui/src/core/element/element.js +++ b/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; } diff --git a/packages/fineui/src/fix/fix.js b/packages/fineui/src/fix/fix.js index a28f5e4a8..0572c66d6 100644 --- a/packages/fineui/src/fix/fix.js +++ b/packages/fineui/src/fix/fix.js @@ -7,7 +7,7 @@ const pendingCleanupDeps = []; const cleanupDeps = () => { for (let i = 0; i < pendingCleanupDeps.length; i++) { const dep = pendingCleanupDeps[i]; - dep.subs = dep.subs.filter(s => s); + dep.subs = dep.subs.filter(s => dep.subsSet.has(s.id)); dep._pending = false; } pendingCleanupDeps.length = 0; @@ -23,14 +23,16 @@ class Dep { this.id = uid++; this._pending = false; this.subs = []; + this.subsSet = new Set(); } addSub(sub) { this.subs.push(sub); + this.subsSet.add(sub.id); } removeSub(sub) { - this.subs[this.subs.indexOf(sub)] = null; + this.subsSet.delete(sub.id); if (!this._pending) { this._pending = true; pendingCleanupDeps.push(this); @@ -45,7 +47,7 @@ class Dep { notify(options) { // stabilize the subscriber list first - const subs = this.subs.filter(s => s); + const subs = this.subs.filter(s => this.subsSet.has(s.id)); for (let i = 0, l = subs.length; i < l; i++) { subs[i].update(options); } @@ -203,7 +205,7 @@ const nextTick = (function () { pending = true; timerFunc(); } - // $flow-disable-line + if (!cb && typeof Promise !== "undefined") { return new Promise((resolve, reject) => { _resolve = resolve; diff --git a/packages/fineui/src/less/base/single/input/radio.less b/packages/fineui/src/less/base/single/input/radio.less index a1aaa4071..52e569874 100644 --- a/packages/fineui/src/less/base/single/input/radio.less +++ b/packages/fineui/src/less/base/single/input/radio.less @@ -15,6 +15,9 @@ border-color: @color-bi-border-hover-active-radio; } } + .bi-radio-icon { + background-color: @color-bi-background-active-radio-content; + } &.active { & .radio-content, &.radio-content { border-color: @color-bi-border-hover-active-radio; diff --git a/packages/fineui/src/less/widget/intervalslider/intervalslider.label.less b/packages/fineui/src/less/widget/intervalslider/intervalslider.label.less deleted file mode 100644 index fa4882c00..000000000 --- a/packages/fineui/src/less/widget/intervalslider/intervalslider.label.less +++ /dev/null @@ -1,3 +0,0 @@ -.bi-interval-slider-label { - min-height: 50px; -} \ No newline at end of file diff --git a/packages/fineui/src/less/widget/intervalslider/intervalslider.less b/packages/fineui/src/less/widget/intervalslider/intervalslider.less deleted file mode 100644 index f875baf5d..000000000 --- a/packages/fineui/src/less/widget/intervalslider/intervalslider.less +++ /dev/null @@ -1,3 +0,0 @@ -.bi-interval-slider { - min-height: 50px; -} \ No newline at end of file diff --git a/packages/fineui/src/widget/dynamicdatetime/dynamicdatetime.timeselect.js b/packages/fineui/src/widget/dynamicdatetime/dynamicdatetime.timeselect.js index 32ef8f9a0..928ad02fe 100644 --- a/packages/fineui/src/widget/dynamicdatetime/dynamicdatetime.timeselect.js +++ b/packages/fineui/src/widget/dynamicdatetime/dynamicdatetime.timeselect.js @@ -181,18 +181,24 @@ export class DynamicDateTimeSelect extends Widget { } _checkHour(value) { - this.hour.setDownEnable(parseInt(value) > 0); - this.hour.setUpEnable(parseInt(value) < 23); + const { timeSelectTypes } = this.options; + const canSelect = timeSelectTypes.includes(DynamicDateTimeSelect.HOUR); + this.hour.setDownEnable(canSelect && parseInt(value) > 0); + this.hour.setUpEnable(canSelect && parseInt(value) < 23); } _checkMinute(value) { - this.minute.setDownEnable(parseInt(value) > 0); - this.minute.setUpEnable(parseInt(value) < 59); + const { timeSelectTypes } = this.options; + const canSelect = timeSelectTypes.includes(DynamicDateTimeSelect.MINUTE); + this.minute.setDownEnable(canSelect && parseInt(value) > 0); + this.minute.setUpEnable(canSelect && parseInt(value) < 59); } _checkSecond(value) { - this.second.setDownEnable(parseInt(value) > 0); - this.second.setUpEnable(parseInt(value) < 59); + const { timeSelectTypes } = this.options; + const canSelect = timeSelectTypes.includes(DynamicDateTimeSelect.SECOND); + this.second.setDownEnable(canSelect && parseInt(value) > 0); + this.second.setUpEnable(canSelect && parseInt(value) < 59); } _autoSwitch(v, type) { diff --git a/packages/fineui/src/widget/intervalslider/intervalslider.js b/packages/fineui/src/widget/intervalslider/intervalslider.js index b24a795af..63c1af7b8 100644 --- a/packages/fineui/src/widget/intervalslider/intervalslider.js +++ b/packages/fineui/src/widget/intervalslider/intervalslider.js @@ -23,19 +23,17 @@ import { Single, Editor } from "@/base"; import { AccurateCalculationModel } from "./model.accuratecalculation"; import { SignTextEditor, SliderIconButton } from "../singleslider"; +const CONSTANTS = { + EDITOR_WIDTH: 58, + EDITOR_HEIGHT: 20, + LABEL_HEIGHT: 30, + SLIDER_HEIGHT: 30, +}; + @shortcut() export class IntervalSlider extends Single { static xtype = "bi.interval_slider"; - _constant = { - EDITOR_WIDTH: 58, - EDITOR_R_GAP: 60, - EDITOR_HEIGHT: 20, - SLIDER_WIDTH_HALF: 15, - LABEL_HEIGHT: 30, - SLIDER_WIDTH: 30, - SLIDER_HEIGHT: 30, - TRACK_HEIGHT: 24, - }; + props = { baseCls: "bi-interval-slider bi-slider-track", digit: false, @@ -45,6 +43,8 @@ export class IntervalSlider extends Single { value: { min: "", max: "" }, lAlign: "center", rAlign: "center", + labelHeight: CONSTANTS.LABEL_HEIGHT, + sliderHeight: CONSTANTS.SLIDER_HEIGHT, }; static EVENT_CHANGE = "EVENT_CHANGE"; @@ -59,8 +59,11 @@ export class IntervalSlider extends Single { this.populate(); } + getConstant() { + return CONSTANTS; + } + render() { - const c = this._constant; const o = this.options; this.enable = false; this.valueOne = ""; @@ -86,8 +89,8 @@ export class IntervalSlider extends Single { text: unit, allowBlank: false, textAlign: lAlign, - width: BI.isNull(editorWidth) ? BI.toPix(c.EDITOR_WIDTH, 2) : BI.toPix(editorWidth, 2), - height: toPix(c.EDITOR_HEIGHT, 2), + width: isNull(editorWidth) ? toPix(CONSTANTS.EDITOR_WIDTH, 2) : toPix(editorWidth, 2), + height: toPix(CONSTANTS.EDITOR_HEIGHT, 2), validationChecker: v => this._checkValidation(v), }); this.labelOne.element.hover( @@ -116,8 +119,8 @@ export class IntervalSlider extends Single { text: unit, allowBlank: false, textAlign: rAlign, - width: BI.isNull(editorWidth) ? BI.toPix(c.EDITOR_WIDTH, 2) : BI.toPix(editorWidth, 2), - height: toPix(c.EDITOR_HEIGHT, 2), + width: isNull(editorWidth) ? toPix(CONSTANTS.EDITOR_WIDTH, 2) : toPix(editorWidth, 2), + height: toPix(CONSTANTS.EDITOR_HEIGHT, 2), validationChecker: v => this._checkValidation(v), }); this.labelTwo.element.hover( @@ -152,7 +155,7 @@ export class IntervalSlider extends Single { return { type: VerticalFillLayout.xtype, - rowSize: [o.labelHeight || c.LABEL_HEIGHT, o.sliderHeight || c.SLIDER_HEIGHT], + rowSize: [o.labelHeight, o.sliderHeight], items: [ this._createLabelWrapper(), { @@ -253,7 +256,6 @@ export class IntervalSlider extends Single { _createLabelWrapper() { const o = this.options; - const c = this._constant; return { el: { @@ -275,7 +277,7 @@ export class IntervalSlider extends Single { ], }, ], - height: o.labelHeight || c.LABEL_HEIGHT, + height: o.labelHeight, }, top: 0, left: 0, @@ -372,24 +374,6 @@ export class IntervalSlider extends Single { return valid; } - _checkOverlap() { - const labelOneLeft = this.labelOne.element[0].offsetLeft; - const labelTwoLeft = this.labelTwo.element[0].offsetLeft; - if (labelOneLeft <= labelTwoLeft) { - if (labelTwoLeft - labelOneLeft < 90) { - this.labelTwo.element.css({ top: 40 }); - } else { - this.labelTwo.element.css({ top: 0 }); - } - } else { - if (labelOneLeft - labelTwoLeft < 90) { - this.labelTwo.element.css({ top: 40 }); - } else { - this.labelTwo.element.css({ top: 0 }); - } - } - } - _checkLabelPosition(oldValueOne, oldValueTwo, valueOne, valueTwo, isLeft) { oldValueOne = parseFloat(oldValueOne); oldValueTwo = parseFloat(oldValueTwo); diff --git a/packages/fineui/src/widget/singleslider/button/editor.sign.text.js b/packages/fineui/src/widget/singleslider/button/editor.sign.text.js index da7c44cb9..c03ba34bc 100644 --- a/packages/fineui/src/widget/singleslider/button/editor.sign.text.js +++ b/packages/fineui/src/widget/singleslider/button/editor.sign.text.js @@ -106,7 +106,7 @@ export class SignTextEditor extends Widget { _checkText() { const o = this.options; nextTick( - bind(() => { + () => { if (this.editor.getValue() === "") { this.text.setValue(o.watermark || ""); this.text.element.addClass("bi-water-mark"); @@ -116,7 +116,7 @@ export class SignTextEditor extends Widget { this.text.setValue(v); this.text.element.removeClass("bi-water-mark"); } - }, this) + } ); }