[improvement] rename packages dir to src (#3659)

This commit is contained in:
neverland
2019-06-27 11:25:57 +08:00
committed by GitHub
parent 8489918dca
commit 75c79b7044
619 changed files with 21 additions and 21 deletions
+83
View File
@@ -0,0 +1,83 @@
<template>
<demo-section>
<demo-block :title="$t('basicUsage')">
<van-collapse v-model="active1">
<van-collapse-item :title="$t('title') + 1">{{ $t('text') }}</van-collapse-item>
<van-collapse-item :title="$t('title') + 2">{{ $t('text') }}</van-collapse-item>
<van-collapse-item
:title="$t('title') + 3"
disabled
>
{{ $t('text') }}
</van-collapse-item>
</van-collapse>
</demo-block>
<demo-block :title="$t('accordion')">
<van-collapse
v-model="active2"
accordion
>
<van-collapse-item :title="$t('title') + 1">{{ $t('text') }}</van-collapse-item>
<van-collapse-item :title="$t('title') + 2">{{ $t('text') }}</van-collapse-item>
<van-collapse-item :title="$t('title') + 3">{{ $t('text') }}</van-collapse-item>
</van-collapse>
</demo-block>
<demo-block :title="$t('titleSlot')">
<van-collapse v-model="active3">
<van-collapse-item>
<template #title>
{{ $t('title') + 1 }}<van-icon name="question-o" />
</template>
{{ $t('text') }}
</van-collapse-item>
<van-collapse-item
:title="$t('title') + 2"
:value="$t('content')"
icon="shop-o"
>
{{ $t('text') }}
</van-collapse-item>
</van-collapse>
</demo-block>
</demo-section>
</template>
<script>
export default {
i18n: {
'zh-CN': {
accordion: '手风琴',
titleSlot: '自定义标题内容',
text: '代码是写出来给人看的,附带能在机器上运行'
},
'en-US': {
accordion: 'Accordion',
titleSlot: 'Custom title',
text: 'Content'
}
},
data() {
return {
active1: [0],
active2: 0,
active3: []
};
}
};
</script>
<style lang="less">
@import '../../style/var';
.demo-collapse {
.van-icon-question-o {
margin-left: 5px;
color: @blue;
font-size: 15px;
vertical-align: -3px;
}
}
</style>
+115
View File
@@ -0,0 +1,115 @@
# Collapse
### Install
``` javascript
import { Collapse, CollapseItem } from 'vant';
Vue.use(Collapse).use(CollapseItem);
```
## Usage
### Basic Usage
Use `v-model` to control the name of active panels
```html
<van-collapse v-model="activeNames">
<van-collapse-item title="Title1" name="1">Content</van-collapse-item>
<van-collapse-item title="Title2" name="2">Content</van-collapse-item>
<van-collapse-item title="Title3" name="3" disabled>Content</van-collapse-item>
</van-collapse>
```
``` javascript
export default {
data() {
return {
activeNames: ['1']
};
}
};
```
### Accordion
In accordion mode, only one panel can be expanded at the same time.
```html
<van-collapse v-model="activeName" accordion>
<van-collapse-item title="Title1" name="1">Content</van-collapse-item>
<van-collapse-item title="Title2" name="2">Content</van-collapse-item>
<van-collapse-item title="Title3" name="3">Content</van-collapse-item>
</van-collapse>
```
``` javascript
export default {
data() {
return {
activeName: '1'
};
}
};
```
### Custom title
```html
<van-collapse v-model="activeNames">
<van-collapse-item name="1">
<div slot="title">Title1 <van-icon name="question-o" /></div>
Content
</van-collapse-item>
<van-collapse-item
title="Title2"
name="2"
icon="shop-o"
>
Content
</van-collapse-item>
</van-collapse>
```
## API
### Collapse Props
| Attribute | Description | Type | Default |
|------|------|------|------|
| v-model | names of current active panels | `Array | String | Number` | - |
| accordion | Whether to be accordion mode | `Boolean` | `false` |
| border | Whether to show outer border | `Boolean` | `true` |
### Collapse Events
| Event | Description | Arguments |
|------|------|------|
| change | Triggered when switch panel | activeNames: `string | array` |
### CollapseItem Props
| Attribute | Description | Type | Default |
|------|------|------|------|
| name | Name | `String | Number` | `index` |
| icon | Left Icon | `String` | - |
| size | Title sizecan be set to `large` | `String` | - |
| title | Title | `String | Number` | - |
| value | Right text | `String | Number` | - |
| label | Description below the title | `String` | - |
| border | Whether to show inner border | `Boolean` | `true` |
| disabled | Whether to disabled collapse | `Boolean` | `false` |
| is-link | Whether to show link icon | `Boolean` | `true` |
| title-class | Title className | `String` | - |
| value-class | Value className | `String` | - |
| label-class | Label className | `String` | - |
### CollapseItem Slots
| Name | Description |
|------|------|
| default | Content |
| value | Custom value |
| icon | Custom icon |
| title | Custom title |
| right-icon | Custom right icon |
+37
View File
@@ -0,0 +1,37 @@
import { createNamespace } from '../utils';
import { ParentMixin } from '../mixins/relation';
const [createComponent, bem] = createNamespace('collapse');
export default createComponent({
mixins: [ParentMixin('vanCollapse')],
props: {
accordion: Boolean,
value: [String, Number, Array],
border: {
type: Boolean,
default: true
}
},
methods: {
switch(name, expanded) {
if (!this.accordion) {
name = expanded
? this.value.concat(name)
: this.value.filter(activeName => activeName !== name);
}
this.$emit('change', name);
this.$emit('input', name);
}
},
render(h) {
return (
<div class={[bem(), { 'van-hairline--top-bottom': this.border }]}>
{this.slots()}
</div>
);
}
});
@@ -0,0 +1,76 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`renders demo correctly 1`] = `
<div>
<div>
<div class="van-collapse van-hairline--top-bottom">
<div class="van-collapse-item">
<div role="button" tabindex="0" aria-expanded="true" class="van-cell van-cell--clickable van-collapse-item__title van-collapse-item__title--expanded">
<div class="van-cell__title"><span>标题1</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
<div class="van-collapse-item__wrapper">
<div class="van-collapse-item__content">代码是写出来给人看的,附带能在机器上运行</div>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>标题2</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="-1" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title van-collapse-item__title--disabled">
<div class="van-cell__title"><span>标题3</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
</div>
</div>
<div>
<div class="van-collapse van-hairline--top-bottom">
<div class="van-collapse-item">
<div role="button" tabindex="0" aria-expanded="true" class="van-cell van-cell--clickable van-collapse-item__title van-collapse-item__title--expanded">
<div class="van-cell__title"><span>标题1</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
<div class="van-collapse-item__wrapper">
<div class="van-collapse-item__content">代码是写出来给人看的,附带能在机器上运行</div>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>标题2</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>标题3</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
</div>
</div>
<div>
<div class="van-collapse van-hairline--top-bottom">
<div class="van-collapse-item">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title">
标题1<i class="van-icon van-icon-question-o">
<!----></i></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title"><i class="van-icon van-icon-shop-o van-cell__left-icon">
<!----></i>
<div class="van-cell__title"><span>标题2</span></div>
<div class="van-cell__value"><span>内容</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
</div>
</div>
</div>
`;
@@ -0,0 +1,54 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP
exports[`disable border 1`] = `
<div class="van-collapse">
<div class="van-collapse-item">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>a</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>b</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>c</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
</div>
`;
exports[`lazy render collapse content 1`] = `
<div class="van-collapse van-hairline--top-bottom">
<div class="van-collapse-item" style="padding: 0px;">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">
<div class="van-cell__title"><span>a</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
</div>
<div class="van-collapse-item van-hairline--top" style="padding: 0px;">
<div role="button" tabindex="0" aria-expanded="true" class="van-cell van-cell--clickable van-collapse-item__title van-collapse-item__title--expanded">
<div class="van-cell__title"><span>b</span></div><i class="van-icon van-icon-arrow van-cell__right-icon">
<!----></i>
</div>
<div class="van-collapse-item__wrapper">
<div class="van-collapse-item__content">content</div>
</div>
</div>
</div>
`;
exports[`render collapse-item slot 1`] = `
<div class="van-collapse van-hairline--top-bottom">
<div class="van-collapse-item">
<div role="button" tabindex="0" aria-expanded="false" class="van-cell van-cell--clickable van-collapse-item__title">this is icon<div class="van-cell__title">this is title</div>
<div class="van-cell__value">this is value</div>this is right icon
</div>
</div>
</div>
`;
+4
View File
@@ -0,0 +1,4 @@
import Demo from '../demo';
import demoTest from '../../../test/demo-test';
demoTest(Demo);
+134
View File
@@ -0,0 +1,134 @@
import Collapse from '..';
import CollapseItem from '../../collapse-item';
import { later, mount } from '../../../test/utils';
const component = {
template: `
<collapse v-model="active" :accordion="accordion" :border="border">
<collapse-item title="a" name="first">content</collapse-item>
<collapse-item title="b">content</collapse-item>
<collapse-item title="c">content</collapse-item>
</collapse>
`,
components: {
Collapse,
CollapseItem
},
props: {
accordion: Boolean,
border: {
type: Boolean,
default: true
}
},
data() {
return {
active: this.accordion ? '' : []
};
}
};
test('basic mode', async () => {
const wrapper = mount(component);
const titles = wrapper.findAll('.van-collapse-item__title');
titles.at(0).trigger('click');
expect(wrapper.vm.active).toEqual(['first']);
await later();
titles.at(1).trigger('click');
expect(wrapper.vm.active).toEqual(['first', 1]);
await later();
titles.at(0).trigger('click');
expect(wrapper.vm.active).toEqual([1]);
wrapper.destroy();
});
test('accordion', async () => {
const wrapper = mount(component, {
propsData: {
accordion: true
}
});
const titles = wrapper.findAll('.van-collapse-item__title');
titles.at(0).trigger('click');
expect(wrapper.vm.active).toEqual('first');
titles.at(1).trigger('click');
expect(wrapper.vm.active).toEqual(1);
await later();
titles.at(0).trigger('click');
expect(wrapper.vm.active).toEqual('first');
titles.at(0).trigger('click');
expect(wrapper.vm.active).toEqual('');
});
test('render collapse-item slot', () => {
const wrapper = mount({
template: `
<collapse v-model="active">
<collapse-item>
<template v-slot:title>this is title</template>
<template v-slot:value>this is value</template>
<template v-slot:icon>this is icon</template>
<template v-slot:right-icon>this is right icon</template>
</collapse-item>
</collapse>
`,
components: {
Collapse,
CollapseItem
},
data() {
return {
active: []
};
}
});
expect(wrapper).toMatchSnapshot();
});
test('disable border', () => {
const wrapper = mount(component, {
propsData: {
border: false
}
});
expect(wrapper).toMatchSnapshot();
});
test('lazy render collapse content', async () => {
const wrapper = mount({
template: `
<collapse v-model="active">
<collapse-item title="a" name="first" style="padding: 0;">content</collapse-item>
<collapse-item title="b" style="padding: 0;">{{ content }}</collapse-item>
</collapse>
`,
components: {
Collapse,
CollapseItem
},
data() {
return {
content: '',
active: []
};
}
});
const titles = wrapper.findAll('.van-collapse-item__title');
titles.at(1).trigger('click');
await later(50);
wrapper.vm.content = 'content';
expect(wrapper).toMatchSnapshot();
});
+116
View File
@@ -0,0 +1,116 @@
# Collapse 折叠面板
### 引入
``` javascript
import { Collapse, CollapseItem } from 'vant';
Vue.use(Collapse).use(CollapseItem);
```
## 代码演示
### 基础用法
通过`v-model`控制展开的面板列表,`activeNames`为数组格式
```html
<van-collapse v-model="activeNames">
<van-collapse-item title="标题1" name="1">内容</van-collapse-item>
<van-collapse-item title="标题2" name="2">内容</van-collapse-item>
<van-collapse-item title="标题3" name="3" disabled>内容</van-collapse-item>
</van-collapse>
```
``` javascript
export default {
data() {
return {
activeNames: ['1']
};
}
};
```
### 手风琴
通过`accordion`可以设置为手风琴模式,最多展开一个面板,此时`activeName`为字符串格式
```html
<van-collapse v-model="activeName" accordion>
<van-collapse-item title="标题1" name="1">内容</van-collapse-item>
<van-collapse-item title="标题2" name="2">内容</van-collapse-item>
<van-collapse-item title="标题3" name="3">内容</van-collapse-item>
</van-collapse>
```
``` javascript
export default {
data() {
return {
activeName: '1'
};
}
};
```
### 自定义标题内容
```html
<van-collapse v-model="activeNames">
<van-collapse-item name="1">
<div slot="title">标题1 <van-icon name="question-o" /></div>
内容
</van-collapse-item>
<van-collapse-item
title="标题2"
name="2"
icon="shop-o"
>
内容
</van-collapse-item>
</van-collapse>
```
## API
### Collapse Props
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|------|------|------|------|------|
| v-model | 当前展开面板的 name | `Array | String | Number` | - | - |
| accordion | 是否开启手风琴模式 | `Boolean` | `false` | - |
| border | 是否显示外边框 | `Boolean` | `true` | 1.6.9 |
### Collapse Events
| 事件名 | 说明 | 回调参数 |
|------|------|------|
| change | 切换面板时触发 | activeNames: `string | array` |
### CollapseItem Props
| 参数 | 说明 | 类型 | 默认值 | 版本 |
|------|------|------|------|------|------|
| name | 唯一标识符,默认为索引值 | `String | Number` | `index` | - |
| icon | 标题栏左侧图标名称或图片链接,可选值见 Icon 组件 | `String` | - | 1.2.1 |
| size | 标题栏大小,可选值为 `large` | `String` | - | 1.6.9 |
| title | 标题栏左侧内容 | `String | Number` | - | - |
| value | 标题栏右侧内容 | `String | Number` | - | 1.2.1 |
| label | 标题栏描述信息 | `String | Number` | - | 1.2.1 |
| border | 是否显示内边框 | `Boolean` | `true` | 1.2.1 |
| is-link | 是否展示标题栏右侧箭头并开启点击反馈 | `Boolean` | `true` | 1.2.1 |
| disabled | 是否禁用面板 | `Boolean` | `false` | 1.3.6 |
| title-class | 左侧标题额外类名 | `String` | - | 1.4.8 |
| value-class | 右侧内容额外类名 | `String` | - | 1.4.8 |
| label-class | 描述信息额外类名 | `String` | - | 1.4.8 |
### CollapseItem Slots
| 名称 | 说明 |
|------|------|
| default | 面板内容 |
| value | 自定义显示内容 |
| icon | 自定义`icon` |
| title | 自定义`title` |
| right-icon | 自定义右侧按钮,默认是`arrow` |