From f2ff83f01ce8d7a3ea2fc87331dabe4c740967c6 Mon Sep 17 00:00:00 2001 From: iapyang Date: Wed, 10 Jul 2019 16:09:13 +0800 Subject: [PATCH] =?UTF-8?q?KERNEL-827=20feat:=20widget=E7=B1=BB?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- typescript/core/func/date.ts | 3 +- typescript/core/func/index.ts | 5 +- typescript/core/i18n.ts | 4 +- typescript/core/widget.ts | 389 ++++++++++++++++++++++++++++++++++ typescript/index.ts | 4 +- 5 files changed, 397 insertions(+), 8 deletions(-) create mode 100644 typescript/core/widget.ts diff --git a/typescript/core/func/date.ts b/typescript/core/func/date.ts index 3efd887ba..30e1a5081 100644 --- a/typescript/core/func/date.ts +++ b/typescript/core/func/date.ts @@ -88,7 +88,7 @@ export declare type _getWeekEndDate = (date: Date) => Date; */ export declare type _print = (date: Date, str: string) => string; -declare type _date = { +export declare type _date = { getTimezone: _getTimezone; getMonthDays: _getMonthDays; getLastDateOfMonth: _getLastDateOfMonth; @@ -105,4 +105,3 @@ declare type _date = { getWeekEndDate: _getWeekEndDate; print: _print; } -export default _date; \ No newline at end of file diff --git a/typescript/core/func/index.ts b/typescript/core/func/index.ts index 573f48465..1393b1d29 100644 --- a/typescript/core/func/index.ts +++ b/typescript/core/func/index.ts @@ -2,9 +2,8 @@ import _array from "./array"; import _string from "./string"; import _number from "./number"; import _function from "./function"; -import _date, {_Date} from "./date"; +import { _Date } from "./date"; -interface _func extends _array, _string, _number, _function { +export interface _func extends _array, _string, _number, _function { Date: _Date; } -export default _func; \ No newline at end of file diff --git a/typescript/core/i18n.ts b/typescript/core/i18n.ts index 4122508f1..d73689783 100644 --- a/typescript/core/i18n.ts +++ b/typescript/core/i18n.ts @@ -3,6 +3,6 @@ export declare type _addI18n = (v: string) => string; export declare type _i18nText = (key: string) => string; export declare type _i18n = { - addI18n: _addI18n; - i18nText: _i18nText; + addI18n: _addI18n; + i18nText: _i18nText; } \ No newline at end of file diff --git a/typescript/core/widget.ts b/typescript/core/widget.ts new file mode 100644 index 000000000..bb1bb4a19 --- /dev/null +++ b/typescript/core/widget.ts @@ -0,0 +1,389 @@ +import { _OB } from "./ob"; + + +export declare class _Widget extends _OB { + /** + * 出现loading的锁 + */ + protected __asking: boolean; + /** + * 同步锁 + */ + protected __async: boolean; + /** + * widget类标识符 + */ + public widgetName: string | null; + /** + * 是否为根节点 + */ + private _isRoot: boolean; + /** + * 父节点 + */ + private _parent: _Widget | null; + // TODO: 完成jquery文件夹后把这块改了 + /** + * 真实dom的类jQuery对象 + */ + public element: any; + /** + * 子元素 + */ + public _children: { + [key: string]: _Widget; + }; + /** + * 是否已挂载 + */ + private _isMounted: boolean; + /** + * 手动设置enable + */ + private _manualSetEnable: boolean; + /** + * 手动设置valid + */ + private _manualSetValid: boolean; + /** + * 渲染引擎 + */ + public _renderEngine: RenderEngine; + + private _store: () => any; + + private model: any; + + // 生命周期函数 + /** + * 初始化前 + */ + public beforeInit: Function | null; + + /** + * 创建前 + */ + public beforeCreate: Function | null; + + /** + * 创建 + */ + public created: Function | null; + + /** + * 渲染 + */ + public render: Function | null; + + /** + * 挂载前 + */ + public beforeMount: Function | null; + + /** + * 挂载 + */ + public mounted: Function | null; + + /** + * 更新前 + */ + public shouldUpdate: Function | null; + + /** + * 更新 + */ + public update: Function; + + /** + * 销毁前 + */ + public beforeDestroy: Function | null; + + /** + * 销毁 + */ + public destroyed: Function | null; + + /** + * 初始化render函数 + */ + private _initRender: () => void; + + /** + * 内部主render函数 + */ + private _render: () => void; + + /** + * 初始化根节点 + */ + private _initRoot: () => void; + + /** + * 初始化元素宽度 + */ + private _initElementWidth: () => void; + + /** + * 初始化元素高度 + */ + private _initElementHeight: () => void; + + /** + * 初始化元素可见 + */ + private _initVisual: () => void; + + /** + * 初始化元素可用不可用 + */ + private _initEffects: () => void; + + /** + * 设置mounted锁 + */ + private _initState: () => void; + + /** + * 生成真实dom + */ + private _initElement: () => void; + + /** + * 设置父节点 + */ + private _setParent: () => void; + + /** + * @param force 是否强制挂载子节点 + * @param deep 子节点是否也是按照当前force处理 + * @param lifeHook 生命周期钩子触不触发,默认触发 + * @param predicate 递归每个widget的回调 + */ + public _mount: (force?: boolean, deep?: boolean, lifeHook?: boolean, predicate?: Function) => boolean; + + /** + * 挂载子节点 + */ + private _mountChildren: Function | null; + + /** + * 是否已挂载 + */ + public isMounted: () => boolean; + + /** + * 设置宽度 + */ + public setWidth: (w: number) => void; + + /** + * 设置高度 + */ + public setHeight: (h: number) => void; + + /** + * 设置可用 + */ + private _setEnable: (enable: boolean) => void; + + /** + * 设置合法 + */ + private _setValid: (valid: boolean) => void; + + /** + * 设置可见 + */ + private _setVisible: (visible: boolean) => void; + + /** + * 设置是否可用 + */ + public setEnable: (enable: boolean) => void; + + /** + * 设置是否可见 + */ + public setVisible: (visible: boolean) => void; + + /** + * 设置是否合法 + */ + public setValid: (valid: boolean) => void; + + /** + * 设置反馈效果 + * @param args arguments参数 + */ + public doBehavior: (...args: any[]) => void; + + /** + * 获取宽度 + */ + public getWidth: () => number; + + /** + * 获取高度 + */ + public getHeight: () => number; + + /** + * 是否合法 + */ + public isValid: () => boolean; + + /** + * 新增子元素 + */ + public addWidget: (_name: any, _widget: _Widget) => _Widget; + + /** + * 根据wigetname获取子元素实例 + */ + public getWidgetByName: (_name: string) => _Widget; + + /** + * 移除子元素 + * @param nameOrWidget widgetName或widget实例 + */ + public removeWidget: (nameOrWidget: string | _Widget) => void; + + /** + * 是否有某个子元素 + */ + public hasWidget: (name: string) => boolean; + + /** + * 获取widgetName + */ + public getName: () => string; + + /** + * 设置tag + * @param tag html tag + */ + public setTag: (tag: string) => void; + + /** + * 获取tag + */ + public getTag: () => string; + + /** + * 设置属性 + * @param key 键 + * @param value 值 + */ + public attr: (key: string | { [key: string]: any }, value: any) => any; + + /** + * 获取text + */ + public getText: () => string; + + /** + * 设置text + */ + public setText: () => void; + + /** + * 获取值 + */ + public getValue: () => any; + + /** + * 设置值 + */ + public setValue: (...args: any[]) => void; + + /** + * 获取是否enable + */ + public isEnabled: () => boolean; + + /** + * 是否可见 + */ + public isVisible: () => boolean; + + /** + * disable元素 + */ + public disable: ()=> void; + + /** + * enable元素 + */ + public enable: () => void; + + /** + * 是widget合法 + */ + public valid: () => void; + + /** + * 使元素不合法 + */ + public invalid: () => void; + + /** + * 使不可见 + */ + public invisible: () => void; + + /** + * 可见 + */ + public visible: () => void; + + /** + * 清除子元素 + */ + private __d: () => void; + + /** + * 取消挂载 + */ + private _unMount: () => void; + + /** + * hang元素 + */ + public isolate: () => void; + + /** + * 请除元素 + */ + public empty: () => void; + + /** + * 内部destory方法 + */ + protected _destroy: () => void; + + /** + * destory元素 + */ + public destroy: () => void; + + /** + * 注册渲染引擎 + * @param engine 引擎 + */ + static registerRenderEngine: (engine: RenderEngine) => void; +} + +interface RenderEngine { + // TODO: 完成jquery文件夹后把这块改了 + /** + * 创建元素方法,返回的类jQuery对象 + * @param widget widget对象 + */ + createElement: (widget: any) => any; + /** + * 创建DocumentFragment对象 + */ + createFragment: () => DocumentFragment; +} diff --git a/typescript/index.ts b/typescript/index.ts index 63b9a5c9e..8008c742d 100644 --- a/typescript/index.ts +++ b/typescript/index.ts @@ -1,8 +1,10 @@ import { _i18n } from "./core/i18n"; import { _OB } from "./core/ob"; -import _func from "./core/func"; +import { _func } from "./core/func"; +import { _Widget } from "./core/widget"; export interface BI extends _func { i18n: _i18n; OB: _OB; + Widget: _Widget; } \ No newline at end of file