diff --git a/README.md b/README.md index 8fa00c4..49c3e67 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,3 @@ -# ui-lib +# [ui-lib].Grid -UI Mordern Library \ No newline at end of file +UI Mordern Gridview Library \ No newline at end of file diff --git a/jsdoc/grid/assets/grid-sample.png b/jsdoc/grid/assets/grid-sample.png new file mode 100644 index 0000000..68da0b4 Binary files /dev/null and b/jsdoc/grid/assets/grid-sample.png differ diff --git a/lib/ui/date.js b/lib/ui/date.js index c7542e2..aeea3fa 100644 --- a/lib/ui/date.js +++ b/lib/ui/date.js @@ -4,11 +4,14 @@ import { createElement } from "../functions"; * 创建或转换日期选择框 * @param {string} [min] - 最小可选日期 * @param {string} [max] - 最大可选日期 - * @param {HTMLInputElement} [element] - 转换该元素为日期选择框 + * @param {HTMLInputElement | string} [element] - 转换该元素为日期选择框 * @returns {HTMLInputElement} 返回创建或转换的日期选择框 */ export function createDateInput(min, max, element) { let date; + if (typeof element === 'string') { + element = document.querySelector(element); + } if (element instanceof HTMLInputElement) { date = element; date.classList.add('ui-date-cell'); @@ -121,13 +124,6 @@ export function getDateValue(element, formatter) { return ''; } -/** - * 日期选中触发的回调函数 - * @callback DateSelectedCallback - * @param {Date} date - 修改后的日期值 - * @this DateSelector - */ - /** * 日期选择框类 * @class @@ -140,7 +136,8 @@ export class DateSelector { /** * 日期发生变化时触发的事件 * @event - * @type {DateSelectedCallback} + * @param {Date} date - 修改后的日期值 + * @this DateSelector */ onDateChanged; @@ -152,6 +149,24 @@ export class DateSelector { * @param {string} [opts.minDate] - 最小可选择日期 * @param {string} [opts.maxDate] - 最大可选择日期 * @param {DateFormatterCallback} [opts.valueFormatter] - 自定义格式化函数 + * @example <caption>创建一个 DateSelector 并插入到元素中</caption> + * <div id="dateFrom"></div> + * @example + * // 构造参数 + * const opts = { + * minDate: '2020-01-01', + * maxDate: '2024-02-01', + * valueFormatter: (date) => { + * return `${date.getFullYear()}/${date.getMonth() + 1}/${date.getDate()}`; // 2024/1/31 + * } + * }; + * const dateSelectorFrom = new DateSelector(opts); + * document.querySelector('#dateFrom').appendChild(dateSelectorFrom.create()); + * @example <caption>将一个元素转化为 DateSelector</caption> + * <input id="dateTo"></div> + * @example + * const dateSelectorTo = new DateSelector(); + * dateSelectorTo.create('#dateTo'); */ constructor(opts) { this._var.options = opts ?? {}; @@ -159,7 +174,7 @@ export class DateSelector { /** * 创建或转换日期选择框元素 - * @param {HTMLInputElement} [element] - 转换该元素为日期选择框 + * @param {HTMLInputElement | string} [element] - 转换该元素为日期选择框 * @returns {HTMLInputElement} 返回创建或转换的日期选择元素 */ create(element) { @@ -245,7 +260,9 @@ export class DateSelector { * 解析的属性为 `id`, `class`, `data-min`, `data-max`, `disabled` * @static * @param {HTMLElement} [dom=document.body] 父元素 - * @param {DateSelectedCallback} trigger 日期设置事件触发函数(上下文为触发设置日期的 `DateSelector` 实例) + * @param {Function} [trigger] 日期设置事件触发函数 + * @param {Date} trigger.[this]] - 上下文为触发设置日期的 `DateSelector` 实例 + * @param {Date} trigger.date - 修改后的日期值 * @example <caption>HTML</caption> * <input id="dateFrom" data-type="date" data-min="1980-01-01"/> * @example <caption>解析父容器</caption> diff --git a/lib/ui/grid/grid.js b/lib/ui/grid/grid.js index 3291823..9a34c85 100644 --- a/lib/ui/grid/grid.js +++ b/lib/ui/grid/grid.js @@ -275,17 +275,52 @@ const GridColumnDirection = { * @property {("asc" | "desc")} order - 升序或降序 */ -/** - * 多语言文本资源回调函数 - * @callback GridLanguageCallback - * @param {string} id - 资源 ID - * @param {string} [def] - 默认资源 - * @returns 返回获取的多语言资源 - */ - /** * Grid 控件基础类 + * + * <img src="./assets/grid-sample.png" alt="Grid Sample"/> * @class + * @example <caption>基础示例</caption> + * <div id="grid"></div> + * @example + * #grid>.ui-grid { + * width: 600px; + * height: 400px; + * } + * @example + * const grid = new Grid('#grid', GetTextByKey); + * grid.columns = [ + * { + * key: 'name', + * caption: 'Name', + * width: 140, + * allowFilter: true + * }, + * { + * key: 'age', + * caption: 'Age', + * type: Grid.ColumnTypes.Input, + * width: 80 + * }, + * { + * key: 'study', + * caption: 'Study', + * type: Grid.ColumnTypes.Dropdown, + * width: 120, + * source: [ + * { value: 'a', text: 'A' }, + * { value: 'b', text: 'B' }, + * { value: 'c', text: 'C' } + * ] + * } + * ]; + * grid.multiSelect = true; + * grid.init(); + * grid.source = [ + * { name: '张三', age: '19', study: 'a' }, + * { name: '李四', age: '24', study: 'a' }, + * { name: '王五', age: '20', study: 'c' } + * ]; */ export class Grid { _var = { @@ -492,10 +527,13 @@ export class Grid { /** * - * @param {(string | HTMLElement)} container Grid 控件所在的父容器,可以是 string 表示选择器,也可以是 HTMLElement 对象 - * Grid 控件构造函数 - * _构造时可以不进行赋值,但是调用 init 函数时则必须进行赋值_ - * @param {GridLanguageCallback} [getText] 获取多语言文本的函数代理 + * @param {(string | HTMLElement)?} container Grid 控件所在的父容器,可以是 string 表示选择器,也可以是 HTMLElement 对象 + * Grid 控件构造函数<br/> + * _**构造时可以不进行赋值,但是调用 init 函数时则必须进行赋值**_ + * @param {Function} [getText] 获取多语言文本的函数代理 + * @param {string} getText.id - 资源 ID + * @param {string} [getText.def] - 默认资源 + * @param {string} getText.[returns]] 返回的多语言 */ constructor(container, getText) { this._var.parent = typeof container === 'string' ? document.querySelector(container) : container;