Skip to content

Commit 8d95478

Browse files
authored
Merge pull request #10 from leezng/dev
release 1.4.0
2 parents aa0de9f + efd0f9d commit 8d95478

File tree

10 files changed

+73
-21
lines changed

10 files changed

+73
-21
lines changed

README.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ export default {
5454
| Attribute | Level | Description | Type | Default |
5555
|-------- |-------- |-------- |-------- | -------- |
5656
| data | basic | json data | JSON object | - |
57-
| deep | basic |data depth, data larger than this depth will not be expanded | number | Infinity |
57+
| deep | basic | data depth, data larger than this depth will not be expanded | number | Infinity |
58+
| showLength | basic | whether to show the length when closed | boolean | false |
5859
| path | advanced | root data path | string | root |
5960
| pathChecked | advanced | defines the selected data path | array | [] |
6061
| pathSelectable | advanced | defines whether a data path supports selection | Function(itemPath, itemData) | - |

README.zh-CN.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -55,6 +55,7 @@ export default {
5555
|-------- |-------- |-------- |-------- | -------- |
5656
| data | 基础 | 待美化的源数据,注意不是 `JSON` 字符串 | `JSON` 对象 | - |
5757
| deep | 基础 | 数据深度, 大于该深度的数据将不被展开 | number | Infinity |
58+
| showLength | 基础 | 是否在数据线闭合的时候展示长度 | boolean | false |
5859
| path | 高级 | 定义最顶层数据层级 | string | root |
5960
| pathChecked | 高级 | 定义哪些数据层级是已被选中的 | array | [] |
6061
| pathSelectable | 高级 | 定义哪些数据层级是可以被选中的 | Function(itemPath, itemData) | - |

example/App.vue

Lines changed: 31 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -24,15 +24,31 @@
2424

2525
<h3>Options</h3>
2626
<div class="options">
27-
<label>selectable-type</label>
28-
<select v-model="selectableType">
29-
<option>-</option>
30-
<option>both</option>
31-
<option>checkbox</option>
32-
<option>tree</option>
33-
</select>
34-
<label>path</label>
35-
<input type="text" v-model="path">
27+
<div>
28+
<label>selectable-type</label>
29+
<select v-model="selectableType">
30+
<option>-</option>
31+
<option>both</option>
32+
<option>checkbox</option>
33+
<option>tree</option>
34+
</select>
35+
</div>
36+
<div>
37+
<label>path</label>
38+
<input type="text" v-model="path">
39+
</div>
40+
<div>
41+
<label>showLength</label>
42+
<input type="checkbox" v-model="showLength">
43+
</div>
44+
<!-- <div>
45+
<label>deep</label>
46+
<select v-model="deep">
47+
<option :value="2">2</option>
48+
<option :value="3">3</option>
49+
<option :value="4">4</option>
50+
</select>
51+
</div> -->
3652
</div>
3753

3854
<h3>Latest Click Result:</h3>
@@ -44,6 +60,8 @@
4460
<vue-json-pretty
4561
:data="json"
4662
:path="path"
63+
:deep="deep"
64+
:show-length="showLength"
4765
:path-checked="['res', 'res.c']"
4866
:path-selectable="((path, data) => typeof data !== 'number')"
4967
:selectable-type="selectableType"
@@ -80,12 +98,14 @@ export default {
8098
}, {
8199
news_id: 51182,
82100
title: 'Teslamask\'s American Business Relations: The government does not pay billions to build factories',
83-
source: 'AI Finance'
101+
source: 'AI Finance',
102+
members: ['Daniel, Mike, John']
84103
}]
85104
},
86105
selectableType: 'both',
106+
showLength: true,
87107
path: 'res',
88-
deep: 3,
108+
deep: 4,
89109
itemData: {},
90110
itemPath: ''
91111
}

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "vue-json-pretty",
3-
"version": "1.3.5",
3+
"version": "1.4.0",
44
"description": "A Vue.js 2.0 Toolkit for JSON",
55
"author": "leezng <im.leezng@gmail.com>",
66
"main": "vue-json-pretty.js",

