diff --git a/src/base/1.pane.js b/src/base/1.pane.js index ebbaac636..1e6bf38b5 100644 --- a/src/base/1.pane.js +++ b/src/base/1.pane.js @@ -33,7 +33,7 @@ export class Pane extends Widget { element: this, items: [{ type: "bi.label", - ref: (_ref) => { + ref: _ref => { this._tipText = _ref; }, cls: "bi-tips", @@ -54,15 +54,15 @@ export class Pane extends Widget { // loading的异步情况下由loaded后对面板的populate的时机决定 this.setTipVisible(false); if (o.overlap === true) { - if (!Layers.has(this.getName() + "-loading")) { + if (!Layers.has(`${this.getName()}-loading`)) { createWidget({ type: "bi.center_adapt", cls: "loading-container", items: this._getLoadingTipItems(loadingAnimation), - element: Layers.make(this.getName() + "-loading", this), + element: Layers.make(`${this.getName()}-loading`, this), }); } - Layers.show(this.getName() + "-loading"); + Layers.show(`${this.getName()}-loading`); } else if (isNull(this._loading)) { loadingAnimation.element.css("zIndex", 1); createWidget({ @@ -94,7 +94,7 @@ export class Pane extends Widget { return [{ type: "bi.vertical", - ref: (_ref) => { + ref: _ref => { this._loading = _ref; }, items: loadingTipItems, @@ -102,7 +102,7 @@ export class Pane extends Widget { } loaded() { - Layers.remove(this.getName() + "-loading"); + Layers.remove(`${this.getName()}-loading`); this._loading && this._loading.destroy(); this.options.onLoaded(); this.fireEvent(Pane.EVENT_LOADED); diff --git a/src/core/2.base.js b/src/core/2.base.js index 4fe7583de..003839ec4 100644 --- a/src/core/2.base.js +++ b/src/core/2.base.js @@ -488,7 +488,7 @@ 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" + "isBoolean", "isDate", "isRegExp", "isError", "isNaN", "isUndefined", "zipObject", "cloneDeep", "pickBy" ], name => { BI[name] = _apply(name); }); @@ -526,6 +526,7 @@ export const isNaN = BI.isNaN; export const isUndefined = BI.isUndefined; export const zipObject = BI.zipObject; export const cloneDeep = BI.cloneDeep; +export const pickBy = BI.pickBy; BI._.each(["mapObject", "findKey", "pick", "omit", "tap"], name => { BI[name] = _applyFunc(name); diff --git a/src/core/action/action.js b/src/core/action/action.js index b87ea1e21..bfe20fd80 100644 --- a/src/core/action/action.js +++ b/src/core/action/action.js @@ -6,10 +6,11 @@ * @abstract */ import { OB } from "../3.ob"; + export class Action extends OB { props = { src: null, - tar: null + tar: null, }; actionPerformed(src, tar, callback) { @@ -20,15 +21,3 @@ export class Action extends OB { } } - -BI.ActionFactory = { - createAction: function (key, options) { - var action; - switch (key) { - case "show": - action = BI.ShowAction; - break; - } - return new action(options); - } -}; diff --git a/src/core/action/action.show.js b/src/core/action/action.show.js index 1084ec542..8ed0162f1 100644 --- a/src/core/action/action.show.js +++ b/src/core/action/action.show.js @@ -1,10 +1,9 @@ /** * guy * 由一个元素切换到另一个元素的行为 - * @class BI.ShowAction - * @extends BI.Action */ import { Action } from "./action"; + export class ShowAction extends Action { actionPerformed(src, tar, callback) { tar = tar || this.options.tar; @@ -18,3 +17,17 @@ export class ShowAction extends Action { callback && callback(); } } + +export const ActionFactory = { + createAction (key, options) { + let Action; + switch (key) { + case "show": + Action = ShowAction; + break; + default: + } + + return new Action(options); + }, +}; diff --git a/src/core/action/index.js b/src/core/action/index.js index f82304e43..c73457134 100644 --- a/src/core/action/index.js +++ b/src/core/action/index.js @@ -1,2 +1,2 @@ export { Action } from "./action"; -export { ShowAction } from "./action.show"; \ No newline at end of file +export { ShowAction, ActionFactory } from "./action.show"; diff --git a/src/core/behavior/0.behavior.js b/src/core/behavior/0.behavior.js index 5adc59d3d..22496e242 100644 --- a/src/core/behavior/0.behavior.js +++ b/src/core/behavior/0.behavior.js @@ -1,30 +1,14 @@ -BI.BehaviorFactory = { - createBehavior: function (key, options) { - var behavior; - switch (key) { - case "highlight": - behavior = BI.HighlightBehavior; - break; - case "redmark": - behavior = BI.RedMarkBehavior; - break; - } - return new behavior(options); - } -}; - /** * guy * 行为控件 - * @class BI.Behavior - * @extends BI.OB */ - import { OB } from "../3.ob"; +import { extend } from "../2.base"; + export class Behavior extends OB { _defaultConfig() { - return BI.extend(super._defaultConfig(arguments), { - rule: () => true + return extend(super._defaultConfig(arguments), { + rule: () => true, }); } diff --git a/src/core/behavior/behavior.highlight.js b/src/core/behavior/behavior.highlight.js index 1c0676b90..f66355c65 100644 --- a/src/core/behavior/behavior.highlight.js +++ b/src/core/behavior/behavior.highlight.js @@ -1,33 +1,33 @@ /** * guy - * - * @class BI.HighlightBehavior - * @extends BI.Behavior */ import { Behavior } from "./0.behavior"; +import { isFunction, each } from "../2.base"; +import { Single } from "../../base"; + export class HighlightBehavior extends Behavior { doBehavior(items) { const args = Array.prototype.slice.call(arguments, 1), - o = this.options; - BI.each(items, function (i, item) { - if (item instanceof BI.Single) { - const rule = o.rule(item.getValue(), item); + { rule } = this.options; + each(items, (i, item) => { + if (item instanceof Single) { + const rules = rule(item.getValue(), item); function doBe (run) { if (run === true) { - item.doHighLight && item.doHighLight.apply(item, args); + item.doHighLight && item.doHighLight(...args); } else { - item.unHighLight && item.unHighLight.apply(item, args); + item.unHighLight && item.unHighLight(...args); } } - if (BI.isFunction(rule)) { - rule(doBe); + if (isFunction(rules)) { + rules(doBe); } else { - doBe(rule); + doBe(rules); } } else { - item.doBehavior && item.doBehavior.apply(item, args); + item.doBehavior && item.doBehavior(...args); } }); } diff --git a/src/core/behavior/behavior.redmark.js b/src/core/behavior/behavior.redmark.js index 5beb0797f..7ca2b9df2 100644 --- a/src/core/behavior/behavior.redmark.js +++ b/src/core/behavior/behavior.redmark.js @@ -1,23 +1,24 @@ /** * guy * 标红行为 - * @class BI.RedMarkBehavior - * @extends BI.Behavior */ import { Behavior } from "./0.behavior"; +import { each } from "../2.base"; +import { Single } from "../../base"; + export class RedMarkBehavior extends Behavior { doBehavior(items) { - const args = Array.prototype.slice.call(arguments, 1), - o = this.options; - BI.each(items, function (i, item) { - if(item instanceof BI.Single) { - if (o.rule(item.getValue(), item)) { - item.doRedMark && item.doRedMark.apply(item, args); + const args = Array.prototype.slice.call(arguments, 1), + { rule } = this.options; + each(items, (i, item) => { + if (item instanceof Single) { + if (rule(item.getValue(), item)) { + item.doRedMark && item.doRedMark(...args); } else { - item.doRedMark && item.unRedMark.apply(item, args); + item.doRedMark && item.unRedMark(...args); } } else { - item.doBehavior && item.doBehavior.apply(item, args); + item.doBehavior && item.doBehavior(...args); } }); } diff --git a/src/core/behavior/index.js b/src/core/behavior/index.js index ee2ae69ed..52d5f6499 100644 --- a/src/core/behavior/index.js +++ b/src/core/behavior/index.js @@ -1,3 +1,26 @@ + +import { HighlightBehavior } from "./behavior.highlight"; +import { RedMarkBehavior } from "./behavior.redmark"; + +export const BehaviorFactory = { + createBehavior (key, options) { + let Behavior; + switch (key) { + case "highlight": + Behavior = HighlightBehavior; + break; + case "redmark": + Behavior = RedMarkBehavior; + break; + default: + } + + return new Behavior(options); + }, +}; + export { Behavior } from "./0.behavior"; -export { HighlightBehavior } from "./behavior.highlight"; -export { RedMarkBehavior } from "./behavior.redmark"; \ No newline at end of file +export { + HighlightBehavior, + RedMarkBehavior +}; diff --git a/src/core/constant/events.js b/src/core/constant/events.js index 76eb97021..656f2e9ca 100644 --- a/src/core/constant/events.js +++ b/src/core/constant/events.js @@ -1,444 +1,441 @@ /** * 事件集合 - * @class BI.Events */ -BI._.extend(BI, { - Events: { - - /** - * @static - * @property keydown事件 - */ - KEYDOWN: "_KEYDOWN", - - /** - * @static - * @property 回撤事件 - */ - BACKSPACE: "_BACKSPACE", - - /** - * @static - * @property 空格事件 - */ - SPACE: "_SPACE", - - /** - * @static - * @property 回车事件 - */ - ENTER: "_ENTER", - - /** - * @static - * @property 确定事件 - */ - CONFIRM: "_CONFIRM", - - /** - * @static - * @property 错误事件 - */ - ERROR: "_ERROR", - - /** - * @static - * @property 暂停事件 - */ - PAUSE: "_PAUSE", - - /** - * @static - * @property destroy事件 - */ - DESTROY: "_DESTROY", - - /** - * @static - * @property 挂载事件 - */ - MOUNT: "_MOUNT", - - /** - * @static - * @property 取消挂载事件 - */ - UNMOUNT: "_UNMOUNT", - - /** - * @static - * @property 清除选择 - */ - CLEAR: "_CLEAR", - - /** - * @static - * @property 添加数据 - */ - ADD: "_ADD", - - /** - * @static - * @property 正在编辑状态事件 - */ - EDITING: "_EDITING", - - /** - * @static - * @property 空状态事件 - */ - EMPTY: "_EMPTY", - - /** - * @static - * @property 显示隐藏事件 - */ - VIEW: "_VIEW", - - /** - * @static - * @property 窗体改变大小 - */ - RESIZE: "_RESIZE", - - /** - * @static - * @property 编辑前事件 - */ - BEFOREEDIT: "_BEFOREEDIT", - - /** - * @static - * @property 编辑后事件 - */ - AFTEREDIT: "_AFTEREDIT", - - /** - * @static - * @property 开始编辑事件 - */ - STARTEDIT: "_STARTEDIT", - - /** - * @static - * @property 停止编辑事件 - */ - STOPEDIT: "_STOPEDIT", - - /** - * @static - * @property 值改变事件 - */ - CHANGE: "_CHANGE", - - /** - * @static - * @property 下拉弹出菜单事件 - */ - EXPAND: "_EXPAND", - - /** - * @static - * @property 关闭下拉菜单事件 - */ - COLLAPSE: "_COLLAPSE", - - /** - * @static - * @property 下拉菜单切换展开收起事件 - */ - TOGGLE: "_TOGGLE", - - /** - * @static - * @property 回调事件 - */ - CALLBACK: "_CALLBACK", - - /** - * @static - * @property 点击事件 - */ - CLICK: "_CLICK", - - /** - * @static - * @property 状态改变事件,一般是用在复选按钮和单选按钮 - */ - STATECHANGE: "_STATECHANGE", - - /** - * @static - * @property 状态改变前事件 - */ - BEFORESTATECHANGE: "_BEFORESTATECHANGE", - - - /** - * @static - * @property 初始化事件 - */ - INIT: "_INIT", - - /** - * @static - * @property 初始化后事件 - */ - AFTERINIT: "_AFTERINIT", - - /** - * @static - * @property 滚动条滚动事件 - */ - SCROLL: "_SCROLL", - - - /** - * @static - * @property 开始加载事件 - */ - STARTLOAD: "_STARTLOAD", - - /** - * @static - * @property 加载后事件 - */ - AFTERLOAD: "_AFTERLOAD", - - - /** - * @static - * @property 提交前事件 - */ - BS: "beforesubmit", - - /** - * @static - * @property 提交后事件 - */ - AS: "aftersubmit", - - /** - * @static - * @property 提交完成事件 - */ - SC: "submitcomplete", - - /** - * @static - * @property 提交失败事件 - */ - SF: "submitfailure", - - /** - * @static - * @property 提交成功事件 - */ - SS: "submitsuccess", - - /** - * @static - * @property 校验提交前事件 - */ - BVW: "beforeverifywrite", - - /** - * @static - * @property 校验提交后事件 - */ - AVW: "afterverifywrite", - - /** - * @static - * @property 校验后事件 - */ - AV: "afterverify", - - /** - * @static - * @property 填报前事件 - */ - BW: "beforewrite", - - /** - * @static - * @property 填报后事件 - */ - AW: "afterwrite", - - /** - * @static - * @property 填报成功事件 - */ - WS: "writesuccess", - - /** - * @static - * @property 填报失败事件 - */ - WF: "writefailure", - - /** - * @static - * @property 添加行前事件 - */ - BA: "beforeappend", - - /** - * @static - * @property 添加行后事件 - */ - AA: "afterappend", - - /** - * @static - * @property 删除行前事件 - */ - BD: "beforedelete", - - /** - * @static - * @property 删除行后事件 - */ - AD: "beforedelete", - - /** - * @static - * @property 未提交离开事件 - */ - UC: "unloadcheck", - - - /** - * @static - * @property PDF导出前事件 - */ - BTOPDF: "beforetopdf", - - /** - * @static - * @property PDF导出后事件 - */ - ATOPDF: "aftertopdf", - - /** - * @static - * @property Excel导出前事件 - */ - BTOEXCEL: "beforetoexcel", - - /** - * @static - * @property Excel导出后事件 - */ - ATOEXCEL: "aftertoexcel", - - /** - * @static - * @property Word导出前事件 - */ - BTOWORD: "beforetoword", - - /** - * @static - * @property Word导出后事件 - */ - ATOWORD: "aftertoword", - - /** - * @static - * @property 图片导出前事件 - */ - BTOIMAGE: "beforetoimage", - - /** - * @static - * @property 图片导出后事件 - */ - ATOIMAGE: "aftertoimage", - - /** - * @static - * @property HTML导出前事件 - */ - BTOHTML: "beforetohtml", - - /** - * @static - * @property HTML导出后事件 - */ - ATOHTML: "aftertohtml", - - /** - * @static - * @property Excel导入前事件 - */ - BIMEXCEL: "beforeimportexcel", - - /** - * @static - * @property Excel导出后事件 - */ - AIMEXCEL: "afterimportexcel", - - /** - * @static - * @property PDF打印前事件 - */ - BPDFPRINT: "beforepdfprint", - - /** - * @static - * @property PDF打印后事件 - */ - APDFPRINT: "afterpdfprint", - - /** - * @static - * @property Flash打印前事件 - */ - BFLASHPRINT: "beforeflashprint", - - /** - * @static - * @property Flash打印后事件 - */ - AFLASHPRINT: "afterflashprint", - - /** - * @static - * @property Applet打印前事件 - */ - BAPPLETPRINT: "beforeappletprint", - - /** - * @static - * @property Applet打印后事件 - */ - AAPPLETPRINT: "afterappletprint", - - /** - * @static - * @property 服务器打印前事件 - */ - BSEVERPRINT: "beforeserverprint", - - /** - * @static - * @property 服务器打印后事件 - */ - ASERVERPRINT: "afterserverprint", - - /** - * @static - * @property 邮件发送前事件 - */ - BEMAIL: "beforeemail", - - /** - * @static - * @property 邮件发送后事件 - */ - AEMAIL: "afteremail" - } -}); +export const Events = { + + /** + * @static + * @property keydown事件 + */ + KEYDOWN: "_KEYDOWN", + + /** + * @static + * @property 回撤事件 + */ + BACKSPACE: "_BACKSPACE", + + /** + * @static + * @property 空格事件 + */ + SPACE: "_SPACE", + + /** + * @static + * @property 回车事件 + */ + ENTER: "_ENTER", + + /** + * @static + * @property 确定事件 + */ + CONFIRM: "_CONFIRM", + + /** + * @static + * @property 错误事件 + */ + ERROR: "_ERROR", + + /** + * @static + * @property 暂停事件 + */ + PAUSE: "_PAUSE", + + /** + * @static + * @property destroy事件 + */ + DESTROY: "_DESTROY", + + /** + * @static + * @property 挂载事件 + */ + MOUNT: "_MOUNT", + + /** + * @static + * @property 取消挂载事件 + */ + UNMOUNT: "_UNMOUNT", + + /** + * @static + * @property 清除选择 + */ + CLEAR: "_CLEAR", + + /** + * @static + * @property 添加数据 + */ + ADD: "_ADD", + + /** + * @static + * @property 正在编辑状态事件 + */ + EDITING: "_EDITING", + + /** + * @static + * @property 空状态事件 + */ + EMPTY: "_EMPTY", + + /** + * @static + * @property 显示隐藏事件 + */ + VIEW: "_VIEW", + + /** + * @static + * @property 窗体改变大小 + */ + RESIZE: "_RESIZE", + + /** + * @static + * @property 编辑前事件 + */ + BEFOREEDIT: "_BEFOREEDIT", + + /** + * @static + * @property 编辑后事件 + */ + AFTEREDIT: "_AFTEREDIT", + + /** + * @static + * @property 开始编辑事件 + */ + STARTEDIT: "_STARTEDIT", + + /** + * @static + * @property 停止编辑事件 + */ + STOPEDIT: "_STOPEDIT", + + /** + * @static + * @property 值改变事件 + */ + CHANGE: "_CHANGE", + + /** + * @static + * @property 下拉弹出菜单事件 + */ + EXPAND: "_EXPAND", + + /** + * @static + * @property 关闭下拉菜单事件 + */ + COLLAPSE: "_COLLAPSE", + + /** + * @static + * @property 下拉菜单切换展开收起事件 + */ + TOGGLE: "_TOGGLE", + + /** + * @static + * @property 回调事件 + */ + CALLBACK: "_CALLBACK", + + /** + * @static + * @property 点击事件 + */ + CLICK: "_CLICK", + + /** + * @static + * @property 状态改变事件,一般是用在复选按钮和单选按钮 + */ + STATECHANGE: "_STATECHANGE", + + /** + * @static + * @property 状态改变前事件 + */ + BEFORESTATECHANGE: "_BEFORESTATECHANGE", + + + /** + * @static + * @property 初始化事件 + */ + INIT: "_INIT", + + /** + * @static + * @property 初始化后事件 + */ + AFTERINIT: "_AFTERINIT", + + /** + * @static + * @property 滚动条滚动事件 + */ + SCROLL: "_SCROLL", + + + /** + * @static + * @property 开始加载事件 + */ + STARTLOAD: "_STARTLOAD", + + /** + * @static + * @property 加载后事件 + */ + AFTERLOAD: "_AFTERLOAD", + + + /** + * @static + * @property 提交前事件 + */ + BS: "beforesubmit", + + /** + * @static + * @property 提交后事件 + */ + AS: "aftersubmit", + + /** + * @static + * @property 提交完成事件 + */ + SC: "submitcomplete", + + /** + * @static + * @property 提交失败事件 + */ + SF: "submitfailure", + + /** + * @static + * @property 提交成功事件 + */ + SS: "submitsuccess", + + /** + * @static + * @property 校验提交前事件 + */ + BVW: "beforeverifywrite", + + /** + * @static + * @property 校验提交后事件 + */ + AVW: "afterverifywrite", + + /** + * @static + * @property 校验后事件 + */ + AV: "afterverify", + + /** + * @static + * @property 填报前事件 + */ + BW: "beforewrite", + + /** + * @static + * @property 填报后事件 + */ + AW: "afterwrite", + + /** + * @static + * @property 填报成功事件 + */ + WS: "writesuccess", + + /** + * @static + * @property 填报失败事件 + */ + WF: "writefailure", + + /** + * @static + * @property 添加行前事件 + */ + BA: "beforeappend", + + /** + * @static + * @property 添加行后事件 + */ + AA: "afterappend", + + /** + * @static + * @property 删除行前事件 + */ + BD: "beforedelete", + + /** + * @static + * @property 删除行后事件 + */ + AD: "beforedelete", + + /** + * @static + * @property 未提交离开事件 + */ + UC: "unloadcheck", + + + /** + * @static + * @property PDF导出前事件 + */ + BTOPDF: "beforetopdf", + + /** + * @static + * @property PDF导出后事件 + */ + ATOPDF: "aftertopdf", + + /** + * @static + * @property Excel导出前事件 + */ + BTOEXCEL: "beforetoexcel", + + /** + * @static + * @property Excel导出后事件 + */ + ATOEXCEL: "aftertoexcel", + + /** + * @static + * @property Word导出前事件 + */ + BTOWORD: "beforetoword", + + /** + * @static + * @property Word导出后事件 + */ + ATOWORD: "aftertoword", + + /** + * @static + * @property 图片导出前事件 + */ + BTOIMAGE: "beforetoimage", + + /** + * @static + * @property 图片导出后事件 + */ + ATOIMAGE: "aftertoimage", + + /** + * @static + * @property HTML导出前事件 + */ + BTOHTML: "beforetohtml", + + /** + * @static + * @property HTML导出后事件 + */ + ATOHTML: "aftertohtml", + + /** + * @static + * @property Excel导入前事件 + */ + BIMEXCEL: "beforeimportexcel", + + /** + * @static + * @property Excel导出后事件 + */ + AIMEXCEL: "afterimportexcel", + + /** + * @static + * @property PDF打印前事件 + */ + BPDFPRINT: "beforepdfprint", + + /** + * @static + * @property PDF打印后事件 + */ + APDFPRINT: "afterpdfprint", + + /** + * @static + * @property Flash打印前事件 + */ + BFLASHPRINT: "beforeflashprint", + + /** + * @static + * @property Flash打印后事件 + */ + AFLASHPRINT: "afterflashprint", + + /** + * @static + * @property Applet打印前事件 + */ + BAPPLETPRINT: "beforeappletprint", + + /** + * @static + * @property Applet打印后事件 + */ + AAPPLETPRINT: "afterappletprint", + + /** + * @static + * @property 服务器打印前事件 + */ + BSEVERPRINT: "beforeserverprint", + + /** + * @static + * @property 服务器打印后事件 + */ + ASERVERPRINT: "afterserverprint", + + /** + * @static + * @property 邮件发送前事件 + */ + BEMAIL: "beforeemail", + + /** + * @static + * @property 邮件发送后事件 + */ + AEMAIL: "afteremail", +}; diff --git a/src/core/constant/index.js b/src/core/constant/index.js new file mode 100644 index 000000000..205529687 --- /dev/null +++ b/src/core/constant/index.js @@ -0,0 +1,2 @@ +export { Events } from "./events"; +export * from "./var"; diff --git a/src/core/constant/var.js b/src/core/constant/var.js index f9acb8b30..a109324c0 100644 --- a/src/core/constant/var.js +++ b/src/core/constant/var.js @@ -1,167 +1,170 @@ /** * 常量 */ +import { isNumber } from "../2.base"; -BI._.extend(BI, { - MAX: 0xfffffffffffffff, - MIN: -0xfffffffffffffff, - EVENT_RESPONSE_TIME: 200, - EVENT_BLUR: true, - zIndex_layer: 1e5, - zIndex_popover: 1e6, - zIndex_popup: 1e7, - zIndex_masker: 1e8, - zIndex_tip: 1e9, - emptyStr: "", - pixUnit: "px", - pixRatio: 1, - // 一定返回最终的单位 - pixFormat: function (pix, border) { - if (!BI.isNumber(pix)) { - return pix; - } - if (BI.pixUnit === "px") { - return (pix / BI.pixRatio - (border || 0)) + BI.pixUnit; - } - var length = pix / BI.pixRatio + BI.pixUnit; - if (border > 0) { - return `calc(${length} - ${border + "px"})`; - } - return length; - }, - toPix: function (pix, border) { - if (!BI.isNumber(pix)) { - return pix; - } - if (BI.pixUnit === "px") { - return pix - (border || 0) * BI.pixRatio; - } - if (border > 0) { - return `calc(${pix / BI.pixRatio + BI.pixUnit} - ${border + "px"})`; - } +export const MAX = 0xfffffffffffffff; +export const MIN = -0xfffffffffffffff; +export const EVENT_RESPONSE_TIME = 200; +export const EVENT_BLUR = true; +export const zIndex_layer = 1e5; +export const zIndex_popover = 1e6; +export const zIndex_popup = 1e7; +export const zIndex_masker = 1e8; +export const zIndex_tip = 1e9; +export const emptyStr = ""; +export const pixUnit = "px"; +export const pixRatio = 1; +export const empty = null; +export const Key = { + 48: "0", + 49: "1", + 50: "2", + 51: "3", + 52: "4", + 53: "5", + 54: "6", + 55: "7", + 56: "8", + 57: "9", + 65: "a", + 66: "b", + 67: "c", + 68: "d", + 69: "e", + 70: "f", + 71: "g", + 72: "h", + 73: "i", + 74: "j", + 75: "k", + 76: "l", + 77: "m", + 78: "n", + 79: "o", + 80: "p", + 81: "q", + 82: "r", + 83: "s", + 84: "t", + 85: "u", + 86: "v", + 87: "w", + 88: "x", + 89: "y", + 90: "z", + 96: "0", + 97: "1", + 98: "2", + 99: "3", + 100: "4", + 101: "5", + 102: "6", + 103: "7", + 104: "8", + 105: "9", + 106: "*", + 107: "+", + 109: "-", + 110: ".", + 111: "/", +}; +export const KeyCode = { + BACKSPACE: 8, + COMMA: 188, + DELETE: 46, + DOWN: 40, + END: 35, + ENTER: 13, + ESCAPE: 27, + HOME: 36, + LEFT: 37, + NUMPAD_ADD: 107, + NUMPAD_DECIMAL: 110, + NUMPAD_DIVIDE: 111, + NUMPAD_ENTER: 108, + NUMPAD_MULTIPLY: 106, + NUMPAD_SUBTRACT: 109, + PAGE_DOWN: 34, + PAGE_UP: 33, + PERIOD: 190, + RIGHT: 39, + SPACE: 32, + TAB: 9, + UP: 38, +}; +export const Status = { + SUCCESS: 1, + WRONG: 2, + START: 3, + END: 4, + WAITING: 5, + READY: 6, + RUNNING: 7, + OUTOFBOUNDS: 8, + NULL: -1, +}; +export const Direction = { + Top: "top", + Bottom: "bottom", + Left: "left", + Right: "right", + Custom: "custom", +}; +export const Axis = { + Vertical: "vertical", + Horizontal: "horizontal", +}; +export const Selection = { + Default: -2, + None: -1, + Single: 0, + Multi: 1, + All: 2, +}; +export const HorizontalAlign = { + Left: "left", + Right: "right", + Center: "center", + Stretch: "stretch", +}; +export const VerticalAlign = { + Middle: "middle", + Top: "top", + Bottom: "bottom", + Stretch: "stretch", +}; +export const StartOfWeek = 1; +export const BlankSplitChar = "\u200b \u200b"; + +// 一定返回最终的单位 +export function pixFormat(pix, border) { + if (!isNumber(pix)) { + return pix; + } + if (pixUnit === "px") { + return (pix / pixRatio - (border || 0)) + pixUnit; + } + const length = pix / pixRatio + pixUnit; + if (border > 0) { + return `calc(${length} - ${`${border}px`})`; + } + + return length; +} + +export function toPix(pix, border) { + if (!isNumber(pix)) { return pix; - }, - emptyFn: function () { - }, - empty: null, - Key: { - 48: "0", - 49: "1", - 50: "2", - 51: "3", - 52: "4", - 53: "5", - 54: "6", - 55: "7", - 56: "8", - 57: "9", - 65: "a", - 66: "b", - 67: "c", - 68: "d", - 69: "e", - 70: "f", - 71: "g", - 72: "h", - 73: "i", - 74: "j", - 75: "k", - 76: "l", - 77: "m", - 78: "n", - 79: "o", - 80: "p", - 81: "q", - 82: "r", - 83: "s", - 84: "t", - 85: "u", - 86: "v", - 87: "w", - 88: "x", - 89: "y", - 90: "z", - 96: "0", - 97: "1", - 98: "2", - 99: "3", - 100: "4", - 101: "5", - 102: "6", - 103: "7", - 104: "8", - 105: "9", - 106: "*", - 107: "+", - 109: "-", - 110: ".", - 111: "/" - }, - KeyCode: { - BACKSPACE: 8, - COMMA: 188, - DELETE: 46, - DOWN: 40, - END: 35, - ENTER: 13, - ESCAPE: 27, - HOME: 36, - LEFT: 37, - NUMPAD_ADD: 107, - NUMPAD_DECIMAL: 110, - NUMPAD_DIVIDE: 111, - NUMPAD_ENTER: 108, - NUMPAD_MULTIPLY: 106, - NUMPAD_SUBTRACT: 109, - PAGE_DOWN: 34, - PAGE_UP: 33, - PERIOD: 190, - RIGHT: 39, - SPACE: 32, - TAB: 9, - UP: 38 - }, - Status: { - SUCCESS: 1, - WRONG: 2, - START: 3, - END: 4, - WAITING: 5, - READY: 6, - RUNNING: 7, - OUTOFBOUNDS: 8, - NULL: -1 - }, - Direction: { - Top: "top", - Bottom: "bottom", - Left: "left", - Right: "right", - Custom: "custom" - }, - Axis: { - Vertical: "vertical", - Horizontal: "horizontal" - }, - Selection: { - Default: -2, - None: -1, - Single: 0, - Multi: 1, - All: 2 - }, - HorizontalAlign: { - Left: "left", - Right: "right", - Center: "center", - Stretch: "stretch" - }, - VerticalAlign: { - Middle: "middle", - Top: "top", - Bottom: "bottom", - Stretch: "stretch" - }, - StartOfWeek: 1, - BlankSplitChar: "\u200b \u200b", -}); + } + if (pixUnit === "px") { + return pix - (border || 0) * pixRatio; + } + if (border > 0) { + return `calc(${pix / pixRatio + pixUnit} - ${`${border}px`})`; + } + + return pix; +} + +export function emptyFn() {} diff --git a/src/core/controller/0.controller.js b/src/core/controller/0.controller.js index 0841a9358..7cda6a2a5 100644 --- a/src/core/controller/0.controller.js +++ b/src/core/controller/0.controller.js @@ -2,11 +2,9 @@ * guy * 控制器 * Controller层超类 - * @class BI.Controller - * @extends BI.OB - * @abstract */ import { OB } from "../3.ob"; + export class Controller extends OB { static EVENT_CHANGE = "__EVENT_CHANGE__"; } diff --git a/src/core/controller/controller.broadcast.js b/src/core/controller/controller.broadcast.js index f0cc90c8d..3f1eb3035 100644 --- a/src/core/controller/controller.broadcast.js +++ b/src/core/controller/controller.broadcast.js @@ -2,9 +2,10 @@ * 广播 * * Created by GUY on 2015/12/23. - * @class */ import { Controller } from "./0.controller"; +import { each, remove } from "../2.base"; + export class BroadcastController extends Controller { init() { this._broadcasts = {}; @@ -15,23 +16,25 @@ export class BroadcastController extends Controller { this._broadcasts[name] = []; } this._broadcasts[name].push(fn); + return () => this.remove(name, fn); } send(name) { const args = [].slice.call(arguments, 1); - BI.each(this._broadcasts[name], (i, fn) => fn.apply(null, args)); + each(this._broadcasts[name], (i, fn) => fn(...args)); } remove(name, fn) { if (fn) { - BI.remove(this._broadcasts[name], (index, cb) => fn === cb); + remove(this._broadcasts[name], (index, cb) => fn === cb); if (this._broadcasts[name].length === 0) { delete this._broadcasts[name]; } } else { delete this._broadcasts[name]; } + return this; } -} \ No newline at end of file +} diff --git a/src/core/controller/controller.bubbles.js b/src/core/controller/controller.bubbles.js index e596eac60..64147fdcc 100644 --- a/src/core/controller/controller.bubbles.js +++ b/src/core/controller/controller.bubbles.js @@ -3,9 +3,11 @@ * 控制气泡图的显示方向 * * Created by GUY on 2015/8/21. - * @class */ import { Controller } from "./0.controller"; +import { isNotNull, each } from "../2.base"; +import { createWidget } from "../5.inject"; + export class BubblesController extends Controller { init() { this.storeBubbles = {}; @@ -30,12 +32,12 @@ export class BubblesController extends Controller { // const fixed = opt.fixed !== false; if (!this.storeBubbles[name]) { - this.storeBubbles[name] = BI.createWidget({ + this.storeBubbles[name] = createWidget({ type: "bi.text", - cls: "bi-bubble" + " bubble-" + level, - text: text, + cls: `bi-bubble bubble-${level}`, + text, hgap: 5, - height: 18 + height: 18, }); } const bubble = this.storeBubbles[name]; @@ -43,14 +45,14 @@ export class BubblesController extends Controller { bubble.setText(text); } - BI.createWidget({ + createWidget({ type: "bi.default", element: container, items: [ { - el: bubble + el: bubble, } - ] + ], }); if (this.storePoppers[name]) { this.storePoppers[name].destroy(); @@ -59,32 +61,34 @@ export class BubblesController extends Controller { placement: ({ left: "top-start", center: "top", - right: "top-end" + right: "top-end", })[offsetStyle], strategy: "fixed", modifiers: [ { name: "offset", options: { - offset: [adjustXOffset, adjustYOffset] - } + offset: [adjustXOffset, adjustYOffset], + }, }, { name: "preventOverflow", - enabled: false + enabled: false, } - ] + ], }); + return this; } hide(name) { this.remove(name); + return this; } has(name) { - return this.storeBubbles[name] != null; + return isNotNull(this.storeBubbles[name]); } remove(name) { @@ -94,14 +98,16 @@ export class BubblesController extends Controller { this.storeBubbles[name].destroy(); this.storePoppers[name] && this.storePoppers[name].destroy(); delete this.storeBubbles[name]; + return this; } removeAll() { - BI.each(this.storeBubbles, (name, bubble) => bubble.destroy()); - BI.each(this.storePoppers, (name, popper) => popper.destroy()); + each(this.storeBubbles, (name, bubble) => bubble.destroy()); + each(this.storePoppers, (name, popper) => popper.destroy()); this.storeBubbles = {}; this.storePoppers = {}; + return this; } } diff --git a/src/core/controller/controller.drawer.js b/src/core/controller/controller.drawer.js index 51a80b734..806d8c67b 100644 --- a/src/core/controller/controller.drawer.js +++ b/src/core/controller/controller.drawer.js @@ -1,10 +1,11 @@ /** * guy * popover弹出层控制器, z-index在100w层级 - * @class BI.popoverController - * @extends BI.Controller */ import { Controller } from "./0.controller"; +import { each, isNotNull } from "../2.base"; +import { createWidget } from "../5.inject"; + export class DrawerController extends Controller { constructor() { super(); @@ -13,7 +14,7 @@ export class DrawerController extends Controller { } props = { modal: true, // 模态窗口 - render: "body" + render: "body", } init() { @@ -28,15 +29,15 @@ export class DrawerController extends Controller { if (this.has(name)) { return this; } - const popover = BI.createWidget(options || {}, { - type: "bi.drawer" + const popover = createWidget(options || {}, { + type: "bi.drawer", }, context); this.add(name, popover, options, context); + return this; } open(name) { - const o = this.options; if (!this.has(name)) { return this; } @@ -59,6 +60,7 @@ export class DrawerController extends Controller { const popover = this.get(name); popover.show && popover.show(); } + return this; } @@ -71,6 +73,7 @@ export class DrawerController extends Controller { this.floatContainer[name].invisible(); this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]); } + return this; } @@ -91,23 +94,23 @@ export class DrawerController extends Controller { if (this.has(name)) { return this; } - this.floatContainer[name] = BI.createWidget({ + this.floatContainer[name] = createWidget({ type: "bi.absolute", cls: "bi-popup-view", items: [{ - el: (this.floatLayer[name] = BI.createWidget({ + el: (this.floatLayer[name] = createWidget({ type: "bi.absolute", - items: [popover] + items: [popover], }, context)), left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }); this.floatManager[name] = popover; popover.on(BI.Drawer.EVENT_CLOSE, () => this.close(name)); - BI.createWidget({ + createWidget({ type: "bi.absolute", element: options.container || this.options.render, items: [{ @@ -115,9 +118,10 @@ export class DrawerController extends Controller { left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }); + return this; } @@ -126,7 +130,7 @@ export class DrawerController extends Controller { } has(name) { - return BI.isNotNull(this.floatManager[name]); + return isNotNull(this.floatManager[name]); } remove(name) { @@ -140,11 +144,12 @@ export class DrawerController extends Controller { delete this.zindexMap[name]; delete this.floatContainer[name]; delete this.floatOpened[name]; + return this; } removeAll() { - BI.each(this.floatContainer, (name, container) => { + each(this.floatContainer, (name, container) => { container.destroy(); this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]); }); @@ -153,6 +158,7 @@ export class DrawerController extends Controller { this.floatContainer = {}; this.floatOpened = {}; this.zindexMap = {}; + return this; } } diff --git a/src/core/controller/controller.layer.js b/src/core/controller/controller.layer.js index 6356588ab..eb47237e1 100644 --- a/src/core/controller/controller.layer.js +++ b/src/core/controller/controller.layer.js @@ -2,9 +2,12 @@ * 弹出层面板控制器, z-index在10w层级 * * Created by GUY on 2015/6/24. - * @class */ import { Controller } from "./0.controller"; +import { isNull, isNotNull, each, keys, isWidget, isNotEmptyString, extend } from "../2.base"; +import { Widget } from "../4.widget"; +import { createWidget } from "../5.inject"; + export class LayerController extends Controller { constructor() { super(); @@ -12,7 +15,7 @@ export class LayerController extends Controller { } props = { - render: "body" + render: "body", } init() { @@ -22,11 +25,11 @@ export class LayerController extends Controller { } _initResizer() { - this.resizer = BI.Resizers.add("layerController" + BI.uniqueId(), BI.bind(this._resize, this)); + this.resizer = BI.Resizers.add(`layerController${BI.uniqueId()}`, BI.bind(this._resize, this)); } _resize() { - BI.each(this.layouts, function (i, layer) { + each(this.layouts, (i, layer) => { if (layer.element.is(":visible")) { layer.element.trigger("__resize__"); } @@ -34,37 +37,38 @@ export class LayerController extends Controller { } make(name, container, op, context) { - if (BI.isWidget(container)) { + if (isWidget(container)) { op = op || {}; op.container = container; } else { context = op; op = container; } + return this.create(name, null, op, context); } create(name, from, op, context) { - BI.isNull(this.resizer) && this._initResizer(); + isNull(this.resizer) && this._initResizer(); if (this.has(name)) { return this.get(name); } op || (op = {}); const offset = op.offset || {}; let w = from; - if (BI.isWidget(from)) { + if (isWidget(from)) { w = from.element; } - if (BI.isNotEmptyString(w)) { - w = BI.Widget._renderEngine.createElement(w); + if (isNotEmptyString(w)) { + w = Widget._renderEngine.createElement(w); } if (this.has(name)) { return this.get(name); } - const widget = BI.createWidget((op.render || {}), BI.extend({ - type: "bi.layout" + const widget = createWidget((op.render || {}), extend({ + type: "bi.layout", }, op), context); - const layout = BI.createWidget({ + const layout = createWidget({ type: "bi.absolute", invisible: true, items: [ @@ -73,11 +77,11 @@ export class LayerController extends Controller { left: 0, right: 0, top: 0, - bottom: 0 + bottom: 0, } - ] + ], }, context); - BI.createWidget({ + createWidget({ type: "bi.absolute", element: op.container || this.options.render, items: [ @@ -86,20 +90,19 @@ export class LayerController extends Controller { left: offset.left || 0, right: offset.right || 0, top: offset.top || 0, - bottom: offset.bottom || 0 + bottom: offset.bottom || 0, } - ] + ], }); if (w) { layout.element.addClass("bi-popup-view"); function getComputedPosition() { - - var css = { + const css = { left: w.offset().left + (offset.left || 0), top: w.offset().top + (offset.top || 0), width: offset.width || (w.outerWidth() - (offset.left || 0) - (offset.right || 0)) || "", - height: offset.height || (w.outerHeight() - (offset.top || 0) - (offset.bottom || 0)) || "" + height: offset.height || (w.outerHeight() - (offset.top || 0) - (offset.bottom || 0)) || "", }; const { top, left, scaleY, scaleX } = BI.DOM.getPositionRelativeContainingBlockRect(layout.element[0]); @@ -112,12 +115,13 @@ export class LayerController extends Controller { layout.element.css(getComputedPosition()); - layout.element.on("__resize__", function () { + layout.element.on("__resize__", () => { w.is(":visible") && layout.element.css(getComputedPosition()); }); } this.add(name, widget, layout); + return widget; } @@ -127,6 +131,7 @@ export class LayerController extends Controller { } this._getLayout(name).visible(); this._getLayout(name).element.css("z-index", this.zindex++).show(0, callback).trigger("__resize__"); + return this; } @@ -136,6 +141,7 @@ export class LayerController extends Controller { } this._getLayout(name).invisible(); this._getLayout(name).element.hide(0, callback); + return this; } @@ -151,6 +157,7 @@ export class LayerController extends Controller { this.layerManager[name] = layer; this.layouts[name] = layout; layout.element.css("z-index", this.zindex++); + return this; } @@ -163,7 +170,7 @@ export class LayerController extends Controller { } has(name) { - return this.layerManager[name] != null; + return isNotNull(this.layerManager[name]); } remove(name) { @@ -174,16 +181,18 @@ export class LayerController extends Controller { this.layouts[name].destroy(); delete this.layerManager[name]; delete this.layouts[name]; + return this; } removeAll() { - BI.each(BI.keys(this.layerManager), (index, name) => { + each(keys(this.layerManager), (index, name) => { this.layerManager[name].destroy(); this.layouts[name].destroy(); }); this.layerManager = {}; this.layouts = {}; + return this; } } diff --git a/src/core/controller/controller.masker.js b/src/core/controller/controller.masker.js index 7ff0532bc..6a2fa10d6 100644 --- a/src/core/controller/controller.masker.js +++ b/src/core/controller/controller.masker.js @@ -2,9 +2,9 @@ * 遮罩面板, z-index在1亿层级 * * Created by GUY on 2015/6/24. - * @class */ import { LayerController } from "./controller.layer"; + export class MaskersController extends LayerController { init() { super.init(arguments); diff --git a/src/core/controller/controller.popover.js b/src/core/controller/controller.popover.js index dc8e6a14d..9d6bc9700 100644 --- a/src/core/controller/controller.popover.js +++ b/src/core/controller/controller.popover.js @@ -1,10 +1,12 @@ /** * guy * popover弹出层控制器, z-index在100w层级 - * @class BI.popoverController - * @extends BI.Controller */ import { Controller } from "./0.controller"; +import { isNotNull, each } from "../2.base"; +import { Widget } from "../4.widget"; +import { createWidget } from "../5.inject"; + export class PopoverController extends Controller { constructor() { super(); @@ -14,7 +16,7 @@ export class PopoverController extends Controller { props = { modal: true, // 模态窗口 - render: "body" + render: "body", } init() { @@ -30,10 +32,11 @@ export class PopoverController extends Controller { if (this.has(name)) { return this; } - const popover = BI.createWidget(options || {}, { - type: "bi.popover" + const popover = createWidget(options || {}, { + type: "bi.popover", }, context); this.add(name, popover, options, context); + return this; } @@ -52,8 +55,8 @@ export class PopoverController extends Controller { this.floatContainer[name].visible(); const popover = this.get(name); popover.show && popover.show(); - const W = BI.Widget._renderEngine.createElement(this.options.render).width(), - H = BI.Widget._renderEngine.createElement(this.options.render).height(); + const W = Widget._renderEngine.createElement(this.options.render).width(), + H = Widget._renderEngine.createElement(this.options.render).height(); const w = popover.element.width(), h = popover.element.height(); let left = (W - w) / 2, top = (H - h) / 2; if (left < 0) { @@ -64,10 +67,11 @@ export class PopoverController extends Controller { } popover.element.css({ // 这里直接用px就可以 - left: left + "px", - top: top + "px" + left: `${left}px`, + top: `${top}px`, }); } + return this; } @@ -80,6 +84,7 @@ export class PopoverController extends Controller { this.floatContainer[name].invisible(); this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]); } + return this; } @@ -100,23 +105,23 @@ export class PopoverController extends Controller { if (this.has(name)) { return this; } - this.floatContainer[name] = BI.createWidget({ + this.floatContainer[name] = createWidget({ type: "bi.absolute", cls: "bi-popup-view", items: [{ - el: (this.floatLayer[name] = BI.createWidget({ + el: (this.floatLayer[name] = createWidget({ type: "bi.absolute", - items: [popover] + items: [popover], }, context)), left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }); this.floatManager[name] = popover; popover.on(BI.Popover.EVENT_CLOSE, () => this.close(name)); - BI.createWidget({ + createWidget({ type: "bi.absolute", element: options.container || this.options.render, items: [{ @@ -124,9 +129,10 @@ export class PopoverController extends Controller { left: 0, right: 0, top: 0, - bottom: 0 - }] + bottom: 0, + }], }); + return this; } @@ -135,7 +141,7 @@ export class PopoverController extends Controller { } has(name) { - return BI.isNotNull(this.floatManager[name]); + return isNotNull(this.floatManager[name]); } remove(name) { @@ -149,11 +155,12 @@ export class PopoverController extends Controller { delete this.zindexMap[name]; delete this.floatContainer[name]; delete this.floatOpened[name]; + return this; } removeAll() { - BI.each(this.floatContainer, (name, container) => { + each(this.floatContainer, (name, container) => { container.destroy(); this.modal && this.floatContainer[name].element.__releaseZIndexMask__(this.zindexMap[name]); }); @@ -162,6 +169,7 @@ export class PopoverController extends Controller { this.floatContainer = {}; this.floatOpened = {}; this.zindexMap = {}; + return this; } diff --git a/src/core/controller/controller.resizer.js b/src/core/controller/controller.resizer.js index 5b8c400b8..e14ee1ad0 100644 --- a/src/core/controller/controller.resizer.js +++ b/src/core/controller/controller.resizer.js @@ -2,49 +2,53 @@ * window.resize 控制器 * * Created by GUY on 2015/6/24. - * @class */ import { Controller } from "./0.controller"; -export class ResizeController extends Controller { +import { isNull, each, debounce, isNotNull, isFunction } from "../2.base"; +import { Widget } from "../4.widget"; +export class ResizeController extends Controller { init() { this.resizerManger = {}; } _initResizeListener() { - this.resizeHandler = BI.debounce((ev) => this._resize(ev), 30); + this.resizeHandler = debounce(ev => this._resize(ev), 30); if ("onorientationchange" in _global) { _global.onorientationchange = this.resizeHandler; } else { - BI.Widget._renderEngine.createElement(_global).resize(this.resizeHandler); + Widget._renderEngine.createElement(_global).resize(this.resizeHandler); } } _resize(ev) { - BI.each(this.resizerManger, function (key, resizer) { + each(this.resizerManger, (key, resizer) => { if (resizer instanceof BI.$) { if (resizer.is(":visible")) { resizer.trigger("__resize__"); } + return; } if (resizer instanceof BI.Layout) { resizer.resize(); + return; } - if (BI.isFunction(resizer)) { + if (isFunction(resizer)) { resizer(ev); } }); } add(name, resizer) { - BI.isNull(this.resizeHandler) && this._initResizeListener(); + isNull(this.resizeHandler) && this._initResizeListener(); if (this.has(name)) { return this; } this.resizerManger[name] = resizer; + return () => this.remove(name); } @@ -53,7 +57,7 @@ export class ResizeController extends Controller { } has(name) { - return this.resizerManger[name] != null; + return isNotNull(this.resizerManger[name]); } remove(name) { @@ -61,6 +65,7 @@ export class ResizeController extends Controller { return this; } delete this.resizerManger[name]; + return this; } } diff --git a/src/core/controller/controller.tooltips.js b/src/core/controller/controller.tooltips.js index e084caba9..da571a504 100644 --- a/src/core/controller/controller.tooltips.js +++ b/src/core/controller/controller.tooltips.js @@ -3,10 +3,12 @@ * 控制tooltip的显示, 且页面中只有一个tooltip显示 * * Created by GUY on 2015/9/8. - * @class BI.TooltipsController - * @extends BI.Controller */ import { Controller } from "./0.controller"; +import { each, isNotNull } from "../2.base"; +import { Widget } from "../4.widget"; +import { createWidget } from "../5.inject"; + export class TooltipsController extends Controller { init() { this.tooltipsManager = {}; @@ -23,17 +25,17 @@ export class TooltipsController extends Controller { * @private */ _createTooltip(opt) { - return BI.createWidget({ + return createWidget({ type: "bi.tooltip", ...opt, - stopEvent: true + stopEvent: true, }); } // opt: {container: '', belowMouse: false} show(e, name, tooltipOpt, context, opt) { opt || (opt = {}); - BI.each(this.showingTips, (i, tip) => this.hide(i)); + each(this.showingTips, (i, tip) => this.hide(i)); this.showingTips = {}; if (!this.has(name)) { this.create(name, tooltipOpt, document.fullscreenElement ? context : (opt.container || "body")); @@ -51,7 +53,7 @@ export class TooltipsController extends Controller { const tooltip = this.get(name); tooltip.element.css({ left: "0px", - top: "0px" + top: "0px", }); tooltip.visible(); tooltip.element.height(tooltip.element[0].scrollHeight); @@ -60,10 +62,10 @@ export class TooltipsController extends Controller { // const scale = context.element.offset().left / context.element.get(0).getBoundingClientRect().left; // const x = (e.pageX || e.clientX) * scale + 15, y = (e.pageY || e.clientY) * scale + 15; let x = (e.pageX || e.clientX) + 15, y = (e.pageY || e.clientY) + 15; - if (x + tooltip.element.outerWidth() > BI.Widget._renderEngine.createElement("body").outerWidth()) { + if (x + tooltip.element.outerWidth() > Widget._renderEngine.createElement("body").outerWidth()) { x -= tooltip.element.outerWidth() + 15; } - const bodyHeight = BI.Widget._renderEngine.createElement("body").outerHeight(); + const bodyHeight = Widget._renderEngine.createElement("body").outerHeight(); if (y + tooltip.element.outerHeight() > bodyHeight || top + tooltip.element.outerHeight() > bodyHeight) { y -= tooltip.element.outerHeight() + 15; !opt.belowMouse && (y = Math.min(y, offset.top - tooltip.element.outerHeight() - 5)); @@ -72,13 +74,14 @@ export class TooltipsController extends Controller { } tooltip.element.css({ // 这里直接用px就可以 - left: x < 0 ? 0 : x + "px", - top: y < 0 ? 0 : y + "px" + left: x < 0 ? 0 : `${x}px`, + top: y < 0 ? 0 : `${y}px`, }); tooltip.element.hover(() => { this.remove(name); - context.element.trigger("mouseleave.title" + context.getName()); + context.element.trigger(`mouseleave.title${context.getName()}`); }); + return this; } @@ -89,6 +92,7 @@ export class TooltipsController extends Controller { delete this.showingTips[name]; this.get(name).element.hide(0, callback); this.get(name).invisible(); + return this; } @@ -96,15 +100,16 @@ export class TooltipsController extends Controller { if (!this.has(name)) { const tooltip = this._createTooltip(tooltipOpt); this.add(name, tooltip); - BI.createWidget({ + createWidget({ type: "bi.absolute", element: context || "body", items: [{ - el: tooltip - }] + el: tooltip, + }], }); tooltip.invisible(); } + return this.get(name); } @@ -113,6 +118,7 @@ export class TooltipsController extends Controller { return this; } this.set(name, bubble); + return this; } @@ -125,7 +131,7 @@ export class TooltipsController extends Controller { } has(name) { - return this.tooltipsManager[name] != null; + return isNotNull(this.tooltipsManager[name]); } remove(name) { @@ -134,15 +140,17 @@ export class TooltipsController extends Controller { } this.tooltipsManager[name].destroy(); delete this.tooltipsManager[name]; + return this; } removeAll() { - BI.each(this.tooltipsManager, function (name, tooltip) { + each(this.tooltipsManager, (name, tooltip) => { tooltip.destroy(); }); this.tooltipsManager = {}; this.showingTips = {}; + return this; } } diff --git a/src/core/controller/index.js b/src/core/controller/index.js index 91701e15f..c025e0daa 100644 --- a/src/core/controller/index.js +++ b/src/core/controller/index.js @@ -6,4 +6,4 @@ export { LayerController } from "./controller.layer"; export { MaskersController } from "./controller.masker"; export { PopoverController } from "./controller.popover"; export { ResizeController } from "./controller.resizer"; -export { TooltipsController } from "./controller.tooltips"; \ No newline at end of file +export { TooltipsController } from "./controller.tooltips"; diff --git a/src/core/element/element.js b/src/core/element/element.js index 7bf1c9d4a..9b08c0762 100644 --- a/src/core/element/element.js +++ b/src/core/element/element.js @@ -1,74 +1,76 @@ -import { registFunction } from './plugins'; +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 (BI.isWidget(widget)) { - this.widget = widget; - this.nodeName = widget.options.tagName; - this.textBaseLine = widget.options.textBaseLine; - } else if (BI.isString(widget)) { - this.nodeName = widget; - } + 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); function initElement(element) { - element.prototype = { - appendChild(child) { - child.parent = this; - if (this.children.push(child) !== 1) { - var 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) { - var sibling = this.children[this.children.length - 2]; - sibling.next = child; - child.prev = sibling; - child.next = null; - } - }, - getParent() { - return this.parent; - }, - getSiblings() { - var parent = this.getParent(); - return parent ? parent.getChildren() : [this]; - }, - getChildren() { - return this.children; - }, + 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; + }, - getBounds() { - return {}; - }, + getBounds() { + return {}; + }, - width() { + width() { - }, - height() { + }, + height() { - } - }; + }, + }; } diff --git a/src/core/element/index.js b/src/core/element/index.js index bbc4eb926..070afb0f3 100644 --- a/src/core/element/index.js +++ b/src/core/element/index.js @@ -1,16 +1,17 @@ -import { Element } from './element'; +import { Element } from "./element"; +import { isString, isWidget } from "../2.base"; BI.Element = Element; BI.Element.renderEngine = { - createElement: (widget) => { - // eslint-disable-next-line no-undef - if (BI.isWidget(widget)) { - var o = widget.options; + createElement: widget => { + if (isWidget(widget)) { + const o = widget.options; if (o.element instanceof Element) { return o.element; } - if (typeof o.element === 'string' && o.element !== 'body') { + if (typeof o.element === "string" && o.element !== "body") { o.root = false; + return new Element(widget); } @@ -18,14 +19,14 @@ BI.Element.renderEngine = { return new Element(); } } - // eslint-disable-next-line no-undef - if (BI.isString(widget)) { + if (isString(widget)) { return new Element(widget); } + return new Element(widget); }, createFragment() { return new Element(); - } -} + }, +}; diff --git a/src/core/element/plugins/attr.js b/src/core/element/plugins/attr.js index 3ae918f29..a680955c7 100644 --- a/src/core/element/plugins/attr.js +++ b/src/core/element/plugins/attr.js @@ -1,22 +1,25 @@ -export const registAttrFun = (Element) => { - Element.registerFunction('attr', function (key, value) { - var self = this; - if (BI.isObject(key)) { - BI.each(key, (k, v) => { - self.attr(k, v); - }); - return this; - } - if (BI.isNull(value)) { - return this.attribs[key]; - } - this.attribs[key] = value; - return this; - }); - Element.registerFunction('hasAttrib', function (key) { - return this.attribs[key] != null; - }); - Element.registerFunction('removeAttr', function (key) { - delete this.attribs[key]; - }); +import { isObject, each, isNull, isNotNull } from "../../2.base"; + +export const registAttrFun = Element => { + Element.registerFunction("attr", function (key, value) { + if (isObject(key)) { + each(key, (k, v) => { + this.attr(k, v); + }); + + return this; + } + if (isNull(value)) { + return this.attribs[key]; + } + this.attribs[key] = value; + + return this; + }); + Element.registerFunction("hasAttrib", function (key) { + return isNotNull(this.attribs[key]); + }); + Element.registerFunction("removeAttr", function (key) { + delete this.attribs[key]; + }); }; diff --git a/src/core/element/plugins/class.js b/src/core/element/plugins/class.js index ce46e6864..1c4c8eaba 100644 --- a/src/core/element/plugins/class.js +++ b/src/core/element/plugins/class.js @@ -1,23 +1,23 @@ -export const registClassFun = (Element) => { - Element.registerFunction('addClass', function (classList) { - var self = this; - BI.each(classList.split(' '), (i, cls) => { - if (cls && !self.classMap[cls]) { - self.classList.push(cls); - } - cls && (self.classMap[cls] = true); +export const registClassFun = Element => { + Element.registerFunction("addClass", function (classList) { + BI.each(classList.split(" "), (i, cls) => { + if (cls && !this.classMap[cls]) { + this.classList.push(cls); + } + cls && (this.classMap[cls] = true); + }); + + return this; }); - return this; - }); - Element.registerFunction('removeClass', function (classList) { - var self = this; - BI.each(classList.split(' '), (i, cls) => { - if (cls && self.classMap[cls]) { - delete self.classMap[cls]; - self.classList.splice(self.classList.indexOf(cls), 1); - } + Element.registerFunction("removeClass", function (classList) { + BI.each(classList.split(" "), (i, cls) => { + if (cls && this.classMap[cls]) { + delete this.classMap[cls]; + this.classList.splice(this.classList.indexOf(cls), 1); + } + }); + + return this; }); - return this; - }); }; diff --git a/src/core/element/plugins/css.js b/src/core/element/plugins/css.js index e1826a155..f5372da0e 100644 --- a/src/core/element/plugins/css.js +++ b/src/core/element/plugins/css.js @@ -1,22 +1,26 @@ -export const registCssFun = (Element) => { - Element.registerFunction('css', function (key, value) { - var self = this; - if (BI.isObject(key)) { - BI.each(key, (k, v) => { - self.css(k, v); - }); - return this; - } - key = BI.trim(BI.camelize(key)); - return css(this, key, value); - }); +import { isNull, isObject, each, trim, camelize } from "../../2.base"; + +export const registCssFun = Element => { + Element.registerFunction("css", function (key, value) { + if (isObject(key)) { + each(key, (k, v) => { + this.css(k, v); + }); + + return this; + } + key = trim(camelize(key)); + + return css(this, key, value); + }); }; const css = (elem, key, value) => { - key = BI.trim(BI.camelize(key)); - if (BI.isNull(value)) { - return elem.styles[key]; - } - elem.styles[key] = value; - return elem; + key = trim(camelize(key)); + if (isNull(value)) { + return elem.styles[key]; + } + elem.styles[key] = value; + + return elem; }; diff --git a/src/core/element/plugins/data.js b/src/core/element/plugins/data.js index e141c96c3..0e7cbb2d5 100644 --- a/src/core/element/plugins/data.js +++ b/src/core/element/plugins/data.js @@ -1,12 +1,15 @@ -export const registDataFun = (Element) => { - Element.registerFunction('data', function (key, value) { - if (!this._data) { - this._data = {}; - } - if (BI.isNull(value)) { - return this._data[key]; - } - this._data[key] = value; - return this; - }); +import { isNull } from "../../2.base"; + +export const registDataFun = Element => { + Element.registerFunction("data", function (key, value) { + if (!this._data) { + this._data = {}; + } + if (isNull(value)) { + return this._data[key]; + } + this._data[key] = value; + + return this; + }); }; diff --git a/src/core/element/plugins/empty.js b/src/core/element/plugins/empty.js index dbe5e0c1d..3cfe0177c 100644 --- a/src/core/element/plugins/empty.js +++ b/src/core/element/plugins/empty.js @@ -1,9 +1,10 @@ -export const registEmptyFun = (Element) => { - Element.registerFunction('empty', function (text) { - this.children = []; - return this; - }); - Element.registerFunction('destroy', function (text) { - return this; - }); +export const registEmptyFun = Element => { + Element.registerFunction("empty", function (text) { + this.children = []; + + return this; + }); + Element.registerFunction("destroy", function (text) { + return this; + }); }; diff --git a/src/core/element/plugins/event.js b/src/core/element/plugins/event.js index 38004ed88..66d89de97 100644 --- a/src/core/element/plugins/event.js +++ b/src/core/element/plugins/event.js @@ -1,32 +1,33 @@ -var returnThis = function () { - return this; -}; -export const registEventFun = (Element) => { - [ - 'mousedown', - 'mouseup', - 'mousewheel', - 'keydown', - 'keyup', - 'focus', - 'focusin', - 'focusout', - 'click', - 'on', - 'off', - 'bind', - 'unbind', - 'trigger', - 'hover', - 'scroll', - 'scrollLeft', - 'scrollTop', - 'resize', - 'show', - 'hide', - 'dblclick', - 'blur', - ].forEach((event) => { - Element.registerFunction(event, returnThis); - }); +function returnThis () { + return this; +} + +export const registEventFun = Element => { + [ + "mousedown", + "mouseup", + "mousewheel", + "keydown", + "keyup", + "focus", + "focusin", + "focusout", + "click", + "on", + "off", + "bind", + "unbind", + "trigger", + "hover", + "scroll", + "scrollLeft", + "scrollTop", + "resize", + "show", + "hide", + "dblclick", + "blur" + ].forEach(event => { + Element.registerFunction(event, returnThis); + }); }; diff --git a/src/core/element/plugins/html.js b/src/core/element/plugins/html.js index b115f9388..18cf233d6 100644 --- a/src/core/element/plugins/html.js +++ b/src/core/element/plugins/html.js @@ -1,15 +1,19 @@ -export const registHtmlFun = (Element) => { - Element.registerFunction('html', function (text) { - if (text && text.charAt(0) === '<') { - BI.createWidget({ - type: 'bi.html', - element: this.widget, - html: text, - }); - this.originalHtml = text; - } else { - this.text = BI.htmlDecode(text); - } - return this; - }); +import { createWidget } from "../../5.inject"; +import { htmlDecode } from "../../func"; + +export const registHtmlFun = Element => { + Element.registerFunction("html", function (text) { + if (text && text.charAt(0) === "<") { + createWidget({ + type: "bi.html", + element: this.widget, + html: text, + }); + this.originalHtml = text; + } else { + this.text = htmlDecode(text); + } + + return this; + }); }; diff --git a/src/core/element/plugins/index.js b/src/core/element/plugins/index.js index c32aab4dc..79e2f692c 100644 --- a/src/core/element/plugins/index.js +++ b/src/core/element/plugins/index.js @@ -1,31 +1,31 @@ -import { registAttrFun } from './attr'; -import { registClassFun } from './class'; -import { registCssFun } from './css'; -import { registDataFun } from './data'; -import { registEmptyFun } from './empty'; -import { registEventFun } from './event'; -import { registHtmlFun } from './html'; -import { registKeywordMarkFun } from './keywordMark'; -import { registRenderToHtmlFun } from './renderToHtml'; -import { registRenderToStringFun } from './renderToString'; -import { registTextFun } from './text'; -import { registValFun } from './val'; +import { registAttrFun } from "./attr"; +import { registClassFun } from "./class"; +import { registCssFun } from "./css"; +import { registDataFun } from "./data"; +import { registEmptyFun } from "./empty"; +import { registEventFun } from "./event"; +import { registHtmlFun } from "./html"; +import { registKeywordMarkFun } from "./keywordMark"; +import { registRenderToHtmlFun } from "./renderToHtml"; +import { registRenderToStringFun } from "./renderToString"; +import { registTextFun } from "./text"; +import { registValFun } from "./val"; -export const registFunction = (Element) => { - var functionMap = {}; - Element.registerFunction = (key, fn) => { - Element.prototype[key] = functionMap[key] = fn; - }; - registAttrFun(Element); - registClassFun(Element); - registCssFun(Element); - registDataFun(Element); - registEmptyFun(Element); - registEventFun(Element); - registHtmlFun(Element); - registKeywordMarkFun(Element); - registRenderToStringFun(Element); - registRenderToHtmlFun(Element); - registTextFun(Element); - registValFun(Element); +export const registFunction = Element => { + const functionMap = {}; + Element.registerFunction = (key, fn) => { + Element.prototype[key] = functionMap[key] = fn; + }; + registAttrFun(Element); + registClassFun(Element); + registCssFun(Element); + registDataFun(Element); + registEmptyFun(Element); + registEventFun(Element); + registHtmlFun(Element); + registKeywordMarkFun(Element); + registRenderToStringFun(Element); + registRenderToHtmlFun(Element); + registTextFun(Element); + registValFun(Element); }; diff --git a/src/core/element/plugins/keywordMark.js b/src/core/element/plugins/keywordMark.js index a7eab83dd..f0fcca96e 100644 --- a/src/core/element/plugins/keywordMark.js +++ b/src/core/element/plugins/keywordMark.js @@ -1,6 +1,7 @@ -export const registKeywordMarkFun = (Element) => { - Element.registerFunction('__textKeywordMarked__', function (text) { - this[0].textContent = text; - return this; - }); +export const registKeywordMarkFun = Element => { + Element.registerFunction("__textKeywordMarked__", function (text) { + this[0].textContent = text; + + return this; + }); }; diff --git a/src/core/element/plugins/renderToHtml.js b/src/core/element/plugins/renderToHtml.js index 525afe062..a9db9f755 100644 --- a/src/core/element/plugins/renderToHtml.js +++ b/src/core/element/plugins/renderToHtml.js @@ -1,65 +1,69 @@ -var skipArray = []; -var pxStyle = ['font-size', 'width', 'height']; -var _renderToHtml = function (root) { - var str = ''; - if (BI.isNull(root.originalHtml)) { - if (root.tag !== 'body') { - str += `<${root.tag}`; - if (root.classList.length > 0) { - str += ' class="'; - BI.each(root.classList, (i, cls) => { - str += ` ${cls}`; - }); - str += '"'; - } - str += ' style="'; - BI.each(root.originalStyles, (key, stl) => { - if ( - skipArray.contains(key) || - (key == 'height' && root.classList.contains('bi-design-components-data-data-table-cell')) - ) { - return; - } - key = BI.hyphenate(key); - if (key === 'font-family') { - stl = stl.replace(/\"/g, ''); - } - if (pxStyle.contains(key) && BI.isNumeric(stl)) { - stl += 'px'; - } - if (BI.isKey(stl)) { - str += ` ${key}:${stl};`; +import { each, isNull, hyphenate, isNumeric, isKey } from "../../2.base"; + +const skipArray = []; +const pxStyle = ["font-size", "width", "height"]; +function _renderToHtml(root) { + let str = ""; + if (isNull(root.originalHtml)) { + if (root.tag !== "body") { + str += `<${root.tag}`; + if (root.classList.length > 0) { + str += " class=\""; + each(root.classList, (i, cls) => { + str += ` ${cls}`; + }); + str += "\""; + } + str += " style=\""; + each(root.originalStyles, (key, stl) => { + if ( + skipArray.contains(key) || + (key === "height" && root.classList.contains("bi-design-components-data-data-table-cell")) + ) { + return; + } + key = hyphenate(key); + if (key === "font-family") { + stl = stl.replace(/"/g, ""); + } + if (pxStyle.contains(key) && isNumeric(stl)) { + stl += "px"; + } + if (isKey(stl)) { + str += ` ${key}:${stl};`; + } + }); + str += "\""; + each(root.attribs, (key, attr) => { + if (isKey(attr)) { + str += ` ${key}=${attr}`; + } + }); + if (root.textContent) { + str += ` title=${root.textContent}`; + } + str += ">"; } - }); - str += '"'; - BI.each(root.attribs, (key, attr) => { - if (BI.isKey(attr)) { - str += ` ${key}=${attr}`; + // 特殊处理,spread_table的行列元素是不取配置里的高度的,使用stretch拉伸的(leaves取了高度),但是功能代码里给单元格默认高度了,导致拉伸不了 + // 而spread_grid_table的行列元素是取配置里的高度的,拉不拉伸都一样 + each(root.children, (i, child) => { + str += _renderToHtml(child); + }); + } else { + str += root.originalHtml; + } + if (root.tag !== "body") { + if (root.textContent) { + str += root.textContent; } - }); - if (root.textContent) { - str += ` title=${root.textContent}`; - } - str += '>'; + str += ``; } - // 特殊处理,spread_table的行列元素是不取配置里的高度的,使用stretch拉伸的(leaves取了高度),但是功能代码里给单元格默认高度了,导致拉伸不了 - // 而spread_grid_table的行列元素是取配置里的高度的,拉不拉伸都一样 - BI.each(root.children, (i, child) => { - str += _renderToHtml(child); + + return str; +} + +export const registRenderToHtmlFun = Element => { + Element.registerFunction("renderToHtml", function () { + return _renderToHtml(this); }); - } else { - str += root.originalHtml; - } - if (root.tag !== 'body') { - if (root.textContent) { - str += root.textContent; - } - str += ``; - } - return str; -}; -export const registRenderToHtmlFun = (Element) => { - Element.registerFunction('renderToHtml', function () { - return _renderToHtml(this); - }); }; diff --git a/src/core/element/plugins/renderToString.js b/src/core/element/plugins/renderToString.js index f0073f258..6ab9734dd 100644 --- a/src/core/element/plugins/renderToString.js +++ b/src/core/element/plugins/renderToString.js @@ -1,50 +1,54 @@ -var skipArray = ['width', 'height']; -var _renderToString = function (root) { - var str = ''; - if (root.nodeName !== 'body') { - str += `<${root.nodeName}`; - if (root.classList.length > 0) { - str += ' class="'; - BI.each(root.classList, (i, cls) => { - str += ` ${cls}`; - }); - str += '"'; +import { each, hyphenate } from "../../2.base"; + +const skipArray = ["width", "height"]; +function _renderToString(root) { + let str = ""; + if (root.nodeName !== "body") { + str += `<${root.nodeName}`; + if (root.classList.length > 0) { + str += " class=\""; + each(root.classList, (i, cls) => { + str += ` ${cls}`; + }); + str += "\""; + } + str += " style=\""; + each(root.styles, (key, stl) => { + if (skipArray.includes(key)) { + return; + } + key = hyphenate(key); + str += ` ${key}:${stl};`; + }); + str += ` width:${root.width}px;`; + str += ` height:${root.height}px;`; + str += " position: fixed;"; + str += ` left: ${root.position.x}px;`; + str += ` top: ${root.position.y}px;`; + str += "\""; + each(root.attribs, (key, attr) => { + str += ` ${key}:${attr}`; + }); + str += ">"; } - str += ' style="'; - BI.each(root.styles, (key, stl) => { - if (skipArray.includes(key)) { - return; - } - key = BI.hyphenate(key); - str += ` ${key}:${stl};`; + each(root.children, (i, child) => { + str += _renderToString(child); }); - str += ` width:${root.width}px;`; - str += ` height:${root.height}px;`; - str += ' position: fixed;'; - str += ` left: ${root.position.x}px;`; - str += ` top: ${root.position.y}px;`; - str += '"'; - BI.each(root.attribs, (key, attr) => { - str += ` ${key}:${attr}`; - }); - str += '>'; - } - BI.each(root.children, (i, child) => { - str += _renderToString(child); - }); - // if (root.htmlContent) { - // str += root.htmlContent; - // } - if (root.nodeName !== 'body') { - if (root.text) { - str += root.text; + // if (root.htmlContent) { + // str += root.htmlContent; + // } + if (root.nodeName !== "body") { + if (root.text) { + str += root.text; + } + str += ``; } - str += ``; - } - return str; -}; -export const registRenderToStringFun = (Element) => { - Element.registerFunction('renderToString', function () { - return _renderToString(this); - }); + + return str; +} + +export const registRenderToStringFun = Element => { + Element.registerFunction("renderToString", function () { + return _renderToString(this); + }); }; diff --git a/src/core/element/plugins/text.js b/src/core/element/plugins/text.js index 555195251..8e51fd178 100644 --- a/src/core/element/plugins/text.js +++ b/src/core/element/plugins/text.js @@ -1,10 +1,12 @@ -export const registTextFun = (Element) => { - Element.registerFunction('setText', function (text) { - this.text = text; - return this; - }); - Element.registerFunction('setValue', function (text) { - this.text = text; - return this; - }); +export const registTextFun = Element => { + Element.registerFunction("setText", function (text) { + this.text = text; + + return this; + }); + Element.registerFunction("setValue", function (text) { + this.text = text; + + return this; + }); }; diff --git a/src/core/element/plugins/val.js b/src/core/element/plugins/val.js index f4b868918..e1e515c19 100644 --- a/src/core/element/plugins/val.js +++ b/src/core/element/plugins/val.js @@ -1,9 +1,11 @@ -export const registValFun = (Element) => { - Element.registerFunction('val', function (value) { - if (BI.isNotNull(value)) { - this.text = `${value}`; - return this; - } - return this.text; - }); +export const registValFun = Element => { + Element.registerFunction("val", function (value) { + if (BI.isNotNull(value)) { + this.text = `${value}`; + + return this; + } + + return this.text; + }); }; diff --git a/src/core/index.js b/src/core/index.js index 37c581af2..a492a0d96 100644 --- a/src/core/index.js +++ b/src/core/index.js @@ -12,6 +12,8 @@ import * as structure from "./structure"; import { StyleLoaderManager } from "./loader/loader.style"; import { ShowListener } from "./listener/listener.show"; import { useInWorker } from "./worker"; +import * as constant from "./constant"; +import * as logic from "./logic"; export * from "./decorator"; export * from "./2.base"; @@ -24,9 +26,8 @@ export * from "./controller"; export * from "./func"; export * from "./structure"; export * from "./h"; - -// 有了后删掉 -export const emptyFn = () => { }; +export * from "./constant"; +export * from "./logic"; export { StyleLoaderManager, @@ -42,12 +43,14 @@ Object.assign(BI, { ...inject, Plugin, ...behavior, + ...constant, component: inject.shortcut, ...action, ...controllers, ...func, StyleLoaderManager, ShowListener, + ...logic, ...structure, useInWorker, ...h, diff --git a/src/core/listener/listener.show.js b/src/core/listener/listener.show.js index 25ddc7ea2..f761b9d91 100644 --- a/src/core/listener/listener.show.js +++ b/src/core/listener/listener.show.js @@ -1,14 +1,12 @@ /** * guy * 检测某个Widget的EventChange事件然后去show某个card - * @type {*|void|Object} - * @class BI.ShowListener - * @extends BI.OB */ import { OB } from "../3.ob"; -import { isArray, isNull, nextTick, } from "../2.base"; +import { isArray, isNull, nextTick } from "../2.base"; import { createWidget } from "../5.inject"; import { Controller } from "../controller/0.controller"; +import { Events, emptyFn } from "../constant"; export class ShowListener extends OB { static EVENT_CHANGE = "EVENT_CHANGE"; @@ -17,12 +15,10 @@ export class ShowListener extends OB { return { eventObj: createWidget(), cardLayout: null, - cardNameCreator: (v) => { - return v; - }, - cardCreator: BI.emptyFn, - afterCardCreated: BI.emptyFn, - afterCardShow: BI.emptyFn + cardNameCreator: v => v, + cardCreator: emptyFn, + afterCardCreated: emptyFn, + afterCardShow: emptyFn, }; } @@ -30,13 +26,13 @@ export class ShowListener extends OB { const { eventObj, cardLayout, afterCardCreated, cardNameCreator, cardCreator, afterCardShow } = this.options; if (eventObj) { eventObj.on(Controller.EVENT_CHANGE, (type, v, ob) => { - if (type === BI.Events.CLICK) { + if (type === Events.CLICK) { v = v || eventObj.getValue(); v = isArray(v) ? (v.length > 1 ? v.toString() : v[0]) : v; if (isNull(v)) { throw new Error("不能为null"); } - var cardName = cardNameCreator(v); + const cardName = cardNameCreator(v); if (!cardLayout.isCardExisted(cardName)) { const card = cardCreator(cardName); cardLayout.addCardByName(cardName, card); diff --git a/src/core/loader/loader.style.js b/src/core/loader/loader.style.js index 1c65a2ede..f89aea175 100644 --- a/src/core/loader/loader.style.js +++ b/src/core/loader/loader.style.js @@ -2,13 +2,13 @@ * style加载管理器 * * Created by GUY on 2015/9/7. - * @class */ +import { extend, isNotNull } from "../2.base"; import { OB } from "../3.ob"; export class StyleLoaderManager extends OB { _defaultConfig() { - return BI.extend(super._defaultConfig(arguments), {}); + return extend(super._defaultConfig(arguments), {}); } _init() { @@ -17,7 +17,7 @@ export class StyleLoaderManager extends OB { } loadStyle(name, styleString) { - if(!_global.document) { + if (!_global.document) { return; } const d = document, styles = d.createElement("style"); @@ -38,7 +38,7 @@ export class StyleLoaderManager extends OB { } has(name) { - return this.stylesManager[name] != null; + return isNotNull(this.stylesManager[name]); } removeStyle(name) { @@ -47,6 +47,7 @@ export class StyleLoaderManager extends OB { } this.stylesManager[name].parentNode.removeChild(this.stylesManager[name]); delete this.stylesManager[name]; + return this; } } diff --git a/src/core/logic/index.js b/src/core/logic/index.js new file mode 100644 index 000000000..0397ce345 --- /dev/null +++ b/src/core/logic/index.js @@ -0,0 +1,83 @@ +import { Logic } from "./logic"; +import { VerticalLayoutLogic, HorizontalLayoutLogic, TableLayoutLogic, HorizontalFillLayoutLogic } from "./logic.layout"; + +export const LogicFactory = { + Type: { + Vertical: "vertical", + Horizontal: "horizontal", + Table: "table", + HorizontalFill: "horizontal_fill", + }, + createLogic (key, options) { + let LogicCls; + switch (key) { + case LogicFactory.Type.Vertical: + LogicCls = VerticalLayoutLogic; + break; + case LogicFactory.Type.Horizontal: + LogicCls = HorizontalLayoutLogic; + break; + case LogicFactory.Type.Table: + LogicCls = TableLayoutLogic; + break; + case LogicFactory.Type.HorizontalFill: + LogicCls = HorizontalFillLayoutLogic; + break; + default: + LogicCls = Logic; + break; + } + + return new LogicCls(options).createLogic(); + }, + + createLogicTypeByDirection (direction) { + switch (direction) { + case BI.Direction.Top: + case BI.Direction.Bottom: + case BI.Direction.Custom: + return BI.LogicFactory.Type.Vertical; + case BI.Direction.Left: + case BI.Direction.Right: + return BI.LogicFactory.Type.Horizontal; + default: + } + }, + + createLogicItemsByDirection (direction) { + let items = Array.prototype.slice.call(arguments, 1); + items = BI.map(items, (i, item) => { + if (BI.isWidget(item)) { + return { + el: item, + width: item.options.width, + height: item.options.height, + }; + } + + return item; + }); + switch (direction) { + case BI.Direction.Bottom: + items.reverse(); + break; + case BI.Direction.Right: + items.reverse(); + break; + case BI.Direction.Custom: + items = items.slice(1); + break; + default: + } + + return items; + }, +}; + +export { + Logic, + VerticalLayoutLogic, + HorizontalLayoutLogic, + TableLayoutLogic, + HorizontalFillLayoutLogic +}; diff --git a/src/core/logic/logic.js b/src/core/logic/logic.js index fab052e19..fd7223510 100644 --- a/src/core/logic/logic.js +++ b/src/core/logic/logic.js @@ -1,80 +1,8 @@ -/** - * @class BI.Logic - * @extends BI.OB - */ -BI.Logic = BI.inherit(BI.OB, { - createLogic: function () { - return this.options || {}; - } -}); -BI.LogicFactory = { - Type: { - Vertical: "vertical", - Horizontal: "horizontal", - Table: "table", - HorizontalFill: "horizontal_fill" - }, - createLogic: function (key, options) { - var logic; - switch (key) { - case BI.LogicFactory.Type.Vertical: - logic = BI.VerticalLayoutLogic; - break; - case BI.LogicFactory.Type.Horizontal: - logic = BI.HorizontalLayoutLogic; - break; - case BI.LogicFactory.Type.Table: - logic = BI.TableLayoutLogic; - break; - case BI.LogicFactory.Type.HorizontalFill: - logic = BI.HorizontalFillLayoutLogic; - break; - default: - logic = BI.Logic; - break; - } - return new logic(options).createLogic(); - }, +import { OB } from "../3.ob"; - createLogicTypeByDirection: function (direction) { - switch (direction) { - case BI.Direction.Top: - case BI.Direction.Bottom: - case BI.Direction.Custom: - return BI.LogicFactory.Type.Vertical; - case BI.Direction.Left: - case BI.Direction.Right: - return BI.LogicFactory.Type.Horizontal; - } - }, - - createLogicItemsByDirection: function (direction) { - var layout; - var items = Array.prototype.slice.call(arguments, 1); - items = BI.map(items, function (i, item) { - if (BI.isWidget(item)) { - return { - el: item, - width: item.options.width, - height: item.options.height - }; - } - return item; - }); - switch (direction) { - case BI.Direction.Bottom: - layout = BI.LogicFactory.Type.Vertical; - items.reverse(); - break; - case BI.Direction.Right: - layout = BI.LogicFactory.Type.Horizontal; - items.reverse(); - break; - case BI.Direction.Custom: - items = items.slice(1); - break; - } - return items; +export class Logic extends OB { + createLogic() { + return this.options || {}; } -}; +} diff --git a/src/core/logic/logic.layout.js b/src/core/logic/logic.layout.js index babd2306c..1251c6aee 100644 --- a/src/core/logic/logic.layout.js +++ b/src/core/logic/logic.layout.js @@ -1,13 +1,13 @@ +import { Logic } from "./logic"; +import { isNotNull, each, pickBy } from "../2.base"; + /** * guy * 上下布局逻辑 * 上下布局的时候要考虑到是动态布局还是静态布局 - * - * @class BI.VerticalLayoutLogic - * @extends BI.Logic */ -BI.VerticalLayoutLogic = BI.inherit(BI.Logic, { - props: function () { +export class VerticalLayoutLogic extends Logic { + props() { return { dynamic: false, scrollable: null, @@ -21,18 +21,20 @@ BI.VerticalLayoutLogic = BI.inherit(BI.Logic, { tgap: 0, bgap: 0, innerVgap: 0, - innerHgap: 0 + innerHgap: 0, }; - }, + } - createLogic: function () { - var layout, o = this.options; + createLogic() { + let layout; + const o = this.options; if (o.dynamic) { layout = "bi.vertical"; } else { layout = "bi.vtape"; } - return BI._.pickBy({ + + return pickBy({ type: layout, scrollable: o.scrollable, scrolly: o.scrolly, @@ -49,22 +51,19 @@ BI.VerticalLayoutLogic = BI.inherit(BI.Logic, { horizontalAlign: o.horizontalAlign, verticalAlign: o.verticalAlign, columnSize: o.columnSize, - rowSize: o.rowSize - }, BI.isNotNull); + rowSize: o.rowSize, + }, isNotNull); } -}); +} /** * guy * 左右布局逻辑 * 左右布局的时候要考虑到是动态布局还是静态布局 - * - * @class BI.HorizontalLayoutLogic - * @extends BI.Logic */ -BI.HorizontalLayoutLogic = BI.inherit(BI.Logic, { - props: function () { +export class HorizontalLayoutLogic extends Logic { + props() { return { dynamic: false, scrollable: null, @@ -78,18 +77,20 @@ BI.HorizontalLayoutLogic = BI.inherit(BI.Logic, { tgap: 0, bgap: 0, innerVgap: 0, - innerHgap: 0 + innerHgap: 0, }; - }, + } - createLogic: function () { - var layout, o = this.options; + createLogic() { + let layout; + const o = this.options; if (o.dynamic) { layout = "bi.vertical_adapt"; } else { layout = "bi.htape"; } - return BI._.pickBy({ + + return pickBy({ type: layout, scrollable: o.scrollable, scrolly: o.scrolly, @@ -106,21 +107,18 @@ BI.HorizontalLayoutLogic = BI.inherit(BI.Logic, { horizontalAlign: o.horizontalAlign, verticalAlign: o.verticalAlign, columnSize: o.columnSize, - rowSize: o.rowSize - }, BI.isNotNull); + rowSize: o.rowSize, + }, isNotNull); } -}); +} /** * guy * 表格布局逻辑 * 表格布局的时候要考虑到是动态布局还是静态布局 - * - * @class BI.TableLayoutLogic - * @extends BI.OB */ -BI.TableLayoutLogic = BI.inherit(BI.Logic, { - props: function () { +export class TableLayoutLogic extends Logic { + props() { return { dynamic: false, scrollable: null, @@ -132,18 +130,20 @@ BI.TableLayoutLogic = BI.inherit(BI.Logic, { rowSize: [], hgap: 0, vgap: 0, - items: [] + items: [], }; - }, + } - createLogic: function () { - var layout, o = this.options; + createLogic() { + let layout; + const o = this.options; if (o.dynamic) { layout = "bi.table"; } else { layout = "bi.window"; } - return BI._.pickBy({ + + return pickBy({ type: layout, scrollable: o.scrollable, scrolly: o.scrolly, @@ -156,20 +156,17 @@ BI.TableLayoutLogic = BI.inherit(BI.Logic, { horizontalAlign: o.horizontalAlign, verticalAlign: o.verticalAlign, columnSize: o.columnSize, - rowSize: o.rowSize - }, BI.isNotNull); + rowSize: o.rowSize, + }, isNotNull); } -}); +} /** * guy * 左右充满布局逻辑 - * - * @class BI.HorizontalFillLayoutLogic - * @extends BI.Logic */ -BI.HorizontalFillLayoutLogic = BI.inherit(BI.Logic, { - props: function () { +export class HorizontalFillLayoutLogic extends Logic { + props() { return { dynamic: false, scrollable: null, @@ -183,14 +180,15 @@ BI.HorizontalFillLayoutLogic = BI.inherit(BI.Logic, { tgap: 0, bgap: 0, innerVgap: 0, - innerHgap: 0 + innerHgap: 0, }; - }, + } - createLogic: function () { - var layout, o = this.options; - var columnSize = []; - BI.each(o.items, function (i, item) { + createLogic() { + let layout; + const o = this.options; + const columnSize = []; + each(o.items, (i, item) => { columnSize.push(item.width || 0); }); if (o.dynamic) { @@ -198,7 +196,8 @@ BI.HorizontalFillLayoutLogic = BI.inherit(BI.Logic, { } else { layout = "bi.htape"; } - return BI._.pickBy({ + + return pickBy({ type: layout, scrollable: o.scrollable, scrolly: o.scrolly, @@ -214,8 +213,8 @@ BI.HorizontalFillLayoutLogic = BI.inherit(BI.Logic, { items: o.items, horizontalAlign: o.horizontalAlign, verticalAlign: o.verticalAlign, - columnSize: columnSize, - rowSize: o.rowSize - }, BI.isNotNull); + columnSize, + rowSize: o.rowSize, + }, isNotNull); } -}); +}