2
0
mirror of https://github.com/tenrok/vue-json-viewer.git synced 2026-06-08 17:22:32 +03:00

add icon prefix

This commit is contained in:
陈峰
2017-10-18 14:07:58 +08:00
parent dbf681ff6d
commit 76ccd75ac0
6 changed files with 60 additions and 11 deletions
+2 -1
View File
@@ -16,7 +16,8 @@ new Vue({
a: 1
}
},
showCopy: true
showCopy: true,
iconPrefix: 'ive-'
}
})
})
+4 -2
View File
@@ -1,7 +1,7 @@
<template>
<div class="node">
<span class="key" v-if="keyName">
<i class="icon" v-if="isObject" :class="{'ion-arrow-down-b': toggle, 'ion-arrow-up-b': !toggle}" @click.stop="toggleNode"></i>
<j-icon v-if="isObject" :type="value ? 'ion-arrow-down-b' : 'ion-arrow-up-b'" @click.stop="toggleNode"></j-icon>
{{keyName}}:
</span>
<commponent :is="`Json${valueType}`" :json-value="value" v-model="toggle" :key-name="keyName"></commponent>
@@ -9,6 +9,7 @@
</template>
<script>
import JIcon from './json-icon'
import JsonString from './types/json-string';
import JsonNumber from './types/json-number';
import JsonBoolean from './types/json-boolean';
@@ -54,7 +55,8 @@ export default {
JsonNumber,
JsonBoolean,
JsonObject,
JsonArray
JsonArray,
JIcon
}
};
</script>
+28
View File
@@ -0,0 +1,28 @@
<template>
<i :class="{
[`${iconPrefix}icon`]: true,
[`${iconPrefix}${type}`]: true
}" @click="iconClick"></i>
</template>
<script>
export default {
name: 'JsonIcon',
inject: ['iconPrefix'],
props: {
iconPrefix: {
type: String,
default: ''
},
type: {
type: String,
default: ''
}
},
methods: {
iconClick(e) {
this.$emit('click', e);
}
}
}
</script>
+20 -6
View File
@@ -1,21 +1,22 @@
<template>
<div class="json-viewer">
<div class="tooltip">
<i class="icon ion-qr-scanner" @click.native="bigger" v-if="showBigger"></i>
<i class="icon ion-checkmark copied" v-if="copied"></i>
<i class="icon ion-md-clipboard copy" @click.native="clip" v-if="showCopy && !copied"></i>
<j-icon v-if="showBigger" type="ion-qr-scanner" @click="bigger"></j-icon>
<j-icon v-if="copied" class="copied" type="ion-checkmark"></j-icon>
<j-icon v-if="showCopy && !copied" class="copy" type="ion-md-clipboard" @click="clip"></j-icon>
</div>
<div class="code-box" :class="{'more': moreCode}">
<json-box :value="value" :key-name="keyName"></json-box>
</div>
<div class="more-code" @click="toggleMoreCode">
<i class="icon" :class="{'ion-ios-arrow-up': moreCode, 'ion-ios-arrow-down': !moreCode}"></i>
<j-icon :type="moreCode ? 'ion-ios-arrow-up' : 'ion-ios-arrow-down'"></j-icon>
</div>
</div>
</template>
<script>
import Vue from 'vue';
import JIcon from './json-icon'
import JsonBox from './json-box';
import Clipboard from 'clipboard';
@@ -33,6 +34,15 @@ export default {
showBigger: {
type: Boolean,
default: false
},
iconPrefix: {
type: String,
default: ''
}
},
provide() {
return {
iconPrefix: this.iconPrefix
}
},
data() {
@@ -46,7 +56,7 @@ export default {
clip() {
const clipBoard = new Clipboard('.copy', {
text: () => {
return JSON.stringify(this.$attrs.value, null, 2);
return JSON.stringify(this.value, null, 2);
}
});
@@ -55,7 +65,7 @@ export default {
setTimeout(() => {
this.copied = false;
}, 2000);
this.$Message.success('Code copied');
this.$emit('copied');
clipBoard.destroy();
});
},
@@ -65,6 +75,10 @@ export default {
toggleMoreCode() {
this.moreCode = !this.moreCode;
}
},
components: {
JsonBox,
JIcon
}
};
</script>
+1 -1
View File
@@ -1,6 +1,6 @@
<template>
<span>
<i v-if="!keyName" class="icon" :class="{'ion-arrow-down-b': value, 'ion-arrow-up-b': !value}" @click.stop="toggle"></i>
<j-icon v-if="!keyName" :type="value ? 'ion-arrow-down-b' : 'ion-arrow-up-b'" @click.stop="toggle"></j-icon>
<span>[</span>
<template v-if="jsonValue.length">
<json-box v-show="value" v-for="(val, index) in jsonValue" :key="index" :value="val"></json-box>
+5 -1
View File
@@ -1,6 +1,6 @@
<template>
<span>
<i v-if="!keyName" class="icon" :class="{'ion-arrow-down-b': value, 'ion-arrow-up-b': !value}" @click.stop="toggle"></i>
<j-icon v-if="!keyName" :type="value ? 'ion-arrow-down-b' : 'ion-arrow-up-b'" @click.stop="toggle"></j-icon>
<span>{</span>
<template v-if="Object.keys(jsonValue).length">
<json-box v-show="value" v-for="(v, k) in jsonValue" :key="k" :key-name="k" :value="v"></json-box>
@@ -11,6 +11,7 @@
</template>
<script>
import JIcon from '../json-icon'
export default {
name: 'JsonObject',
props: {
@@ -23,6 +24,9 @@ export default {
console.log('toggle')
this.$emit('input', !this.value);
}
},
components: {
JIcon
}
};
</script>