Skip to content

Commit aa9ad39

Browse files
xiaodemenJustineo
authored andcommitted
docs: update docs and diff scripts
Change-Id: I4cb7236ee045f81f3bf54725ba8f1c7d840bbf04
1 parent 3e2d350 commit aa9ad39

File tree

10 files changed

+125
-24
lines changed

10 files changed

+125
-24
lines changed

one/build/diff-api.js

Lines changed: 47 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -14,16 +14,35 @@ import {
1414
SyntaxKind,
1515
forEachChild
1616
} from 'typescript'
17+
import ignore from './diff-ignore'
1718

1819
const docPath = join(__dirname, '../docs/components')
1920
const typesDir = join(resolveLib('veui'), 'types')
2021
const Ls = createLs()
2122

23+
function getIgnoreComponents () {
24+
return Object.keys(ignore)
25+
.filter(key => ignore[key] === '*')
26+
}
27+
28+
function isIgnore (componentName, apiType, apiName) {
29+
let container = ignore['*'][apiType]
30+
if (container && container.includes(apiName)) {
31+
return true
32+
}
33+
34+
container = ignore[componentName]
35+
return container
36+
? container === '*' || (container[apiType] || []).includes(apiName)
37+
: false
38+
}
39+
2240
function getApiFromDocs () {
41+
const ignoreComponents = getIgnoreComponents()
2342
return readdirSync(docPath)
2443
.reduce((acc, name) => {
2544
const match = name.match(/(.+)\.md$/)
26-
if (match) {
45+
if (match && !ignoreComponents.includes(match[1])) {
2746
const absPath = join(docPath, name)
2847
acc[match[1]] = getComponentApiFromDoc(absPath)
2948
}
@@ -68,7 +87,10 @@ function getComponentApiFromDoc (docFile) {
6887
})
6988
.toArray()
7089
.reduce((acc, name) => {
71-
acc[name] = null
90+
// 过滤掉 <value> 这种事件
91+
if (!name.match(/^<[-\w]+>$/)) {
92+
acc[name] = null
93+
}
7294
return acc
7395
}, {})
7496

@@ -96,24 +118,24 @@ function getApiFromVeuiTypes () {
96118

97119
function visit (saveApi, node) {
98120
if (node.kind === SyntaxKind.ExportAssignment) {
99-
const ck = Ls.getProgram().getTypeChecker()
100-
const sym = ck.getSymbolAtLocation(node.expression) // node.expression: id to Autocomplete
101-
const type = ck.getTypeAtLocation(sym.declarations[0].name)
121+
const checker = Ls.getProgram().getTypeChecker()
122+
const sym = checker.getSymbolAtLocation(node.expression) // node.expression: id to Autocomplete
123+
const type = checker.getTypeAtLocation(sym.declarations[0].name)
102124
const rt = type.getConstructSignatures()[0].getReturnType()
103125
const all = rt.getProperties()
104126
const props = all.find(sy => sy.escapedName === '$props')
105127
let result = {}
106128

107-
result.props = ck
129+
result.props = checker
108130
.getTypeOfSymbolAtLocation(props, node)
109131
.getProperties()
110132
.reduce((acc, sy) => {
111-
acc[sy.escapedName] = ck.typeToString(ck.getTypeOfSymbolAtLocation(sy, node))
133+
acc[sy.escapedName] = checker.typeToString(checker.getTypeOfSymbolAtLocation(sy, node))
112134
return acc
113135
}, {})
114136

115137
const emits = all.find(sy => sy.escapedName === '$emit')
116-
const emitsType = ck.getTypeOfSymbolAtLocation(emits, node)
138+
const emitsType = checker.getTypeOfSymbolAtLocation(emits, node)
117139
const emitsCollection = emitsType.isIntersection()
118140
? emitsType.types
119141
: [emitsType]
@@ -123,25 +145,27 @@ function visit (saveApi, node) {
123145
return ty.getCallSignatures()[0]
124146
.getParameters()
125147
.reduce((acc, argSy) => {
126-
const argType = ck.getTypeOfSymbolAtLocation(argSy, node)
148+
const argType = checker.getTypeOfSymbolAtLocation(argSy, node)
127149

128-
const tstr = ck.typeToString(argType)
150+
const tstr = checker.typeToString(argType)
129151
const matched = /^"([^"]+)"$/.exec(tstr)
130152
acc[argSy.escapedName] = matched ? matched[1] : tstr
131153
return acc
132154
}, {})
133155
})
134156
.reduce((acc, { event, args }) => {
135-
acc[event] = args
157+
if (event !== 'string') {
158+
acc[event] = args
159+
}
136160
return acc
137161
}, {})
138162

139163
const slots = all.find(sy => sy.escapedName === '$scopedSlots')
140-
const slotsType = ck
164+
const slotsType = checker
141165
.getTypeOfSymbolAtLocation(slots, node)
142166
.getProperties()
143167
.reduce((acc, symbol) => {
144-
acc[symbol.escapedName] = getScope(symbol, node, ck)
168+
acc[symbol.escapedName] = getScope(symbol, node, checker)
145169
return acc
146170
}, {})
147171

@@ -305,6 +329,16 @@ function writeDiffFile () {
305329
const tsApi = getApiFromVeuiTypes()
306330
const docApi = getApiFromDocs()
307331
const diff = diffApi(tsApi, docApi)
332+
.map(item => {
333+
item.props = item.props.filter(({ key }) => !isIgnore(item.component, 'props', key))
334+
item.emits = item.emits.filter(({ key }) => !isIgnore(item.component, 'emits', key))
335+
item.slots = item.slots.filter(({ key }) => !isIgnore(item.component, 'slots', key))
336+
return item
337+
})
338+
.filter(({ props, slots, emits }) => {
339+
return !!props.length || !!slots.length || !!emits.length
340+
})
341+
308342
writeFileSync(join(__dirname, 'diff.json'), JSON.stringify(diff, null, ' '), 'utf8')
309343
}
310344

one/build/diff-ignore.js

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
export default {
2+
schedule: '*',
3+
'region-picker': '*',
4+
embedded: '*',
5+
'*': {
6+
props: [
7+
'ui',
8+
'name',
9+
'invalid',
10+
'overlayClass',
11+
'overlayStyle',
12+
'overlayPriority',
13+
'keyField'
14+
]
15+
},
16+
button: {
17+
props: ['value']
18+
},
19+
cascader: {
20+
emits: ['toggle']
21+
},
22+
checkbox: {
23+
props: ['model']
24+
},
25+
radio: {
26+
props: ['model']
27+
},
28+
switch: {
29+
props: ['model']
30+
},
31+
drawer: {
32+
props: ['inline']
33+
},
34+
select: {
35+
props: ['max'] // 脚本没识别出来,先忽略
36+
},
37+
link: {
38+
props: ['replace']
39+
}
40+
}

one/docs/components/carousel.md

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,11 +67,13 @@
6767
| ``vertical`` | `boolean=` | `false` | 是否是纵向布局的轮播。 |
6868
| ``indicator-align`` | `'start' | 'end'` | `start` | 用于支持指示器的相对于布局方向的位置。 |
6969
| ``indicator-position`` | `'outside' | 'inside'` | `inside` | 用于支持指示器显示在轮播容器的内部/外部。 |
70+
| ``controls`` | `boolean` | `false` | 是否显示切换按钮。 |
7071
| ``controls-position`` | `'outside' | 'inside'` | `inside` | 用于支持切换按钮相对于布局方向的位置。 |
7172
| ``slide-aspect-ratio`` | `number= | '${number}/${number}'` | - | 指定不同轮播项类型的默认配置。 |
7273
| ``options`` | `Object=` | `{ video: { muted: true, autoplay: true, controls: true, loop: true } }` | 用于指定每个轮播项的纵横比。 |
7374
| ``slides-per-view`` | `number=` | `1` | 指定同时显示多少个轮播项。 |
7475
| ``slides-per-group`` | `number=` | `1` | 指定每次前后切换的一组包含多少个轮播项。 |
76+
| ``lazy`` | `boolean= | { preload: number }` | `false` | [^lazy] |
7577

7678
^^^datasource
7779
轮播图数据源,项目类型为:`{src, alt, label, type}`
@@ -117,6 +119,18 @@
117119
+++
118120
^^^
119121

122+
^^^lazy
123+
指定是否懒加载轮播资源。
124+
125+
+++详情
126+
| 名称 | 描述 |
127+
| -- | -- | -- |
128+
| `false` | 不懒加载资源。 |
129+
| `true` | 预加载当前展示项目的前后 1 个资源。 |
130+
| `{ preload: number }` | 预加载当前展示项目的前后指定数量个资源。 |
131+
+++
132+
^^^
133+
120134
### 插槽
121135

122136
| 名称 | 描述 |

one/docs/components/cascader.md

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -66,6 +66,8 @@
6666
| ``column-width`` | `number | string` | - | [^column-width] |
6767
| ``show-select-all`` | `boolean` | `false` | 在多选模式下是否有全选按钮。 |
6868
| ``value-display`` | `'complete' | 'simple'` | `'simple'` | [^value-display] |
69+
| ``merge-checked`` | `string=` | `keep-all` | [^merge-checked] |
70+
| ``include-indeterminate`` | `boolean` | `false` | 是否将半选状态的节点加入已选项。[`datasource`](#props-datasource) 节点中的非叶子节点若有部分子孙节点被选中,则为半选状态。 |
6971
| ``disabled`` | `boolean=` | `false` | 是否为禁用状态。 |
7072
| ``readonly`` | `boolean=` | `false` | 是否为只读状态。 |
7173
| ``overlay-class`` | `string | Array | Object=` | - | 参考 [`Overlay`](./overlay) 组件的 [`overlay-class`](./overlay#props-overlay-class) 属性。 |
@@ -155,6 +157,19 @@
155157
+++
156158
^^^
157159

160+
^^^merge-checked
161+
162+
选中值的合并策略。当某个节点下的所有子节点都被选中时,可以选择只保留父节点、只保留子节点或都保留。
163+
164+
+++枚举值
165+
|| 描述 |
166+
| -- | -- |
167+
| `keep-all` | 父子节点都会在选中值中。 |
168+
| `upwards` | 尽可能往祖先方向合并选中值。 |
169+
| `downwards` | 尽可能往后代方向合并选中值。 |
170+
+++
171+
^^^
172+
158173
### 插槽
159174

160175
| 名称 | 描述 |

one/docs/components/column.md

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
| ``align`` | `string=` | - | 内容对齐方式,支持 `left` / `center` / `right`|
2222
| ``span`` | `function(number): Object=` | | [^span] |
2323
| ``desc`` | `string` | - | 表头描述。 |
24+
| ``fixed`` | `boolean | 'left' | 'right'` | `false` | 该列是否固定,`'left'` 表示固定在左侧,`'right'` 表示在右侧。 |
2425
| ``filter-value`` | `*` | - | [^filter-value] |
2526
| ``filter-multiple`` | `boolean=` | `false` | 内置筛选是否为多选。 |
2627
| ``filter-options`` | `Array<Object>` | - | 筛选选项列表,项目的类型为 `{label, value, options, disabled, ...}`,可参考 [`Select`](./select) 组件的 [`options`](./select#props-options) 属性。 |
@@ -122,3 +123,9 @@
122123
| `close` | `function(): void` | 关闭筛选浮层。 |
123124
+++
124125
^^^
126+
127+
### 事件
128+
129+
| 名称 | 描述 |
130+
| -- | -- |
131+
| ``filterchange`` | 修改该列过滤器时触发。回调参数为 `(value)``value` 为过滤器的当前值。 |

one/docs/components/drawer.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@
3131
| ``open`` | `boolean` | `false` | [^open] |
3232
| ``closable`` | `boolean` | `true` | 是否显示关闭按钮。 |
3333
| ``outside-closable`` | `boolean` | `false` | 点击抽屉外部时是否关闭抽屉。 |
34-
| ``draggable`` | `boolean` | `false` | 是否可拖拽。 |
3534
| ``escapable`` | `boolean` | `false` | 按下 <kbd>esc</kbd> 键是否可以关闭抽屉。仅在 `closable``true` 时生效。 |
3635
| ``footless`` | `boolean` | `false` | 是否不显示默认的底部操作栏。 |
3736
| ``loading`` | `boolean=` | `false` | 是否处于加载状态。处于加载状态时确定按钮也将进入加载状态,无法点击。 |

one/docs/components/dropdown.md

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -101,8 +101,6 @@
101101
| 名称 | 描述 |
102102
| -- | -- |
103103
| ``default`` | 选项列表的内容。在没有指定 [`options`](#props-options) 属性时,可以用来直接内联 `Option``OptionGroup`|
104-
| ``before`` | 选项列表前的内容。无默认内容。 |
105-
| ``after`` | 选项列表后的内容。无默认内容。 |
106104
| ``label`` | [^slot-label] |
107105
| ``group-label`` | [^slot-group-label] |
108106
| ``option-label`` | [^slot-option-label] |

one/docs/components/filter-panel.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
| ``filter`` | `function=` | 见描述 | [^filter] |
1616
| ``search-on-input`` | `boolean=` | `true` | 是否在输入的时候触发搜索。 |
1717
| ``placeholder`` | `string=` | - | 搜索框的占位符。 |
18+
| ``title`` | `string=` | - | 过滤面板的标题。 |
1819

1920
^^^filter
2021
搜索过滤函数,签名为 `function(keyword, item, index, datasource): boolean`。返回值为 `false` 的项目将被从结果中过滤掉。

one/docs/components/icon.md

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -16,15 +16,7 @@ VEUI 的 `Icon` 组件目前兼容 [Vue-Awesome](https://github.com/Justineo/vue
1616
| -- | -- | -- | -- |
1717
| ``name`` | `string | Object` | - | 图标名称或其组件定义。 |
1818
| ``label`` | `string` | - | 图标的文字说明,对辅助设备可见。当不设置时,图标对辅助设备隐藏。 |
19-
| ``scale`` | `number` | - | 图标尺寸倍数。不设置时相当于 `1`|
2019
| ``spin`` | `boolean` | `false` | 是否保持旋转状态。 |
21-
| ``pulse`` | `boolean` | `false` | 是否保持步进旋转状态。 |
22-
| ``inverse`` | `boolean` | `false` | 是否翻转颜色(用白色绘制,用于深色背景)。 |
23-
| ``flip`` | `string` | - | 是否翻转,可选值为 `'horizontal'` / `'vertical'`,分别表示水平翻转与垂直翻转。 |
24-
25-
:::warning
26-
[`name`](#props-name) 属性使用组件定义时,仅支持 [`spin`](#props-spin) 属性。
27-
:::
2820

2921
### 插槽
3022

one/docs/components/tree.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,7 @@
3030
| ``selectable`` | `boolean` | `false` | 点击整个节点区域时是否选中该节点。 |
3131
| ``selected`` | `string` | - | [^selected] |
3232
| ``merge-checked`` | `string` | `keep-all` | [^merge-checked] |
33+
| ``include-indeterminate`` | `boolean` | `false` | 是否将半选状态的节点加入已选项。[`datasource`](#props-datasource) 节点中的非叶子节点若有部分子孙节点被选中,则为半选状态。 |
3334

3435
^^^ui
3536
预设样式。

0 commit comments

Comments
 (0)