src/components/app.vue

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
<brackets-left
1919
:visiable.sync="visiable"
2020
:data="data"
21+
:show-length="showLength"
2122
:not-last-key="notLastKey">
2223
<span v-if="currentDeep > 1 && !Array.isArray(parentData)">{{ currentKey }}:</span>
2324
</brackets-left>
@@ -32,6 +33,7 @@
3233
:parent-data="data"
3334
:data="item"
3435
:deep="deep"
36+
:show-length="showLength"
3537
:path="path + (Array.isArray(data) ? `[${key}]` : `.${key}`)"
3638
:path-checked="pathChecked"
3739
:path-selectable="pathSelectable"
@@ -84,6 +86,11 @@
8486
type: Number,
8587
default: Infinity
8688
},
89+
// 是否显示数组|对象的长度
90+
showLength: {
91+
type: Boolean,
92+
default: false
93+
},
8794
// 数据层级顶级路径
8895
path: {
8996
type: String,
@@ -171,7 +178,7 @@
171178
handleMouseout () {
172179
this.existMouseover && this.selectable && (this.treeContentBackground = 'transparent')
173180
},
174-
// 工具函数: 判断是否对象
181+
// 是否对象
175182
isObject (value) {
176183
return this.getDataType(value) === 'object'
177184
},

src/components/brackets-left.vue

Lines changed: 22 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,14 +4,14 @@
44
<span
55
v-show="dataVisiable"
66
class="vjs__tree__node"
7-
@click.stop="dataVisiable = !dataVisiable">
7+
@click.stop="toggleBrackets">
88
{{ Array.isArray(data) ? '[' : '{' }}
99
</span>
1010
<span
1111
v-show="!dataVisiable"
1212
class="vjs__tree__node"
13-
@click.stop="dataVisiable = !dataVisiable">
14-
{{ bracketsFormatter(Array.isArray(data) ? '[...]' : '{...}') }}
13+
@click.stop="toggleBrackets">
14+
{{ doubleBracketsGenerator(data) }}
1515
</span>
1616
</div>
1717
</template>
@@ -20,6 +20,24 @@
2020
import bracketsMixin from 'src/mixins/brackets-mixin'
2121
2222
export default {
23-
mixins: [bracketsMixin]
23+
mixins: [bracketsMixin],
24+
props: {
25+
showLength: Boolean
26+
},
27+
methods: {
28+
// 双括号内容生成器
29+
doubleBracketsGenerator (data) {
30+
const isArray = Array.isArray(data)
31+
let brackets = isArray ? '[...]' : '{...}'
32+
if (this.showLength) {
33+
// 若展示长度, 形如 [...] // 3 items
34+
const text = isArray
35+
? `${data.length} items`
36+
: `${Object.keys(data).length} keys`
37+
brackets += ` // ${text}`
38+
}
39+
return this.bracketsFormatter(brackets)
40+
}
41+
}
2442
}
2543
</script>

src/components/brackets-right.vue

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
<div v-show="dataVisiable">
33
<span
44
class="vjs__tree__node"
5-
@click.stop="dataVisiable = !dataVisiable">
5+
@click.stop="toggleBrackets">
66
{{ bracketsFormatter(Array.isArray(data) ? ']' : '}') }}
77
</span>
88
</div>

src/index.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ import App from './components/app.vue'
22
import './assets/less/index.less'
33

44
export default Object.assign({}, App, {
5-
version: '1.3.4'
5+
version: '1.4.0'
66
})

src/mixins/brackets-mixin.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,11 @@ export default {
2020
}
2121
},
2222
methods: {
23+
// 切换括号展开|关闭
24+
toggleBrackets () {
25+
this.dataVisiable = !this.dataVisiable
26+
},
27+
// 括号优化函数, 若不是最后一项, 自动添加逗号
2328
bracketsFormatter (brackets) {
2429
return this.notLastKey ? `${brackets},` : brackets
2530
}

0 commit comments

Comments
 (0)